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,14 +84,19 @@ program_start EQU BEGIN
;
; Program EQU section
;***************************************
NAME_CFG_LINE EQU 0
BASIC128_LINE EQU 2
BASIC_48_LINE EQU 4
TRDOS_LINE EQU 6
EXP_LINE EQU 8
BIOS_LINE EQU 10
BIOS2_LINE EQU 12
OPTIONS_LINE EQU 14
FULL_FILE_NAME_LENGTH EQU 128 ; ¤«¨­  áâப¨ ¯ã⨠ª ä ©«ã
MAX_LINE_LENGTH EQU 120 ; ¤«¨­  áâப¨ CFG ä ©« 
CFG_FILE_LINES EQU 8
NAME_CFG_LINE EQU 0
BASIC128_LINE EQU 2
BASIC_48_LINE EQU 4
TRDOS_LINE EQU 6
EXP_LINE EQU 8
BIOS_LINE EQU 10
BIOS2_LINE EQU 12
;XXX_LINE EQU ??
OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2
;***************************************
;
@ -106,17 +111,17 @@ OPTIONS_LINE EQU 14
; Code start section
;[]-------------------------------------------------------------------[]
IF EXE_HEADER
include 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
include 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
ELSE
ORG org_addr - CLP_Buffer
ORG org_addr - CLP_Buffer
ENDIF
BEGIN:
LD (LINE_X),IX
LD HL,START_MSG
LD C,5Ch
LD C,Dss.PChars
RST ToDSS
IN A,(SLOT3)
@ -125,10 +130,10 @@ BEGIN:
JP COMAND_LINE
ERROR_FILE:
LD HL,ERROR_FILE_MSG_X
LD C,5Ch
LD C,Dss.PChars
RST ToDSS
LD HL,ONE_FILE
LD C,5Ch
LD C,Dss.PChars
RST ToDSS
LD HL,ERROR_FILE_MSG
@ -184,8 +189,7 @@ COMAND_LINE:
CALL READ_FILE_1
JP NC,CONTINUE
NO_FIL:
LD HL,CNF_FILE
NO_FIL: LD HL,CNF_FILE
LD A,Spec_Page
CALL READ_FILE_1
JR C,ERROR_FILE
@ -352,89 +356,69 @@ IMAGE_NAME: WORD 0
IMAGE_HANDLER: BYTE 0
SAVE_SLOT3: BYTE 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
LD (LEN_CNF),DE
LD (LEN_CNF),DE
LD HL,#C000
LD DE,A_LINES
LD C,8
LOOP_A:
LD B,120 ; áâப¨ ­¥ ¡®«¥¥ 120 ᨬ¢®«®¢
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
LOOP_L:
LD A,(HL)
CP 13
JR Z,N_LINE
CP 10
JR Z,N_LINE
CP 0
JP Z,END_CNF_ERROR
INC HL
DJNZ LOOP_L
LD HL,#C000
LD DE,A_LINES
LD C,CFG_FILE_LINES
LOOP_A: LD B,MAX_LINE_LENGTH ; ¤«¨­  áâப¨
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
LOOP_L: LD A,(HL)
CP 13
JR Z,N_LINE
CP 10
JR Z,N_LINE
AND A
JP Z,END_CNF_ERROR
INC HL
CP ';'
JR Z,N_LINE
DJNZ LOOP_L
N_LINE:
LD (HL),0
INC HL
LD A,(HL)
CP 13
JR Z,N_LINE
CP 10
JR Z,N_LINE
DEC C
JR NZ,LOOP_A
N_LINE: LD (HL),0
INC HL
LD A,(HL)
CP 13
JR Z,N_LINE
CP 10
JR Z,N_LINE
DEC C
JR NZ,LOOP_A
; ¢ë¤¥«¥­® 8 áâப ¢ CNF
;*************************************
MACRO vROM_LOAD romLine, pageNumber
LD HL,(A_LINES + romLine)
LD A,(HL)
CP ';'
JR Z,.skip_load
LD A,pageNumber
CALL READ_FILE_1
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
.skip_load:
ENDM
LD HL,(A_LINES+BASIC128_LINE) ; 2-ï áâப  - ¨¬ï ä ©«  BASIC128
LD A,#42
CALL READ_FILE_1
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
LD HL,(A_LINES+BASIC_48_LINE) ; 3-ï áâப  - ¨¬ï ä ©«  BASIC 48
LD A,#43
CALL READ_FILE_1
LD A,Spec_Page
OUT (SLOT3),A
JP C,ERROR_FILE
LD HL,(A_LINES+TRDOS_LINE) ; 4-ï áâப  - ¨¬ï ä ©«  TR-DOS
LD A,#44
CALL READ_FILE_1
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
vROM_LOAD BASIC128_LINE, #42 ; 2-ï áâப  - ¨¬ï ä ©«  BASIC128
vROM_LOAD BASIC_48_LINE, #43 ; 3-ï áâப  - ¨¬ï ä ©«  BASIC 48
vROM_LOAD TRDOS_LINE, #44 ; 4-ï áâப  - ¨¬ï ä ©«  TR-DOS
vROM_LOAD EXP_LINE, #45 ; 5-ï áâப  - ¨¬ï ä ©«  EXPANSION
vROM_LOAD BIOS_LINE, #46 ; 6-ï áâப  - ¨¬ï ä ©«  BIOS
vROM_LOAD BIOS2_LINE, #47 ; 7-ï áâப  - ¨¬ï ä ©«  BIOS2
; vROM_LOAD _LINE, #42 ; 8-ï áâப  - ¨¬ï ä ©« 
; vROM_LOAD _LINE, #42 ; 9-ï áâப  - ¨¬ï ä ©« 
; vROM_LOAD _LINE, #42 ; 10-ï áâப  - ¨¬ï ä ©« 
; vROM_LOAD _LINE, #42 ; 11-ï áâப  - ¨¬ï ä ©« 
; ä ©«ë áç¨â ­ë
;*************************************
@ -531,7 +515,6 @@ PARAM_E2:
;************************************
PARAM_END:
LD A,#E2 ; ROM-ID - BASIC 128
LD B,#42 ; page
CALL SET_ROM
@ -587,10 +570,9 @@ SKIP_IMAGE:
;********************************************
; out B - old ROM-page
SET_ROM:
; out B - old ROM-page
DI
; PUSH BC
; PUSH AF
@ -660,11 +642,11 @@ SET_ROM:
;********************************************
READ_IMAGE:
LD DE,ONE_FILE
LD BC,128
LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE
LD A,1
LD A,Dss.Open.R
LD C,Dss.Open
RST ToDSS
RET C
@ -681,22 +663,20 @@ READ_IMAGE:
.Load_TRD:
LD A,(IMAGE_HANDLER)
LD C,Dss.Move_FP
LD B,2
LD B,Dss.Move_FP.FrEnd
LD HL,0
LD IX,0
LD C,Dss.Move_FP
RST ToDSS ; ­ ©â¨ ¤«¨­ã ä ©« 
RET C
PUSH IX
POP DE
;--------------[new_code]---------------
call Get_RAM_Disk_E
ret c
jp Load_IMAGE_File
;---------------------------------------
Get_RAM_Disk_E:
; hl:de - à §¬¥à ä ©«  ¢ ¡ ©â å
LD A,D
@ -719,32 +699,29 @@ Get_RAM_Disk_E:
JR Z,ERROR_NO_MEM
PUSH AF
;***************************************
;!FIXIT ¡¥§®¯ á­® § ­¨¬ âì à ¬¤¨áª¨, ç⮡ ¯®«ì§®¢ â¥«ì ­¥ áâà ¤ «
; ®á¢®¡®¤¨âì ram-disk e:
.free_disk:
DI
LD A,0
LD C,BIOS.EMM_FN3
XOR A ; RAM-Drive E:
LD C,BIOS.FreeMemRMD
RST ToBIOS ; ®á¢®¡®¤¨âì e:
;!!!!!!!!!!!!!!!!!!!!!! ; ­ §­ ç âì ¤à㣮© à ¬¤à ©¢, ᢮¡®¤­ë©?
;***************************************
POP AF
LD B,A ; § ¯à®á¨âì ¯ ¬ïâì ã bios- 
LD A,0
LD C,BIOS.EMM_FN2 ; ¨ ¯®¤á®¥¤¨­¨âì ª e:
XOR A ; RAM-Drive E:
LD C,BIOS.GetMemRMD ; ¨ ¯®¤á®¥¤¨­¨âì ª e:
RST ToBIOS
JR C,ERROR_NO_MEM
LD (MEM_BLK),A
;--------------[new_code]---------------
ret
RET
;---------------------------------------
Load_IMAGE_File:
LD A,(IMAGE_HANDLER)
LD C,Dss.Move_FP
LD B,0
LD HL,0
LD IX,0
LD BC,Dss.Move_FP.FrStart * 256 + Dss.Move_FP
RST ToDSS ; ãáâ ­®¢¨âì 㪠§ â¥«ì ­  0
RET C
@ -765,7 +742,7 @@ Load_IMAGE_File:
RST ToDSS
JR C,ERROR_IN_READ
LD HL,PROGRES_IND ; loading progress
LD HL,PROGRES_IND ; loading progress
LD C,Dss.PChars
RST ToDSS
@ -778,12 +755,12 @@ Load_IMAGE_File:
CP #FF
JR NZ,.load_loop
LD HL,CR_LINE ; loading
LD HL,CR_LINE ; loading
LD C,Dss.PChars
RST ToDSS
LD A,(IMAGE_HANDLER)
LD C,Dss.Close ; § ªàëâì ä ©«
LD C,Dss.Close ; § ªàëâì ä ©«
RST ToDSS
RET C
@ -791,9 +768,8 @@ Load_IMAGE_File:
Set_RAM_Dsk_EtoA:
DI
LD A,0
LD B,0
LD C,BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a:
XOR A
LD BC,0*256 + BIOS.RAMD_TO_DRV ; ­ §­ ç¨âì e: ­  a:
RST ToBIOS
AND A
RET
@ -808,7 +784,7 @@ ERROR_NO_MEM:
RST ToDSS
ERROR_IMAGE_X:
LD A,(IMAGE_HANDLER)
LD C,Dss.Close ; § ªàëâì ä ©«
LD C,Dss.Close ; § ªàëâì ä ©«
RST ToDSS
SCF
RET
@ -817,14 +793,12 @@ SAV_PG3X: db 0
;********************************************
READ_FILE_1:
LD DE,ONE_FILE
LD BC,128
LDIR
LD BC,FULL_FILE_NAME_LENGTH
LD HL,ONE_FILE
OUT (SLOT3),A
READ_FILE:
LD A,1
LD A,Dss.Open.R
LD C,Dss.Open
RST ToDSS
RET C ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
@ -832,8 +806,8 @@ READ_FILE:
LD (FILE_HANDLE),A
LD A,(FILE_HANDLE)
LD HL,0C000h
LD DE,4000h
LD HL,#C000
LD DE,#4000
LD C,Dss.Read
RST ToDSS
RET C ; ®è¨¡ª  ¯à¨ ç⥭¨¨
@ -845,7 +819,7 @@ READ_FILE:
RST ToDSS
POP DE ; ¤«¨­  áç¨â ­­ëå ¤ ­­ëå
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok
RET ; ®è¨¡ª  ¯à¨ § ªàë⨨ ¨«¨ Ok
FILE_HANDLE: db 0
@ -855,27 +829,24 @@ FILE_HANDLE: db 0
EXIT_TO_DSS:
DI
LD SP,#BFF0
LD A,CNF_0
LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.OFF),A
ld a,(#FFF0)
out (SLOT0),a
LD A,(#FFF0) ;!HARDCODE
OUT (SLOT0),A
LD B,3 ; IBM_PAL
LD A,0
LD C,#A6 ; SET_standard_PAL
XOR A
LD BC,3*256 + BIOS.SET_PAL_INIT ; SET IBM PAL
RST ToBIOS
LD A,3 ; OPEN_TXT
LD B,0
LD C,#50
LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT
LD BC,0*256 + Dss.SetVMod
RST ToDSS
LD C,#56 ; CLS
LD A,#20
LD DE,0
LD HL,#2050
LD B,7
LD A,#20
LD BC,7*256 + Dss.Clear
RST ToDSS
LD HL,MSG_ZX_EXIT
@ -921,7 +892,7 @@ RESET_TO_ZX:
cp #1E
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
;-------------[TEST ATARIN]-------------
@ -958,19 +929,19 @@ RESET_TO_ZX:
LD A,(Ret_fn_+2)
XOR B
LD B,A
LD A,Conf_port.RET_PORT
CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â
LD A,ACEX.RET_PORT
CALL SET_ROM ; ¢ª«îç¨âì ¢®§¢à â
LD A,CNF_3
OUT (SYS_PORT.ON),A ; System-page on & CNF = 3
LD A,CNF_PORT.CNF_3
OUT (SYS_PORT.ON),A ; System-page on & CNF = 3
XOR A
OUT (BorderColor),A ; border-0
OUT (RGADR),A ; Screen-page = 0
OUT (RGMOD),A ; Screen-mode-page = 0
LD BC,1FFDh
OUT (BorderColor),A ; border-0
OUT (RGADR),A ; Screen-page = 0
OUT (RGMOD),A ; Screen-mode-page = 0
LD BC,#1FFD
OUT (C),A ; Scorpion-port = 0
LD BC,7FFDh
LD BC,#7FFD
OUT (C),A ; pentagon-port = 0
LD A,(Int_or_+2)
@ -978,88 +949,96 @@ RESET_TO_ZX:
LD A,#FA ; original waits on
JR NZ,ORIG1
LD A,#FE
ORIG1:
LD BC,Port_All_Mode
ORIG1: LD BC,Port_All_Mode
OUT (C),A ; ACC-Off
LD BC,CBL.SYS_PORT
LD A,0
XOR A
OUT (C),A ; CBL-off
LD A,#12 ; FDD-720
LD A,BIOS.FN_TURBO.VG.OFF ; FDD-720
LD C,BIOS.FN_TURBO
RST #18
RST ToBIOS_18
;---------------[test!!!!!]-------------
LD C,BIOS.HDD_PART ; IDE-1/IDE-2
LD A,0 ; --> IDE-1
RST #18
;!FIXIT à §à㫨âì ०¨¬ ᯥªâà㬠 ­  à ¡®âã á «î¡ë¬¨ ª ­ « ¬¨ ¨ à §¤¥« ¬¨
XOR A ; --> IDE-1
LD C,BIOS.HDD_PART ; IDE-1/IDE-2
RST ToBIOS_18
;---------------------------------------
;******************************
XOR A ; Set ZX-Palette
LD B,2
LD C,#A6
RST 18h
XOR A
LD BC,2*256 + BIOS.SET_PAL_INIT ; Set ZX-Palette
RST ToBIOS_18
LD A,(Int_or_+2)
AND A ; 3
JR NZ,Original
LD A,(Int_sc_+2) ; 1/2
AND A ; 3
JR NZ,Original
LD A,(Int_sc_+2) ; 1/2
Original:
LD C,#F2 ; -> INT for Pentagon or Scorpion
RST #18
LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion
RST ToBIOS_18
LD HL,#4000 ; clear ZX-Spectrum screen
LD DE,#4001
LD BC,#1AFF
LD (HL),L
LD (HL),L
LDIR
LD HL,#4104 ; Screen-1
LD BC,#0480
LD E,0
RST #18
LD BC,4*256 + BIOS.LP_OPEN_S
RST ToBIOS_18
LD HL,#5104 ; Screen-2
LD BC,#0480
LD E,0
RST #18
LD BC,4*256 + BIOS.LP_OPEN_S
RST ToBIOS_18
XOR A
OUT (RGADR),A
OUT (RGMOD),A
;************************************************
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ
;!FIXIT ç¥à¥§ äã­ªæ¨î ¡¨®á ¯®¯à®¡®¢ âì
DI
LD A,0
OUT (SLOT0),A
LD A,5
OUT (SLOT1),A
XOR A
OUT (SLOT0),A
LD BC,#1FFD
OUT (C),A ; #1FFD
LD B,#7F
LOOP_P1:
OUT (C),A ; #7FFD
OUT (SLOT3),A
INC A
CP 8
JR NZ,LOOP_P1
LD B,#1F
LD A,#10
OUT (C),A ; #1FFD
LD A,8
LD B,#7F
;!TEST
LD A,8
LOOP_P1:
DEC A
OUT (C),A ; #7FFD
OUT (SLOT3),A
JR NZ,LOOP_P1
;OUT (C),A ; #7FFD
;OUT (SLOT3),A
;INC A
;CP 8
;JR NZ,LOOP_P1
;
LD B,#1F
LD A,#10
OUT (C),A ; #1FFD
LD B,#7F
LD A,8
LOOP_P2:
OUT (C),A ; #7FFD
OUT (SLOT3),A
INC A
CP 16
JR NZ,LOOP_P2
OUT (C),A ; #7FFD
OUT (SLOT3),A
INC A
CP 16
JR NZ,LOOP_P2
XOR A
OUT (C),A ; #7FFD
LD B,#1F
@ -1076,19 +1055,19 @@ LOOP_P2:
LD A,(Line312_+2)
OUT (Port_VSYNC),A
LD A,(P_7FFD_+2) ; - Pentagon off
LD A,(P_7FFD_+2) ; - Pentagon off
LD BC,#7FFD
OUT (C),A
LD A,(Turbo__+2) ; 3 - turbo
LD A,(Turbo__+2) ; 3 - turbo
LD HL,(Sprint_+2) ; +04h - Sprinter-ZX
LD HL,(Sprint_+2) ; +04h - Sprinter-ZX
ADD A,L ; +0Ch - Scorpion/Pentagon
LD HL,(P_1FFD_+2) ; +40h - Scorpion port off
LD HL,(P_1FFD_+2) ; +40h - Scorpion port off
ADD A,L
LD HL,(Mem512_+2) ; +80h - Pentagon-512 on
LD HL,(Mem512_+2) ; +80h - Pentagon-512 on
ADD A,L
LD E,A
@ -1102,7 +1081,7 @@ PROG_STARTS:
LD A,2
OUT (SLOT2),A
LD A,E
OUT (SYS_PORT.OFF),A ; System-port
OUT (SYS_PORT.OFF),A
LD A,D
AND A
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
CNF_FILE: db "SPECTRUM.CFG",0
ONE_FILE: ds 128
ONE_FILE: BLOCK FULL_FILE_NAME_LENGTH, 0
;
;
;