IF DEFtrd_boot_small ;======================================================================; INCLUDE 'inc/rom_routines.inc' INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' INCLUDE 'Shared_Includes/constants/standart_colors.inc' ;======================================================================; ;======================================================================; collor_A EQU 0x03 collor_B EQU 0x02 collor_N EQU 0x04 collor_M EQU 0x08 collor_T EQU 0x07 org_addr EQU #5d3b ;======================================================================; ; Variables ;======================================================================; ColumnNumber EQU #70E0 Columns EQU 3 ;======================================================================; ;======================================================================; ORG org_addr bstart: DW #100 ; line number = 1 DW l1end - l1begin ; line length l1begin: DB ZX_Token.border, ZX_Token.not, ZX_Token.pi, ":" DB ZX_Token.randomize, ZX_Token.usr, ZX_Token.val, '"',"23907",'"' DB ":", ZX_Token.rem, ":", ZX_Token.run DB '"' BootName: DB ZX_Char.tab, 10, 32 DB "MAXBOOT v9.1" .size EQU $-BootName DB '"', ZX_Char.carriage_return ;======================================================================; ;#70F6 - disk name ;======================================================================; START_BOOT: ;Permanent current colours, etc, as set up by colour statements. LD (iy+#53),COLORS.ZX.CYAN ;5d63 fd 36 53 05 . 6 S . l5d67h: CALL BASIC_FN.x48.cls ;5d67 cd 6b 0d . k . ADD HL,BC ;5d6a 09 . ; HL = 6801 ; read 9 sectors LD BC,#0905 ;5d6b 01 05 09 . . . PUSH HL ;5d6e e5 . CALL #3D13 ;5d6f cd 13 3d . . = ;PR-STRING LD DE,BootName ;5d72 11 52 5d . R ] LD C,BootName.size ;5d75 0e 0f . . CALL #203C ;5d77 cd 3c 20 . < ;CHAN_OPEN ; Open channel 2 (main screen) LD A,#02 ;5d7a 3e 02 > . CALL #1601 ;5d7c cd 01 16 . . . ; POP HL ;5d7f e1 . LD D,H ;5d80 54 T LD E,L ;5d81 5d ] loopDir: LD BC,8 ; смещение на тип файла ;5d82 01 08 00 . . . DEC (HL) ;5d85 35 5 JR Z,.nextFile ;5d86 28 28 ( ( INC (HL) ;5d88 34 4 JR Z,.EXIT ;5d89 28 2a ( * ; PUSH HL ;5d8b e5 . ADD HL,BC ;5d8c 09 . LD A,(HL) ;5d8d 7e ~ POP HL ;5d8e e1 . CP "B" ;5d8f fe 42 . B JR NZ,.nextFile ;5d91 20 1d . PUSH HL ;5d93 e5 . ;PRINT-A LD A," " ;5d94 3e 20 > RST #10 ;5d96 d7 . ; (#5C51) == #5D2B ; (#5D2B) == #09F4 ; вывод имени файла .loopPrint: LD A,(HL) ;5d97 7e ~ RST #10 ;5d98 d7 . LDI ;5d99 ed a0 . . JP PE,.loopPrint ;5d9b ea 97 5d . . ] ; подсчёт колонок для правильного вывода имён файлов LD HL,ColumnNumber ;5d9e 21 e0 70 ! . p INC (HL) ;5da1 34 4 LD A,(HL) ;5da2 7e ~ .loopColumn: SUB Columns ;5da3 d6 03 . . JR Z,.ColumnThree ;5da5 28 05 ( . JR NC,.loopColumn ;5da7 30 fa 0 . LD A," " ;5da9 3e 20 > RST #10 ;5dab d7 . .ColumnThree: LD A," " ;5dac 3e 20 > RST #10 ;5dae d7 . ; POP HL ;5daf e1 . .nextFile: LD C,#10 ;5db0 0e 10 . . ADD HL,BC ;5db2 09 . JR loopDir ;5db3 18 cd . . .EXIT: ; ;;;;;;;;;;;;;;;;; ; B = 0 ; Рисовалка курсора атрибутами. Перемещение курсора MAIN_LOOP: LD C,B ;5db5 48 H l5db6h: LD HL,#57F5 ;5db6 21 f5 57 ! . W LD DE,#000B ;5db9 11 0b 00 . . . LD A,D ;5dbc 7a z l5dbdh: LD B,#03 ;5dbd 06 03 . . l5dbfh: ADD HL,DE ;5dbf 19 . CP C ;5dc0 b9 . JR Z,l5dc9h ;5dc1 28 06 ( . INC A ;5dc3 3c < DJNZ l5dbfh ;5dc4 10 f9 . . DEC HL ;5dc6 2b + JR l5dbdh ;5dc7 18 f4 . . ; l5dc9h: LD B,#0A ;5dc9 06 0a . . LD DE,(#70DE) ;5dcb ed 5b de 70 . [ . p LD (#70DE),HL ;5dcf 22 de 70 " . p LD A,#05 ;5dd2 3e 05 > . l5dd4h: LD (DE),A ;5dd4 12 . INC DE ;5dd5 13 . LD (HL),#1E ;5dd6 36 1e 6 . INC HL ;5dd8 23 # DJNZ l5dd4h ;5dd9 10 f9 . . LD HL,#5C08 ;5ddb 21 08 5c ! . \ LD (HL),H ;5dde 74 t l5ddfh: LD A,(HL) ;5ddf 7e ~ OR #20 ;5de0 f6 20 . SUB #20 ;5de2 d6 20 . JR Z,l5d67h ;5de4 28 81 ( . SUB L ;5de6 95 . LD B,#02 ;5de7 06 02 . . l5de9h: JR Z,l5e0fh ;5de9 28 24 ( $ DEC A ;5deb 3d = JR Z,l5e13h ;5dec 28 25 ( % DEC A ;5dee 3d = JR Z,l5e11h ;5def 28 20 ( DEC A ;5df1 3d = JR Z,l5e0dh ;5df2 28 19 ( . SUB B ;5df4 90 . JR Z,RUN_BASIC ;5df5 28 2d ( - SUB #03 ;5df7 d6 03 . . JR Z,RUN_BASIC ;5df9 28 29 ( ) SUB #06 ;5dfb d6 06 . . DJNZ l5de9h ;5dfd 10 ea . . SUB #1E ;5dff d6 1e . . JR Z,l5e11h ;5e01 28 0e ( . SUB #0E ;5e03 d6 0e . . JR Z,l5e0fh ;5e05 28 08 ( . DEC A ;5e07 3d = JR Z,l5e13h ;5e08 28 09 ( . DEC A ;5e0a 3d = JR NZ,l5ddfh ;5e0b 20 d2 . l5e0dh: SUB #02 ;5e0d d6 02 . . l5e0fh: SUB #04 ;5e0f d6 04 . . l5e11h: ADD A,#02 ;5e11 c6 02 . . l5e13h: ADD A,C ;5e13 81 . LD BC,(ColumnNumber) ;5e14 ed 4b e0 70 . K . p DEC C ;5e18 0d . INC A ;5e19 3c < JP M,l5db6h ;5e1a fa b6 5d . . ] INC C ;5e1d 0c . CP C ;5e1e b9 . LD C,A ;5e1f 4f O JR C,l5db6h ;5e20 38 94 8 . JR MAIN_LOOP ;5e22 18 91 . . ; ; запуск васика ; A = 0 RUN_BASIC: LD B,A ;5e24 47 G LD A,C ;5e25 79 y INC A ;5e26 3c < LD C,L ;5e27 4d M LD HL,#67F9 ;5e28 21 f9 67 ! . g .loop: ADD HL,BC ;5e2b 09 . DEC A ;5e2c 3d = JR NZ,.loop ;5e2d 20 fc . ; LD DE,BootName ;5e2f 11 52 5d . R ] LDIR ;5e32 ed b0 . . JP #3D03 ;5e34 c3 03 3d . . = ;ADD A,B ;5e37 80 . ;XOR D ;5e38 aa . ;DEFB 001h,000h ;5e39 01 00 . . StartLineNum: DB 0 DW 0 ;DB #80 l1end: EXPORT StartLineNum EXPORT org_addr ELSE ;======================================================================; INCLUDE 'inc/rom_routines.inc' INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' INCLUDE 'Shared_Includes/constants/standart_colors.inc' ;======================================================================; ;======================================================================= collor_A EQU 0x03 collor_B EQU 0x02 collor_N EQU 0x04 collor_M EQU 0x08 collor_T EQU 0x07 org_addr EQU #5d3b ;======================================================================= DiskName EQU catBuff + #08F5 .size EQU 8 Columns EQU 3 vROMbootSize EQU bstart ;======================================================================= ORG org_addr bstart: DW #100 ; line number = 1 DW l1end-l1begin ; line length l1begin: DB ZX_Token.randomize,ZX_Token.usr,"0" ; 'rand' 'usr' 0 DB ZX_Char.number DB #00,#00 : DW start : DB #00 ; start address DB ZX_Char.carriage_return l1end: DW #200 ; line number = 2 DW l2end-l2begin ; line length l2begin: DB ZX_Token.randomize,ZX_Token.usr,"0" ; ':' 'rand' 'usr' 0 DB ZX_Char.number DB #00,#00 : DW 15619 : DB #00 ; start address DB ":",ZX_Token.rem,":",ZX_Token.run,'"' filename: DB "boot ",'"',":" ; ':' 'rem' run ;======================================================================= ;org #5d65 start: LD (memSP),SP NewDisk: ;CALL clear_screen LD BC,#0905 LD DE,0 LD HL,catBuff CALL #3D13 LD A,"a" LD (main.markPos),A LD A,1 JP keys.setCP ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIGN #10 TXT_BUTTONS: .prev: DB '<<< PgUp' .next: DB 'PgDn >>>' ; main.CurrentPage: DB 1 main.PagesCounter: DB 1 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; main: LD A,(.CurrentPage) LD (.PagesCounter),A .nextLoop: CALL PRINT_HELP LD A,collor_T LD (var_collor),A LD HL,#50CC LD (var_printPos),HL LD HL,DiskName LD B,8 .p1: LD A,(HL) PUSH HL CALL printChar POP HL INC L DJNZ .p1 ; LD A,L ; CP low (catBuff + #08FD) ; JR NZ,.p1 LD HL,#4000 LD (var_printPos),HL ; вычитывание каталога .buffPointer+1: LD HL,catBuff .markPos+2: LD BC,"aa" .l1: LD A,(HL) DEC A JR Z,.nextRec ; JP M,DirShowDone ; SET 3,L LD A,(HL) CP "B" RES 3,L JR NZ,.nextRec ; две спец кнопки LD A,C ; C - текущий файл CP "y" JR NC,PRINT_NEXT_BUTTONS ; "::PREV::" "::NEXT::" ; ; проходной прогон? LD A,(.PagesCounter) DEC A JR NZ,.nextHiddenRec ; basic file LD A,C CP B ; выбранный файл LD A,collor_A JR NZ,.notMarked ; выделение файла и копирование его в строку запуска XOR collor_M ; LD DE,filename PUSH BC LD BC,8 LDIR POP BC RES 3,L ; .notMarked: CALL prn_txt .nextHiddenRec: INC C .nextRec: LD DE,#10 ADD HL,DE JR .l1 ; PRINT_NEXT_BUTTONS: LD A,(main.PagesCounter) LD (keys.nxtPage),A DEC A ;JR Z,.noChange JR Z,keys LD (main.PagesCounter),A LD (main.buffPointer),HL .noChange: ;PUSH AF ;CALL PRINT_HELP ;POP AF ;JP Z,keys JR keys.toMain PRINT_HELP: LD HL,#5040 LD (var_printPos),HL LD A,collor_N PUSH BC LD C," " LD HL,TXT_BUTTONS.prev CALL prn_txt ; LD A,collor_N CALL prn_txt ; POP BC RET ; DirShowDone: XOR A LD (keys.nxtPage),A ;CALL PRINT_HELP keys: RES 5,(iy+1) .w1: BIT 5,(iy+1) JR Z,.w1 LD A,(iy-#32) ; CP B JR Z,exit CP #0D ; enter JR Z,exit CP " " ; space JP Z,NewDisk ; CP #04 ; pgUp LD E,-1 JR Z,.prevPage ; .pgdn: CP #05 ; pgDn LD E,1 JR Z,.nextPage ; .left: CP #08 ; left JR NZ,.sl DEC B JR .c1 ; .sl: CP #0B ; up JR NZ,.sd DEC B DEC B DEC B JR .c1 ; .sd: CP #0A ; down JR NZ,.su INC B INC B INC B JR .c1 ; .su: CP #09 ; right JR NZ,.sr INC B JR .c1 ; .sr: CP "a" JR C,keys CP C JR NC,keys LD B,A ; .c1: LD A,B CP "a" JR NC,.sf1 LD A,"a" .sf1: CP C JR C,.sf2 LD A,C DEC A .sf2: LD (main.markPos),A .toMain: JP main.nextLoop ; DE - +24 or -24 .nextPage: ; .nxtPage+1: LD A,0 AND A JR Z,.skip XOR A LD (.nxtPage),A ; ; DE - +24 or -24 .prevPage: LD A,(main.CurrentPage) ADD A,E JR Z,.skip ; .setCP: LD H,A LD L,A LD (main.CurrentPage),HL LD HL,catBuff LD (main.buffPointer),HL .skip: CALL clear_screen JR .toMain exit: LD A,C CP "a" JP Z,NewDisk memSP+1: LD SP,0 RET printChar: LD H,A ADD A,A ADD A,A ADD A,A LD L,A LD A,H RLCA RLCA RLCA AND 0x07 ADD A,0x3c LD H,A var_printPos+1: LD DE,0x4000 .l1: LD A,(HL) RRCA OR (HL) INC HL LD (DE),A INC D LD (DE),A INC D LD A,D AND 0x07 JR NZ,.l1 LD A,D SUB 0x08 LD D,A LD A,E ADD A,0x20 LD E,A AND 0x20 JR NZ,.l1 LD HL,(var_printPos) LD A,H RRCA RRCA RRCA ADD A,0x50 LD H,A var_collor+1: LD A,0 LD (HL),A SET 5,L XOR collor_A ^ collor_B LD (HL),A ; LD HL,var_printPos LD A,(HL) ADD A,0x21 AND 0xdf LD (HL),A RET NZ INC HL LD A,(HL) ADD A,0x08 LD (HL),A RET ; ; clear_screen: XOR A OUT (0xfe),A LD (ZX_VARS.ATTR_P),A LD (ZX_VARS.BORDER),A JP BASIC_FN.x48.cls ; A - current file ; choose_color: CP B ; выбранный файл. #C7 ; LD A,collor_A ; SCF ; RET NZ ; XOR collor_M ; RET ; A - COLOR ; C - char of text button ; HL - Text prn_txt: LD (var_collor),A LD A,C PUSH HL CALL printChar LD A," " CALL printChar POP HL ; .loop: LD A,(HL) INC HL PUSH HL CALL printChar POP HL LD A,L AND 0x07 JR NZ,.loop ; LD A,(var_printPos) AND 0x1f RET Z LD A," " PUSH HL CALL printChar POP HL RET ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ALIGN #10 ; TXT_BUTTONS: ; .prev: DB '<< PgDn ' ; .next: DB '>> PgUp ' ; ; ; main.CurrentPage: ; DB 1 ; main.PagesCounter: ; DB 1 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; StartLineNum: DB 0 DW 0 ;DB #80 l2end: ;bend: DISPLAY "printChar ",/A,$-printChar DISPLAY "code ",/A,$-start ;ds -$&0x0f ;ALIGN #10 ;filename EQU $ catBuff EQU #6000 ;$ + (-$&0x0f) ASSERT l2end < catBuff,"ERROR!!! Code leaks to catBuff" EXPORT StartLineNum EXPORT org_addr ; ENDIF