custom number of ROMs loading

This commit is contained in:
Anatoliy Belyanskiy 2023-06-24 06:10:24 +10:00
parent 0177b8b844
commit cff96ddd41
2 changed files with 176 additions and 197 deletions

@ -1 +1 @@
Subproject commit 80b60f7294ce3eee958a0c4e9a6f29577cee496f Subproject commit 81f727ca6ecd8fcaaac4f4e573fe1fd6578c1efa

View File

@ -84,6 +84,9 @@ program_start EQU BEGIN
; ;
; Program EQU section ; Program EQU section
;*************************************** ;***************************************
FULL_FILE_NAME_LENGTH EQU 128 ; ¤«¨­  áâப¨ ¯ã⨠ª ä ©«ã
MAX_LINE_LENGTH EQU 120 ; ¤«¨­  áâப¨ CFG ä ©« 
CFG_FILE_LINES EQU 8
NAME_CFG_LINE EQU 0 NAME_CFG_LINE EQU 0
BASIC128_LINE EQU 2 BASIC128_LINE EQU 2
BASIC_48_LINE EQU 4 BASIC_48_LINE EQU 4
@ -91,7 +94,9 @@ TRDOS_LINE EQU 6
EXP_LINE EQU 8 EXP_LINE EQU 8
BIOS_LINE EQU 10 BIOS_LINE EQU 10
BIOS2_LINE EQU 12 BIOS2_LINE EQU 12
OPTIONS_LINE EQU 14 ;XXX_LINE EQU ??
OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2
;*************************************** ;***************************************
; ;
@ -116,7 +121,7 @@ BEGIN:
LD (LINE_X),IX LD (LINE_X),IX
LD HL,START_MSG LD HL,START_MSG
LD C,5Ch LD C,Dss.PChars
RST ToDSS RST ToDSS
IN A,(SLOT3) IN A,(SLOT3)
@ -125,10 +130,10 @@ BEGIN:
JP COMAND_LINE JP COMAND_LINE
ERROR_FILE: ERROR_FILE:
LD HL,ERROR_FILE_MSG_X LD HL,ERROR_FILE_MSG_X
LD C,5Ch LD C,Dss.PChars
RST ToDSS RST ToDSS
LD HL,ONE_FILE LD HL,ONE_FILE
LD C,5Ch LD C,Dss.PChars
RST ToDSS RST ToDSS
LD HL,ERROR_FILE_MSG LD HL,ERROR_FILE_MSG
@ -184,8 +189,7 @@ COMAND_LINE:
CALL READ_FILE_1 CALL READ_FILE_1
JP NC,CONTINUE JP NC,CONTINUE
NO_FIL: NO_FIL: LD HL,CNF_FILE
LD HL,CNF_FILE
LD A,Spec_Page LD A,Spec_Page
CALL READ_FILE_1 CALL READ_FILE_1
JR C,ERROR_FILE JR C,ERROR_FILE
@ -352,7 +356,7 @@ IMAGE_NAME: WORD 0
IMAGE_HANDLER: BYTE 0 IMAGE_HANDLER: BYTE 0
SAVE_SLOT3: BYTE 0 SAVE_SLOT3: BYTE 0
LEN_CNF: WORD 0 LEN_CNF: WORD 0
A_LINES: WORD 0,0,0,0,0,0,0,0 A_LINES: BLOCK CFG_FILE_LINES*2, 0
;********************************************* ;*********************************************
CONTINUE: ; CNF ä ©« ¯à®ç¨â ­, DE - ¤«¨­  CNF CONTINUE: ; CNF ä ©« ¯à®ç¨â ­, DE - ¤«¨­  CNF
@ -360,28 +364,27 @@ CONTINUE: ; CNF 䠩
LD HL,#C000 LD HL,#C000
LD DE,A_LINES LD DE,A_LINES
LD C,8 LD C,CFG_FILE_LINES
LOOP_A: LOOP_A: LD B,MAX_LINE_LENGTH ; ¤«¨­  áâப¨
LD B,120 ; áâப¨ ­¥ ¡®«¥¥ 120 ᨬ¢®«®¢
EX DE,HL EX DE,HL
LD (HL),E LD (HL),E
INC HL INC HL
LD (HL),D LD (HL),D
INC HL INC HL
EX DE,HL EX DE,HL
LOOP_L: LOOP_L: LD A,(HL)
LD A,(HL)
CP 13 CP 13
JR Z,N_LINE JR Z,N_LINE
CP 10 CP 10
JR Z,N_LINE JR Z,N_LINE
CP 0 AND A
JP Z,END_CNF_ERROR JP Z,END_CNF_ERROR
INC HL INC HL
CP ';'
JR Z,N_LINE
DJNZ LOOP_L DJNZ LOOP_L
N_LINE: N_LINE: LD (HL),0
LD (HL),0
INC HL INC HL
LD A,(HL) LD A,(HL)
CP 13 CP 13
@ -393,48 +396,29 @@ N_LINE:
; ¢ë¤¥«¥­® 8 áâப ¢ CNF ; ¢ë¤¥«¥­® 8 áâப ¢ CNF
;************************************* ;*************************************
MACRO vROM_LOAD romLine, pageNumber
LD HL,(A_LINES+BASIC128_LINE) ; 2-ï áâப  - ¨¬ï ä ©«  BASIC128 LD HL,(A_LINES + romLine)
LD A,#42 LD A,(HL)
CP ';'
JR Z,.skip_load
LD A,pageNumber
CALL READ_FILE_1 CALL READ_FILE_1
LD A,Spec_Page LD A,Spec_Page
OUT (SLOT3),A OUT (SLOT3),A
JP C,ERROR_FILE JP C,ERROR_FILE
.skip_load:
ENDM
LD HL,(A_LINES+BASIC_48_LINE) ; 3-ï áâப  - ¨¬ï ä ©«  BASIC 48 vROM_LOAD BASIC128_LINE, #42 ; 2-ï áâப  - ¨¬ï ä ©«  BASIC128
LD A,#43 vROM_LOAD BASIC_48_LINE, #43 ; 3-ï áâப  - ¨¬ï ä ©«  BASIC 48
CALL READ_FILE_1 vROM_LOAD TRDOS_LINE, #44 ; 4-ï áâப  - ¨¬ï ä ©«  TR-DOS
LD A,Spec_Page vROM_LOAD EXP_LINE, #45 ; 5-ï áâப  - ¨¬ï ä ©«  EXPANSION
OUT (SLOT3),A vROM_LOAD BIOS_LINE, #46 ; 6-ï áâப  - ¨¬ï ä ©«  BIOS
JP C,ERROR_FILE vROM_LOAD BIOS2_LINE, #47 ; 7-ï áâப  - ¨¬ï ä ©«  BIOS2
; vROM_LOAD _LINE, #42 ; 8-ï áâப  - ¨¬ï ä ©« 
LD HL,(A_LINES+TRDOS_LINE) ; 4-ï áâப  - ¨¬ï ä ©«  TR-DOS ; vROM_LOAD _LINE, #42 ; 9-ï áâப  - ¨¬ï ä ©« 
LD A,#44 ; vROM_LOAD _LINE, #42 ; 10-ï áâப  - ¨¬ï ä ©« 
CALL READ_FILE_1 ; vROM_LOAD _LINE, #42 ; 11-ï áâப  - ¨¬ï ä ©« 
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
LD HL,(A_LINES+EXP_LINE) ; 5-ï áâப  - ¨¬ï ä ©«  EXPANSION
LD A,#45
CALL READ_FILE_1
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
LD HL,(A_LINES+BIOS_LINE) ; 6-ï áâப  - ¨¬ï ä ©«  BIOS
LD A,#46
CALL READ_FILE_1
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
LD HL,(A_LINES+BIOS2_LINE) ; 7-ï áâப  - ¨¬ï ä ©«  BIOS2
LD A,#47
CALL READ_FILE_1
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
; ä ©«ë áç¨â ­ë ; ä ©«ë áç¨â ­ë
;************************************* ;*************************************
@ -531,7 +515,6 @@ PARAM_E2:
;************************************ ;************************************
PARAM_END: PARAM_END:
LD A,#E2 ; ROM-ID - BASIC 128 LD A,#E2 ; ROM-ID - BASIC 128
LD B,#42 ; page LD B,#42 ; page
CALL SET_ROM CALL SET_ROM
@ -587,10 +570,9 @@ SKIP_IMAGE:
;******************************************** ;********************************************
SET_ROM:
; out B - old ROM-page ; out B - old ROM-page
SET_ROM:
DI DI
; PUSH BC ; PUSH BC
; PUSH AF ; PUSH AF
@ -660,11 +642,11 @@ SET_ROM:
;******************************************** ;********************************************
READ_IMAGE: READ_IMAGE:
LD DE,ONE_FILE LD DE,ONE_FILE
LD BC,128 LD BC,FULL_FILE_NAME_LENGTH
LDIR LDIR
LD HL,ONE_FILE LD HL,ONE_FILE
LD A,1 LD A,Dss.Open.R
LD C,Dss.Open LD C,Dss.Open
RST ToDSS RST ToDSS
RET C RET C
@ -681,22 +663,20 @@ READ_IMAGE:
.Load_TRD: .Load_TRD:
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
LD C,Dss.Move_FP LD B,Dss.Move_FP.FrEnd
LD B,2
LD HL,0 LD HL,0
LD IX,0 LD IX,0
LD C,Dss.Move_FP
RST ToDSS ; ­ ©â¨ ¤«¨­ã ä ©«  RST ToDSS ; ­ ©â¨ ¤«¨­ã ä ©« 
RET C RET C
PUSH IX PUSH IX
POP DE POP DE
;--------------[new_code]---------------
call Get_RAM_Disk_E call Get_RAM_Disk_E
ret c ret c
jp Load_IMAGE_File jp Load_IMAGE_File
;---------------------------------------
Get_RAM_Disk_E: Get_RAM_Disk_E:
; hl:de - à §¬¥à ä ©«  ¢ ¡ ©â å ; hl:de - à §¬¥à ä ©«  ¢ ¡ ©â å
LD A,D LD A,D
@ -719,32 +699,29 @@ Get_RAM_Disk_E:
JR Z,ERROR_NO_MEM JR Z,ERROR_NO_MEM
PUSH AF PUSH AF
;*************************************** ;***************************************
;!FIXIT ¡¥§®¯ á­® § ­¨¬ âì à ¬¤¨áª¨, ç⮡ ¯®«ì§®¢ â¥«ì ­¥ áâà ¤ «
; ®á¢®¡®¤¨âì ram-disk e: ; ®á¢®¡®¤¨âì ram-disk e:
.free_disk: .free_disk:
DI DI
LD A,0 XOR A ; RAM-Drive E:
LD C,BIOS.EMM_FN3 LD C,BIOS.FreeMemRMD
RST ToBIOS ; ®á¢®¡®¤¨âì e: RST ToBIOS ; ®á¢®¡®¤¨âì e:
;!!!!!!!!!!!!!!!!!!!!!! ; ­ §­ ç âì ¤à㣮© à ¬¤à ©¢, ᢮¡®¤­ë©?
;***************************************
POP AF POP AF
LD B,A ; § ¯à®á¨âì ¯ ¬ïâì ã bios-  LD B,A ; § ¯à®á¨âì ¯ ¬ïâì ã bios- 
LD A,0 XOR A ; RAM-Drive E:
LD C,BIOS.EMM_FN2 ; ¨ ¯®¤á®¥¤¨­¨âì ª e: LD C,BIOS.GetMemRMD ; ¨ ¯®¤á®¥¤¨­¨âì ª e:
RST ToBIOS RST ToBIOS
JR C,ERROR_NO_MEM JR C,ERROR_NO_MEM
LD (MEM_BLK),A LD (MEM_BLK),A
RET
;--------------[new_code]---------------
ret
;--------------------------------------- ;---------------------------------------
Load_IMAGE_File: Load_IMAGE_File:
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
LD C,Dss.Move_FP
LD B,0
LD HL,0 LD HL,0
LD IX,0 LD IX,0
LD BC,Dss.Move_FP.FrStart * 256 + Dss.Move_FP
RST ToDSS ; ãáâ ­®¢¨âì 㪠§ â¥«ì ­  0 RST ToDSS ; ãáâ ­®¢¨âì 㪠§ â¥«ì ­  0
RET C RET C
@ -791,9 +768,8 @@ Load_IMAGE_File:
Set_RAM_Dsk_EtoA: Set_RAM_Dsk_EtoA:
DI DI
LD A,0 XOR A
LD B,0 LD BC,0*256 + BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a:
LD C,BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a:
RST ToBIOS RST ToBIOS
AND A AND A
RET RET
@ -817,14 +793,12 @@ SAV_PG3X: db 0
;******************************************** ;********************************************
READ_FILE_1: READ_FILE_1:
LD DE,ONE_FILE LD DE,ONE_FILE
LD BC,128 LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE LD HL,ONE_FILE
OUT (SLOT3),A OUT (SLOT3),A
READ_FILE: READ_FILE:
LD A,Dss.Open.R
LD A,1
LD C,Dss.Open LD C,Dss.Open
RST ToDSS RST ToDSS
RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©«  RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
@ -832,8 +806,8 @@ READ_FILE:
LD (FILE_HANDLE),A LD (FILE_HANDLE),A
LD A,(FILE_HANDLE) LD A,(FILE_HANDLE)
LD HL,0C000h LD HL,#C000
LD DE,4000h LD DE,#4000
LD C,Dss.Read LD C,Dss.Read
RST ToDSS RST ToDSS
RET C ; ®è¨¡ª  ¯à¨ ç⥭¨¨ RET C ; ®è¨¡ª  ¯à¨ ç⥭¨¨
@ -855,27 +829,24 @@ FILE_HANDLE: db 0
EXIT_TO_DSS: EXIT_TO_DSS:
DI DI
LD SP,#BFF0 LD SP,#BFF0
LD A,CNF_0 LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
ld a,(#FFF0) LD A,(#FFF0) ;!HARDCODE
out (SLOT0),a OUT (SLOT0),A
LD B,3 ; IBM_PAL XOR A
LD A,0 LD BC,3*256 + BIOS.SET_PAL_INIT ; SET IBM PAL
LD C,#A6 ; SET_standard_PAL
RST ToBIOS RST ToBIOS
LD A,3 ; OPEN_TXT LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT
LD B,0 LD BC,0*256 + Dss.SetVMod
LD C,#50
RST ToDSS RST ToDSS
LD C,#56 ; CLS LD A,#20
LD DE,0 LD DE,0
LD HL,#2050 LD HL,#2050
LD B,7 LD BC,7*256 + Dss.Clear
LD A,#20
RST ToDSS RST ToDSS
LD HL,MSG_ZX_EXIT LD HL,MSG_ZX_EXIT
@ -921,7 +892,7 @@ RESET_TO_ZX:
cp #1E cp #1E
jr z,EXIT_TO_DSS jr z,EXIT_TO_DSS
LD A,CNF_0 LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A ; System-page on & CNF = 0 OUT (SYS_PORT.ON),A ; System-page on & CNF = 0
;-------------[TEST ATARIN]------------- ;-------------[TEST ATARIN]-------------
@ -958,19 +929,19 @@ RESET_TO_ZX:
LD A,(Ret_fn_+2) LD A,(Ret_fn_+2)
XOR B XOR B
LD B,A LD B,A
LD A,Conf_port.RET_PORT LD A,ACEX.RET_PORT
CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â
LD A,CNF_3 LD A,CNF_PORT.CNF_3
OUT (SYS_PORT.ON),A ; System-page on & CNF = 3 OUT (SYS_PORT.ON),A ; System-page on & CNF = 3
XOR A XOR A
OUT (BorderColor),A ; border-0 OUT (BorderColor),A ; border-0
OUT (RGADR),A ; Screen-page = 0 OUT (RGADR),A ; Screen-page = 0
OUT (RGMOD),A ; Screen-mode-page = 0 OUT (RGMOD),A ; Screen-mode-page = 0
LD BC,1FFDh LD BC,#1FFD
OUT (C),A ; Scorpion-port = 0 OUT (C),A ; Scorpion-port = 0
LD BC,7FFDh LD BC,#7FFD
OUT (C),A ; pentagon-port = 0 OUT (C),A ; pentagon-port = 0
LD A,(Int_or_+2) LD A,(Int_or_+2)
@ -978,37 +949,36 @@ RESET_TO_ZX:
LD A,#FA ; original waits on LD A,#FA ; original waits on
JR NZ,ORIG1 JR NZ,ORIG1
LD A,#FE LD A,#FE
ORIG1: ORIG1: LD BC,Port_All_Mode
LD BC,Port_All_Mode
OUT (C),A ; ACC-Off OUT (C),A ; ACC-Off
LD BC,CBL.SYS_PORT LD BC,CBL.SYS_PORT
LD A,0 XOR A
OUT (C),A ; CBL-off OUT (C),A ; CBL-off
LD A,#12 ; FDD-720 LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720
LD C,BIOS.FN_TURBO LD C,BIOS.FN_TURBO
RST #18 RST ToBIOS_18
;---------------[test!!!!!]------------- ;---------------[test!!!!!]-------------
;!FIXIT à §à㫨âì ०¨¬ ᯥªâà㬠 ­  à ¡®âã á «î¡ë¬¨ ª ­ « ¬¨ ¨ à §¤¥« ¬¨
XOR A ; --> IDE-1
LD C,BIOS.HDD_PART ; IDE-1/IDE-2 LD C,BIOS.HDD_PART ; IDE-1/IDE-2
LD A,0 ; --> IDE-1 RST ToBIOS_18
RST #18
;--------------------------------------- ;---------------------------------------
;****************************** ;******************************
XOR A ; Set ZX-Palette XOR A
LD B,2 LD BC,2*256 + BIOS.SET_PAL_INIT ; Set ZX-Palette
LD C,#A6 RST ToBIOS_18
RST 18h
LD A,(Int_or_+2) LD A,(Int_or_+2)
AND A ; 3 AND A ; 3
JR NZ,Original JR NZ,Original
LD A,(Int_sc_+2) ; 1/2 LD A,(Int_sc_+2) ; 1/2
Original: Original:
LD C,#F2 ; -> INT for Pentagon or Scorpion LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion
RST #18 RST ToBIOS_18
LD HL,#4000 ; clear ZX-Spectrum screen LD HL,#4000 ; clear ZX-Spectrum screen
LD DE,#4001 LD DE,#4001
@ -1017,49 +987,58 @@ Original:
LDIR LDIR
LD HL,#4104 ; Screen-1 LD HL,#4104 ; Screen-1
LD BC,#0480
LD E,0 LD E,0
RST #18 LD BC,4*256 + BIOS.LP_OPEN_S
RST ToBIOS_18
LD HL,#5104 ; Screen-2 LD HL,#5104 ; Screen-2
LD BC,#0480
LD E,0 LD E,0
RST #18 LD BC,4*256 + BIOS.LP_OPEN_S
RST ToBIOS_18
XOR A XOR A
OUT (RGADR),A OUT (RGADR),A
OUT (RGMOD),A OUT (RGMOD),A
;************************************************ ;************************************************
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ
;!FIXIT ç¥à¥§ äã­ªæ¨î ¡¨®á ¯®¯à®¡®¢ âì
DI DI
LD A,0
OUT (SLOT0),A
LD A,5 LD A,5
OUT (SLOT1),A OUT (SLOT1),A
XOR A XOR A
OUT (SLOT0),A
LD BC,#1FFD LD BC,#1FFD
OUT (C),A ; #1FFD OUT (C),A ; #1FFD
LD B,#7F LD B,#7F
;!TEST
LD A,8
LOOP_P1: LOOP_P1:
DEC A
OUT (C),A ; #7FFD OUT (C),A ; #7FFD
OUT (SLOT3),A OUT (SLOT3),A
INC A
CP 8
JR NZ,LOOP_P1 JR NZ,LOOP_P1
;OUT (C),A ; #7FFD
;OUT (SLOT3),A
;INC A
;CP 8
;JR NZ,LOOP_P1
;
LD B,#1F LD B,#1F
LD A,#10 LD A,#10
OUT (C),A ; #1FFD OUT (C),A ; #1FFD
LD A,8
LD B,#7F LD B,#7F
LD A,8
LOOP_P2: LOOP_P2:
OUT (C),A ; #7FFD OUT (C),A ; #7FFD
OUT (SLOT3),A OUT (SLOT3),A
INC A INC A
CP 16 CP 16
JR NZ,LOOP_P2 JR NZ,LOOP_P2
XOR A XOR A
OUT (C),A ; #7FFD OUT (C),A ; #7FFD
LD B,#1F LD B,#1F
@ -1102,7 +1081,7 @@ PROG_STARTS:
LD A,2 LD A,2
OUT (SLOT2),A OUT (SLOT2),A
LD A,E LD A,E
OUT (SYS_PORT.OFF),A ; System-port OUT (SYS_PORT.OFF),A
LD A,D LD A,D
AND A AND A
JP Z,0 JP Z,0
@ -1151,7 +1130,7 @@ Ret_fn: db "ret-fn", 255,0
;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn ;/Turbo /Lines312 /Sprinter /7FFD /1FFD /Mem512 /Int-Sc /To-TRDOS /no-run /origin /ret-zx /ret-fn
CNF_FILE: db "SPECTRUM.CFG",0 CNF_FILE: db "SPECTRUM.CFG",0
ONE_FILE: ds 128 ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH, 0
; ;
; ;
; ;