DOING free zx pages

This commit is contained in:
Tolik 2024-09-26 01:35:23 +10:00
parent 23eefc8625
commit 42c3d40f86
11 changed files with 756 additions and 704 deletions

@ -1 +1 @@
Subproject commit 18eb6779037e4e6291119d52cd7b8aba3b51de6c Subproject commit 7bb1538646ae7e8ba917d04b55e7396d74154df7

View File

@ -857,7 +857,6 @@ Setup_to_RAM: LD HL,Setup_Starter.Start
;JP PrepareToZX ;JP PrepareToZX
ENDMODULE ENDMODULE
PrepareToZX: ;CALL init_zx_roms PrepareToZX: ;CALL init_zx_roms
; Setup HDD drives for ZX Spectrum mode ; Setup HDD drives for ZX Spectrum mode
DI DI
@ -896,10 +895,12 @@ PrepareToZX: ;CALL init_zx_roms
CP #10 CP #10
JR C,.loop JR C,.loop
; ¢ë室 ¢ ०¨¬ zx spectrum ; ¢ë室 ¢ ०¨¬ zx spectrum
.start_zx: XOR A .start_zx:
IF FREE_ZX_PAGES IF FREE_ZX_PAGES
JP GOTO_SPEC ;
===========
ELSE ; [x] free zx pages! ELSE ; [x] free zx pages!
XOR A
OUT (SLOT2),A ; ZERO_PAGE OUT (SLOT2),A ; ZERO_PAGE
DEC A DEC A
OUT (SLOT1),A ; SHARED_PAGE OUT (SLOT1),A ; SHARED_PAGE

View File

@ -801,290 +801,259 @@ GEN_PAL2_L1:
; ;
;************************************ ;************************************
FN_SYNC: FN_SYNC: BIT 7,A
BIT 7,a JR Z,.old_mode
JR Z,.old_mode ;
LD H,A
ld h,a AND #60 ; check reserved bits
and #60 ; check reserved bits JR NZ,.error
jr nz,.error ;
BIT 2,H ; Set V-Sinc?
bit 2,h ; Set V-Sinc? JR NZ,.set_v_sinc
jr nz,.set_v_sinc ;
BIT 4,H ; Set Waits?
bit 4,h ; Set Waits? JR Z,.error ; Error - no parameters
jr z,.error ; Error - no parameters ;
.set_waits: LD A,H
.set_waits: AND 8 ; check waits. Z - no waits, NZ - waits
ld a,h LD H,Port_All_Mode.DEFAULT
and 8 ; check waits. Z - no waits, NZ - waits JR Z,.no_change
ld h,Port_All_Mode.DEFAULT LD H,Port_All_Mode.DEFAULT-Port_All_Mode.MEM_WAITS_OFF
jr z,1F .no_change: LD BC,(Port_All_Mode)
ld h,Port_All_Mode.DEFAULT - Port_All_Mode.MEM_WAITS_OFF IN A,(C)
1: ld bc,(Port_All_Mode) AND H
in a,(C) OUT (C),A
and h RET
out (C),a ;
RET .set_v_sinc: LD A,H
AND 3
.set_v_sinc: JR Z,.SetDefLines
ld a,h DEC A
and 3 JR Z,.SetCmosLines
jr z,.SetDefLines DEC A
dec a JR Z,.Set320Lines
jr z,.SetCmosLines ;JR .Set312Lines
dec a .set312lines: LD A,Port_VSYNC.SET_312L
jr z,.Set320Lines OUT (Port_VSYNC),A
; jr Set312Lines ;
LD C,SLOT3
.set312lines: IN B,(C)
ld a,Port_VSYNC.SET_312L LD A,SYS_PAGE
out (Port_VSYNC),a OUT (C),A
LD A,(SYS_PAGE.VSyncAndWaits)
LD C,SLOT3 AND 2
IN B,(C) LD (SYS_PAGE.VSyncAndWaits),A
LD A,SYS_PAGE OUT (C),B
OUT (C),A ;
ld a,(SYS_PAGE.VSyncAndWaits) .end_set_v_sinc:
and 2 BIT 4,H
ld (SYS_PAGE.VSyncAndWaits),a RET Z
OUT (C),B JR .set_waits
;
.end_set_v_sinc: .Set320Lines: LD A,Port_VSYNC.SET_320L
bit 4,h OUT (Port_VSYNC),A
ret z ;
jr .set_waits LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
.Set320Lines: OUT (C),A
ld a,Port_VSYNC.SET_320L LD A,(SYS_PAGE.VSyncAndWaits)
out (Port_VSYNC),a OR 1
LD (SYS_PAGE.VSyncAndWaits),A
LD C,SLOT3 OUT (C),B
IN B,(C) JR .end_set_v_sinc
LD A,SYS_PAGE ;
OUT (C),A .SetCmosLines: LD D,CMOS_CELL.ScreenSET
ld a,(SYS_PAGE.VSyncAndWaits) CALL CMOS_RD
or 1 ;
ld (SYS_PAGE.VSyncAndWaits),a AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ¢ ॣ¨áâॠA §­ ç¥­¨¥ ScreenSET
OUT (C),B JR Z,.SetDefLines
;
jr .end_set_v_sinc BIT 6,A
JR Z,.set312lines
.SetCmosLines: JR .Set320Lines
LD D,CMOS_CELL.ScreenSET ;
CALL CMOS_RD .old_mode: AND A
JR Z,.INT_DEF
AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ¢ ॣ¨áâॠA §­ ç¥­¨¥ ScreenSET DEC A
jr z,.SetDefLines JR Z,.INT_SCORP
DEC A
bit 6,a JR Z,.INT_PENT
jr z,.set312lines DEC A
JR Z,.INT_ORIG
jr .Set320Lines DEC A
JR Z,.INT_CMOS_SINC
.old_mode: ; [x] ª á⮬­ë© íªà ­ ¯® â ¡«¨æ¥ ¯®«ì§®¢ â¥«ï
AND A DEC A
JR Z,.INT_DEF JR Z,.PROG_SCR
DEC A ;
JR Z,.INT_SCORP .error: SCF
DEC A RET
JR Z,.INT_PENT ;
DEC A .SetDefLines: LD C,SLOT3
JR Z,.INT_ORIG IN B,(C)
DEC A LD A,SYS_PAGE
JR Z,.INT_CMOS_SINC OUT (C),A
; [x] ª á⮬­ë© íªà ­ ¯® â ¡«¨æ¥ ¯®«ì§®¢ â¥«ï LD A,(SYS_PAGE.VSyncAndWaits)
DEC A OUT (C),B
JR Z,.PROG_SCR AND 1
; JR Z,.set312lines
.error: SCF JR .Set320Lines
RET ;
.INT_DEF: LD C,SLOT3
.SetDefLines: IN B,(C)
LD C,SLOT3 LD A,SYS_PAGE
IN B,(C) OUT (C),A
LD A,SYS_PAGE LD DE,(SYS_PAGE.SCREEN_TABLE)
OUT (C),A OUT (C),B
ld a,(SYS_PAGE.VSyncAndWaits) ;
OUT (C),B CALL Test_SCREEN_TABLE
and 1 JR NZ,.INT_CMOS_SINC
jr z,.set312lines JP (IX)
jr .Set320Lines ;
.INT_CMOS_SINC: LD C,SLOT3
.INT_DEF: IN B,(C)
LD C,SLOT3 LD A,SYS_PAGE
IN B,(C) OUT (C),A
LD A,SYS_PAGE LD DE,(SYS_PAGE.SCREEN_TABLE)
OUT (C),A OUT (C),B
LD DE,(SYS_PAGE.SCREEN_TABLE) ;
OUT (C),B LD D,CMOS_CELL.ScreenSET
CALL CMOS_RD
CALL Test_CONFIG_ALL ;
jr nz,.INT_CMOS_SINC AND high CMOS_CELL.ScreenSET.Mask.Int ; ¢ ॣ¨áâॠA §­ ç¥­¨¥ ScreenSET
jp (IX) JR NZ,.skiptest
;
.INT_CMOS_SINC: CALL Test_SCREEN_TABLE
LD C,SLOT3 JP (IX) ; default int (non CMOS)
IN B,(C) ;
LD A,SYS_PAGE .skiptest: CP #10
OUT (C),A JR Z,.INT_SCORP ; scorpion int
LD DE,(SYS_PAGE.SCREEN_TABLE) ;
OUT (C),B CP #20
JR Z,.INT_PENT ; pentagon int
LD D,CMOS_CELL.ScreenSET ;
CALL CMOS_RD ;JR .INT_ORIG ; original int
.INT_ORIG: LD IX,SCREEN_TABLES.ORIGINAL
AND high CMOS_CELL.ScreenSET.Mask.Int ; ¢ ॣ¨áâॠA §­ ç¥­¨¥ ScreenSET JR .PROG_SCR
JR NZ,.skiptest ;
.INT_SCORP: LD IX,SCREEN_TABLES.SCORPION
CALL Test_CONFIG_ALL JR .PROG_SCR
JP (IX) ; default int (non CMOS) ;
.INT_PENT: LD IX,SCREEN_TABLES.PENTAGON
.skiptest: ;JR .PROG_SCR
cp #10 .PROG_SCR: IN A,(SLOT3)
jr z,.INT_SCORP ; scorpion int EX AF,AF'
LD A,SYS_PAGE
cp #20 OUT (SLOT3),A
jr z,.INT_PENT ; pentagon int EX AF,AF'
LD (SYS_PAGE.COPY_SLOT3),A
; jr ORIG_SINC ; original int IN A,(PORT_Y)
LD (SYS_PAGE.COPY_RGADR),A
.INT_ORIG: ;
LD IX,SCREEN_TABLES.ORIGINAL LD (SYS_PAGE.SCREEN_TABLE),IX
JR .PROG_SCR XOR A
.INT_SCORP:
LD IX,SCREEN_TABLES.SCORPION
JR .PROG_SCR
.INT_PENT:
LD IX,SCREEN_TABLES.PENTAGON
; JR PROG_SCR
.PROG_SCR:
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD (SYS_PAGE.COPY_SLOT3),A
IN A,(PORT_Y)
LD (SYS_PAGE.COPY_RGADR),A
LD (SYS_PAGE.SCREEN_TABLE),IX
XOR A
;----[START]-----------------------[? 1] ;----[START]-----------------------[? 1]
.loop_1: .loop_1: OUT (PORT_Y),A
OUT (PORT_Y),A EX AF,AF'
EX AF,AF' LD A,#50
OUT (SLOT3),A
LD A,#50 LD HL,#C300
OUT (SLOT3),A
LD HL,#C300
;----[START]------------------[v 2]----- ;----[START]------------------[v 2]-----
.loop_2: .loop_2: LD C,(IX)
LD C,(IX)
;----[START]-------------[v 3]---------- ;----[START]-------------[v 3]----------
.loop_3: .loop_3: ; ¢§ïâì  ¤à¥á ¤ ­­ëå ¤«ï § ¯¨á¨ ¢ á«ã¦¥¡­ãî ®¡« áâì íªà ­ 
; ¢§ïâì  ¤à¥á ¤ ­­ëå ¤«ï § ¯¨á¨ ¢ á«ã¦¥¡­ãî ®¡« áâì íªà ­  LD E,(IX+1) ; take adress of line X
LD E,(IX+1) ; take adress of line X LD D,(IX+2)
LD D,(IX+2)
;----[START]--------[v 4]--------------- ;----[START]--------[v 4]---------------
.loop_4: .loop_4: LD A,(DE) ; take counter in table 1, line X, column Y
LD A,(DE) ; take counter in table 1, line X, column Y INC DE
INC DE AND A
AND A JR Z,.loop_4_exit ; exit if zero-counter
JR Z,.loop_4_exit ; exit if zero-counter LD B,A
LD B,A LD A,(DE)
LD A,(DE) INC DE
INC DE
;----[START]---[v 5]-------------------- ;----[START]---[v 5]--------------------
.loop_5: .loop_5: LD (HL),A
LD (HL),A INC L
INC L LD (HL),0
LD (HL),0 INC L
INC L LD (HL),0
LD (HL),0 ;
EX AF,AF'
EX AF,AF' INC A
INC A OUT (PORT_Y),A
OUT (PORT_Y),A EX AF,AF'
EX AF,AF' ;
LD (HL),0
LD (HL),0 DEC L
DEC L LD (HL),0
LD (HL),0 DEC L
DEC L LD (HL),A
LD (HL),A ;
EX AF,AF'
EX AF,AF' INC A
INC A OUT (PORT_Y),A
OUT (PORT_Y),A EX AF,AF'
EX AF,AF' ;
DJNZ .loop_5
DJNZ .loop_5
;--------------[^ 5]-------------------- ;--------------[^ 5]--------------------
JR .loop_4 JR .loop_4
;-------------------[^ 4]--------------- ;-------------------[^ 4]---------------
.loop_4_exit: .loop_4_exit: INC HL ; next line
INC HL ; next line INC HL
INC HL INC HL
INC HL INC HL
INC HL IN A,(PORT_Y)
IN A,(PORT_Y) AND #80
AND #80 OUT (PORT_Y),A
OUT (PORT_Y),A DEC C
DEC C JR NZ,.loop_3
JR NZ,.loop_3
;------------------------[^ 3]---------- ;------------------------[^ 3]----------
INC IX ; next counter INC IX ; next counter
INC IX INC IX
INC IX INC IX
LD A,(IX) LD A,(IX)
AND A AND A
JR NZ,.loop_2 JR NZ,.loop_2
;-----------------------------[^ 2]----- ;-----------------------------[^ 2]-----
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD IX,(SYS_PAGE.SCREEN_TABLE) LD IX,(SYS_PAGE.SCREEN_TABLE)
;
EX AF,AF' EX AF,AF'
ADD A,#80 ADD A,#80
JR NC,.loop_1 JR NC,.loop_1
;----------------------------------[^ 1] ;----------------------------------[^ 1]
; Exit
; Exit LD A,(SYS_PAGE.COPY_RGADR)
LD A,(SYS_PAGE.COPY_RGADR) OUT (PORT_Y),A
OUT (PORT_Y),A LD A,(SYS_PAGE.COPY_SLOT3)
LD A,(SYS_PAGE.COPY_SLOT3) OUT (SLOT3),A
OUT (SLOT3),A .exit: OR A
.exit: OR A RET
RET ;
;DE - ᮤ¥à¦¨¬®¥ SYS_PAGE.SCREEN_TABLE
;DE - ᮤ¥à¦¨¬®¥ CONFIG_ALL Test_SCREEN_TABLE:
Test_CONFIG_ALL: LD HL,SCREEN_TABLES.SCORPION
LD HL,SCREEN_TABLES.SCORPION AND A
AND A SBC HL,DE
SBC HL,DE LD IX,FN_SYNC.INT_SCORP
ld IX,FN_SYNC.INT_SCORP RET Z
RET Z ;
LD HL,SCREEN_TABLES.ORIGINAL
LD HL,SCREEN_TABLES.ORIGINAL AND A
AND A SBC HL,DE
SBC HL,DE LD IX,FN_SYNC.INT_ORIG
ld IX,FN_SYNC.INT_ORIG RET Z
RET Z ;
LD HL,SCREEN_TABLES.PENTAGON
LD HL,SCREEN_TABLES.PENTAGON AND A
AND A SBC HL,DE
SBC HL,DE LD IX,FN_SYNC.INT_PENT
ld IX,FN_SYNC.INT_PENT RET Z
RET Z AND A
and a RET
RET
;--- Screen data table 1: counter1, data1 .. counterX, dataX ;--- Screen data table 1: counter1, data1 .. counterX, dataX
SCREEN_TABLES: SCREEN_TABLES:
; | ç¨áŤŽ | §­ çĽ­¨ď | ; | ç¨áŤŽ | §­ çĽ­¨ď |

View File

@ -10,7 +10,16 @@
; SLOT1 = 5 ; SLOT1 = 5
; SLOT2 = 2 ; SLOT2 = 2
; SLOT3 = 0 '48kb',1,2,3,4,5,6,7 '128kb',8,9,10,11,12,13,14,15 '256kb' ; SLOT3 = 0 '48kb',1,2,3,4,5,6,7 '128kb',8,9,10,11,12,13,14,15 '256kb'
;
; ¤«ï ¢å®¤  ¢ ०¨¬ ᯥªâà㬠:
; 0. <20>஢¥àª  ¬¥âª¨ ZX
; 1. CONFIG_DE.CNF_PORT ’¨¯ â çª¨, ª ª ¨­¨â¨âì ¯ ¬ïâì, à §¬¥à އ“, âãà¡ 
; 2. CONFIG_DE.ZX_START áâà ­¨æ  vROM ¤«ï § ¯ã᪠
; 3. <20> áâனª¨ íªà ­  (INT, Sync)
; 4. ’®à¬®¦¥­¨¥ ¯ ¬ï⨠(port all mode)
; 5. Block_ID.vROM
; 6. Block_ID.vRAM
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; ; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
@ -53,9 +62,12 @@
; ;
;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨ ;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨
FN_ENTRANCE: ;!TODO A - TASK NUMBER FN_ENTRANCE: ;!TODO A - TASK NUMBER
AND A
LD A,BIOS.Error.NotSupported
SCF
RET Z
;
EXX EXX
CALL GET_ZX_TASK_DATA
;
LD C,SLOT3 LD C,SLOT3
IN B,(C) IN B,(C)
LD A,SYS_PAGE LD A,SYS_PAGE
@ -100,24 +112,26 @@ FN_ENTRANCE: ;!TODO A - TASK NUMBER
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
; <20>¥ ¯®àâ¨âì DE ; <20>¥ ¯®àâ¨âì DE
;‚室: A - TASK NUMBER ;‚室: A - TASK NUMBER
GET_ZX_TASK_DATA: ; GET_ZX_TASK_DATA:
GET_ZX_TASK_DATA_OFFSET ; GET_ZX_TASK_DATA_OFFSET
ADD A,_ZX_TASK_DATA ; ADD A,_ZX_TASK_DATA
LD C,A ; LD C,A
LD B,0 ; LD B,0
LD IX,SYS_PAGE.ZX_TASK.CURRENT ; LD IX,SYS_PAGE.ZX_TASK.CURRENT
ADD IX,BC ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨ ; ADD IX,BC ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨
RET ; RET
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;‚室: A - TASK NUMBER FREE_vMEMORY: LD A,(SYS_PAGE.Block_ID.vROM)
FREE_vMEMORY: LD D,(IX + _ZX_TASK_DATA.vROM_ID)
LD A,(IX + _ZX_TASK_DATA.vRAM_ID)
CALL EMM.FreeMem CALL EMM.FreeMem
LD A,D LD A,(SYS_PAGE.Block_ID.vRAM)
CALL EMM.FreeMem CALL EMM.FreeMem
;
LD HL,#FFFF
LD (SYS_PAGE.Block_ID.vROM),HL
;
JP RES_FLAG_ZXvROM JP RES_FLAG_ZXvROM
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
@ -128,33 +142,33 @@ FREE_vMEMORY: LD D,(IX + _ZX_TASK_DATA.vROM_ID)
;‚ë室: H - vRAM block ID ;‚ë室: H - vRAM block ID
; L - vROM block ID ; L - vROM block ID
GET_RAMBLOCK_IDs: GET_RAMBLOCK_IDs:
LD H,(IX + _ZX_TASK_DATA.vRAM_ID) LD HL,(SYS_PAGE.Block_IDs)
LD L,(IX + _ZX_TASK_DATA.vROM_ID)
RET RET
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;‚室: HL - ¡«®ª áâà ­¨æ ­  ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤  11 èâ.) ;‚室: HL - ¡ãä¥à áâà ­¨æ (SLOT1..SLOT2) ­  ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤  11 èâ.)
; A - TASK NUMBER ; <09>¥à¢ë© ¡ ©â ᯨ᪠ - RAM BLOCK ID. „ «¥¥ ª ª 㣮¤­® ­®¬¥à 
INIT_vROM: LD A,(IX + _ZX_TASK_DATA.vROM_ID) ; áâà ­¨æ ¤«ï ª ¦¤®£® ⨯  áâà ­¨æë vROM. …᫨ ª ª ï-â® áâà ­¨æ 
; vROM ­¥ ¨á¯®«ì§ã¥âáï, â® áâ ¢¨âáï #FF
INIT_vROM: LD A,(SYS_PAGE.Block_ID.vROM)
CP (HL) CP (HL)
EX DE,HL EX DE,HL
CALL NZ,EMM.FreeMem CALL NZ,EMM.FreeMem
EX DE,HL EX DE,HL
; ;
LD A,(HL) LD A,(HL)
LD (IX + _ZX_TASK_DATA.vROM_ID),A LD (SYS_PAGE.Block_ID.vROM),A
INC HL
; ãáâ ­®¢ª  ¯®à⮢ ROM ; ãáâ ­®¢ª  ¯®à⮢ ROM
LD DE,.PORTS LD DE,.PORTS
LD B,.PORTS.Size LD B,.PORTS.Size
.loop: PUSH BC .loop: PUSH BC
LD A,(HL) LD A,(HL)
INC HL INC HL
AND A CP #FF
JR Z,.not_Spec_Page JR NZ,.not_Spec_Page
LD A,Spec_Page ;!FIXIT ¨«¨ ®áâ ¢¨âì? LD A,Spec_Page
.not_Spec_Page: LD B,A .not_Spec_Page: LD B,A
LD A,(DE) LD A,(DE)
INC DE INC DE
@ -165,35 +179,48 @@ INIT_vROM: LD A,(IX + _ZX_TASK_DATA.vROM_ID)
POP DE POP DE
POP BC POP BC
DJNZ .loop DJNZ .loop
; ãáâ ­®¢ª  ¬¥âª¨ ZX ¥á«¨ à ¬¡«®ª ­¥ #FF
LD A,(SYS_PAGE.Block_ID.vROM)
INC A
RET Z
; ;
.set_ZX_flag: IN A,(SLOT3)
LD D,A
LD A,Spec_Page
OUT (SLOT3),A
;
LD HL,'XZ'
LD (Spec_Page.flag_Z),HL
;
LD A,D
OUT (SLOT3),A
RET RET
; ;
.PORTS: DB ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 .PORTS: DB ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128
DB ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 DB ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48
DB ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS DB ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS
DB ACEX.vROM.BIOS ; ROM-ID - EXPANSION DB ACEX.vROM.EXPANSION ; ROM-ID - EXPANSION
DB ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 DB ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1
DB ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 DB ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2
DB ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2 DB ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2
DB ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2 DB ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2
DB ACEX.vROM.TR_DOS_2 ; TR-DOS - 2 DB ACEX.vROM.TR_DOS_2 ; TR-DOS - 2
DB ACEX.vROM.BIOS_2 ; BIOS (ZX_EXP) - 2 DB ACEX.vROM.EXPANSION_2 ; BIOS (ZX_EXP) - 2
.PORTS.Size EQU $-.PORTS .PORTS.Size EQU $-.PORTS
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
/*
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ ;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ
; E - 0 = 128kb, 1 = 512kb ; E - 0 = 128kb, 1 = 512kb
INIT_PENT_vRAM: DI INIT_vRAM: XOR A
XOR A
.set_1ffd: LD BC,#1FFD .set_1ffd: LD BC,#1FFD
OUT (C),A OUT (C),A
; set 128 ; set 128
LD B,#7F LD B,#7F
LD D,A LD D,%0000'0000
CALL SET_7FFD CALL SET_7FFD
; ;
XOR A XOR A
@ -201,8 +228,8 @@ INIT_PENT_vRAM: DI
BIT 3,E ; 128/512 BIT 3,E ; 128/512
RET Z RET Z
; set 128 + 384 ; set 128 + 384
LD A,SYS_PORT.CNF_512 ;LD A,SYS_PORT.CNF_512
OUT (SYS_PORT.ROM),A ;OUT (SYS_PORT.ROM),A
; ;
LD D,%0100'0000 LD D,%0100'0000
CALL SET_7FFD CALL SET_7FFD
@ -216,7 +243,6 @@ INIT_PENT_vRAM: DI
RET RET
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;!FIXIT ª®áïª á® á⥪®¬ ¢ SLOT3
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ ;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ
; D - ­ ç «ì­®¥ §­ ç¥­¨¥ ¤«ï 7FFD ; D - ­ ç «ì­®¥ §­ ç¥­¨¥ ¤«ï 7FFD
@ -229,24 +255,30 @@ SET_7FFD: LD A,(HL)
JR Z,SET_7FFD JR Z,SET_7FFD
RET RET
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
*/
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
ZX_MEMORY:
.MODE_48k EQU 3
.MODE_128k EQU 3+5
.MODE_256k EQU 3+13
.MODE_512k EQU 3+29
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï âàñå áâà ­¨æ އ“ 48k ;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï âàñå áâà ­¨æ އ“ 48k
GET_48k_MEM: LD D,3+1 GET_48k_MEM: LD D,ZX_MEMORY.MODE_48k
JR GET_XXX_MEM JR GET_XXX_MEM
;‚믮«­ï¥âáï ¤«ï ¨­¨â  3 áâà ­¨æ އ“ 48k ¨ 29 áâà ­¨æ އ“ Pent512k ;‚믮«­ï¥âáï ¤«ï ¨­¨â  3 áâà ­¨æ އ“ 48k ¨ 29 áâà ­¨æ އ“ Pent512k
GET_512k_MEM: LD D,3+29 GET_512k_MEM: LD D,ZX_MEMORY.MODE_512k
JR GET_XXX_MEM JR GET_XXX_MEM
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï 3 áâà ­¨æ އ“ 48k ¨ 5 áâà ­¨æ އ“ 128k â ç¥ª ;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï 3 áâà ­¨æ އ“ 48k ¨ 5 áâà ­¨æ އ“ 128k â ç¥ª
GET_128k_MEM: LD D,3+5 GET_128k_MEM: LD D,ZX_MEMORY.MODE_128k
;JR GET_XXX_MEM ;JR GET_XXX_MEM
GET_XXX_MEM: CALL FREE_vRAM GET_XXX_MEM: CALL FREE_vRAM
.init: LD B,D .init: LD B,D
CALL EMM.GetMem CALL EMM.GetMem
RET C RET C
LD (IX + _ZX_TASK_DATA.vRAM_ID),A LD (SYS_PAGE.Block_ID.vRAM),A
RET RET
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
@ -254,9 +286,9 @@ GET_XXX_MEM: CALL FREE_vRAM
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
FREE_vRAM: XOR A FREE_vRAM: XOR A
LD C,A LD C,A
OR (IX + _ZX_TASK_DATA.vRAM_ID) OR (SYS_PAGE.Block_ID.vRAM)
RET Z RET Z
LD (IX + _ZX_TASK_DATA.vRAM_ID),C LD (SYS_PAGE.Block_ID.vRAM),C
JP EMM.FreeMem JP EMM.FreeMem
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
@ -269,7 +301,7 @@ GET_SCORP_RAM: CALL FREE_vRAM
; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠ ; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠
XOR A XOR A
LD DE,#F0D0 ; ¤«ï 䨫ìâà . #F0 - ¬ áª , #D0 - áâà ­¨æë ISA #D0..#DF LD DE,#F0D0 ; ¤«ï 䨫ìâà . #F0 - ¬ áª , #D0 - áâà ­¨æë ISA #D0..#DF
LD BC,8*256 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª  LD BC,256*ZX_MEMORY.MODE_256k/2 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª 
LD HL,SYS_PAGE.RAM_TABLE LD HL,SYS_PAGE.RAM_TABLE
.allocate_loop: DEC L .allocate_loop: DEC L
JR Z,.error_no_mem JR Z,.error_no_mem
@ -287,12 +319,12 @@ GET_SCORP_RAM: CALL FREE_vRAM
AND A AND A
LD D,L LD D,L
; Get Pent128 mem ; Get Pent128 mem
LD B,3+5 LD B,ZX_MEMORY.MODE_128k
CALL EMM.GetMem CALL EMM.GetMem
; A - Pent128 mem block id ; A - Pent128 mem block id
LD B,D ; Scorp128 mem block id LD B,D ; Scorp128 mem block id
CALL EMM.MergeMemBlocks CALL EMM.MergeMemBlocks
LD (IX + _ZX_TASK_DATA.vRAM_ID),A LD (SYS_PAGE.Block_ID.vRAM),A
RET RET
; ;
; 䨫ìâà ¤«ï áâà ­¨æ ᪮௠ ; 䨫ìâà ¤«ï áâà ­¨æ ᪮௠
@ -334,17 +366,27 @@ GET_SCORP_RAM: CALL FREE_vRAM
; CF: 1 - ­¥ ¯¥à¥ãáâ ­ ¢«¨¢ âì ¯ «¨âàã ; CF: 1 - ­¥ ¯¥à¥ãáâ ­ ¢«¨¢ âì ¯ «¨âàã
/* /*
; ‚室: D[3..0]: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128, ; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨: ; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48 ; 4 - TR-DOS, 5 - BASIC 48
; D[7..4]: ;!TODO Port All Mode: b4 - Acc off/on ; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT
; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT ; H: ;!TODO Block_ID.vROM
; A: TASK Number ; L: Block_ID.vRAM
; CF: 1 - ­¥ ¯¥à¥ãáâ ­ ¢«¨¢ âì ¯ «¨âàã ; 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 áâப
*/ */
GOTO_SPEC: DI GOTO_SPEC: LD A,BIOS.Error.NotSupported
PUSH AF AND A
SCF
RET NZ
;
.FN: DI
EX AF,AF'
LD C,A
; set shared pages ; set shared pages
XOR A XOR A
OUT (SLOT2),A ; ZERO_PAGE OUT (SLOT2),A ; ZERO_PAGE
@ -354,42 +396,37 @@ GOTO_SPEC: DI
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD A,B LD (SYS_PAGE.CONFIG_DE),DE
LD (SYS_PAGE.CONFIG_DE.ZX_START),A LD (SYS_PAGE.Block_IDs),HL
; ;
POP DE EXX
LD SP,#C000 LD SP,#C000
LD A,D
CALL GET_ZX_TASK_DATA
LD A,(IX + _ZX_TASK_DATA.STATE)
RR E
JR NC,.save_state
OR %0000'0100
.save_state: LD (IX + _ZX_TASK_DATA.STATE),A
; ;
; [ ] free zx pages! ;!TODO ¥á«¨ § ¤ ç  ¯ãáâ ï, â® ¯¥à¢ë© ¨­¨â ; [ ] free zx pages! ;!TODO ¥á«¨ § ¤ ç  ¯ãáâ ï, â® ¯¥à¢ë© ¨­¨â
; ;
;!TODO ᤥ« âì  ªâ¨¢ æ¨î ¢¨­â  ¤«ï ¯ à ¬¥âà  ¨§ Setup ;!TODO ᤥ« âì  ªâ¨¢ æ¨î ¢¨­â  ¤«ï ¯ à ¬¥âà  ¨§ Setup
;!TODO ãáâ ­®¢¨âì £¤¥-­¨¡ã¤ì ­¨¦¥ áâíª ¨§ TASK ;!TODO ãáâ ­®¢¨âì £¤¥-­¨¡ã¤ì ­¨¦¥ áâíª ¨§ TASK
LD A,(SYS_PAGE.CONFIG_DE.ZX_START) ; LD A,(IX + _ZX_TASK_DATA.PORT_ALL_MODE)
LD (IX + _ZX_TASK_DATA.CONFIG_DE + 1),A ; LD BC,Port_All_Mode
; ; OUT (C),A
LD A,(IX + _ZX_TASK_DATA.PORT_ALL_MODE)
LD BC,Port_All_Mode
OUT (C),A
; ãáâ ­®¢ª  ¨­â  ; ãáâ ­®¢ª  ¨­â 
LD A,(IX + _ZX_TASK_DATA.FN_SYNC) EXX
AND %0000'0111 LD A,C
EXX
AND %0000'0011
CALL FN_SYNC CALL FN_SYNC
; ãáâ ­®¢ª  à §¢ñà⪨ ; ãáâ ­®¢ª  à §¢ñà⪨
LD A,(IX + _ZX_TASK_DATA.FN_SYNC) EXX
AND %1100'0000 LD A,C
OR %0010'0000 EXX
RLCA
RLCA RLCA
AND %0000'0001
OR %1000'0110
CALL FN_SYNC CALL FN_SYNC
EXX
LD A,C
EXX
; ;
LD A,(IX + _ZX_TASK_DATA.STATE)
AND %0000'0100 ;!TODO § ¯®¬­¨âì/¢®ááâ ­®¢¨âì ª á⮬­ãî ¯ «¨âàã? AND %0000'0100 ;!TODO § ¯®¬­¨âì/¢®ááâ ­®¢¨âì ª á⮬­ãî ¯ «¨âàã?
CALL Z,SET_TXT_PALETTE.ZX CALL Z,SET_TXT_PALETTE.ZX
; ;
@ -400,7 +437,7 @@ GOTO_SPEC: DI
LD HL,#5104 LD HL,#5104
CALL LP_SET_32.X CALL LP_SET_32.X
; .SHARED_BUFFER_256b ; .SHARED_BUFFER_256b
LD A,(IX + _ZX_TASK_DATA.vRAM_ID) LD A,(SYS_PAGE.Block_ID.vRAM)
LD HL,SYS_PAGE.SHARED_BUFFER_256b LD HL,SYS_PAGE.SHARED_BUFFER_256b
CALL EMM.GetMemBlkPages CALL EMM.GetMemBlkPages
;!FIXIT ;!FIXIT
@ -409,7 +446,7 @@ GOTO_SPEC: DI
;LD A,B ;LD A,B
;CP 16 ;CP 16
; ;
LD D,B
;.TASK_0: XOR A ; § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â ;.TASK_0: XOR A ; § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â
.START_TASK: LD IY,.BASIC_128 .START_TASK: LD IY,.BASIC_128
JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠 JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
@ -440,126 +477,66 @@ GOTO_SPEC: DI
;***************************************** ;*****************************************
;!TODO á⥪ ãáâ ­®¢«¥­ ¢® ¢â®à®© áâà ­¨æ¥, ­¥ ¨á¯®«ì§®¢ âì ¨«¨ ãáâ ­ ¢«¨¢ âì ¢ ¤àã£ãî! ;!TODO á⥪ ãáâ ­®¢«¥­ ¢® ¢â®à®© áâà ­¨æ¥, ­¥ ¨á¯®«ì§®¢ âì ¨«¨ ãáâ ­ ¢«¨¢ âì ¢ ¤àã£ãî!
; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum ; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum
; HL -  ¤à¥á ¡«®ª  áâà ­¨æ ¢ SLOT3 ; HL -  ¤à¥á ¡«®ª  áâà ­¨æ ¢ SYS_PAGE SLOT3
; B - ª®«¨ç¥á⢮ íâ¨å áâà ­¨æ ; D - ª®«¨ç¥á⢮ íâ¨å áâà ­¨æ
INIT_PAGES: INIT_PAGES: LD A,SYS_PAGE
LD A,SYS_PAGE OUT (SLOT1),A
OUT (SLOT1),A LD A,SYS_PORT.TURBO.ON + SYS_PORT.CNF_0 + SYS_PORT.CNF_512
; OUT (SYS_PORT.ROM),A
RES 7,H ;
RES 7,H
;
; AND A LD A,D
; LD E,A CP ZX_MEMORY.MODE_48k
; EX AF,AF' JR Z,.set_48k
; LD A,E ;
LD E,0 ; pent128
; BIT 7,A CP ZX_MEMORY.MODE_256k
; JR Z,SCORPION_256_MODE JR Z,.set_scorp
; BIT 6,A ;
; JR Z,PENTAGON_128_MODE CP ZX_MEMORY.MODE_128k
; JR Z,.set_pent
;PENTAGON_48_MODE: INC E
; AND #3C CP ZX_MEMORY.MODE_512k
; OUT (SLOT0),A JR Z,.set_pent
; INC A ;!FIXIT ®¡à ¡®âª  ®è¨¡ª¨
; OUT (SLOT1),A DI
; INC A HALT
; OUT (SLOT2),A ;
; INC A .set_scorp: CALL MANAGE_ZX_PAGES.INIT_vRAM
; LD D,A LD A,#10
; LD BC,#1FFD CALL MANAGE_ZX_PAGES.INIT_vRAM.set_1ffd
; XOR A ; A = 0, BC = #7FFD
; OUT (C),A LD B,#1F
; LD B,#7F OUT (C),A
; OUT (C),A JR .set_table
; LD A,D ;
; OUT (SLOT3),A .set_pent: CALL MANAGE_ZX_PAGES.INIT_vRAM
; JR INIT_VIDEO_REG ; ¬¥­ï¥¬ ¯®à冷ª ¤«ï ¯à®æ¥¤ãàë set_48k
.set_table: LD A,(SYS_PAGE.SHARED_BUFFER_256b+2 - #8000) ; SLOT2 page
================================================================ LD D,A
; PENTAGON_128_MODE: LD A,(SYS_PAGE.SHARED_BUFFER_256b+5 - #8000) ; SLOT1 page
; LD D,8 LD E,A
; AND #38 LD A,(SYS_PAGE.SHARED_BUFFER_256b+0 - #8000) ; SLOT0, SLOT3 page
; JR ALL_MODE JR .set_slots
;
; SCORPION_256_MODE: .set_48k: LD A,(HL) ; SLOT0, SLOT3 page
; LD D,16 INC HL
; AND #30 ; ¤® 4-å ᯥªâà㬮¢ LD E,(HL) ; SLOT1 page
INC HL
;ALL_MODE: LD D,(HL) ; SLOT2 page
LD A,(HL) ; áâà ­¨æ  ¤«ï SLOT1 ;
EX AF,AF' .set_slots: OUT (SLOT0),A
; OUT (SLOT3),A
INC HL LD A,E
DEC B OUT (SLOT1),A
LD A,(HL) LD A,D
OUT (SLOT2),A OUT (SLOT2),A
INC HL ;
OUT (SLOT3),A XOR A
OUT (SLOT0),A OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
JP (IY)
.loop: DEC D
LD A,D
RLCA
AND #10
LD BC,#1FFD
OUT (C),A
LD A,D
AND 7
OR #40
LD B,#7F
OUT (C),A
LD A,E
OUT (SLOT3),A
DEC E
DEC D
INC D
JR NZ,.loop
.INIT_VIDEO_REG:
XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
; OUT (RGSCR),A ; ॣ¨áâà íªà ­ 
;!TEST
; Restore old Spectrum Screen
;; LD HL,#4000
;; LD DE,#4000
;; LD BC,#1B00
;; LDIR
; EX AF,AF'
; BIT 6,A
; JR NZ,NO_SCREEN_ALT
; EX AF,AF'
; LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ 
; LD BC,#7FFD
; OUT (C),A
; Restore old Spectrum Screen 2
;; LD HL,#C000
;; LD DE,#C000
;; LD BC,#1B00
;; LDIR
; XOR A
; LD BC,#7FFD
; OUT (C),A
;
EX AF,AF'
.NO_SCREEN_ALT:
AND A
JP (IY)
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
ELSE ;--------------------------------------------------------------------[|] ELSE ;--------------------------------------------------------------------[|]
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
@ -750,64 +727,69 @@ NO_SCREEN_ALT:
;--------[ <20>ணࠬ¬ , à §¬¥é ¥¬ ï á #5B00 ¤«ï § ¯ã᪠ Spectrum ]--------; ;--------[ <20>ணࠬ¬ , à §¬¥é ¥¬ ï á #5B00 ¤«ï § ¯ã᪠ Spectrum ]--------;
RES128_PROG: RES128_PROG:
DISP ZX_VARS.PRINTER_BUFFER ;#5B00 DISP ZX_VARS.PRINTER_BUFFER ;#5B00
LD A,ROM.BIOS XOR A
OUT (SYS_PORT.RAM),A ; ‚®§¢à â ¢ 128k ROM OUT (SYS_PORT.RAM),A ; ‚®§¢à â ¢ 128k ROM
LD C,SLOT3 LD C,SLOT3
IN B,(C) IN B,(C)
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD DE,(SYS_PAGE.CONFIG_DE) LD DE,(SYS_PAGE.CONFIG_DE)
;XOR A OUT (C),B
;LD (SYS_PAGE.CONFIG_DE.ZX_START),A ;
OUT (C),B EXX
LD A,B
LD BC,#1FFD EXX
OUT (C),A ; Scorp ¯®àâ LD BC,Port_All_Mode
LD B,#7F OUT (C),A
OUT (C),A ; 128 ¯®àâ ;
XOR A
LD A,E ; ãáâ ­®¢ª  ª®­ä¨£ãà æ¨¨ ¨ ०¨¬  TURBO LD BC,#1FFD
OUT (SYS_PORT.RAM),A ; CONFIG_SET OUT (C),A ; Scorp ¯®àâ
LD B,#7F
INC D OUT (C),A ; 128 ¯®àâ
DEC D ;
; 0 ‚•Ž„ BASIC-128 LD A,E ; ãáâ ­®¢ª  ª®­ä¨£ãà æ¨¨ ¨ ०¨¬  TURBO
JP Z,0 OUT (SYS_PORT.RAM),A ; CONFIG_SET
; 1 ‚•Ž„ BASIC-48 ;
LD A,#10 INC D
OUT (C),A DEC D
DEC D ; 0 ‚•Ž„ BASIC-128
JP Z,0 JP Z,0
; 2 ‚•Ž„ TR-DOS ; 1 ‚•Ž„ BASIC-48
LD HL,0 LD A,#10
PUSH HL OUT (C),A
DEC D DEC D
JP Z,#3D29 JP Z,0
; 3 ‚•Ž„ EXPANSION ; 2 ‚•Ž„ TR-DOS
;!TODO ¯®ª  ­¥ à ¡®â ¥â. Page #45, BIOS (ZX_EXP) #E0 LD HL,0
XOR A PUSH HL
OUT (C),A DEC D
LD A,#02 JP Z,#3D29
LD B,#1F ; 3 ‚•Ž„ EXPANSION
OUT (C),A ;!TODO ¯®ª  ­¥ à ¡®â ¥â. Page #45, BIOS (ZX_EXP) #E0
DEC D XOR A
JP Z,0 OUT (C),A
; LD A,#02
XOR A LD B,#1F
OUT (C),A OUT (C),A
LD A,#30 DEC D
LD B,#7F JP Z,0
OUT (C),A ;
;!TEST XOR A
LD A,CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET OUT (C),A
OUT (CNF_PORT.OFF),A LD A,#30
; LD B,#7F
DEC D OUT (C),A
; 4 ‚•Ž„ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨ ;!TEST
JP Z,#3D29 LD A,CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET
; 5 ‚•Ž„ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨ OUT (CNF_PORT.OFF),A
JP 0 ;
DEC D
; 4 ‚•Ž„ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
JP Z,#3D29
; 5 ‚•Ž„ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
JP 0
ENT ENT
.Size EQU $-RES128_PROG .Size EQU $-RES128_PROG
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;

View File

@ -238,7 +238,7 @@ STEP1_GETCMOS:
.choose: .choose:
EI EI
; ;
CALL G_VALUE CALL GET_CMOS_VALUE
OR A OR A
JR Z,AUTODETECT ;AUTO DETECT JR Z,AUTODETECT ;AUTO DETECT
; ;

View File

@ -243,7 +243,7 @@ CMSERR:
; RST_to_BIOS ; RST_to_BIOS
RET RET
CLEARM: IN A,(SLOT3) CLEAR_MEM: IN A,(SLOT3)
PUSH AF PUSH AF
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
@ -276,7 +276,7 @@ CLEARM: IN A,(SLOT3)
; ;
CALL EMM.InitMem CALL EMM.InitMem
LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E
CALL G_VALUE CALL GET_CMOS_VALUE
OR A OR A
CALL NZ,CCHAIN CALL NZ,CCHAIN
POP AF POP AF
@ -361,29 +361,65 @@ INT_ON:
; ;
;------------------------[go to spectrum from bios]---------------------; ;------------------------[go to spectrum from bios]---------------------;
EXIT_SETUP: EXIT_SETUP: CALL INT_OFF
CALL INT_OFF CALL TRD_MOUNT ; !TEST 24/09/2024 ¯¥à¥­®á ¢ EXIT_SETUP (¯¥à¥¤ § ¯ã᪮¬ ZX)
;
; LD BC,#020E IF FREE_ZX_PAGES
; CALL G_VALUE LD A,Spec_Page
; OR A OUT (SLOT3),A
; LD A,#EC ;SPRINTER ;
; JR Z,XFLEX LD A,(Spec_Page.flag_Z)
; LD A,#EA ;SPECTRUM CP 'Z'
LD A,(Spec_Page.flag_X)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,B
JR NZ,.Set_Page41
CP 'X'
JR Z,.vROMs_Installed
;
.Set_Page41: CALL ZXMODE_SETUP.Set_Page41
.vROMs_Installed:
CALL MANAGE_ZX_PAGES.GET_SCORP_RAM ;!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
;
.set_ZX_params: LD L,A ; Block_ID.vRAM
======
;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
LD DE,256*0 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
;
JP GOTO_SPEC.FN
ELSE
;LD BC,#020E
;CALL GET_CMOS_VALUE
;OR A
;LD A,#EC ;SPRINTER
;JR Z,XFLEX
;LD A,#EA ;SPECTRUM
;XFLEX: ;XFLEX:
LD A,ROM.BIOS LD A,ROM.BIOS
OUT (SYS_PORT.ROM),A OUT (SYS_PORT.ROM),A
POP HL ; ¯¨å ¥âáï ¢ EXP.ASM ¢ ¯à®æ¥¤ãॠPOP HL ; ¯¨å ¥âáï ¢ EXP.ASM ¢ ¯à®æ¥¤ãà¥
JP (HL) JP (HL)
; LD (JMPHL),HL ;LD (JMPHL),HL
; LD C,#F3 ;LD C,#F3
; RST_to_BIOS ;RST_to_BIOS
; JMPHL EQU $+1 ;JMPHL EQU $+1
; JP #0000 ;JP #0000
ENDIF
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
INSTALL: INSTALL:
CALL INT_ON CALL INT_ON
CALL SET_CGA CALL SET_CGA
@ -449,8 +485,9 @@ INSTALL:
;BUILD: ;BUILD:
; db ', BIOS v', Disk_subsystem_ver_txt,0 ; !FIXIT ¬®¦¥â ¢®âª­ãâì ¢¬¥á⥠á msgStrings ? ; db ', BIOS v', Disk_subsystem_ver_txt,0 ; !FIXIT ¬®¦¥â ¢®âª­ãâì ¢¬¥á⥠á msgStrings ?
RSTID: DB "RESTART",0 RESTART_ID:
.size EQU $-RSTID .str: DZ "RESTART"
.size EQU $ - RESTART_ID.str
Start_again: Start_again:
ld sp,STACK-2 ld sp,STACK-2
@ -519,19 +556,20 @@ START:
POP BC POP BC
OUT (C),B OUT (C),B
CALL TRQUICK
CALL FINSTAL ;CALL TRD_MOUNT ; !TEST 24/09/2024 ¯¥à¥­®á ¢ EXIT_SETUP (¯¥à¥¤ § ¯ã᪮¬ ZX)
CALL FDD_INSTAL
CALL ZXMODE_SETUP CALL ZXMODE_SETUP
CALL CLEARM CALL CLEAR_MEM
CALL RESCREEN CALL XY_SCREEN
;R06 ;R06
LD BC,CMOS_CELL.BootUpParams.Mask.QuickStartROM ;#010E LD BC,CMOS_CELL.BootUpParams.Mask.QuickStartROM ;#010E
CALL G_VALUE CALL GET_CMOS_VALUE
POP BC POP BC
INC B INC B
DEC B DEC B
JR NZ,QIGNORE ; १ã«ìâ â ¯à®¢¥àª¨ Space ¨§ exp.asm [space_check] JR NZ,IGNORE_QuickStartROM ; १ã«ìâ â ¯à®¢¥àª¨ Space ¨§ exp.asm [space_check]
PUSH AF PUSH AF
LD C,SLOT3 LD C,SLOT3
IN B,(C) IN B,(C)
@ -539,19 +577,19 @@ START:
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (C),A OUT (C),A
LD HL,SYS_PAGE.RESTART_ID LD HL,SYS_PAGE.RESTART_ID
LD DE,RSTID LD DE,RESTART_ID.str
LD B,RSTID.size LD B,RESTART_ID.size
CALL COMPARE CALL COMPARE_RESTART_ID
CALL NZ,SETRSTS CALL NZ,SET_RESTART_ID
POP BC POP BC
OUT (C),B OUT (C),B
JR Z,HOTST JR Z,YES_QuickStartROM
POP AF POP AF
JR QIGNORE JR IGNORE_QuickStartROM
SETRSTS: SET_RESTART_ID:
PUSH AF PUSH AF
LD HL,RSTID LD HL,RESTART_ID.str
LD DE,SYS_PAGE.RESTART_ID LD DE,SYS_PAGE.RESTART_ID
LD BC,RSTID.size LD BC,RSTID.size
LDIR LDIR
@ -560,11 +598,11 @@ SETRSTS:
POP AF POP AF
RET RET
HOTST: YES_QuickStartROM:
POP AF POP AF
OR A OR A
JP NZ,EXIT_SETUP JP NZ,EXIT_SETUP
QIGNORE: IGNORE_QuickStartROM:
CALL INSTALL CALL INSTALL
LD DE,#0528 LD DE,#0528
;CALL ScreenPOS.LOCAT ;CALL ScreenPOS.LOCAT
@ -577,11 +615,11 @@ QIGNORE:
;CALL ScreenPOS.LOCAT ;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE CALL LP_SET_PLACE
ERRSUM+1: ERRSUM+1:
LD A,#00 ;MEM Patch! LD A,#00
OR A OR A
JR Z,.ErrDateTime JR Z,.ErrDateTime
XOR A XOR A
ld (.ErrDateTime+1),a ; ¥á«¨ ª®­â஫쭠ï á㬬  ᫥⥫ , â® á®®¡é¥­¨¥ ® ªà¨¢ëå ¤ â¥/¢à¥¬¥­¨ ¢ ª¬®á ­¥ ¢ë¢®¤¨¬ LD (.ErrDateTime+1),A ; ¥á«¨ ª®­â஫쭠ï á㬬  ᫥⥫ , â® á®®¡é¥­¨¥ ® ªà¨¢ëå ¤ â¥/¢à¥¬¥­¨ ¢ ª¬®á ­¥ ¢ë¢®¤¨¬
LD A,msgStrings.cmosChecksumErr LD A,msgStrings.cmosChecksumErr
LD E,COLORS.CGA.INK.RED LD E,COLORS.CGA.INK.RED
CALL POSTMSC CALL POSTMSC
@ -710,7 +748,7 @@ ALT_BOOT:
;NO START DISK - RESTART / SETUP / ZX SPECTRUM mode ;NO START DISK - RESTART / SETUP / ZX SPECTRUM mode
LD BC,CMOS_CELL.Options.Mask.RebootMSG ;#021D LD BC,CMOS_CELL.Options.Mask.RebootMSG ;#021D
CALL G_VALUE CALL GET_CMOS_VALUE
OR A OR A
JP Z,EXIT_SETUP JP Z,EXIT_SETUP
@ -754,13 +792,13 @@ ENTER_SETUP:
XOR A XOR A
JP Start_again JP Start_again
COMPARE: COMPARE_RESTART_ID:
LD A,(DE) LD A,(DE)
CP (HL) CP (HL)
RET NZ RET NZ
INC HL INC HL
INC DE INC DE
DJNZ COMPARE DJNZ COMPARE_RESTART_ID
RET RET
; ????? ¯¥à¥­¥á⨠íâ® ¢ ä㭪樨 <20>ˆŽ? ; ????? ¯¥à¥­¥á⨠íâ® ¢ ä㭪樨 <20>ˆŽ?
@ -801,7 +839,7 @@ writeDateTimeToCmos: ;!FIXIT
CALL CMOS_WR CALL CMOS_WR
RET RET
RESCREEN: ;R06 XY_SCREEN: ;R06
LD A,CMOS_CELL.ScreenPosition LD A,CMOS_CELL.ScreenPosition
CALL READCMS CALL READCMS
LD B,A LD B,A
@ -922,7 +960,7 @@ PrepareToBOOT: ;CALL INT_ON
JP Z,RECOVERYstart JP Z,RECOVERYstart
DEC BC DEC BC
; ;
CALL G_VALUE CALL GET_CMOS_VALUE
LD B,DRIVE_CODES.SPRINTER.FDD LD B,DRIVE_CODES.SPRINTER.FDD
; FDD ; FDD
OR A OR A
@ -1084,7 +1122,7 @@ SYSID: DZ "Starting..."
FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD
FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD
FINSTAL: IN A,(SLOT3) FDD_INSTAL: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
@ -1097,7 +1135,7 @@ FINSTAL: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311 LD BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD ;#0311
CALL G_VALUE CALL GET_CMOS_VALUE
LD HL,FD720A LD HL,FD720A
OR A OR A
JR Z,.SETFD0 JR Z,.SETFD0
@ -1114,7 +1152,7 @@ FINSTAL: IN A,(SLOT3)
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
.NOFDD0: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11 .NOFDD0: LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11
CALL G_VALUE CALL GET_CMOS_VALUE
LD HL,FD720A LD HL,FD720A
OR A OR A
JR Z,.SETFD1 JR Z,.SETFD1
@ -1375,47 +1413,47 @@ NOCOPYC:
RET RET
;---------------------------------------------------------------[] ;---------------------------------------------------------------[]
TRQUICK:
;REGISTER #1E ;REGISTER #1E
; %0000'0011 - TR DOS A: Default / FDD / HDD / RMD ; %0000'0011 - TR DOS A: Default / FDD / HDD / RMD
; %0000'1100 - TR DOS B: Default / FDD / HDD / RMD ; %0000'1100 - TR DOS B: Default / FDD / HDD / RMD
; %0011'0000 - TR DOS C: Default / FDD / HDD / RMD ; %0011'0000 - TR DOS C: Default / FDD / HDD / RMD
; %1100'0000 - TR DOS D: Default / FDD / HDD / RMD ; %1100'0000 - TR DOS D: Default / FDD / HDD / RMD
LD BC,CMOS_CELL.TRDOSmount.Mask.A ;#031E
LD A,0 TRD_MOUNT: LD BC,CMOS_CELL.TRDOSmount.Mask.A ;#031E
CALL TRDOSX LD A,0
LD BC,CMOS_CELL.TRDOSmount.Mask.B ;#0C1E CALL .TRDOSX
LD A,1 LD BC,CMOS_CELL.TRDOSmount.Mask.B ;#0C1E
CALL TRDOSX LD A,1
LD BC,CMOS_CELL.TRDOSmount.Mask.C ;#301E CALL .TRDOSX
LD A,2 LD BC,CMOS_CELL.TRDOSmount.Mask.C ;#301E
CALL TRDOSX LD A,2
LD BC,CMOS_CELL.TRDOSmount.Mask.D ;#C01E CALL .TRDOSX
LD A,3 LD BC,CMOS_CELL.TRDOSmount.Mask.D ;#C01E
TRDOSX: ; PUSH AF LD A,3
; CALL G_VALUE .TRDOSX: ; PUSH AF
; POP BC ; CALL GET_CMOS_VALUE
; OR A ; POP BC
; RET Z ; OR A
; LD C,BIOS.FDD_TO_DRV ; RET Z
; DEC A ; LD C,BIOS.FDD_TO_DRV
; JP Z,ToBIOS_18 ; DEC A
; LD C,BIOS.HDD_TO_DRV ; JP Z,ToBIOS_18
; DEC A ; LD C,BIOS.HDD_TO_DRV
; JP Z,ToBIOS_18 ; DEC A
; SCF ; JP Z,ToBIOS_18
; RET ; SCF
PUSH AF ; RET
CALL G_VALUE PUSH AF
POP BC CALL GET_CMOS_VALUE
OR A POP BC
RET Z OR A
DEC A RET Z
JP Z,FDD_TO_DRV DEC A
DEC A JP Z,FDD_TO_DRV
JP Z,HDD_TO_DRV DEC A
SCF JP Z,HDD_TO_DRV
RET SCF
RET
;---------------------------------------------------------------[] ;---------------------------------------------------------------[]
@ -1528,20 +1566,15 @@ POSTLEN:
JP LP_SET_PLACE JP LP_SET_PLACE
SETLAND: SETLAND:
LD A,#0E ; !HARDCODE CMOS ï祩ª  options LD A,#0E ; !HARDCODE CMOS ï祩ª  options
CALL READCMS CALL READCMS ;!TODO ¯¥à¥¤¥« âì ­  GET_CMOS_VALUE
AND #04 ; !HARDCODE CMOS §­ ç¥­¨¥ ï§ëª  AND #04 ; !HARDCODE CMOS §­ ç¥­¨¥ ï§ëª 
JR NZ,.RUS LD HL,MSG_RUS
; JR NZ,.set
LD HL,MSG_ENG LD HL,MSG_ENG
LD DE,memBUFFER.Messages
LD BC,MSG_ENG.size
LDIR
RET
; ;
.RUS: LD HL,MSG_RUS .set: LD DE,memBUFFER.Messages
LD DE,memBUFFER.Messages LD BC,MSG_TABLE.Size
LD BC,MSG_RUS.size
LDIR LDIR
RET RET
@ -1600,7 +1633,7 @@ ZXMODE_SETUP: IN A,(SLOT3)
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD BC,CMOS_CELL.Options.Mask.LoadZXroms LD BC,CMOS_CELL.Options.Mask.LoadZXroms
CALL G_VALUE CALL GET_CMOS_VALUE
; ;
OR A OR A
JR Z,.init_41h JR Z,.init_41h
@ -1627,58 +1660,122 @@ ZXMODE_SETUP: IN A,(SLOT3)
LD R,A LD R,A
; ;
; Load ZX ROM's ; Load ZX ROM's
CALL init_zx_roms CALL MANAGE_ZX_PAGES.FREE_vMEMORY ;!FIXIT ­¥ â  áâà ­¨æ  ¢ SLOT3 ; [ ] free zx pages!
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâà㬠 LD B,3 ; !HARDCODE zx-rom number of pages
LD HL,Spec_Page.flag_X CALL EMM.GetMem
LD (HL),'X' JR C,.init_41h ;!FIXIT ¯¥ç â âì ®è¨¡ªã ; [ ] free zx pages!
DEC HL ; Spec_Page.flag_Z CALL init_zx_roms
LD (HL),'Z' IFN FREE_ZX_PAGES
; ; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâà㬠
LD HL,'XZ'
LD (Spec_Page.flag_Z),HL
ENDIF ;
.No_Need_To_Load_ZXROMS: .No_Need_To_Load_ZXROMS:
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
; ;
.init_41h: CALL init_zx_roms.init_41h .init_41h: CALL init_zx_roms.init_41h
LD A,SYS_PAGE
OUT (SLOT3),A
CALL .Set_Page41
;!FIXIT ãáâ ­®¢¨âì ¢® ¢á¥ vROM áâà ­¨æã #41 ; [ ] free zx pages!
JR .No_Need_To_Load_ZXROMS JR .No_Need_To_Load_ZXROMS
;
.Set_Page41: LD HL,SYS_PAGE.SHARED_BUFFER_256b + 11
LD DE,SYS_PAGE.SHARED_BUFFER_256b + 11-1
LD BC,11-1 ; !HARDCODE ª®«-¢® áâà ­¨æ vROM + RAM BLOCK ID
LD (HL),#FF
LDDR ; § ç¨é ¥¬
EX DE,HL
JP MANAGE_ZX_PAGES.INIT_vROM
; ;
;--------------------[copy zx-roms to zx-pages]-----------------; ;--------------------[copy zx-roms to zx-pages]-----------------;
; SLOT0 - ROM 8, sys_port - on. ; SLOT0 - ROM 8, sys_port - on.
; RAM SLOT0 - page 0 ; RAM SLOT0 - page 0
; RAM SLOT3 - Spec_Page
; ¤«ï ०¨¬  zx spectrum ; ¤«ï ०¨¬  zx spectrum
; !HARDCODE ­®¬¥à  áâà ­¨æ ¤«ï í¬ã«ïâ®à  <20>‡“ ; !HARDCODE ­®¬¥à  áâà ­¨æ ¤«ï í¬ã«ïâ®à  <20>‡“
init_zx_roms: IN A,(SLOT3) init_zx_roms: DI
;;;;;;;;
IF FREE_ZX_PAGES
;;;;;;;;
; <20>€ ‚•ŽŽ„… A = SYS_PAGE.Block_ID.vROM
; ¤®¡¨¢ ¥¬ ¡ãä¥à ¤® 11 ¡ ©â®¢ ¯ãáâ묨 áâà ­¨æ ¬¨
; ¢ ¡ãä¥à 㯠¤ãâ 1 RAM BLOCK ID, 3 áâà ­¨æë ¤«ï vROM ¨ #FF
LD HL,#FFFF
LD (memBUFFER.Shared + 5),HL ; !HARDCODE zx-rom number of pages
LD (memBUFFER.Shared + 7),HL ; !HARDCODE zx-rom number of pages
LD (memBUFFER.Shared + 9),HL ; !HARDCODE zx-rom number of pages
; ¯®«ãç ¥¬ ᯨ᮪ áâà ­¨æ ¤«ï vROM
LD HL,memBUFFER.Shared
LD (HL),A
INC HL
LD B,A
CALL EMM.GetMemBlkPages
;
LD A,SYS_PAGE
OUT (SLOT3),A
; ãáâ ­ ¢«¨¢ ¥¬ ­®¬¥à  áâà ­¨æ vROM ¢ ¯®àâë ALTERA
DEC HL
CALL MANAGE_ZX_PAGES.INIT_vROM
; Š®¯¨à㥬 ®¡à §ë ZX-ROM ¨§ <20>‡“ ¢ áâà ­¨æë vROM
LD A,SYS_PORT.EXTENSION
OUT (SYS_PORT.ROM),A
INC A ; !HARDCODE LD A,2
LD BC,+(3*2)*256 + SLOT3 ; !HARDCODE B = (zx-rom number of pages)*2
LD HL,memBUFFER.Shared + 1
.loop: OUTI
OUT (ROM.SLOT0),A
EXX
LD HL,0
LD DE,#C000
LD BC,#4000
LDIR
EXX
INC A
DJNZ .loop
; ¢®§¢à é ¥¬ áâà ­¨æë ­  ¬¥áâ®
XOR A
OUT (ROM.SLOT0),A
OUT (SYS_PORT.ROM),A
LD A,Spec_Page
OUT (SLOT3),A
;;;;;;;;
ELSE
;;;;;;;;
IN A,(SLOT3)
EX AF,AF' EX AF,AF'
; ;
DI LD A,SYS_PORT.EXTENSION
LD A,SYS_PORT.EXTENSION OUT (SYS_PORT.ROM),A
OUT (SYS_PORT.ROM),A INC A ; !HARDCODE LD A,2
INC A ;!HARDCODE LD A,2 LD B,3 ; !HARDCODE zx-rom number of pages
LD B,3 ; zx-rom number of pages
; ;
.loop: EXX .loop: EXX
; ;
out (ROM.SLOT0),a OUT (ROM.SLOT0),A
or %0100'0000 ; !HARDCODE ­®¬¥à  áâà ­¨æ ¤«ï í¬ã«ïâ®à  <20>‡“ OR %0100'0000 ; !HARDCODE ­®¬¥à  áâà ­¨æ ¤«ï í¬ã«ïâ®à  <20>‡“
out (SLOT3),a OUT (SLOT3),A
and %1011'1111 ; !HARDCODE ­®¬¥à  áâà ­¨æ ¤«ï í¬ã«ïâ®à  <20>‡“ AND %1011'1111 ; !HARDCODE ­®¬¥à  áâà ­¨æ ¤«ï í¬ã«ïâ®à  <20>‡“
; ;
LD HL,0 LD HL,0
LD DE,#C000 LD DE,#C000
LD BC,#4000 LD BC,#4000
LDIR LDIR
; ;
INC A INC A
EXX EXX
DJNZ .loop DJNZ .loop
; ;
xor a XOR A
out (ROM.SLOT0),a OUT (ROM.SLOT0),A
OUT (SYS_PORT.ROM),A OUT (SYS_PORT.ROM),A
EX AF,AF' EX AF,AF'
out (SLOT3),a OUT (SLOT3),A
; ;
;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
;!FIXIT ; [ ] free zx pages! ¯¥à¥¤¥« âì ­  ¢ë§®¢ FREE_ZX_PAGES.INIT_vROM
LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128
LD B,#42 ;!HARDCODE page LD B,#42 ;!HARDCODE page
CALL SET_PORTS CALL SET_PORTS
@ -1692,22 +1789,25 @@ init_zx_roms: IN A,(SLOT3)
CALL SET_PORTS CALL SET_PORTS
; ;
; í⨠áâà ­¨æë ¯®ª  ­¥ ¨á¯®«ì§ãîâáï ; í⨠áâà ­¨æë ¯®ª  ­¥ ¨á¯®«ì§ãîâáï
LD A,ACEX.vROM.BIOS ; ROM-ID - BIOS LD A,ACEX.vROM.EXPANSION ; ROM-ID - BIOS
;LD B,#45 ;!HARDCODE page ;LD B,#45 ;!HARDCODE page
LD B,#41 LD B,#41
CALL SET_PORTS CALL SET_PORTS
; ;
LD A,ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 LD A,ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1
;LD B,#46 ;!HARDCODE page ;LD B,#46 ;!HARDCODE page
LD B,#41 LD B,#41
CALL SET_PORTS CALL SET_PORTS
; ;
LD A,ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 LD A,ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2
;LD B,#47 ;!HARDCODE page ;LD B,#47 ;!HARDCODE page
LD B,#41 LD B,#41
CALL SET_PORTS CALL SET_PORTS
; ¬®¦­® § ¤¥©á⢮¢ âì ¥éñ 4 áâà ­¨æë ­  ¯®àâë #E4..#E7 ; ¬®¦­® § ¤¥©á⢮¢ âì ¥éñ 4 áâà ­¨æë ­  ¯®àâë #E4..#E7
; ;;;;;;;;
ENDIF
;;;;;;;;
.init_41h: ; § ¡¨âì FF- ¬¨ .init_41h: ; § ¡¨âì FF- ¬¨
LD HL,#C000 LD HL,#C000
LD DE,#C001 LD DE,#C001

View File

@ -188,7 +188,7 @@ DEF_VAL:
;--------------------------------------- ;---------------------------------------
RestartSetup: RestartSetup:
;setXYpos ;setXYpos
CALL RESCREEN CALL XY_SCREEN
;setLang ;setLang
CALL SETLAND CALL SETLAND
;setVsinc ;setVsinc
@ -604,7 +604,7 @@ PITEM: LD E,(HL) ; x-coordinate
;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^] ;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\-[^]
; <20>¥ ¯®àâ¨â HL ; <20>¥ ¯®àâ¨â HL
G_VALUE: GET_CMOS_VALUE:
PUSH BC PUSH BC
LD A,C LD A,C
CALL READCMS CALL READCMS
@ -732,8 +732,8 @@ SETDEF: ;!TODO
LD B,0 LD B,0
CALL WRITCMS CALL WRITCMS
LD A,CMOS_CELL.ZX_CONFIG LD A,CMOS_CELL.ZX_RUN_ROM
LD B,CMOS_CELL.ZX_CONFIG.ZX_Sprinter LD B,CMOS_CELL.ZX_RUN_ROM.BASIC_128
CALL WRITCMS CALL WRITCMS
CALL CHEKSUM CALL CHEKSUM
@ -823,7 +823,7 @@ SetTime:
ENDIF ENDIF
setXYpos: setXYpos:
JP RESCREEN JP XY_SCREEN
setVsinc: setVsinc:
ld a,CMOS_CELL.ScreenSET ld a,CMOS_CELL.ScreenSET

View File

@ -205,7 +205,7 @@ PRSYM: LD B,1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOGOTYPE: CALL SHOW_LOGO LOGOTYPE: CALL SHOW_LOGO
LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay
CALL G_VALUE CALL GET_CMOS_VALUE
OR A OR A
JR Z,.EASYDLY ; Delay average JR Z,.EASYDLY ; Delay average
DEC A DEC A

View File

@ -573,6 +573,7 @@ msgStrings:
_mSetStr bootFail, tmp_Counter : DZ ' fail' ; !FIXIT strFail _mSetStr bootFail, tmp_Counter : DZ ' fail' ; !FIXIT strFail
_mSetStr bootOk, tmp_Counter : DZ ' OK' _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 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 parLang, tmp_Counter : DZ 'Language (ï§ëª) : ' _mSetStr parLang, tmp_Counter : DZ 'Language (ï§ëª) : '
_mSetStr valLangEng, tmp_Counter : DZ 'English ' _mSetStr valLangEng, tmp_Counter : DZ 'English '
@ -732,6 +733,7 @@ msgRusStrings:
_mSetStrRus bootFail, tmp_Counter : DZ ' ­¥¢®§¬®¦¥­' _mSetStrRus bootFail, tmp_Counter : DZ ' ­¥¢®§¬®¦¥­'
_mSetStrRus bootOk, tmp_Counter : DZ ' OK' _mSetStrRus bootOk, tmp_Counter : DZ ' OK'
_mSetStrRus afterBootFail, tmp_Counter : DZ '<EFBFBD>Œˆ <ENTER> Ÿ <EFBFBD><EFBFBD>ƒ<EFBFBD>Šˆ, <DEL> Ÿ <EFBFBD><EFBFBD>ŽŠ ˆˆ <ESC> Ÿ ZX-MODE . . .' _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 parLang, tmp_Counter : DZ 'Ÿ§ëª (language) : ' _mSetStrRus parLang, tmp_Counter : DZ 'Ÿ§ëª (language) : '
_mSetStrRus valLangEng, tmp_Counter : DZ 'English ' _mSetStrRus valLangEng, tmp_Counter : DZ 'English '
@ -837,4 +839,5 @@ MSG_RUS:
MSG_RUS.size EQU $-MSG_RUS MSG_RUS.size EQU $-MSG_RUS
;================================================================================================================================== ;==================================================================================================================================
ASSERT MSG_ENG.size = MSG_RUS.size, "ERROR IN MESSAGE STRINGS: RUS and ENG do not match" ASSERT MSG_ENG.size = MSG_RUS.size, "ERROR IN MESSAGE STRINGS: RUS and ENG do not match"
MSG_TABLE.Size EQU MSG_RUS.size
; ;

View File

@ -42,13 +42,13 @@ RET_FROM_BIOS_TO_BASIC48:
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
; ª®íä䍿¨¥­â ᬥ饭¨ï ¯® ­®¬¥àã â áª¨ ; ª®íä䍿¨¥­â ᬥ饭¨ï ¯® ­®¬¥àã â áª¨
MACRO GET_ZX_TASK_DATA_OFFSET ; MACRO GET_ZX_TASK_DATA_OFFSET
RLCA ; RLCA
RLCA ; RLCA
RLCA ; RLCA
RLCA ; RLCA
AND #30 ; ­®¢ ï § ¤ ç  0..3 ; AND #30 ; ­®¢ ï § ¤ ç  0..3
ENDM ; ENDM
;------[ „…˜ˆ<CB86>ˆŸ ŠŽŒ€<C592><EFBFBD>މ <E28098>ŽŠˆ,<2C><EFBFBD>…„€<E2809E><E282AC>މ „‹Ÿ "EXPANSION" ]-------; ;------[ „…˜ˆ<CB86>ˆŸ ŠŽŒ€<C592><EFBFBD>މ <E28098>ŽŠˆ,<2C><EFBFBD>…„€<E2809E><E282AC>މ „‹Ÿ "EXPANSION" ]-------;
@ -75,14 +75,12 @@ COMAND_OK: ;
JP Z,MENU_S1 JP Z,MENU_S1
CP ZX_Char.carriage_return CP ZX_Char.carriage_return
JP Z,MENU_S1 JP Z,MENU_S1
;
AND %1101'1111
CP 'I' CP 'I'
JR Z,COMAND_ISD JR Z,COMMAND_HARDWARE_MENU
CP 'i' ;CP 'T'
JR Z,COMAND_ISD ;JR Z,TASK_SWITCH
CP 'T'
JR Z,TASK_SWITCH
CP 't'
JR Z,TASK_SWITCH
DEC HL DEC HL
POP BC POP BC
JP BASIC_MENU JP BASIC_MENU
@ -91,21 +89,20 @@ MENU_S1:
CALL SERVICE CALL SERVICE
JP SW_ROM_1 JP SW_ROM_1
COMAND_ISD: COMMAND_HARDWARE_MENU:
LD A,(HL) LD A,(HL)
INC HL INC HL
AND %1101'1111
CP 'S' CP 'S'
JP Z,COMAND_ISD2 RET NZ
CP 's' ;
JP Z,COMAND_ISD2
RET
COMAND_ISD2:
POP BC POP BC
CALL ISDOS CALL Hardware_Menu
JP SW_ROM_1 JP SW_ROM_1
/*
;!TODO ¯¥à¥¤¥« âì ¯®¤ ¯¥à¥ª«î祭¨¥ ­  à §­ë¥ ᯥªâàã¬ë á § ¯ã饭­ë¬¨ § ¤ ç ¬¨ ;!TODO ¯¥à¥¤¥« âì ¯®¤ ¯¥à¥ª«î祭¨¥ ­  à §­ë¥ ᯥªâàã¬ë á § ¯ã饭­ë¬¨ § ¤ ç ¬¨
TASK_SWITCH: TASK_SWITCH:
; *** ‘®åà ­¨âì § ¤ çã *** ; *** ‘®åà ­¨âì § ¤ çã ***
PUSH IY PUSH IY
@ -231,7 +228,7 @@ TASK_RESTORE:
NO_TASK: NO_TASK:
POP BC POP BC
JP SW_ROM_1 JP SW_ROM_1
*/
; 259F - ADRESS BASIC128 - MAIN_MENU ; 259F - ADRESS BASIC128 - MAIN_MENU
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;

View File

@ -461,20 +461,20 @@ CLEAR_RAM:
; JR SR_CL_R2 ; JR SR_CL_R2
;***************************** ;*****************************
; *** MENU IS-DOS *** ; *** MENU Hardware ***
;***************************** ;*****************************
ISDOS: Hardware_Menu:
LD HL,IS_TAB LD HL,Hardware_Menu_TAB
LD DE,IS_MENU LD DE,Hardware_Menu_STR
LD BC,IS_MENU.Size LD BC,Hardware_Menu_STR.Size
PUSH HL PUSH HL
CALL RUN_MENU CALL RUN_MENU
POP HL POP HL
CALL EXEC_PNT CALL EXEC_PNT
JR ISDOS JR Hardware_Menu
IS_TAB: Hardware_Menu_TAB:
; DW TR_DOS ; DW TR_DOS
; DW SP_DOS ; DW SP_DOS
DW SPRINTER_1X DW SPRINTER_1X
@ -486,7 +486,7 @@ IS_TAB:
DW RET_FROM_M DW RET_FROM_M
; DC - every last character of a string will have bit 7 set ; DC - every last character of a string will have bit 7 set
IS_MENU: Hardware_Menu_STR:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢ BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Hardware',#FF ; § £®«®¢®ª ¬¥­î BYTE 'Hardware',#FF ; § £®«®¢®ª ¬¥­î
DC 'Sprinter ZX ' DC 'Sprinter ZX '
@ -497,7 +497,7 @@ IS_MENU:
DC 'Restart ' DC 'Restart '
DC 'RETURN' DC 'RETURN'
DC " " ; ¬ àª¥à ª®­æ  DC " " ; ¬ àª¥à ª®­æ 
.Size EQU $-IS_MENU .Size EQU $ - Hardware_Menu_STR
;****************************** ;******************************
;SP_DOS: ;SP_DOS:
@ -554,14 +554,14 @@ PENTAGON:
CALL _SET_CNF CALL _SET_CNF
CALL CNF_PN_320 CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON
JR CONFIG_SET JR CONFIG_SET
PENTAGON512: PENTAGON512:
CALL _SET_CNF CALL _SET_CNF
CALL CNF_PN_320 CALL CNF_PN_320
LD L,2 ;FN_SYNC.INT_PENT LD L,2 ;FN_SYNC.INT_PENT
LD DE,CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 LD DE,CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512
; JR CONFIG_SET ; JR CONFIG_SET
CONFIG_SET: CONFIG_SET:
PUSH DE PUSH DE