free zx pages! ещё больше почти готово

This commit is contained in:
Tolik 2024-09-30 04:52:55 +10:00
parent df0a7937f6
commit 895f85e04d
9 changed files with 454 additions and 295 deletions

@ -1 +1 @@
Subproject commit 39d099768ae06d08777c63c9d5036fa4ab9c9a01
Subproject commit ba1bc48d1597637a512a5333d2a76f94b5b26231

View File

@ -894,7 +894,7 @@ PrepareToZX: ; Setup HDD drives for ZX Spectrum mode
.start_zx:
; IF FREE_ZX_PAGES
; ­¥ ¤®«¦­® á ¯®¯ áâì
LD B,BIOS.REINIT.HARD_RESET
LD B,high BIOS.REINIT.HARD_RESET
JP REINIT
; ELSE ; [x] free zx pages!
; XOR A
@ -1239,6 +1239,12 @@ PROG_NO_ROM:
OUT (SLOT2),A
OUT (SLOT1),A
;
LD HL,MESSAGE_NR
LD DE,#A000
LD BC,MESSAGE_NR.size
LD A,C
LDIR
;
LD SP,#BF00
;
LD E,0
@ -1253,12 +1259,6 @@ PROG_NO_ROM:
LD A,1
OUT (SCREEN_SWITCH),A
;
LD HL,MESSAGE_NR
LD DE,#A000
LD BC,MESSAGE_NR.size
LD A,C
LDIR
;
LD HL,#A000
LD D,0 ; delimiter
LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED

View File

@ -11,68 +11,47 @@
; PG_Sp2000 EQU #FE
; PG_Sp2000_REINIT EQU #FD
;
RST_CONF:
;--[] ZX Spectrum
.AY8910:
; !FIXIT ­¥ ­ã¦­® íâ® ¡®«ìè¥ ¢ CMOS, ¯¥à¥¤¥« âì ¯®¤ TASK
;LD D,CMOS_CELL.HardwareConfiguration ; CONFIG_DE (D) - §­ ç¥­¨¥ CNF_PORT
;CALL CMOS_RD
;OR 1
;CALL CMOS_WR
;
LD BC,Port_All_Mode
IN A,(C)
AND Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF
OUT (C),A ; ACC_OFF
;LD A,PG_AY
LD DE,ACEX.Config_ID.Sp97_AY
JR .INT_PLD
.AY8910: CALL .ACC_OFF
LD DE,ACEX.Config_ID.Sp97_AY
JR .INT_PLD
;--[]
;--[] Sprinter ZX
.SP97_1:
; !FIXIT ­¥ ­ã¦­® íâ® ¡®«ìè¥ ¢ CMOS, ¯¥à¥¤¥« âì ¯®¤ TASK
;LD D,CMOS_CELL.HardwareConfiguration ; CONFIG_DE (D) - §­ ç¥­¨¥ CNF_PORT
;CALL CMOS_RD
;AND #FE
;CALL CMOS_WR
;
LD BC,Port_All_Mode
IN A,(C)
AND #FE ;!HARDCODE
OUT (C),A ; ACC_OFF
;LD A,PG_SP1
LD DE,ACEX.Config_ID.Sp97_1
JR .INT_PLD
.SP97_1: CALL .ACC_OFF
LD DE,ACEX.Config_ID.Sp97_1
JR .INT_PLD
;--[]
;--[]
.SP97_2:
LD BC,Port_All_Mode
IN A,(C)
OR 1 ; ACC_ON
OUT (C),A
;LD A,PG_SP2
LD DE,ACEX.Config_ID.Sp97_2
JR .INT_PLD
.SP97_2: CALL .ACC_ON
LD DE,ACEX.Config_ID.Sp97_2
JR .INT_PLD
;--[]
;--[]
;[x]
.SP2000:
LD BC,Port_All_Mode
IN A,(C)
OR 1 ; ACC_ON
OUT (C),A
LD DE,ACEX.Config_ID.Sp2000
JR .INT_PLD
.SP2000: CALL .ACC_ON
LD DE,ACEX.Config_ID.Sp2000
JR .INT_PLD
;--[]
;--[]
.ACC_OFF: LD BC,Port_All_Mode
IN A,(C)
AND Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF
OUT (C),A
RET
;
.ACC_ON: LD BC,Port_All_Mode
IN A,(C)
OR 1 ; ACC_ON
OUT (C),A
RET
;--[]
;--[]
.CUSTOM:
@ -82,7 +61,7 @@ RST_CONF:
LD C,SLOT3
IN B,(C)
OUT (C),A ; PAGE á ¯à®è¨¢ª®©
LD DE,(#C090) ; PLD-ID
LD DE,(#C090) ; PLD-ID
OUT (C),B ; RET page
;--[] ;JR INT_PLD
.INT_PLD: ; only for old FLEX10K soft compatible
@ -174,7 +153,7 @@ RST_CONF:
LDIR
; ¥á«¨ ZF=0, â® ¯à®æ¥¤ãà  á¤¥« ¥â à¥á¥â á ¯¥à¥§ «¨¢ª®© ¨§ BIOS, ¨­ ç¥ ¨§ Š<>˜
CALL Spec_Page.init_acex
LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT
LD BC,BIOS.REINIT.HARD_RESET
;
; ­  ¢å®¤¥ ¢ BC ¯ à ¬¥âàë ä㭪樨 BIOS
.INIT_ACEX.ifSoftreset:
@ -220,7 +199,7 @@ RST_CONF:
; *. ‘®åà ­¨âì ªã¤ -­¨¡ã¤ì §­ ç¥­¨¥ á⥪ 
; *
; .. ... ... ..
;LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT
;LD BC,BIOS.REINIT.HARD_RESET
JP_to_BIOS
;
.ReturnSoftReset:
@ -234,7 +213,7 @@ RST_CONF:
LD A,Spec_Page
OUT (SLOT3),A
;
LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT
LD BC,BIOS.REINIT.SOFT_RESET
JR .INIT_ACEX.ifSoftreset
;
;;;
@ -321,63 +300,55 @@ RST_CONF:
;
;***************************************
;[x]
;--------------------------[;!TODO ¯®â¥áâ¨âì]--------------------------;
; B - ¯ à ¬¥âà á¡à®á 
; B = 1 - RESTART.
; B = 2 - Soft reset
; B = 3 - Hard reset
REINIT: DEC B
JR Z,.Restart ;1
DEC B
JR Z,.SoftReset ;2
DEC B
SCF
RET NZ
; JR Z,.HardReset ;3
; DEC B
; .ReinitZXpages: ;4
; LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
; LD HL,SYS_PAGE.RAM_TABLE ; €¤à¥á FAT އ“.
; LD C,SLOT3
; IN B,(C)
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(DE)
; .zxloop:
; CP #FF
; JR Z,.endzxloop
; INC DE
; LD L,A
; LD A,(HL)
; AND A
; JR NZ,.errorzxloop
; LD A,(DE)
; LD (HL),A
; JR .zxloop
; .errorzxloop:
; DEC DE
; LD HL,-RESERVED_PAGES-1
; ADD HL,DE
; JR NC,.errorzxloop_noChanges
; DEC DE
; LD H,high SYS_PAGE.RAM_TABLE
; LD A,(DE)
; LD L,A
; LD A,#FF
; LD (HL),A
; .errorzxloop_noChanges:
; SCF
; .endzxloop:
; OUT (C),B
; RET
;
; B = 4 - Free memory except ZX pages
REINIT: DEC B
JR Z,.Restart ; 1
DEC B
JR Z,.SoftReset ; 2
DEC B
JR Z,.HardReset ; 3
DEC B
SCF
RET NZ
; ; 4
.FreeNoZxMem: DI
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD (SYS_PAGE.SP_SAVE),SP
LD SP,SYS_PAGE.SYS_SP
PUSH BC
; ç¨á⨬ ¡ãä¥à
LD HL,SYS_PAGE.SHARED_BUFFER_256b
LD DE,SYS_PAGE.SHARED_BUFFER_256b + 1
LD BC,255
LD (HL),0
LDIR
;
LD IX,SYS_PAGE.Block_IDs
LD H,high SYS_PAGE.RAM_TABLE
LD D,high SYS_PAGE.SHARED_BUFFER_256b
LD BC,2*256 + #FF ; 2 = vRAM ¨ VROM ID's
CALL SAVE_CHAINS
;
CALL EMM.InitMem
;
LD HL,SYS_PAGE.SHARED_BUFFER_256b
LD DE,SYS_PAGE.RAM_TABLE
CALL RESTORE_CHAINS
; CF=0
POP BC
LD SP,(SYS_PAGE.SP_SAVE)
OUT (C),B
RET
;[x]
.HardReset:
@ -430,5 +401,92 @@ REINIT: DEC B
.loop2: LD (#C000),A ; Soft RESET !!!
JR .loop2
;
;----------------------------------------------------------------------;
; ‚室: H - RAM_TABLE
; D - Buffer for RAM_TABLE
; IX - 㪠§ â¥«ì ­  ¯®á«¥¤®¢ â¥«ì­®áâì ¨§ RAM BLOCK ID
; B - ª®«-¢® RAM BLOCK ID ¢ ¯®á«¥¤®¢ â¥«ì­®áâ¨
; C - #FF (ç⮡ LDI ­¥ «®¬ «® DJNZ áçñâ稪)
SAVE_CHAINS: LD A,(IX)
INC IX
OR A
LD L,A
CALL NZ,COPY_CHAIN
DJNZ SAVE_CHAINS
RET
; ‚室: H - RAM_TABLE
; L - RAM BLOCK ID
; D - Buffer for RAM_TABLE
COPY_CHAIN: LD E,L
LDI
DEC L
LD L,(HL)
INC L
RET Z
DEC L
JR COPY_CHAIN
;--------------;
; ‚室: HL - ª®¯¨ï RAM_TABLE ®âªã¤  ª®¯¨à®¢ âì
; DE - RAM_TABLE
RESTORE_CHAINS: XOR A
.loop: CP (HL)
JR Z,.NoCopy
LD E,L
LDI
DEC L
.NoCopy: INC L
JR NZ,.loop
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; áâ àë© ¢ à¨ ­â ®á¢®¡®¦¤¥­¨ï áâà ­¨æ ᯥªâà㬠 ç¥à¥§ RAM BLK ID 1
;----------------------------------------------------------------------;
; JR Z,.HardReset ;3
; DEC B
; .ReinitZXpages: ;4
; LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
; LD HL,SYS_PAGE.RAM_TABLE ; €¤à¥á FAT އ“.
; LD C,SLOT3
; IN B,(C)
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(DE)
; .zxloop:
; CP #FF
; JR Z,.endzxloop
; INC DE
; LD L,A
; LD A,(HL)
; AND A
; JR NZ,.errorzxloop
; LD A,(DE)
; LD (HL),A
; JR .zxloop
; .errorzxloop:
; DEC DE
; LD HL,-RESERVED_PAGES-1
; ADD HL,DE
; JR NC,.errorzxloop_noChanges
; DEC DE
; LD H,high SYS_PAGE.RAM_TABLE
; LD A,(DE)
; LD L,A
; LD A,#FF
; LD (HL),A
; .errorzxloop_noChanges:
; SCF
; .endzxloop:
; OUT (C),B
; RET
;----------------------------------------------------------------------;
;

View File

@ -306,6 +306,8 @@ INIT_CONFIG_ALL:
; LD (HL),0
; LDIR
EX AF,AF'
OUT (SLOT2),A
@ -325,6 +327,7 @@ INIT_CONFIG_ALL:
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
FN_TURBO:
CP 2

View File

@ -254,11 +254,16 @@ CLEAR_MEM: IN A,(SLOT3)
LD (HL),0
LDIR
; ª®¯¨à㥬 ZX vROM
LD IX,SYS_PAGE.Block_ID.vROM
LD HL,(SYS_PAGE.Block_ID.vROM) ; ­ã¦­® §­ ç¥­¨¥ ¢ L
LD H,high SYS_PAGE.RAM_TABLE
LD D,high MEMMAP2
LD BC,#01FF ;!HARDCODE 1 vROM RAM BLOCK ID
CALL .SAVE_RMD
;LD BC,#01FF ;!HARDCODE 1 vROM RAM BLOCK ID
CALL COPY_CHAIN
; LD IX,SYS_PAGE.Block_ID.vROM
; LD H,high SYS_PAGE.RAM_TABLE
; LD D,high MEMMAP2
; LD BC,#01FF ;!HARDCODE 1 vROM RAM BLOCK ID
; CALL .SAVE_RMD
; [x] 28/09/2024 Žâ¤¥«ì­ë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS.
LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000
CALL SWAP_RAM_DRIVES
@ -284,13 +289,15 @@ CLEAR_MEM: IN A,(SLOT3)
LD H,high SYS_PAGE.RAM_TABLE
LD D,high MEMMAP2
LD BC,SYS_PAGE.RAMD_KEYS.NUM*256+#FF
CALL .SAVE_RMD
CALL SAVE_CHAINS
; [x] 4/11/2023
; LD IX,SYS_PAGE.Sp_RAMD_KEYS
; LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM
; CALL .SAVE_RMD
;
.skip_save_rmd: CALL EMM.InitMem
LD HL,MEMMAP2
LD DE,SYS_PAGE.RAM_TABLE
CALL RESTORE_CHAINS
POP AF
JR Z,.skip_restore_rmd
@ -312,13 +319,13 @@ CLEAR_MEM: IN A,(SLOT3)
; JP SWAP_RAM_DRIVES
RET
;
.SAVE_RMD: LD A,(IX)
INC IX
OR A
LD L,A
CALL NZ,COPY_CHAIN
DJNZ .SAVE_RMD
RET
; SAVE_CHAINS: LD A,(IX)
; INC IX
; OR A
; LD L,A
; CALL NZ,COPY_CHAIN
; DJNZ SAVE_CHAINS
; RET
;
;
@ -366,22 +373,20 @@ CLEAR_MEM: IN A,(SLOT3)
; RETI
; ;
INT_OFF:
DI
LD A,#3F
LD I,A
IM 1
RET
INT_ON:
DI
LD A,+high INT_POINTER
LD I,A
LD HL,INT_HANDLER
LD (INT_POINTER),HL
IM 2
EI
RET
INT_OFF: DI
LD A,#3F
LD I,A
IM 1
RET
;
INT_ON: DI
LD A,+high INT_POINTER
LD I,A
LD HL,INT_HANDLER
LD (INT_POINTER),HL
IM 2
EI
RET
;
;
@ -403,38 +408,40 @@ EXIT_SETUP: CALL INT_OFF
LD A,B
JR NZ,.Set_Page41
CP 'X'
JR Z,.vROMs_Installed
;JR Z,.vROMs_Installed
;
.Set_Page41: CALL ZXMODE_SETUP.Set_Page41
.Set_Page41: CALL NZ,ZXMODE_SETUP.Set_Page41
.vROMs_Installed:
XOR A
LD BC,4*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! HARDCODE MANAGE_ZX_PAGES.GET_SCORP_RAM
RST ToBIOS_18 ;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
JR NC,.set_ZX_params
; XOR A
; LD BC,4*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! HARDCODE MANAGE_ZX_PAGES.GET_SCORP_RAM
; RST ToBIOS_18 ;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
; JR NC,.set_ZX_params
; ;
; CALL ScreenPOS.CRLF
; LD A,msgStrings.noMemZX
; LD E,COLORS.CGA.INK.RED
; CALL POSTMSC
; .loop_di: DI
; HALT
; JR .loop_di
;
CALL ScreenPOS.CRLF
LD A,msgStrings.noMemZX
LD E,COLORS.CGA.INK.RED
CALL POSTMSC
.loop_di: DI
HALT
JR .loop_di
.set_ZX_params: ;LD H,A ; Block_ID.vRAM
;LD DE,256*0 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
;LD A,(SYS_PAGE.Block_ID.vROM)
;LD L,A
;LD B,#FE ; !HARDCODE Port All Mode data
;LD A,%0000'0010
;EX AF,AF'
;XOR A
;
.set_ZX_params: LD H,A ; Block_ID.vRAM
;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
LD DE,256*0 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
LD A,(SYS_PAGE.Block_ID.vROM)
LD L,A
LD B,#FE ; !HARDCODE Port All Mode data
LD A,%0000'0010
EX AF,AF'
XOR A
;
;POP HL ; <20>… ­ã¦¥­.  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
XOR A
JP GOTO_SPECTRUM.FN
;XOR A
;JP GOTO_SPECTRUM.FN
;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
JP SPRINTER_ZX
; ELSE
;LD BC,#020E
@ -1456,26 +1463,26 @@ GET_ID: LD HL,memBUFFER.ID
;R01 RET
COPY_CHAIN: LD E,L
LDI
DEC L
LD L,(HL)
INC L
RET Z
DEC L
JR COPY_CHAIN
; COPY_CHAIN: LD E,L
; LDI
; DEC L
; LD L,(HL)
; INC L
; RET Z
; DEC L
; JR COPY_CHAIN
RESTORE_CHAINS: LD HL,MEMMAP2
LD DE,SYS_PAGE.RAM_TABLE
XOR A
.loop: CP (HL)
JR Z,.NoCopy
LD E,L
LDI
DEC L
.NoCopy: INC L
JR NZ,.loop
RET
; ; ‚室: HL - ª®¯¨ï RAM_TABLE ®âªã¤  ª®¯¨à®¢ âì
; RESTORE_CHAINS: LD DE,SYS_PAGE.RAM_TABLE
; XOR A
; .loop: CP (HL)
; JR Z,.NoCopy
; LD E,L
; LDI
; DEC L
; .NoCopy: INC L
; JR NZ,.loop
; RET
;---------------------------------------------------------------[]
;REGISTER #1E

View File

@ -573,7 +573,7 @@ msgStrings:
_mSetStr bootFail, tmp_Counter : DZ ' fail' ; !FIXIT strFail
_mSetStr bootOk, tmp_Counter : DZ ' OK'
_mSetStr afterBootFail, tmp_Counter : DZ 'PRESS <ENTER> TO REBOOT, <DEL> TO ENTER SETUP OR <ESC> TO ZX-MODE . . .'
_mSetStr noMemZX, tmp_Counter : DZ 'Error! No free memory to start ZX mode. Press CTRL+ALT+DEL or RESET.'
; _mSetStr noMemZX, tmp_Counter : DZ 'Error! No free memory to start ZX mode. Press CTRL+ALT+DEL or RESET.'
;
_mSetStr parLang, tmp_Counter : DZ 'Language (ï§ëª) : '
_mSetStr valLangEng, tmp_Counter : DZ 'English '
@ -733,7 +733,7 @@ msgRusStrings:
_mSetStrRus bootFail, tmp_Counter : DZ ' ­¥¢®§¬®¦¥­'
_mSetStrRus bootOk, tmp_Counter : DZ ' OK'
_mSetStrRus afterBootFail, tmp_Counter : DZ '<EFBFBD>Œˆ <ENTER> Ÿ <EFBFBD><EFBFBD>ƒ<EFBFBD>Šˆ, <DEL> Ÿ <EFBFBD><EFBFBD>ŽŠ ˆˆ <ESC> Ÿ ZX-MODE . . .'
_mSetStrRus noMemZX, tmp_Counter : DZ 'Žè¨¡ª ! <EFBFBD>¥¤®áâ â®ç­® ¯ ¬ï⨠¤«ï áâ àâ  ZX Mode. <EFBFBD> ¦¬¨â¥ CTRL+ALT+DEL ¨«¨ RESET.'
; _mSetStrRus noMemZX, tmp_Counter : DZ 'Žè¨¡ª ! <20>¥¤®áâ â®ç­® ¯ ¬ï⨠¤«ï áâ àâ  ZX Mode. <20> ¦¬¨â¥ CTRL+ALT+DEL ¨«¨ RESET.'
;
_mSetStrRus parLang, tmp_Counter : DZ 'Ÿ§ëª (language) : '
_mSetStrRus valLangEng, tmp_Counter : DZ 'English '

View File

@ -473,7 +473,7 @@ FN_ENTRANCE: ;!TODO A - TASK NUMBER
PUSH DE
;-----------------------------------;
; Sub FN #8x
BIT 7,B
.API: BIT 7,B
JR NZ,INIT_vROM ; B = 128
; Sub FN #4x
BIT 6,B
@ -517,8 +517,7 @@ FREE_vRAM: LD A,(SYS_PAGE.Block_ID.vRAM)
RET Z
LD C,BIOS.FreeMem
CALL ToBIOS_FromEXT
RET C
XOR A
LD A,0
LD (SYS_PAGE.Block_ID.vRAM),A
RET
;--------------;
@ -529,7 +528,7 @@ FREE_vROM: LD A,(SYS_PAGE.Block_ID.vROM)
RET Z
LD C,BIOS.FreeMem
CALL ToBIOS_FromEXT
RET C
PUSH AF
XOR A
LD (SYS_PAGE.Block_ID.vROM),A
;--------------;
@ -544,6 +543,7 @@ RES_FLAG_ZXvROM: ;
LD (Spec_Page.flag_X),A
EX AF,AF'
OUT (SLOT3),A
POP AF
RET
;-----------------------------------------------------------------------;
@ -636,7 +636,6 @@ GET_SCORP_RAM: CALL FREE_vRAM
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; [ ] free zx pages!
; <20><EFBFBD>…„€œ: ­®¬¥à vROM, vRAM, CONFIG_DE, FN_SYNC, PORT_ALL_MODE, MEM_TYPE
; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
@ -689,6 +688,7 @@ GOTO_SPECTRUM: LD A,BIOS.Error.NotSupported
EXX
;
LD A,C
PUSH BC
EXX
AND %0000'0100 ;!TODO § ¯®¬­¨âì/¢®ááâ ­®¢¨âì ª á⮬­ãî ¯ «¨âàã?
LD BC,BIOS.SET_PAL_INIT.ZX
@ -703,6 +703,9 @@ GOTO_SPECTRUM: LD A,BIOS.Error.NotSupported
LD BC,BIOS.LP_OPEN_S.ZX_32x24
CALL ToBIOS_FromEXT
;
LD BC,BIOS.SWAP_RAM_DRIVES.ZX
CALL ToBIOS_FromEXT
;
LD A,(SYS_PAGE.Block_ID.vRAM)
LD HL,SYS_PAGE.SHARED_BUFFER_256b
LD C,BIOS.GetMemBlkPages
@ -714,13 +717,17 @@ GOTO_SPECTRUM: LD A,BIOS.Error.NotSupported
;CP 16
;
LD D,B
EXX
POP BC
EXX
;.TASK_0: § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â
.START_TASK: XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
;
LD IY,.BASIC_128
JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
;!TODO ¥á«¨ 48ª â® ­¥ ­ã¦­®? ; [ ] free zx pages!
JR INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
;start_basic:
.BASIC_128: LD SP,#C000
LD HL,RES128_PROG

View File

@ -421,7 +421,10 @@ TURBO_ON:
CLEAR_RAM:
DI
LD C,BIOS.FullInit ; [ ] free zx pages!
; [ ] free zx pages!
LD BC,BIOS.REINIT.FREE_NO_ZX_MEM
;LD C,BIOS.FullInit
;
RST_to_BIOS
; ¯à¨ ®ç¨á⪥ ¯ ¬ï⨠¨§ ¬¥­î ᯥªâà㬠 ¢®§¢à â ¢ DSS ¯® CAD
; ¡ã¤¥â ®¯ á­ë¬ (RAM Blocks ®á¢®¡®¤¨«¨áì),
@ -477,11 +480,11 @@ Hardware_Menu:
Hardware_Menu_TAB:
; DW TR_DOS
; DW SP_DOS
DW SPRINTER_1X
DW AY8910_X
DW PENTAGON
DW SCORPION
DW PENTAGON512
DW SPRINTER_ZX
DW ZX_SPECTRUM_128
DW PENTAGON_128
DW SCORPION_256
DW PENTAGON_512
DW SPRINTER_reset ;SPRINTER_2X
DW RET_FROM_M
@ -517,117 +520,204 @@ Hardware_Menu_STR:
;**************************************************
;Sprinter ZX
SPRINTER_1X:
CALL _SET_CNF
LD C,BIOS.RST_CONF.SP97_1
RST_to_BIOS
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
JR AY8910_X.SET_DE
;[ ] free zx pages!
/*
LD H,A ; Block_ID.vRAM
;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
LD DE,256*0 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
LD A,(SYS_PAGE.Block_ID.vROM)
LD L,A
LD B,#FE ; !HARDCODE Port All Mode data
LD A,%0000'0010
EX AF,AF'
XOR A
;
;POP HL ; <20>… ­ã¦¥­.  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
XOR A
JP GOTO_SPECTRUM.FN
; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT
; H: ;!TODO Block_ID.vROM
; L: Block_ID.vRAM
; A: TASK Number = 0
; B: Port All Mode
;A'[1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX
; A'[2]: 0 - set default palette, 1 - don't change palette
; A'[7]: 0 - 320, 1 - 312 áâப
; 1 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 48k. 3 áâà ­¨æë
; 2 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128k. 2+6 áâà ­¨æë
; 3 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512k. 2+30 áâà ­¨æë
; 4 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ­¨æë
*/
SPRINTER_ZX: ;DI
;LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
;OUT (SYS_PORT.ROM),A
;LD SP,SYS_PAGE.SYS_SP
;LD A,SYS_PAGE
;OUT (SLOT3),A
;
LD A,BIOS.RST_CONF.SP97_1
LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0 ; !HARDCODE 4 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ­¨æë
LD BC,#FE*256 + %0000'0010 ; !HARDCODE Port All Mode data. int pent, set default palette, 320 áâப
JR PREPARE_TO_START_ZX
;
;ZX Spectrum
AY8910_X:
CALL _SET_CNF
LD C,BIOS.RST_CONF.AY8910
RST_to_BIOS
ZX_SPECTRUM_128:
;DI
;LD SP,SYS_PAGE.SYS_SP
;LD A,SYS_PAGE
;OUT (SLOT3),A
;
LD A,BIOS.RST_CONF.AY8910
LD DE,2*256 + CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.SCORP_RESET ; !HARDCODE 2 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128
LD BC,#FA*256 + %1000'0011
JR PREPARE_TO_START_ZX
LD A,#FA ; no ACC, Original waits
LD (Port_All_Mode),A
CALL CNF_SC_312
LD L,3 ;FN_SYNC.INT_ORIG
.SET_DE:
LD DE,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
CALL CONFIG_SET
CALL CLS ;!FIXIT ­ã¦­® «¨?
RET
;
SCORPION_256: ;DI
;LD SP,SYS_PAGE.SYS_SP
;LD A,SYS_PAGE
;OUT (SLOT3),A
;
LD A,BIOS.RST_CONF.AY8910
LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_1 ; !HARDCODE 4 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ­¨æë
LD BC,#FE*256 + %1000'0001
;JR PREPARE_TO_START_ZX
PREPARE_TO_START_ZX:
DI
EX AF,AF'
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
;
PUSH BC
PUSH DE
PUSH DE
;
LD C,A
RST_to_BIOS
;
POP DE
LD B,D
;LD C,BIOS.ZX_MEMORY_MANAGER
;RST_to_BIOS
CALL MANAGE_ZX_PAGES.FN_ENTRANCE.API
JR C,.loop_rst
;
POP DE
POP BC
;
LD D,0 ; !HARDCODE â®çª  ¢å®¤  ¢ <20>‡“ ᯥªâà㬠
LD H,A
LD A,(SYS_PAGE.Block_ID.vROM)
LD L,A
LD A,C
EX AF,AF'
XOR A
JP GOTO_SPECTRUM.FN
;
.loop_rst: LD BC,BIOS.REINIT.HARD_RESET
RST_to_BIOS
JR .loop_rst
SCORPION:
CALL _SET_CNF
CALL CNF_SC_312
LD L,1 ;FN_SYNC.INT_SCORP
LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON
JR CONFIG_SET
PENTAGON:
CALL _SET_CNF
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON
JR CONFIG_SET
PENTAGON_128: ;DI
;LD SP,SYS_PAGE.SYS_SP
;LD A,SYS_PAGE
;OUT (SLOT3),A
;
LD A,BIOS.RST_CONF.AY8910
LD DE,2*256 + CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.SCORP_RESET ; !HARDCODE 2 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128
LD BC,#FE*256 + %0000'0010
JR PREPARE_TO_START_ZX
PENTAGON512:
CALL _SET_CNF
CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512
; JR CONFIG_SET
CONFIG_SET:
PUSH DE
PENTAGON_512: ;DI
;LD SP,SYS_PAGE.SYS_SP
;LD A,SYS_PAGE
;OUT (SLOT3),A
;
LD A,BIOS.RST_CONF.AY8910
LD DE,3*256 + CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 + CNF_PORT.SCORP_RESET ; !HARDCODE 3 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512
LD BC,#FE*256 + %0000'0010
JR PREPARE_TO_START_ZX
EI
HALT
DI
; CONFIG_SET:
; PUSH DE
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD (SYS_PAGE.CONFIG_DE),DE
;!FIXIT ¥áâì «¨ á¬ëá« ¤¥« âì ¤® FN_SYNC?
LD A,(ZX_VARS.BORDER)
RRCA
RRCA
RRCA
AND 7
OUT (BorderColor),A
;
EX AF,AF'
OUT (SLOT3),A
; EI
; HALT
; DI
LD A,L
LD C,BIOS.FN_SYNC
RST_to_BIOS
; IN A,(SLOT3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD (SYS_PAGE.CONFIG_DE),DE
; ;!FIXIT ¥áâì «¨ á¬ëá« ¤¥« âì ¤® FN_SYNC?
; LD A,(ZX_VARS.BORDER)
; RRCA
; RRCA
; RRCA
; AND 7
; OUT (BorderColor),A
; ;
; EX AF,AF'
; OUT (SLOT3),A
LD HL,#4104 ;!HARDCODE
LD E,0
LD BC,256*4 + BIOS.LP_OPEN_S ;!HARDCODE
RST_to_BIOS
; LD A,L
; LD C,BIOS.FN_SYNC
; RST_to_BIOS
LD HL,#5104 ;!HARDCODE
LD E,0
LD BC,256*4 + BIOS.LP_OPEN_S
RST_to_BIOS
; LD HL,#4104 ;!HARDCODE
; LD E,0
; LD BC,256*4 + BIOS.LP_OPEN_S ;!HARDCODE
; RST_to_BIOS
POP DE
LD A,E
OUT (SYS_PORT.ROM),A
; LD HL,#5104 ;!HARDCODE
; LD E,0
; LD BC,256*4 + BIOS.LP_OPEN_S
; RST_to_BIOS
IM 1
EI
RET
; POP DE
; LD A,E
; OUT (SYS_PORT.ROM),A
; IM 1
; EI
; JP CLS ;!FIXIT ­ã¦­® «¨?
SPRINTER_reset:
CALL _SET_CNF
LD BC,256*BIOS.REINIT.SOFT_RESET + BIOS.REINIT
DI
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A
LD BC,BIOS.REINIT.SOFT_RESET
JP_to_BIOS
_SET_CNF:
DI
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A
RET
; _SET_CNF:
; ;DI
; LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
; OUT (SYS_PORT.ROM),A
; RET
CNF_SC_312:
LD A,Port_VSYNC.SET_312L
OUT (Port_VSYNC),A
RET
; CNF_SC_312:
; LD A,Port_VSYNC.SET_312L
; OUT (Port_VSYNC),A
; RET
CNF_PN_320:
LD A,Port_VSYNC.SET_320L
OUT (Port_VSYNC),A
RET
; CNF_PN_320:
; LD A,Port_VSYNC.SET_320L
; OUT (Port_VSYNC),A
; RET
; LD A,CNF_0
; OUT (SYS_PORT.ROM),A

View File

@ -170,9 +170,3 @@
ENDIF
ENDM
;
;
; MACRO
; ENDM
;