Поделитесь, кто как делает.
Тупое ld (iy+1),#cc глючит иногда при выходе в Бейсик.
Вид для печати
Поделитесь, кто как делает.
Тупое ld (iy+1),#cc глючит иногда при выходе в Бейсик.
Это типа шутка от мэтра 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