DOING free zx pages
This commit is contained in:
parent
23eefc8625
commit
42c3d40f86
@ -1 +1 @@
|
||||
Subproject commit 18eb6779037e4e6291119d52cd7b8aba3b51de6c
|
||||
Subproject commit 7bb1538646ae7e8ba917d04b55e7396d74154df7
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
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_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
|
||||
|
||||
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:
|
||||
; | ç¨áŤŽ | § 缨ď |
|
||||
|
||||
@ -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
|
||||
;-----------------------------------------------------------------------;
|
||||
|
||||
@ -238,7 +238,7 @@ STEP1_GETCMOS:
|
||||
.choose:
|
||||
EI
|
||||
;
|
||||
CALL G_VALUE
|
||||
CALL GET_CMOS_VALUE
|
||||
OR A
|
||||
JR Z,AUTODETECT ;AUTO DETECT
|
||||
;
|
||||
|
||||
@ -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 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
|
||||
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâàã¬
|
||||
LD HL,Spec_Page.flag_X
|
||||
LD (HL),'X'
|
||||
DEC HL ; Spec_Page.flag_Z
|
||||
LD (HL),'Z'
|
||||
;
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
;
|
||||
@ -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
|
||||
;-----------------------------------------------------------------------;
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user