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
|
;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
|
||||||
|
|||||||
@ -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)
|
|
||||||
and 2
|
|
||||||
ld (SYS_PAGE.VSyncAndWaits),a
|
|
||||||
OUT (C),B
|
|
||||||
|
|
||||||
.end_set_v_sinc:
|
.end_set_v_sinc:
|
||||||
bit 4,h
|
BIT 4,H
|
||||||
ret z
|
RET Z
|
||||||
jr .set_waits
|
JR .set_waits
|
||||||
|
;
|
||||||
|
.Set320Lines: LD A,Port_VSYNC.SET_320L
|
||||||
.Set320Lines:
|
OUT (Port_VSYNC),A
|
||||||
ld a,Port_VSYNC.SET_320L
|
;
|
||||||
out (Port_VSYNC),a
|
LD C,SLOT3
|
||||||
|
IN B,(C)
|
||||||
LD C,SLOT3
|
LD A,SYS_PAGE
|
||||||
IN B,(C)
|
OUT (C),A
|
||||||
LD A,SYS_PAGE
|
LD A,(SYS_PAGE.VSyncAndWaits)
|
||||||
OUT (C),A
|
OR 1
|
||||||
ld a,(SYS_PAGE.VSyncAndWaits)
|
LD (SYS_PAGE.VSyncAndWaits),A
|
||||||
or 1
|
OUT (C),B
|
||||||
ld (SYS_PAGE.VSyncAndWaits),a
|
JR .end_set_v_sinc
|
||||||
OUT (C),B
|
;
|
||||||
|
.SetCmosLines: LD D,CMOS_CELL.ScreenSET
|
||||||
jr .end_set_v_sinc
|
CALL CMOS_RD
|
||||||
|
;
|
||||||
.SetCmosLines:
|
AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ¢ ॣ¨áâॠA § 票¥ ScreenSET
|
||||||
LD D,CMOS_CELL.ScreenSET
|
JR Z,.SetDefLines
|
||||||
CALL CMOS_RD
|
;
|
||||||
|
BIT 6,A
|
||||||
AND high CMOS_CELL.ScreenSET.Mask.Sinc ; ¢ ॣ¨áâॠA § 票¥ ScreenSET
|
JR Z,.set312lines
|
||||||
jr z,.SetDefLines
|
JR .Set320Lines
|
||||||
|
;
|
||||||
bit 6,a
|
.old_mode: AND A
|
||||||
jr z,.set312lines
|
JR Z,.INT_DEF
|
||||||
|
DEC A
|
||||||
jr .Set320Lines
|
JR Z,.INT_SCORP
|
||||||
|
DEC A
|
||||||
.old_mode:
|
JR Z,.INT_PENT
|
||||||
AND A
|
DEC A
|
||||||
JR Z,.INT_DEF
|
JR Z,.INT_ORIG
|
||||||
DEC A
|
DEC A
|
||||||
JR Z,.INT_SCORP
|
JR Z,.INT_CMOS_SINC
|
||||||
DEC A
|
; [x] ª áâ®¬ë© íªà ¯® â ¡«¨æ¥ ¯®«ì§®¢ ⥫ï
|
||||||
JR Z,.INT_PENT
|
DEC A
|
||||||
DEC A
|
JR Z,.PROG_SCR
|
||||||
JR Z,.INT_ORIG
|
;
|
||||||
DEC A
|
.error: SCF
|
||||||
JR Z,.INT_CMOS_SINC
|
RET
|
||||||
; [x] ª áâ®¬ë© íªà ¯® â ¡«¨æ¥ ¯®«ì§®¢ ⥫ï
|
;
|
||||||
DEC A
|
.SetDefLines: LD C,SLOT3
|
||||||
JR Z,.PROG_SCR
|
IN B,(C)
|
||||||
;
|
LD A,SYS_PAGE
|
||||||
.error: SCF
|
OUT (C),A
|
||||||
RET
|
LD A,(SYS_PAGE.VSyncAndWaits)
|
||||||
|
OUT (C),B
|
||||||
.SetDefLines:
|
AND 1
|
||||||
LD C,SLOT3
|
JR Z,.set312lines
|
||||||
IN B,(C)
|
JR .Set320Lines
|
||||||
LD A,SYS_PAGE
|
;
|
||||||
OUT (C),A
|
.INT_DEF: LD C,SLOT3
|
||||||
ld a,(SYS_PAGE.VSyncAndWaits)
|
IN B,(C)
|
||||||
OUT (C),B
|
LD A,SYS_PAGE
|
||||||
and 1
|
OUT (C),A
|
||||||
jr z,.set312lines
|
LD DE,(SYS_PAGE.SCREEN_TABLE)
|
||||||
jr .Set320Lines
|
OUT (C),B
|
||||||
|
;
|
||||||
.INT_DEF:
|
CALL Test_SCREEN_TABLE
|
||||||
LD C,SLOT3
|
JR NZ,.INT_CMOS_SINC
|
||||||
IN B,(C)
|
JP (IX)
|
||||||
LD A,SYS_PAGE
|
;
|
||||||
OUT (C),A
|
.INT_CMOS_SINC: LD C,SLOT3
|
||||||
LD DE,(SYS_PAGE.SCREEN_TABLE)
|
IN B,(C)
|
||||||
OUT (C),B
|
LD A,SYS_PAGE
|
||||||
|
OUT (C),A
|
||||||
CALL Test_CONFIG_ALL
|
LD DE,(SYS_PAGE.SCREEN_TABLE)
|
||||||
jr nz,.INT_CMOS_SINC
|
OUT (C),B
|
||||||
jp (IX)
|
;
|
||||||
|
LD D,CMOS_CELL.ScreenSET
|
||||||
.INT_CMOS_SINC:
|
CALL CMOS_RD
|
||||||
LD C,SLOT3
|
;
|
||||||
IN B,(C)
|
AND high CMOS_CELL.ScreenSET.Mask.Int ; ¢ ॣ¨áâॠA § 票¥ ScreenSET
|
||||||
LD A,SYS_PAGE
|
JR NZ,.skiptest
|
||||||
OUT (C),A
|
;
|
||||||
LD DE,(SYS_PAGE.SCREEN_TABLE)
|
CALL Test_SCREEN_TABLE
|
||||||
OUT (C),B
|
JP (IX) ; default int (non CMOS)
|
||||||
|
;
|
||||||
LD D,CMOS_CELL.ScreenSET
|
.skiptest: CP #10
|
||||||
CALL CMOS_RD
|
JR Z,.INT_SCORP ; scorpion int
|
||||||
|
;
|
||||||
AND high CMOS_CELL.ScreenSET.Mask.Int ; ¢ ॣ¨áâॠA § 票¥ ScreenSET
|
CP #20
|
||||||
JR NZ,.skiptest
|
JR Z,.INT_PENT ; pentagon int
|
||||||
|
;
|
||||||
CALL Test_CONFIG_ALL
|
;JR .INT_ORIG ; original int
|
||||||
JP (IX) ; default int (non CMOS)
|
.INT_ORIG: LD IX,SCREEN_TABLES.ORIGINAL
|
||||||
|
JR .PROG_SCR
|
||||||
.skiptest:
|
;
|
||||||
cp #10
|
.INT_SCORP: LD IX,SCREEN_TABLES.SCORPION
|
||||||
jr z,.INT_SCORP ; scorpion int
|
JR .PROG_SCR
|
||||||
|
;
|
||||||
cp #20
|
.INT_PENT: LD IX,SCREEN_TABLES.PENTAGON
|
||||||
jr z,.INT_PENT ; pentagon int
|
;JR .PROG_SCR
|
||||||
|
.PROG_SCR: IN A,(SLOT3)
|
||||||
; jr ORIG_SINC ; original int
|
EX AF,AF'
|
||||||
|
LD A,SYS_PAGE
|
||||||
.INT_ORIG:
|
OUT (SLOT3),A
|
||||||
LD IX,SCREEN_TABLES.ORIGINAL
|
EX AF,AF'
|
||||||
JR .PROG_SCR
|
LD (SYS_PAGE.COPY_SLOT3),A
|
||||||
.INT_SCORP:
|
IN A,(PORT_Y)
|
||||||
LD IX,SCREEN_TABLES.SCORPION
|
LD (SYS_PAGE.COPY_RGADR),A
|
||||||
JR .PROG_SCR
|
;
|
||||||
.INT_PENT:
|
LD (SYS_PAGE.SCREEN_TABLE),IX
|
||||||
LD IX,SCREEN_TABLES.PENTAGON
|
XOR A
|
||||||
; 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:
|
||||||
; | ç¨áŤŽ | § 缨ď |
|
; | ç¨áŤŽ | § 缨ď |
|
||||||
|
|||||||
@ -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
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|||||||
@ -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 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
|
CALL init_zx_roms
|
||||||
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâàã¬
|
IFN FREE_ZX_PAGES
|
||||||
LD HL,Spec_Page.flag_X
|
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâàã¬
|
||||||
LD (HL),'X'
|
LD HL,'XZ'
|
||||||
DEC HL ; Spec_Page.flag_Z
|
LD (Spec_Page.flag_Z),HL
|
||||||
LD (HL),'Z'
|
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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
@ -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
|
||||||
;-----------------------------------------------------------------------;
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user