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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -573,6 +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 parLang, tmp_Counter : DZ 'Language (ï§ëª) : '
_mSetStr valLangEng, tmp_Counter : DZ 'English '
@ -732,6 +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 parLang, tmp_Counter : DZ 'Ÿ§ëª (language) : '
_mSetStrRus valLangEng, tmp_Counter : DZ 'English '
@ -837,4 +839,5 @@ 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"
MSG_TABLE.Size EQU MSG_RUS.size
;

View File

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

View File

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