Поделитесь, кто как делает.
Тупое ld (iy+1),#cc глючит иногда при выходе в Бейсик.
Поделитесь, кто как делает.
Тупое ld (iy+1),#cc глючит иногда при выходе в Бейсик.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Это типа шутка от мэтра ZX Spectrum?
Переключение из 128К в 48К "на ходу":
CALL сюда-> DI
LD SP,(23613)
POP HL
LD HL,4867 ; ERR_SP FOR 48-BASIC
PUSH HL
LD HL,7030 ; CONTINUE INTERPRETATOR 48-BASIC
PUSH HL
RES 4,(IY+1); сброс флага 128К
LD DE,5566 ; INFORMATION FOR STREAMS
LD HL,(23631) ; CHANS
LD BC,15
ADD HL,BC
EX DE,HL ; DE=ADDR.FOR STREAMS/CHANNELS, HL=5556
LD C,4 ; BC=4 FOR LDIR
LDIR
EI
RET
; после возврата из этой подпрограммы будет 48К режим с открытым портом #7FFD.
; Если нужно закрыть порт, запишите в него нужный байт по возвращении
; из подпрограммы.
Вызов этой подпрограммы в случае, если на самом деле уже включён Бейсик-48,
не опасен, поэтому специальной проверки на 128К не требуется.
Видел еще такой вариант. Мопед не мой.
Код:DI LD HL,4867 ;АДРЕС ВОЗВРАТА ПРИ ОШИБКЕ 48BAS PUSH HL LD (23613),SP LD HL,7030 ;АДРЕС ВОЗВРАТА В 48BAS PUSH HL LD HL,(23621) ;ТЕКУЩАЯ СТРОКА LD (23618),HL ;БУДЕТ ВЫПОЛНЯТЬСЯ LD A,(23623) ;НОМЕР ТЕКУЩЕГО ОПЕРАТОРА INC A ;УСТАНАВЛИВАЕМ НА СЛЕДУЮЩИЙ LD (23620),A ;БУДЕТ ВЫПОЛНЯТЬСЯ LD HL,(23631) LD DE,15 ADD HL,DE LD DE,5566 EX DE,HL LD BC,4 LDIR LD A,(23611) AND %11101111 LD (23611),A EI RET
Вариант от Busy:
runusr res 4,(iy+#01) ;; Switch to 48 basic
ld hl,(ramtop) ;; Recontruction of stack for 48 basic
ld (hl),#3E ;; End-of-stack mark for basic
RETURN dec hl ;; (for detect RETURN without GOSUB)
ld sp,hl
ld hl,#1303 ;; Standart error handler
push hl ;; (for displaying error messages)
ld (errsp),sp
jp runbas ;; 7030? Continue in 48 basic interpreter
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)