; device zxspectrum48 INCLUDE 'inc/rom_routines.inc' INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' ;======================================================================= collor_A EQU 0x03 collor_B EQU 0x02 collor_M EQU 0x08 collor_T EQU 0x07 org_addr EQU #5d3b ORG org_addr bstart: DW #100 ; line number = 1 DW l1end-l1begin ; line length l1begin: DB ZX_Token.randomize,ZX_Token.usr,#30 ; 'rand' 'usr' 0 DB #0e,#00,#00 : DW start : DB #00,#0d ; start address l1end: DW #200 ; line number = 2 DW l2end-l2begin ; line length l2begin: DB #f9,#c0,#30 ; ':' 'rand' 'usr' 0 DB #0e,#00,#00 : DW 15619 : DB #00 ; start address DB #3a,#ea,#3a,#f7,#22 filename: DB "boot ",#22,#3a ; ':' 'rem' run ;======================================================================= ;org #5d65 start: LD (memSP),SP NewDisk: XOR A OUT (0xfe),A ; ld de, 0x5aff ; .l0 ; ld (de), a ; dec de ; cp d ; jr nz, .l0 LD (ZX_VARS.ATTR_P),A LD (ZX_VARS.BORDER),A CALL BASIC_FN.x48.cls LD BC,0x0905 LD DE,0 LD HL,catBuff ;.3 nop CALL 0x3d13 LD A,"a" LD (main.markPos),A main: LD A,collor_T LD (var_collor),A LD HL,0x50cc LD (var_printPos),HL LD HL,catBuff+0x08f5 .p1: LD A,(HL) PUSH HL CALL printChar POP HL INC L LD A,L CP low (catBuff+0x08fd) JR NZ,.p1 LD HL,0x4000 LD (var_printPos),HL LD HL,catBuff .markPos+2: LD BC,"aa" .l1: LD A,(HL) DEC A JR Z,.n1 JP M,.e1 ;boot detect ; cp "b"-1 ; jr nz, .s2 ; inc l ; ld a, "o" ; cp (hl) ; jr nz, .s2 ; inc l ; cp (hl) ; jr nz, .s2 ; inc l ; ld a, (hl) ; cp "t" ; jr nz, .s2 ; .l4: inc l ; bit 3, l ; jr z, .n1 ; ld a, " " ; cp (hl) ; jr z, .l4 ; .s2: LD A,L AND 0xf0 ADD A,0x08 LD L,A LD A,(HL) CP "B" RES 3,L JR NZ,.n1 LD A,C CP B LD A,collor_A JR NZ,.s1 XOR collor_M LD DE,filename PUSH BC LD BC,0x08 LDIR POP BC RES 3,L .s1: LD (var_collor),A LD A,C PUSH HL CALL printChar LD A," " CALL printChar POP HL .l2: LD A,(HL) INC HL PUSH HL CALL printChar POP HL LD A,L AND 0x07 JR NZ,.l2 LD A,(var_printPos) AND 0x1f JR Z,.s3 LD A," " PUSH HL CALL printChar POP HL .s3: INC C .n1: LD A,L AND 0xf0 LD L,A LD DE,0x0010 ADD HL,DE JR .l1 .e1:; ld a, c ; sub "a" ; ld (var_files), a keys: RES 5,(iy+1) .w1: BIT 5,(iy+1) JR Z,.w1 LD A,(iy-0x32) CP B JR Z,exit CP 0x0d JR Z,exit CP " " JP Z,NewDisk 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 JP main ; var_files db 0 exit: 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 ; 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 $ + (-$&0x0f) EXPORT StartLineNum EXPORT org_addr ;