;z80 ;zx-spectrum ;assembler MAIN "STS*",#C6 ;FIND,TOKENS ;NEW SAVE/LOAD IFN _3d13 ldMODE=5 ;odd! svMODE=6 ;even! ELSE ldMODE=#E5 ;odd! svMODE=#CA ;even! ENDIF RESIDENT_W IFN reswin CALL WINDOW DB 5,7 DB 13,12,"Resident",0 ENDIF IFN oldres CALL REST_RFON ENDIF ReSET_RES IFN reswin LD HL,#C16 ELSE rezxy=$+2 LD HL,#1713 ENDIF LD BC,(RES_ADR) CALL INPUT_W LD A,H AND #C0 ;MD_RES_COM ;JP PE/JP Z:48K MODE JP PE,ReSET_RES LD (RES_ADR),HL SAVE_RFON ;что Это??? ;запоминает фон под резидентом и считает RES+6, RES+11 EXX LD HL,(RES_ADR) IFN oldres PUSH HL LD DE,OLD_RES CALL RES_LDIR POP HL LD C,6 ;B=0 ELSE LD BC,6 ENDIF ADD HL,BC LD (RES_ADR6),HL ;!!! LD (RES_ADR6A),HL ;??? ;RSTART_LEN=8 FOR 4.x ! LD C,5 ADD HL,BC LD (RES_ADR11),HL ;+11 IF _3d13 LD (RES_ADR11A),HL ;+11 for exit DOS ENDIF EXX RET RESIDENT_HL LD HL,#1F18 BANKS=$-2 WBANK=$-1 RESIDENT LD BC,#7FFD JP RES RES_ADR=$-2 IFN oldres REST_RFON LD HL,OLD_RES JR RES_SET ENDIF RES_INP LD A,#1A JR $+4 RES_PUT LD A,#12 LD (RES_IO_COM),A LD HL,SUB_RES_IO RES_SET LD DE,(RES_ADR) RES_LDIR LD BC,RES_LEN LDIR RET FIND_GO CALL FIND_NEXT JP CANCEL Save_Sect LD BC,svMODE<8+8 ;2D73 ;SAVE JR L_S_Sect Load_Sect LD BC,ldMODE<8+7 ;2F1B ;LOAD L_S_Sect LD A,B LD (SL_MODE),A LD A,C LD (SL_TXT2),A XOR #F LD (SL_TXT3),A ADD A,4 ;12/11 LD (SL_TXT1),A CALL WINDOW DB 5,#43 SL_TXT1=$+2 DB 15,9,12,10,#A0 DB 23,11,10,2 SEC_TXT DB 0 DB 8,12,10,5,2 LEN_TXT DB 1 SL_TXT3=$+2 DB 23,12,8," "+W DB 28,12,1 TO_ADR DW 0 DB 8,11 SL_TXT2 DB 7 DB "Track",0 LD HL,#B13 LD DE,TRSEC+1 CALL INPUT_B_D LD HL,#B1E LD DE,TRSEC CALL INPUT_B_D LD (SEC_TXT),A LD HL,#C13 LD DE,LEN_TXT CALL INPUT_B_D PUSH AF LD HL,#C1C LD DE,TO_ADR CALL INPUT_W_D ;HL=TO POP BC ;=LEN S_L_SECTOR IFN oldres EXX CALL REST_RFON EXX ENDIF LD_SV_SEC IF _3d13 LD DE,0 TRSEC=$-2 ELSE TRSEC=#5CF4 LD DE,(TRSEC) ENDIF JR lD_SV_SEC2 SAVE_1_SEC LD A,svMODE ;2D73 JR $+4 LOAD_1_SEC LD A,ldMODE ;2F1B LD (SL_MODE),A LD D,0 ;1(LOAD_FILE) SL_BUF_SEC LD HL,BUFFER,B,1 ;1(FILER) SL_STS_SEC LD A,#18,(DR_COM),A ;_1 lD_SV_SEC2 ;DE=(TRSEC) ;HL=DEST_MEM_ADR ;B=SEC_LEN XOR A LD (DR_SET_JR),A IF _3d13 INC B PUSH BC,DE LD A,(OUT_FF_3C) LD DE,#1FF3 ;OUT (FF),A CALL DOS ;если FF=0,то надо подождать восстановл-я LD DE,#3DFD CALL DOS DI POP DE DEC H JR GOTO_TR DISK_CKL PUSH BC PUSH DE LD A,E INC A LD BC,#105F LD DE,#2A53 ;OUT (C),A CALL DOS RE_CKL PUSH HL,BC CALL CANCEL_TEST LD A,(SL_MODE) ;E5:LOAD / CA:SAVE OR #DF ;FF:L,DF:S XOR #7F CALL OUT_1F LD DE,#3FE5 ;:LOAD;#3FCA:SAVE SL_MODE=$-2 LD C,#7F LD A,H CP #BF CALL READ_WRITE_DOS CALL TEST_1F DI ;прошло 4+11 тактов после EI SUB B ;A=1 POP BC JR Z,NO_ERROR LD HL,#5CD6 DEC (HL) POP HL DJNZ RE_CKL JP ERROR NO_ERROR POP HL POP DE INC E BIT 4,E JR Z,NO_TRACK LD E,A ;=0 INC D GOTO_TR PUSH DE LD C,D SRL C LD A,#3C OUT_FF_3C=$-1 ;#3C..3F:A..D JR NC,$+4 XOR #10 LD DE,#2F4D ;TRACK CALL DOS ;wait 51*65280*3t PUSH HL LD DE,16066 ;при NO DISK виснет ;LD DE,#3EF5 CALL DOS DI POP HL ;LD B,6 ;LD D,B ;INC DE ;LD A,D ;OR E ;JR NZ,$-3 ;DJNZ $-6 POP DE NO_TRACK POP BC INC H DJNZ DISK_CKL LD (TRSEC),DE LD A,#38,(DR_COM),A LD A,(DR_SET_JR) AND A RET NZ ;B=0 JP SAVE_RFON ELSE DISK_CKL ;PUSH BC PUSH HL SL_MODE=$+1 LD C,ldMODE+#100;5:LOAD/6:SAVE ;LD B,1 ;глючить не может,все ссылки на SL_MODE 8-битные LD A,H ADD A,B CCF JR NC,$+4 CP #C0 ;OR A ;CY,если в страничке ;NC - без резидента(зачем?грузить поверх него?) CALL READ_WRITE_DOS POP HL LD DE,(#5CF4) ;POP BC ;INC H ;DJNZ DISK_CKL ;LD (TRSEC),DE LD A,#38,(DR_COM),A LD A,(DR_SET_JR) AND A RET NZ ;B=0 ? JP SAVE_RFON ENDIF ;1 READ_WRITE_DOS DR_COM ;#18/#38:IN_7PAGE/IN_BANK JR C,DOS JR $+2 DR_SET_JR=$-1 ;0/.. CALL SAVE_RFON ;WITH EXX..EXX LD A,NO_DR_SET-DR_SET_JR-1 LD (DR_SET_JR),A NO_DR_SET EXX LD HL,DISK_RES CALL RES_SET LD DE,(BANKS) SET 4,E IF _3d13 LD H,B,L,C ;=0 ADD HL,SP LD SP,(RES_ADR11) DEC SP,SP ENDIF JP RESIDENT IFN _3d13 DOS EXX LD BC,32765 LD DE,(BANKS) LD E,D DISK_RES LD HL,0 ADD HL,SP LD SP,(REG_SP) ;если SP=call3D13,то 21 байт OUT (C),E EXX PUSH IY LD IY,23610 ;!!!почему не снаружи? CALL #3D13 DI POP IY EXX LD SP,HL OUT (C),D EXX RET ;29 ELSE DISK_RES OUT (C),E EXX DOS PUSH DE JP_3D2F JP #3D2F ;кусок стека для PUSH DE DW #3FE5;:LOAD;#3FCA:SAVE ;стек резидента: RES_ADR11A DW RES+DR_RETURN-DISK_RES ;8 DR_RETURN ;+11 /+18(3d13) EXX OUT (C),D LD SP,HL EXX RET TEST_1F LD B,1 LD HL,$-1 PUSH HL,BC LD DE,#2099 JR DOS OUT_1F LD DE,#2FC3 ;OUT (1F),A JR DOS ENDIF dIO DEC DE RES_IO PUSH HL,BC BIT 7,D JR NZ,NO_ROM BIT 6,D DOS_JR;JR/JR_NZ:BASIC/DOS JR NORMAL_IO LD HL,IO_END PUSH HL LD HL,#1D73 ;A(HL) PUSH HL LD L,E,H,D IFN _3d13 JP #3D2F ELSE JR JP_3D2F ENDIF NO_ROM ;8000.FFFF BIT 6,D NORMAL_IO CALL RESIDENT_HL IO_END POP BC,HL INC DE RET SUB_RES_IO OUT (C),L RES_IO_COM LD A,(DE) OUT (C),H RET TEST_ROOM LD E,8 CALL LOAD_1_SEC LD HL,(#FFE5) LD BC,(FLEN) LD A,C AND A JR Z,$+3 ;ST2 INC B LD C,B ;ST2 LD B,0 LD A,C LD (FLENSEC),A SBC HL,BC JR C,No_Room LD (#FFE5),HL LD A,(#FFE4) AND A RET P No_Room LD A,5 OUT (-2),A ;RET JP CANCEL TR_CANCEL=$-2 ;??? Write CALL TEST_ROOM LD L,A;=(#FFE4) LD H,B ;=0 DB ")))) LD C,H;=CAT_SEC PUSH BC LD A,L LD (CAT_ADR),A LD HL,(#FFE1) LD (TRSEC),HL LD (FTRSEC),HL LD A,svMODE ;2D73 ;SAVE LD (SL_MODE),A CALL SL_FILE3 Write_CALL=$-2 POP DE ;E=CAT_SEC LD HL,(TRSEC) PUSH HL ;NewFirst_TrSec PUSH DE CALL LOAD_1_SEC LD DE,BUFFER CAT_ADR=$-2 LD HL,FNAME_TXT ;B=0? LD BC,8 PUSH BC LDIR INC HL LD A,(HL) LDI LD HL,FILE_INFO+1 CP "B JR NZ,$+4 INC HL,HL POP BC;BC=8 LDI LDI LD HL,FILE_INFO+3 LDIR POP DE;E=CAT_SEC CALL SAVE_1_SEC CALL TEST_ROOM ;DEC (DiskFree) POP HL;=NewFirst_TrSec LD (#FFE1),HL LD HL,#FFE4 INC (HL) DEC E;=8!!! RET SAVE_FILE LD A,11 CALL SL_FILE JR C,SAVE_NEW_F ;SaveExistFile LD A,svMODE ;2D73 ;SAVE LD (SL_MODE),A ;!!! CALL _8020 RRCA JR NC,SL_FILE3 LD HL,EXIST_TXT CALL PRINT_T_AT CALL SL_FILE2 ;OverWrite CALL Write ;E=8 LD L,#F4 ;HL=FFF4 INC (HL) CALL SAVE_1_SEC LD E,0 DEL_F_SEC=$-1 CALL LOAD_1_SEC LD A,1 LD (0),A DEL_F_ADR=$-2 DEC E ;DE=DelFileTrSec JR SAV_CAN EXIST_TXT DB 16,#17 DB 9,"exist",0 SAVE_NEW_F LD HL,FILE_INFO LD A,(EXT_TXT) CALL SL_FILE1_1 CALL SL_FILE2 WR_DS_NAME CALL Write ;E=8 ;SAVE_NEW SAV_CAN JP SAVE_1_SEC FILE_INFO FSTART EQU $+1 FLEN EQU $+3 FLENSEC EQU $+5 FTRSEC EQU $+6 DB "C",0,0,1,0,1,0,0,0 ;-FOR LAST FILE !!! LOAD_FILE LD A,12 CALL SL_FILE JR NC,LOAD_EXIST LF_NFOUND LD HL,NFOUND_TXT CALL PRINT_T_AT JP INKEY NFOUND_TXT DB #12,#17,"No ",9,0 ;DB #D,#17,9,"not found",0 LOAD_EXIST CALL SL_FILE2 SL_FILE3 LD HL,(FSTART) LD BC,(FLEN) DEC B INC B PUSH BC CALL NZ,S_L_SECTOR POP BC INC C DEC C RET Z LD B,1 LD A,(SL_MODE) RRCA JP NC,S_L_SECTOR ;SaveLastSec PUSH BC,HL LD DE,(TRSEC) CALL SL_BUF_SEC CALL RES_PUT LD HL,BUFFER POP DE,BC LD B,C ;B=ByteLenOfLastSec DEC HL MEM_STS_COPY INC HL LD A,(HL) CALL RES_IO ;A<=(DE) INC DE LD (HL),A DJNZ MEM_STS_COPY RET Fadr SLA C RL B LD A,B AND 7 OR #D0 MD_11=$-1 LD D,A LD A,C AND #F0 LD E,A RET SL_FILE LD (SLF_TXT),A LD A,(FILER_END) AND A JR NZ,NO_FR CALL ENTER_SET CALL Fadr LD HL,FNAME_TXT LD BC,#920 SLFR LD A,(DE) INC E AND #7F CP C JR NC,$+3 LD A,C LD (HL),A LD A,B INC HL SUB 2 JR Z,$-3 DJNZ SLFR NO_FR CALL WINDOW DEFB 5,#43 ;IFN hints DEFB 10,11 ;ENDIF DEFB 20," NONAME C" FNAME_TXT EQU $-10 EXT_TXT EQU $-1 DEFB #A0,10,12 DEFB 17,1 FSTART_TXT DEFW 0 DEFB 22,12,5,1 FLEN_TXT DEFW 0 DEFB 16,9 SLF_TXT DEFB 11,9,0 LD HL,#0B15 LD DE,FNAME_TXT LD C,8 CALL INPUT_REWR LD HL,#0B1E LD DE,EXT_TXT LD C,1 CALL INPUT_REWR SL_FILE1_0 LD E,0 ;=0=CAT_SEC CAT_CKL LD A,E LD (DEL_F_SEC),A CALL LOAD_1_SEC ;DE=NewCatTrSec PUSH DE IF _3d13 DEC H;HL=BUFFER ENDIF FNAME_CKL LD DE,FNAME_TXT LD A,(HL) AND A POP BC;@@ JR Z,END_CAT PUSH BC LD B,8 LD (DEL_F_ADR),HL FSYM_CKL LD A,(DE) CP (HL) JR NZ,NEXT_FNAME INC DE,L DJNZ FSYM_CKL INC DE LD A,(DE) CP (HL) JR Z,FNAME_OK NEXT_FNAME LD A,L AND #F0 ADD A,#10 LD L,A JR NZ,FNAME_CKL ;END_FNAME_CKL POP DE BIT 3,E JR Z,CAT_CKL END_CAT SCF ;FILE ABSENT, C=1 RET FNAME_OK ;FILE EXIST C=0 ,A=EXT_NAME POP DE SL_FILE1_1 INC HL LD E,(HL) INC HL LD D,(HL) ;FSTART INC HL LD C,(HL) INC HL LD B,(HL) CP "B" JR NZ,NOT_BASIC ;LD C,E,B,D LD DE,(#5C53);=PROG NOT_BASIC LD (FSTART),DE LD (FLEN),BC INC HL,HL LD E,(HL) INC HL LD D,(HL) LD (TRSEC),DE XOR A ;Cf=0 ,Zf=1 RET SL_FILE2 LD HL,#0C10;#1610 LD DE,FSTART CALL INPUT_W_D LD (FSTART_TXT),HL REINPFL LD HL,#0C1A;#161A LD DE,FLEN ;_TXT CALL INPUT_W_D ;A=L=C OR H JR Z,REINPFL LD (FLEN_TXT),HL RET FILER LD HL,#DA00 MD_13=$-1 LD DE,#DA01 MD_14=$-1 ;LD D,H,E,1 LD A,E LD (PANEL_ZONE),A LD (PANEL_Y),A LD BC,#FF LD (HL),B;2 LDIR LD HL,(ADR) LD (FSTART),HL LD HL,#D000 MD_10=$-1 LD (ADR),HL LD D,E ;0 LD A,ldMODE ;2F1B LOAD LD (SL_MODE),A LD B,8 CALL SL_STS_SEC ;LD A,LIST-PANEL_JR-1 ;LD (PANEL_JR),A XOR A LD (FILER_END),A CALL WINDOW DEFB 2,0,0,32,16,0 DEFB 0,0,0 DEFW FILER_REFR ; SCROLL ZONE DPgUp YDN X,Y,W, H ; B S S S B S DEFB -13*8,14, 0,1,32,13 DEFB 1,1,30 DEFW LOAD_FILE,#0101 FILL_BLOCK CALL WINDOW DB 5,#44 IFN hints DB 16,09,"Fill",6,#A0 ENDIF DB 23,11,4,1 FL_END DW 0 DB 9,12,3 FL_TXT DB 1 DS 8 DB 9,11,17,0 ;Fill_Block2 CALL RES_PUT LD HL,#B0F LD DE,FL_START CALL INPUT_W_D LD HL,#B1B LD DE,FL_END CALL INPUT_W_D;A=C=L LD HL,#C09 LD DE,FL_TXT CALL INPUT_HD ;A=FL_LEN LD DE,0 FL_START=$-2 LD C,A ;=FL_LEN FL_HD_CKL LD HL,FL_TXT+1 LD B,C FL_B_CKL LD A,D CP #C0 EXX CALL Z,RES_PUT EXX LD A,(HL) JR NC,$+3 LD (DE),A PUSH DE CALL NC,RES_IO ;(DE)<=A POP DE PUSH HL LD HL,(FL_END) AND A SBC HL,DE POP HL RET Z RET C INC HL,DE DJNZ FL_B_CKL JR FL_HD_CKL CO_START DW 0 COPY_BLOCK CALL WINDOW DB 5,#44 IFN hints DB 16,9,"Copy",6,#A0 ENDIF DB 23,11,4,1 CO_END DW 0 DB 17,12,8,1 CO_TO DW 0 DB 9,11,17,0 CO_REINPUT LD DE,CO_START LD HL,#B0F CALL INPUT_W_D PUSH HL LD DE,CO_END LD HL,#B1B CALL INPUT_W_D PUSH HL LD DE,CO_TO LD HL,#C14 CALL INPUT_W_D;A=0 Cf=0 POP HL ;=CO_END POP DE ;=CO_START SBC HL,DE JR C,CO_REINPUT INC HL LD (CO_LEN),HL LD L,C LD H,B ;HL=CO_TO SBC HL,DE EX DE,HL ;HL=CO_START LD E,C ;DE=CO_TO LD D,B LD BC,0 CO_LEN=$-2 LD A,#B0; LDIR JR C,CO_PUT_OPR LD HL,(CO_LEN) ;CO_LDD DEC HL ADD HL,DE EX DE,HL ;DE=CO_TO_END LD HL,(CO_END);HL=CO_END LD A,#B8; LDDR CO_PUT_OPR LD (CO_OPR),A ;HL=FROM,DE=TO EXX LD HL,CO_RES ;CO_RES_PUT CALL RES_SET JP RESIDENT_HL ;C_CANCEL JP CANCEL CO_RES ;(HL)=>(DE) OUT (C),L ;=#18 EXX LDIR CO_OPR=$-1 EXX OUT (C),H ;=#1F RET FIND CALL WINDOW DB 4,3,7,#18,9,#45 IFN hints DB #12,7,"Fin",#80+"d" DB 5,9 DB "As","m"+#80 ENDIF DB #E,9 F_ASM_BUF DB "NOP " DB #A0 ;IFN hints DB 5,#A,"Cod","e"+#80 ;ENDIF DB #B,#A,3 FIND_BUF DB 1 DS 8 DB 5,#B,"Mas","k"+#80 DB #B,#B,3 F_MASK_BUF DB 1 DS 8,-1 IFN hints DB 5,#C,"Tex","t"+W ENDIF DB #11,#C F_TEXT_BUF DB #1E,#1F,#1F,#1F,#1F,#1F,#1F,#1F DB #A0,#13,#D,"Inv" FIND_I_TXT DB #9C DB #14,#E,"GO" DB 0 DB #9,10,14 DW FIND_ASM,#A0E DB #A,8,18 DW SET_FIND,#B09 DB #B,8,18 DW SET_MASK,#C0A DB #C,#C,8 DW SET_TEXT,#D0B DB #D,#0E,4 DW FIND_INV,#E0C DB #E,#E,4 DW FIND_GO,#90D FIND_INV LD HL,FIND_I_JR LD A,8 XOR (HL) LD (HL),A LD HL,FIND_I_TXT JP XOR_1HL FIND_ASM LD A,(BANKS+1) LD (BANKS),A CALL RES_INP LD HL,#90E LD (ASM_AT),HL LD BC,FIND_BUF+1 PUSH BC CALL INPUT_ASM EX DE,HL POP DE;=Find_Buffer+1 ;AND A ;SBC HL,DE LD A,L SUB E LD (FIND_BUF),A LD A,26 LD (ASM_AT),A JR FIND_END_T SET_FIND LD HL,#A0B LD DE,FIND_BUF CALL INPUT_HD FIND_END_T LD HL,FIND_BUF LD B,(HL) LD C,8 INC HL LD DE,F_TEXT_BUF FTXTCKL LD A,(HL) INC HL AND #7F CP " " JR NC,$+4 LD A,#1E LD (DE),A INC DE DEC C DJNZ FTXTCKL JR Z,FIND_END LD A,#1F FTXT_2 LD (DE),A INC DE DEC C JR NZ,FTXT_2 FINDE=F_MASK_BUF+1 FIND_END LD A,(BANKS+1) LD (BANKS),A CALL RES_INP LD BC,FIND_BUF+1 CALL CL_DIS_INS LD HL,ENT_TXT;=ASM_BUFFER LD DE,F_ASM_BUF LD BC,16 LDIR LD A,(FIND_BUF) LD (F_MASK_BUF),A ADD A,FINDE LD (F_END_TST),A IFN trfind LD (TF_END_TST),A ENDIF b3bs LD A,(BANK3) LD (BANKS),A RET SET_MASK LD DE,F_MASK_BUF LD HL,#B0B CALL INPUT_HD ;LD A,(F_Mask_Buffer) LD HL,FIND_BUF CP (HL) JR NZ,SET_MASK RET SET_TEXT LD A,#1F LD (ULINE),A LD DE,F_TEXT_BUF PUSH DE LD HL,#C11 LD C,8 CALL INPUT_REWR POP HL;=F_Text_Buffer LD DE,FIND_BUF+1 LD BC,#800 FT_CKL LD A,(HL) CP #1E JR Z,FT_IGN CP #1F JR Z,FT_END LD (DE),A FT_IGN INC HL,DE,C DJNZ FT_CKL FT_END LD A,C AND A JR Z,SET_TEXT LD (FIND_BUF),A JR FIND_END FIND_NEXT CALL ENTER_SET ;Cf=0 LD HL,(ADR) SBC HL,DE ;=-DELTA_ADR PUSH HL LD (FIND_START),BC;=CUR_ADR+1 LD BC,0 FIND_CKL LD DE,0 FIND_START=$-2 INC DE LD (FIND_START),DE LD IX,FIND_BUF+1 LD HL,F_MASK_BUF+1 DEC BC LD A,B OR C JR Z,NOT_FOUND F_CP_CKL CALL RES_IO ;A<=(DE) INC DE XOR (IX) AND (HL) FIND_I_JR JR NZ,FIND_CKL INC IX,HL LD A,L CP FINDE+1 F_END_TST=$-1 JR NZ,F_CP_CKL ;FIND_END_OK Zf=1,Cf=0 LD HL,(FIND_START) POP BC ADD HL,BC LD (ADR),HL RET NOT_FOUND ;LD A,2 ;OUT (-2),A ;RET POP BC ERROR LD A,2 OUT (-2),A JP CANCEL ;!!! PR_AT AND #7F CALL PR EX DE,HL PRINT_T_AT ;HL=ADR_TXT_AT LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL PRT_AT CALL AT LD A,3 LD (PRINT+1),A PRT_T_CKL ;DE=ADR_TXT LD A,(DE) INC DE CP #1C JR NC,NORM_SYM AND A JR Z,PR_AT_END DEC A JR NZ,TST_BYT EX DE,HL LD C,(HL) INC HL LD B,(HL) PUSH HL CALL PRINT_W PR_BWH POP HL INC HL JR PRINT_T_AT TST_BYT DEC A JR NZ,TST_HD LD A,(DE) PUSH DE CALL PRINT_B JR PR_BWH TST_HD DEC A JR NZ,PR_TOK ;PRINT_H_DUMP ;DE<=ADR_HDUMP_BYTES ;HL<=YX ;NEXT_HD_BYT=>DE LD C,8;=MAIN_LEN LD A,(DE) LD B,A;=BYTE_LEN CALL CONV_HDBUF ;HL_SOHR PUSH DE LD DE,BUFFER CALL HDUMPPR JR PR_BWH PR_TOK LD HL,TOKENS LD B,A TOK_S_CKL BIT 7,(HL) INC HL JR Z,TOK_S_CKL DJNZ TOK_S_CKL TOK_CKL LD A,(HL) AND #7F PUSH HL CALL PR POP HL BIT 7,(HL) INC HL JR Z,TOK_CKL LD A," " NORM_SYM CP #80 JR NC,PR_AT CALL PR JR PRT_T_CKL PR_AT_END LD (PRINT+1),A;=0 RET TOKENS DB W,"En","d"+W,"Le","n"+W DB " Bloc",W+"k","Fro",W+"m" DB "T","o"+W DB "Fil",W+"e","Secto",W+"r" DB "Sav","e"+W,"Loa","d"+W DB "Stop i","f"+W,"Ban","k"+W DB "Qui","t"+W DB "Trac","e"+W,"Star","t"+W DB "Disas","m"+W," DEF","B"+W DB "FileNam","e"+W DB "BASI","C"+W," DO","S"+W ;21,22 STAT_KEYS DB #B DW KEY_LEFT;UP DB #A DW KEY_RIGHT;DOWN IFN sinc DB "9" DW KEY_LEFT;UP DB "8" DW KEY_RIGHT;DOWN ENDIF PANEL_KEYS DB #D DW KEY_ENTER IFN sinc DB "0" DW KEY_ENTER ENDIF DB 8 DW KEY_LEFT DB 9 DW KEY_RIGHT IFN sinc DB "6" DW KEY_LEFT DB "7" DW KEY_RIGHT ENDIF STAT_END DB #B DW KEY_UP DB #A DW KEY_DOWN IFN scrolls DB ")" DW SCROLL_DOWN DB "(" DW SCROLL_UP ENDIF DB 4 DW PAGE_UP DB 5 DW PAGE_DOWN DB " " DW CANCEL DB "l" DW LOAD_FILE DB "s" DW SAVE_FILE DB "=" DW Load_Sect DB "|" ;SS+S DW Save_Sect DB "#" DW SET_DECHEX IFN drives DB "!" ;"d" DW SET_DRIVE ENDIF DB 7 DW SCREEN_SET FILER_END DB ":" ;SS+Z DW STEP_COM DB "`" ;SS+X DW STEP_COM_X DB ">" ;SS+T DW STEP_SUBR DB "w" DW SET_BREAK DB "p" DW MEM_TO_ADR DB #22 DW RETURN_MTA DB "v" DW ADR_TO_ML DB "m" DW MEMORYSET DB "," ;SS+N DW ML_TO_SP DB "." ;SS+M DW MEM_TO_PC DB "z" DW PC_TO_CUR DB "b" DW BANK_SET DB "$" DW dIS_LIST_S DB "r" DW RESIDENT_W DB "f" DW FIND DB "n" DW FIND_NEXT DB "i" DW FILL_BLOCK DB "o" DW COPY_BLOCK DB "t" DW TRACE DB "c" DW CALL_SUBR DB "j" DW JUMP_SUBR IFN user DB "u" ;U DW SET_USER DB "]" ;SS+U DW USER ENDIF DB "q" DW QUIT DB "%" DW DIS_LABEL IFN xxx DB "x" DW SET_XXX ENDIF IFN ssk DB "+" DW SS_K ;JP_TO_PC SCR=1 DB "-" DW SS_J ;JP_TO_PC SCR=0 ENDIF DB "a" DW SET_AP ;KEY_48K DB #E DW FILER DB "e" DW SET_DOS IFN disdisk DB "d" DW DIS_DISK ENDIF DB 0