From d297c9f907653e5fdb199a6e5f00bfefcc458a91 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 13 Jun 2025 05:23:55 +1000 Subject: [PATCH] internal boot in tr-dos --- SP_128.ASM | 29 +- SP_TRDOS.ASM | 78 ++++- Shared_Includes | 2 +- TR-DOS_6.11Q_PENTAGON512.ROM | Bin 0 -> 16384 bytes TRDOS/TR_HDD_4.ASZ | 26 ++ TRDOS/TR_MSD_2.ASZ | 5 +- TRDOS/TR_MSD_3.ASZ | 2 + TRDOS/boot/boot.asm | 265 +++++++++++++++ TRDOS/boot/boot.inc | 2 + TRDOS/boot_trd.asm | 618 ----------------------------------- 10 files changed, 394 insertions(+), 633 deletions(-) create mode 100644 TR-DOS_6.11Q_PENTAGON512.ROM create mode 100755 TRDOS/boot/boot.asm create mode 100644 TRDOS/boot/boot.inc delete mode 100644 TRDOS/boot_trd.asm diff --git a/SP_128.ASM b/SP_128.ASM index 0ea88f5..321f47f 100644 --- a/SP_128.ASM +++ b/SP_128.ASM @@ -10638,25 +10638,36 @@ L281C: LD HL,#EC0D ; Editor flags. ; JP L1AF1 ; Run the tape loader. L2831: ED_COM: BYTE 10 ; Number of entries. - BYTE #0B ; Key code: Cursor up. + ; + BYTE #0B ; Key code: Cursor up. DEFW L272E ; MENU-UP handler routine. - BYTE #0A ; Key code: Cursor dow + ; + BYTE #0A ; Key code: Cursor down DEFW L2731 ; MENU-DOWN handler routine. - BYTE #0D ; Key code: Enter. + ; + BYTE #0D ; Key code: Enter. DEFW L2717 ; MENU-SELECT handler routine. + ; BYTE '8' ; на синклер-джойстике вниз DEFW L2731 ; MENU-DOWN handler routine. - BYTE '9' ; на синклер-джойстике вверх + ; + BYTE '9' ; на синклер-джойстике вверх DEFW L272E ; MENU-UP handler routine. - BYTE '0' ; на синклер-джойстике enter + ; + ; + BYTE '0' ; на синклер-джойстике enter DEFW L2717 ; MENU-SELECT handler routine. - BYTE '6' ; на синклер-джойстике влево Page Up + ; + BYTE '6' ; на синклер-джойстике влево Page Up DEFW LEFT_E ; MENU-PageUp - BYTE #08 ; Key code: Cursor left + ; + BYTE #08 ; Key code: Cursor left DEFW LEFT ; MENU-PageUp - BYTE '7' ; [x] было 7 + ; + BYTE '7' ; [x] было 7 DEFW RIGHT_E ; MENU-PageDown - BYTE #09 ; Key code: Cursor right + ; + BYTE #09 ; Key code: Cursor right DEFW RIGHT ; MENU-PageDown ; DB #1A ; просто стереть эту строчку, не нужна diff --git a/SP_TRDOS.ASM b/SP_TRDOS.ASM index fe2fd16..b7dcfec 100644 --- a/SP_TRDOS.ASM +++ b/SP_TRDOS.ASM @@ -4,6 +4,24 @@ ;║ RE-SOURCE'd by Z80MU PROFESSIONAL version 5.2b ║ ;╚══════════════════════════════════════════════════════════╝ ;!TODO использовать внешние порты #E0 и #E3 для сохранения регистров при перехвате всяких #3D2F + +; [ ] boot loader from TR-DOS vROM + ;SHELLEXEC "sjasmplus --nologo --syntax=f --fullpath --color=on --exp=trdos/boot/boot.inc --lst=Build/boot.lst --raw=Build/boot.bin trdos/boot/boot.asm" + LUA PASS1 + compiling_boot = (os.execute("sjasmplus --nologo --syntax=f --fullpath --color=on --exp=trdos/boot/boot.inc --lst=Build/boot.lst --raw=Build/boot.bin trdos/boot/boot.asm")) + if compiling_boot then + print("--[ BOOT Build OK ]--") + --sj.insert_define("_BOOT_COMPILED_", "1") + else + print("--[ BOOT Build ERROR!!! ]--") + --sj.insert_define("_BOOT_COMPILED_", "0") + os.exit(1) + end + ENDLUA + ; IF _BOOT_COMPILED_ = 0 + ; assert 1, Error whith boot.asm + ; ENDIF + DEVICE ZXSPECTRUM128 ORG 0 @@ -14,6 +32,9 @@ INCLUDE 'Shared_Includes/constants/BIOS_equ.inc' INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' INCLUDE 'Shared_Includes/macroses/macros.z80' + MODULE vROM_Boot + INCLUDE 'trdos/boot/boot.inc' + ENDMODULE TRDOS_ROM_CMD: .READ_BPB EQU BIOS.HDD_READ_BPB and #BF @@ -552,6 +573,53 @@ AUTO_0359: POP HL JP (HL) + + +; [x] 13/06/2025 boot loader from TR-DOS vROM +;███████████████████████████████████████████████████████████████████████ +PREPARE_TO_vROM_BOOT: + LD A,(ZX_VARS.RUN_AUTO_BOOT) + AND A ; признак попытки запуска boot командой RUN без параметров + JP Z,AUTO_03D9 + ; + DI + LD HL,(ZX_VARS.ADR_RET) + LD (ZX_VARS.FL_START),HL ; временно сохраняем ADR_RET + LD HL,vROM_BOOT ; адрес возврата из AUTO_01D3 + LD (ZX_VARS.ADR_RET),HL + JP AUTO_01D3 + ; +vROM_BOOT: LD HL,(ZX_VARS.FL_START) + LD (ZX_VARS.ADR_RET),HL ; восстанавливаем ADR_RET + ; + LD HL,BOOT_PART_1.SIZE + BOOT_PART_2.SIZE + LD (ZX_VARS.FL_START),HL ; длина программы с переменными. + LD (ZX_VARS.FL_LEN),HL ; длина программы с переменными. + ; + CALL AUTO_1A01 ; Подготовка к загрузке программы на бейсике. + ; + LD HL,.LoadAddr + LD (ZX_VARS.BAS_PROG),HL ; адрес начала программы на бейсике. + ; loading + LD HL,BOOT_PART_1 + LD DE,.LoadAddr + LD BC,BOOT_PART_1.SIZE + LDIR + LD HL,BOOT_PART_2 + LD BC,BOOT_PART_2.SIZE + LDIR + ; + ;LD HL,.StartAddr + BOOT_PART_1.SIZE + BOOT_PART_2.SIZE - 3 + LD HL,vROM_Boot.StartLineNum + LD (ZX_VARS.E_LINE),HL + ; + EI + JP AUTO_012A + ; +.LoadAddr EQU vROM_Boot.org_addr ;#5D3B +.StartAddr EQU vROM_Boot.org_addr ;#5D3B +;███████████████████████████████████████████████████████████████████████ + ;----------------------------------------------------------------------- _mInfoBLOCK #03AC-$,#FF ; NAME_TRD: @@ -2298,7 +2366,10 @@ AUTO_187A: CALL SINTAX_RET CALL AUTO_292F AUTO_18A4: - JP NZ,AUTO_03D9 + ; [x] 13/06/2025 boot loader from TR-DOS vROM + ;JP NZ,AUTO_03D9 + JP NZ,PREPARE_TO_vROM_BOOT + ; CALL AUTO_165D RET AUTO_18AB: @@ -6374,9 +6445,9 @@ EDIT_X05: ; JP ZX_VARS.AUTO_5C9A ;************************************** - ; DSS 3900H,'#' - +BOOT_PART_1: INCBIN 'build/boot.bin', 0, 248 +.SIZE EQU $-BOOT_PART_1 ;********************************** _mInfoBLOCK #3C00 - $,255 AUTO_3C00: @@ -6550,6 +6621,7 @@ REDIR_3D13: ;JP HD_CMD ;#3FF0 ROM. DI JP EXP_FNS ; + ;***************************** _mInfoBLOCK #3CFA - $,255 AUTO_3CFA: diff --git a/Shared_Includes b/Shared_Includes index 68e156a..63faf9f 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 68e156a69e848e7b01656cdf67122022999d75ee +Subproject commit 63faf9f0823649cfb52e9fcaad430170a05b31a7 diff --git a/TR-DOS_6.11Q_PENTAGON512.ROM b/TR-DOS_6.11Q_PENTAGON512.ROM new file mode 100644 index 0000000000000000000000000000000000000000..503d84c0fae184e386ffd0994f2d64dee21eeac4 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/TRDOS/TR_HDD_4.ASZ b/TRDOS/TR_HDD_4.ASZ index fab5e3d..ecd2838 100644 --- a/TRDOS/TR_HDD_4.ASZ +++ b/TRDOS/TR_HDD_4.ASZ @@ -238,6 +238,32 @@ RESTORE_CURRENT_DIR: POP AF RET ; +;███████████████████████████████████████████████████████████████████████ +BOOT_PART_2: INCBIN 'build/boot.bin',248 +.SIZE EQU $-BOOT_PART_2 +; +; vROM_BOOT: DI +; LD HL,BOOT_PART_1 +; LD DE,#5D3B +; LD BC,BOOT_PART_1.SIZE +; LDIR +; LD HL,BOOT_PART_2 +; LD BC,BOOT_PART_2.SIZE +; LDIR +; ; +; EI +; ; +; LD HL,#5EC9 +; LD (ZX_VARS.E_LINE),HL +; JP AUTO_012A +; ; +; ; RST RST20 ; станд. ввод в буфер редактирования +; ; DW #5D65 +; ; RET +; ; +; ; LD HL,#5D65 +; ; PUSH HL +; ; JP CMD_RETURN ;███████████████████████████████████████████████████████████████████████ DISPLAY "TR_HDD_4.ASZ size: ",/A,$-File_Start DISPLAY "====================================================" \ No newline at end of file diff --git a/TRDOS/TR_MSD_2.ASZ b/TRDOS/TR_MSD_2.ASZ index 97d955e..9d149d9 100644 --- a/TRDOS/TR_MSD_2.ASZ +++ b/TRDOS/TR_MSD_2.ASZ @@ -581,8 +581,7 @@ MSDOS_MSG: DC 'File not found' NO_MEMORY: DC 'Out of memory' ;NO_MEMORY: DC 'No RAM-Disk MEM' -WORDS: DB 5,'CLEAR' ; очистить RAM-Disk - DW CLEAR_RAMD_X +WORDS: DB 3,'CAT' ; каталог MS-DOS DW MSDOS_CAT DB 3,'DIR' ; каталог MS-DOS @@ -607,6 +606,8 @@ WORDS: DB 5,'CLEAR' ; DW TB_ONOFF DB 4,'INIT' ; реинизиализация DW INIT_RMD + DB 5,'CLEAR' ; очистить RAM-Disk + DW CLEAR_RAMD_X DB 8,"SPRINTER" DW SPR_1 DB 2,"AY" diff --git a/TRDOS/TR_MSD_3.ASZ b/TRDOS/TR_MSD_3.ASZ index a161a4f..1073cc9 100644 --- a/TRDOS/TR_MSD_3.ASZ +++ b/TRDOS/TR_MSD_3.ASZ @@ -445,6 +445,8 @@ FAT_16_L2: POP AF SCF RET +;----------------------------------------------------------------------- + ;----------------------------------------------------------------------- ;INCLUDE 'trdos/tr_msd_4.asz' diff --git a/TRDOS/boot/boot.asm b/TRDOS/boot/boot.asm new file mode 100755 index 0000000..be43218 --- /dev/null +++ b/TRDOS/boot/boot.asm @@ -0,0 +1,265 @@ +; 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 +; \ No newline at end of file diff --git a/TRDOS/boot/boot.inc b/TRDOS/boot/boot.inc new file mode 100644 index 0000000..34f5b4d --- /dev/null +++ b/TRDOS/boot/boot.inc @@ -0,0 +1,2 @@ +StartLineNum: EQU 0x00005EAA +org_addr: EQU 0x00005D3B diff --git a/TRDOS/boot_trd.asm b/TRDOS/boot_trd.asm deleted file mode 100644 index 122d6a5..0000000 --- a/TRDOS/boot_trd.asm +++ /dev/null @@ -1,618 +0,0 @@ -/* -BOOTER -;выполнялка ком."8" -;вместо #29AE - LD BC,#F4FF - RST #20 - DW #1EAF ;CLEAR_RUN - ; - LD A,1 - RST #20 - DW #229B ;border и 23624 - ; - DI - LD HL,bootkus1 ;#E00 - LD DE,#F500 - LD BC,bootln1 ;#1F5 - PUSH DE - LDIR - LD HL,bootkus2 ;#344D - LD BC,bootln2+1 ;#334 - LDIR - SET 3,(IY+#01) - RET -*/ - - - - - org 0 - INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' - INCLUDE 'Shared_Includes/constants/sp2000.inc' - INCLUDE 'inc/rom_routines.inc' - - -bootkus1: DISP #F500 - DI ;его и #344D копирует #3AE7 - PUSH AF - PUSH HL - PUSH DE - PUSH BC - EXX - PUSH HL - LD HL,(ZX_VARS.ERR_SP) - LD (.ERR_SP),HL - LD A,(ZX_VARS.CONT_DISK) - LD (ZX_VARS.OPER_DISK),A - ADD A,#3C - LD (ZX_VARS.PDOS_COPY),A - LD HL,#3C00 - LD DE,#8000 - PUSH DE - LD (ZX_VARS.ZG),DE - LD BC,#0400 - LDIR - LD (IY+#47),#00 - POP HL - LD BC,#0080 -.big_loop: PUSH BC - INC HL - INC HL - INC HL - LD B,#03 -.loop1: LD D,(HL) - LD A,D - RLA - OR D - LD (HL),A - INC HL - DJNZ .loop1 - POP BC - DEC BC - INC HL - INC HL - LD A,B - OR C - JR NZ,.big_loop - XOR A - OUT (BorderColor),A - LD A,#44 - LD (ZX_VARS.BORDER),A - DEC A - DEC A - LD (ZX_VARS.ATTR_P),A - CALL BASIC_FN.x48.x48.cls -.loop2: DI - XOR A - LD (VAR_1),A -.var_3+1: LD HL,LL3761 - PUSH HL - LD (ZX_VARS.ERR_SP),SP - LD (IY+#00),#FF - LD A,(ZX_VARS.CONT_DISK) - LD C,#01 - CALL #3D13 - LD HL,#9000 - LD DE,#0000 - LD BC,#0805 - CALL #3D13 - LD A,(IY+#00) - CP #FF - JR NZ,.loop2 - LD HL,.loop2 - LD (.var_3),HL - EXX - LD DE,#A000 - EXX - LD HL,#9000 - LD DE,#0008 - LD A,(HL) - OR A - JP Z,LF887 -.loop3: LD DE,#0008 - ADD HL,DE - LD A,(HL) - CP #42 - CALL Z,LF836 - ADD HL,DE - LD A,(HL) - OR A - JR NZ,.loop3 - LD A,(VAR_1) - OR A - JP Z,LF887 - LD B,#3F - SBC A,B - JP NC,LF8A6 - LD A,(VAR_1) - DEC A - LD (#F86F),A - CALL #F9BB - LD (#F653),A - CALL #0D6B - DI - CALL #F870 - LD A,#02 - CALL #F8CB - LD A,#02 - CALL #1601 - LD (IY+#47),#00 - LD DE,#A000 - LD HL,#0008 -.loop4: LD A,#20 - RST #10 - LD A,#20 - RST #10 - LD BC,#0008 - PUSH DE - CALL #203C - POP DE - EXD - ADC HL,DE - EXD - LD A,(VAR_1) - DEC A - LD (VAR_1),A - JR Z,LL0f35 - LD A,#20 - RST #10 - LD A,#20 - RST #10 - LD BC,#0008 - PUSH DE - CALL #203C - POP DE - EXD - ADC HL,DE - EXD - LD A,(VAR_1) - DEC A - LD (VAR_1),A - JR Z,LL0f35 - LD A,#20 - RST #10 - LD A,#20 - RST #10 - LD BC,#0008 - PUSH DE - CALL #203C - POP DE - EXD - ADC HL,DE - EXD - LD A,(VAR_1) - DEC A - LD (VAR_1),A - JR Z,LL0f35 - LD A,#06 - RST #10 - JR .loop4 - ; -.ERR_SP: WORD 0 - NOP -LL0f35 LD HL,#5802 - CALL #F816 - LD DE,#000A - LD IX,#F634 - LD (IX+#00),#00 -LL0f46 EI - RES 5,(IY+#01) - HALT - PUSH HL - PUSH IX - CALL #F9BB - CP #40 - JP NZ,#F792 - CALL #F989 - POP IX - POP HL - BIT 5,(IY+#01) - JR Z,LL0f46 - LD A,(#5C08) - CP 8 - JP Z,#F6ED - CP "o" - JR Z,LL0fed - CP "6" - JR Z,LL0fed - CP 9 - JP Z,#F70C - CP "p" - JP Z,#F70C - CP "7" - JP Z,#F70C - CP 11 - JP Z,#F72E - CP "q" - JP Z,#F72E - CP "9" - JP Z,#F72E - CP 10 - JP Z,#F764 - CP "a" - JP Z,#F764 - CP "8" - JP Z,#F764 - CP "d" - JP Z,#FA1B - CP "1" - JR Z,LL0fd0 - CP "2" - JR Z,LL0fd0 - CP "3" - JR Z,LL0fd0 - CP "4" - JR Z,LL0fd0 - PUSH AF - LD A,#FE - IN A,(#FE) - RRA - JR NC,LL0f46 - POP AF - CP 13 - JP Z,#F79D - CP "0" - JP Z,#F79D - CP 32 - JP Z,#F79D - JP #F646 -LL0fd0 PUSH AF - CALL #0D6B - LD A,#03 - CALL #F8CB - POP AF - SUB #31 - LD C,#01 - LD (#5CF8),A - LD (#5CF9),A - LD (ZX_VARS.CONT_DISK),A - CALL #3D13 - JP #F556 -LL0fed CALL #F870 - CALL #F826 - DEC (IX) - -bootst2 -bootln1 = $-bootkus1 - - LD A,(IX+#00) - CP #FF - JR NZ,LL345b - LD A,(#F86F) - LD (IX+#00),A -LL345b CALL #F7FA - CALL #F816 - JP #F646 - CALL #F870 - CALL #F826 - INC (IX+#00) - LD A,(#F86F) - INC A - CP (IX+#00) - LD A,(IX+#00) - JR NZ,LL347d - XOR A - LD (IX+#00),A -LL347d CALL #F7FA - CALL #F816 - JP #F646 - CALL #F870 - CALL #F826 - DEC (IX+#00) - DEC (IX+#00) - DEC (IX+#00) - BIT 7,(IX+#00) - LD A,(IX+#00) - JR Z,LL34b3 -LL349e LD B,#03 - ADD A,B - LD B,A - PUSH BC - LD A,(#F86F) - SUB B - JR C,LL34ac - POP AF - JR LL349e -LL34ac POP AF - DEC A - DEC A - DEC A - LD (IX+#00),A -LL34b3 CALL #F7FA - CALL #F816 - JP #F646 - CALL #F870 - CALL #F826 - INC (IX+#00) - INC (IX+#00) - INC (IX+#00) - LD A,(#F86F) - SBC A,(IX+#00) - LD A,(IX+#00) - JR NC,LL34e1 - LD B,#03 -LL34d8 SUB B - JR NC,LL34d8 - INC A - INC A - INC A - LD (IX+#00),A -LL34e1 CALL #F7FA - CALL #F816 - JP #F646 - CALL #0D6B - LD A,#03 - CALL #F8CB - JP #F556 - LD BC,#FFFD - LD A,#07 - OUT (C),A - LD B,#BF - LD A,#FF - OUT (C),A ;глушит AY - CALL #F870 - LD A,#07 - LD (#5C48),A - LD (#5C8D),A - CPL - LD (#5D3B),A - LD HL,#3C00 - LD (#5C36),HL - LD L,(IX+#00) - LD H,#00 - ADD HL,HL - ADD HL,HL - ADD HL,HL - LD DE,#A000 - ADD HL,DE - LD DE,#F7F0 - LD BC,#0008 - LDIR - LD HL,(#F632) - LD (ZX_VARS.ERR_SP),HL - LD HL,#F7EC - LD (#5C5D),HL - CALL #0D6B - DI - POP HL - EXX - POP BC - POP DE - POP HL - POP AF - CALL #3D03 - JP PE,#F73A - LD (#6F62),HL - LD L,A - LD (HL),H - JR NZ,LL356e - JR NZ,LL3570 - LD (#D50D),HL - INC A - LD HL,#5802 - LD DE,#000A -LL355a DEC A - JR Z,LL356c - ADD HL,DE - DEC A - JR Z,LL356c - ADD HL,DE - DEC A - JR Z,LL356c - INC DE - INC DE - ADD HL,DE - DEC DE - DEC DE - JR LL355a -LL356c POP DE - RET -LL356e PUSH HL - EXX -LL3570 POP HL - LD A,#70 - PUSH HL - POP DE - INC DE - LD BC,#0007 - LD (HL),A - LDIR - EXX - RET - PUSH HL - EXX - POP HL - LD A,#42 - PUSH HL - POP DE - INC DE - LD BC,#0007 - LD (HL),A - LDIR - EXX - RET - ; -LF836: PUSH HL - PUSH DE - SBC HL,DE - LD A,(HL) - LD B,#20 - SBC A,B - JR C,LL35c3 - LD IX,#F981 - PUSH HL - LD BC,#0800 -LL35a0 LD A,(HL) - CP (IX+#00) - JR NZ,LL35a7 - INC C -LL35a7 INC HL - INC IX - DJNZ LL35a0 - LD A,C - CP #08 - JR NZ,LL35b4 - POP HL - JR LL35c3 -LL35b4 EXX - POP HL - LD BC,#0008 - LDIR - EXX - LD A,(VAR_1) - INC A - LD (VAR_1),A -LL35c3 POP DE - POP HL - RET - - -VAR_1: DB 0 -VAR_2: DB 0 - - - PUSH AF - PUSH BC - LD B,#D2 -LL35cc PUSH BC - XOR A - OUT (#FE),A - RR B -LL35d2 DJNZ LL35d2 - SET 4,A - OUT (#FE),A - POP BC - DEC B - DJNZ LL35cc - POP BC - POP AF - RET - ; -LF887: XOR A - CP (IY+#47) - JP NZ,#F556 - CALL #0D6E - LD A,#02 - CALL #1601 - XOR A - CALL #F8CB - LD A,#01 - CALL #1601 - LD (IY+#47),#FE - JP #F795 - ; -LF8A6: XOR A - CP (IY+#47) - JP NZ,#F556 - CALL #0D6E - LD A,#02 - CALL #1601 - LD A,#01 - CALL #F8CB - LD A,#3F - LD (VAR_1),A - LD BC,#FFFF -LL361a NOP - DJNZ LL361a - DEC C - JR NZ,LL361a - JP #F5B4 - LD DE,#F8D1 - JP #0C0A - - DB #80 - DB #16,#0A,#05 - DB "!!! NO PROGRAMS !!!" - DB (" "+#80) - - DB #16,#0A,#03,#10,#04 - DB "MORE THAN 63 BASIC FILES" ;than!!! - - DB (" "+#80) - - DB #11,#00,#10,#04,#13,#01 - DB " -=New ROM boot v1.06=-" - DB #06 - DB "Remix by CompoWellcome 05.02.99" - DB ("."+#80) - - DB #10,#02,#13,#01 - DB " INSERT NEW DISK" - DB #06 - DB " FOR READING CATALOGUE." ;catalogue! - - DB (" "+#80) - - DB "boot " - - LD HL,#5AE1 - PUSH HL - POP DE - DEC DE - LD BC,#001F - LDIR - LD HL,#5AFF - LD A,(#F9BA) - OR A - JR Z,LL3703 - LD A,(HL) - AND #07 - INC A - CP #08 - JR NZ,LL3710 - XOR A - LD (#F9BA),A - LD A,#07 -LL3703 LD A,(HL) - AND #07 - DEC A - OR A - JR NZ,LL3710 - CPL - LD (#F9BA),A - LD A,#01 -LL3710 LD (HL),A - RET -LL3712 NOP - LD A,#C3 - LD (#5CC2),A - LD HL,#F9E6 - LD (#5CC3),HL - LD IX,#2FC1 - CALL #FA20 - LD A,#08 - LD C,#1F - LD IX,#2A53 - CALL #FA20 - LD (#F9E7),SP - LD DE,#0000 - LD IX,#2740 - CALL #FA20 - LD SP,#0000 - LD IX,#1FF3 - CALL #FA20 - LD IX,#1FEB - CALL #FA20 - LD IX,#2FC1 - CALL #FA20 - LD A,#C9 - LD (#5CC2),A - LD A,(#5CCD) - AND #40 - RET -LL3761 LD A,#30 - INC A - CP #33 - LD (#FA0A),A - JP NZ,#F6D0 - LD A,#30 - LD (#FA0A),A - JR LL3761 - DI - LD IX,#0000 - PUSH IX - JP #3D2F - - BLOCK 3,#FF - - ENT