// ZX81 ASSEMBLY & BASIC FILE FOR ZX-IDE // GET ZX-IDE AT https://www.sinclairzxworld.com/viewtopic.php?f=6&t=1064 ; Enable and Disable BREAK KEY ; DEMO for 1K ZX81 ; BASED ON work by Bean at https://www.sinclairzxworld.com/viewtopic.php?p=19092#p19092 ; RAND USR 16521 ' start (use again after any INPUT command) ; POKE 16569,24 ' to disable BREAK key ; POKE 16569,56 ' to enable BREAK key format zx81 ;labelusenumeric ;LISTON PAL EQU 55 NTSC EQU 31 SLOW_MODE EQU $40 FAST_MODE EQU 0 NOAUTORUN EQU 0 ERR_NR EQU $4000 ;DB ;16384 FLAGS EQU $4001 ;DB ;16385 ERR_SP EQU $4002 ;DW ;16386 RAMTOP EQU $4004 ;DW ;16388 MODE EQU $4006 ;DB ;16390 PPC EQU $4007 ;DW ;16391 ORG $4009 VERSN db $00 E_PPC dw $0000 D_FILE dw DFILE_ADDR DF_CC dw DFILE_ADDR +1 VARS dw VARS_ADDR DEST dw $0000 E_LINE dw WORKSPACE CH_ADD dw $0000 X_PTR dw $0000 STKBOT dw WORKSPACE STKEND dw WORKSPACE BERG db $00 MEM dw MEMBOT UNUSED1 db $00 DF_SZ db $02 S_TOP dw $0000 LAST_K dw $0000 DEBOUNCE db $00 MARGIN db PAL NXTLIN dw AUTORUN OLDPPC dw $0000 FLAGX db $00 STRLEN dw $0000 T_ADDR dw $0000 SEED dw $0000 FRAMES dw $0000 COORDS db $00 db $00 PR_CC db $BC S_POSN db $21 db $18 CDFLAG db SLOW_MODE PRBUFF db $00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00 db $76 MEMBOT db $00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00 UNUSED2 dw $0000 //TYPE YOUR BASIC PROGRAM HERE 1 REM _asm ;PHASE $066C ;ORIGINAL ROM ROUTINE ORG $066C, BUT IS RELOCATABLE CODE NEXT_LINE_CPY:LD (NXTLIN),HL EX DE,HL CALL $004D ;TEMP-PTR L16521: CALL $0CC1 ;LINE-RUN RES 1,(IY+ FLAGS-$4000) LD A,$C0 LD (IY+ X_PTR+1-$4000),A CALL $14A3 ;X-TEMP RES 5,(IY+ FLAGX-$4000) BIT 7,(IY+ERR_NR-$4000) JR Z,STOP_LINE_CPY LD HL,(NXTLIN) AND (HL) JR NZ,STOP_LINE_CPY LD D,(HL) INC HL LD E,(HL) LD (PPC),DE INC HL LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL ADD HL,DE CALL $0F46 ;BREAK-1 L40B9: ;JR C,NEXT_LINE_CPY JR NEXT_LINE_CPY LD HL,ERR_NR BIT 7,(HL) JR Z,STOP_LINE_CPY LD (HL),$0C STOP_LINE_CPY:JP $06AE ;STOP_LINE ;DEPHASE END _asm AUTORUN: 10 RAND USR 16521 //START IT 15 LET L=#L40B9 //16569 20 POKE L,24 // DISABLE WITH JR 30 LET A$= "ABLED BREAK KEY, PRESS SPACE" 31 PRINT "DIS";A$ 40 PAUSE 200 50 FOR A=1 TO 96 60 PRINT "A"; 70 NEXT A 80 POKE L,56 // ENABLE WITH ORIGINAL JR C 92 PRINT ,,"EN";A$ 100 PAUSE 200 110 FOR A=1 TO 196 120 PRINT "X"; 130 NEXT A ;199 PRINT ,,,,"INPUT SOMETHING" ;200 INPUT A$ ;201 PRINT "NOW THE DISABLE COMMAND FAILS TO WORK" ;210 GOTO 20 //DISABLE BREAK KEY ;INSTEAD GOTO 10 (START, THEN DISABLE) WILL ALLOW IT TO WORK DFILE_ADDR: db $76 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 dbzx '',13 assert (VARS_ADDR-DFILE_ADDR)>24 VARS_ADDR: //Variables Resident in Memory: //none db $80 ; end of VARS WORKSPACE: ; end of program