This commit is contained in:
Tolik 2024-09-16 01:48:46 +10:00
parent 0ec6b77447
commit 36d209867e
7 changed files with 393 additions and 154 deletions

@ -1 +1 @@
Subproject commit b1851fc9f30652ff464f323a7f2873806bd51bfd Subproject commit c3a5d38deff864c3b08dd129572a20428f9219f1

View File

@ -632,7 +632,7 @@ POST_4_PAGES:
LD I,A LD I,A
LD A,B LD A,B
OUT (SLOT3),A OUT (SLOT3),A
LD A,0 XOR A
LD I,A LD I,A
IN A,(SLOT3) IN A,(SLOT3)
CP B CP B
@ -664,7 +664,8 @@ POST_5_DATA_BUS:
LD B,0 LD B,0
.loop: IN A,(0) .loop: IN A,(0)
CP #FF CP #FF
; JR NZ,.error ;!!!!! ¯®á¬®âà¥âì ;JR NZ,.error ;!!!!! ¯®á¬®âà¥âì
JR NZ,POST_5_ERROR
DJNZ .loop DJNZ .loop
JR POST_5_OK JR POST_5_OK
@ -694,7 +695,7 @@ POST_5_DATA_BUS:
POST_5_OK: POST_5_OK:
LD A,(TABLE_X.v5) ;rdlow-ok LD A,(TABLE_X.v5) ;rdlow-ok
OUT (Z84.PIO.Port_A.Data),A ; ¢ë¢¥á⨠"5" OUT (Z84.PIO.Port_A.Data),A ; ¢ë¢¥á⨠"5"
POST_5_ERROR:
; ********************************** ; **********************************
; POST § ¢¥à襭 ; POST § ¢¥à襭
ENDMODULE ENDMODULE
@ -705,14 +706,14 @@ POST_5_OK:
XOR A XOR A
OUT (RGADR),A OUT (RGADR),A
OUT (RGMOD),A OUT (RGMOD),A
OUT (SLOT0),A ;!HARDCODE zx page number OUT (SLOT0),A
; !TEST 20/08/2024 ; [ ] 20/08/2024 ; [x] free zx pages!
; LD A,5 ;!HARDCODE zx page number ; LD A,5
; OUT (SLOT1),A ; OUT (SLOT1),A
; LD A,2 ;!HARDCODE zx page number ; LD A,2
; OUT (SLOT2),A ; OUT (SLOT2),A
OUT (SLOT2),A ;!HARDCODE zx page number OUT (SLOT2),A ; ZERO_PAGE
DEC A ; LD A,#FF ;!HARDCODE zx page number DEC A ; SHARED_PAGE
OUT (SLOT1),A OUT (SLOT1),A
; ;
LD A,SYS_PAGE LD A,SYS_PAGE
@ -895,13 +896,20 @@ PrepareToZX: ;CALL init_zx_roms
CP #10 CP #10
JR C,.loop JR C,.loop
; ¢ë室 ¢ ०¨¬ zx spectrum ; ¢ë室 ¢ ०¨¬ zx spectrum
;!TODO § ¬¥­¨âì ­  ãáâ ­®¢ªã ¨§ à ¬¡«®ª  ; [ ] free zx pages! .start_zx: XOR A
LD A,5 IF FREE_ZX_PAGES
OUT (SLOT1),A JP GOTO_SPEC
LD A,2 ELSE ; [x] free zx pages!
OUT (SLOT2),A OUT (SLOT2),A ; ZERO_PAGE
DEC A
OUT (SLOT1),A ; SHARED_PAGE
;LD A,5
;OUT (SLOT1),A
;LD A,2
;OUT (SLOT2),A
; ;
.start_zx: JP GOTO_SPEC.ZX_MODE JP GOTO_SPEC.ZX_MODE
ENDIF
;*********************************** ;***********************************
; ˆ­¨æ¨ «¨§ æ¨ï ¯®à⮢ ; ˆ­¨æ¨ «¨§ æ¨ï ¯®à⮢
PORTS_INIT: PORTS_INIT:

View File

@ -105,16 +105,16 @@ EMM.InitMem: PUSH BC
;---------------------------------------------------------------------[] ;---------------------------------------------------------------------[]
RESERVED_PAGES: RESERVED_PAGES:
; [x] Block #1 - ¬®¦­® ®á¢®¡®¤¨âì ¯® ID 1 ; [x] Block #1 - ¬®¦­® ®á¢®¡®¤¨âì ¯® ID 1
DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; for Spectrum DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; [ ] free zx pages! for Spectrum
;!FIXIT áâà ­¨æë 16..31 ­¥ § à¥§¥à¢¨à®¢ ­ë, ­® ¨á¯®«ì§ãîâáï ¢ Pentagon 512 ;!FIXIT áâà ­¨æë 16..31 ­¥ § à¥§¥à¢¨à®¢ ­ë, ­® ¨á¯®«ì§ãîâáï ¢ Pentagon 512
; ;
; í¬ã«ïâ®à <20>‡“ ;!FIXIT ROM-Emulator ᤥ« âì ¤¨­ ¬¨ç¥áª¨¥ áâà ­¨æë ; í¬ã«ïâ®à <20>‡“ ;!FIXIT ROM-Emulator ᤥ« âì ¤¨­ ¬¨ç¥áª¨¥ áâà ­¨æë
DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; [ ] free zx pages! For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION
DB #FF ; End of the block DB #FF ; End of the block
; ;
; ;
;; Block #2 - ­¥«ì§ï ®á¢®¡®¦¤ âì ;; Block #2 - ­¥«ì§ï ®á¢®¡®¦¤ âì
DB 0,2,5 ; for Spectrum and BIOS starting DB 0,2,5 ; [ ] free zx pages! ; for Spectrum and BIOS starting
DB DCP_PAGE ; Ports map DB DCP_PAGE ; Ports map
DB Spec_Page ; Page for Spectrum mode DB Spec_Page ; Page for Spectrum mode
; Screen pages ; Screen pages
@ -279,11 +279,11 @@ EMM.FreeMemRMD: CALL GET_RAMD_ST
; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ ; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
; <20><20>Ž<EFBFBD>ˆœ DE!!! ; <20><20>Ž<EFBFBD>ˆœ DE!!!
;EMM_FN3M: ;EMM_FN3M:
EMM.FreeMem: ; [ ] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF EMM.FreeMem: ; [x] free zx pages! ⥯¥àì ­¥«ì§ï ®á¢®¡®¤¨âì áâà ­¨æã #FF
SCF SCF
INC A INC A
RET Z RET Z
DEC A DEC A
;AND A ;AND A
;SCF ;SCF
; ;
@ -1085,76 +1085,76 @@ ROM_DISK:
; RET ; RET
.loop: PUSH DE ; ­®¬¥à ᥪâ®à  .loop: PUSH DE ; ­®¬¥à ᥪâ®à 
PUSH BC PUSH BC
LD A,E LD A,E
AND #3F ; ADRESS in ROM-Page AND #3F ; ADRESS in ROM-Page
PUSH AF ; á®åà ­¨âì  ¤à¥á PUSH AF ; á®åà ­¨âì  ¤à¥á
EX DE,HL ; DE -  ¤à¥á ¡ãä¥à  EX DE,HL ; DE -  ¤à¥á ¡ãä¥à 
ADD HL,HL ADD HL,HL
ADD HL,HL ; H - ­®¬¥à ¡ ­ª¨ ADD HL,HL ; H - ­®¬¥à ¡ ­ª¨
LD A,(ROM_DISK.Pages.Number) LD A,(ROM_DISK.Pages.Number)
INC H INC H
CP H CP H
LD L,H LD L,H
LD H,high ROM_DISK.Pages.Number ; ROM-Disk pages! LD H,high ROM_DISK.Pages.Number ; ROM-Disk pages!
LD A,(HL) ; PAGE-ROM LD A,(HL) ; PAGE-ROM
POP HL ; ¢®ááâ ­®¢¨âì  ¤à¥á ¢ ROM-Page POP HL ; ¢®ááâ ­®¢¨âì  ¤à¥á ¢ ROM-Page
LD L,0 ; ¥á«¨ ¤ «¥ª® § å®â¥«¨ - ¢ë室 á ®è¨¡ª®© LD L,0 ; ¥á«¨ ¤ «¥ª® § å®â¥«¨ - ¢ë室 á ®è¨¡ª®©
JR C,.errorExit ; ROM-Disk-end JR C,.errorExit ; ROM-Disk-end
; DE - ¡ãä¥à ; DE - ¡ãä¥à
; HL -  ¤à¥á ¢ ROM ; HL -  ¤à¥á ¢ ROM
; B - ç¨á«® ᥪâ®à®¢ ; B - ç¨á«® ᥪâ®à®¢
; A - ROM-Page ; A - ROM-Page
.loopRead: .loopRead:
PUSH HL ; ®âªã¤  PUSH HL ; ®âªã¤ 
PUSH DE ; ªã¤  PUSH DE ; ªã¤ 
LD HL,-.stackDepth-.readProcedure.size ; memory stack use! LD HL,-.stackDepth-.readProcedure.size ; memory stack use!
ADD HL,SP ; stack ADD HL,SP ; stack
PUSH HL ;  ¤à¥á ¯à®£à ¬¬ë .readProcedure PUSH HL ;  ¤à¥á ¯à®£à ¬¬ë .readProcedure
LD DE,.readProcedure ; ¯¥à¥­¥á⨠¯à®£à ¬¬ã ­  á⥪ LD DE,.readProcedure ; ¯¥à¥­¥á⨠¯à®£à ¬¬ã ­  á⥪
EX DE,HL EX DE,HL
LD BC,.readProcedure.size LD BC,.readProcedure.size
LDIR ; ¯à®£à ¬¬  ­  á⥪¥ LDIR ; ¯à®£à ¬¬  ­  á⥪¥
LD BC,#100 ; ¤«¨­  ᥪâ®à  LD BC,#100 ; ¤«¨­  ᥪâ®à 
RET ; ¨á¯®«­¨âì ¯à®£à ¬¬ã .readProcedure, ­  á⥪¥  ¤à¥á  ¡ãä¥à  ¨ ROM RET ; ¨á¯®«­¨âì ¯à®£à ¬¬ã .readProcedure, ­  á⥪¥  ¤à¥á  ¡ãä¥à  ¨ ROM
; DE - next address ; DE - next address
; HL - ROM address ; HL - ROM address
.readNext: .readNext:
POP BC ; ç¨á«® ᥪâ®à®¢ POP BC ; ç¨á«® ᥪâ®à®¢
INC C ; áç¥â稪 áç¨â ­­ëå ᥪâ®à®¢ INC C ; áç¥â稪 áç¨â ­­ëå ᥪâ®à®¢
DEC B ; ᥪâ®à  ª®­ç¨«¨áì? DEC B ; ᥪâ®à  ª®­ç¨«¨áì?
JR Z,.normExit JR Z,.normExit
BIT 6,H ; ç⥭¨¥ ­¥ § ª®­ç¥­® BIT 6,H ; ç⥭¨¥ ­¥ § ª®­ç¥­®
PUSH BC ; á®åà ­¨âì áç¥â稪¨ PUSH BC ; á®åà ­¨âì áç¥â稪¨
JR Z,.loopRead ; ç¨â âì ¤ «ìè¥ JR Z,.loopRead ; ç¨â âì ¤ «ìè¥
POP BC POP BC
POP HL ; ­®¬¥à ᥪâ®à  POP HL ; ­®¬¥à ᥪâ®à 
LD A,B LD A,B
LD B,0 LD B,0
ADD HL,BC ADD HL,BC
LD B,A ; ¢ëç¨á«¨âì á«¥¤.ᥪâ®à LD B,A ; ¢ëç¨á«¨âì á«¥¤.ᥪâ®à
EX DE,HL ; ⥯¥àì HL -  ¤à¥á, DE ᥪâ®à, B - ᪮«ìª® ¥é¥ ç¨â âì EX DE,HL ; ⥯¥àì HL -  ¤à¥á, DE ᥪâ®à, B - ᪮«ìª® ¥é¥ ç¨â âì
JP .loop ; ­ ç âì ¢á¥ á­®¢ ! JP .loop ; ­ ç âì ¢á¥ á­®¢ !
; ç⥭¨¥ § ª®­ç¥­® ; ç⥭¨¥ § ª®­ç¥­®
.normExit: .normExit:
POP HL ; ᥪâ®à, ®âªã¤  ¢¥«®áì ç⥭¨¥ POP HL ; ᥪâ®à, ®âªã¤  ¢¥«®áì ç⥭¨¥
ADD HL,BC ; ¯® ¢®§¢à âã: HL - á«¥¤. ¤à¥á ADD HL,BC ; ¯® ¢®§¢à âã: HL - á«¥¤. ¤à¥á
EX DE,HL ; DE - á«¥¤.ᥪâ®à EX DE,HL ; DE - á«¥¤.ᥪâ®à
AND A AND A
RET RET
; ®è¨¡ª  ; ®è¨¡ª 
@ -1166,10 +1166,10 @@ ROM_DISK:
; ¯à®æ¥¤ãà , ¯¥à¥­®á¨¬ ï ­  á⥪ ¤«ï ç⥭¨ï ¨§ ROM-Disk ; ¯à®æ¥¤ãà , ¯¥à¥­®á¨¬ ï ­  á⥪ ¤«ï ç⥭¨ï ¨§ ROM-Disk
; ®áâ®à®¦­¥¥ á PUSH, ¥á«¨ ­ ¤® ¬­®£®, ⮠㢥«¨ç¨¢ © .stackDepth ; ®áâ®à®¦­¥¥ á PUSH, ¥á«¨ ­ ¤® ¬­®£®, ⮠㢥«¨ç¨¢ © .stackDepth
.readProcedure: .readProcedure:
POP DE ; ªã¤  POP DE ; ªã¤ 
POP HL ; ®âªã¤  POP HL ; ®âªã¤ 
OUT (ROM.SLOT0),A ; ROM_PAGE OUT (ROM.SLOT0),A ; ROM_PAGE
LDIR ; §¤¥áì ç¨â ¥âáï ¨§ ROM-Disk LDIR ; §¤¥áì ç¨â ¥âáï ¨§ ROM-Disk
LD B,A LD B,A
XOR A XOR A
OUT (ROM.SLOT0),A OUT (ROM.SLOT0),A

View File

@ -399,11 +399,16 @@ REINIT: DEC B
OUT (C),A OUT (C),A
OUT (RGADR),A OUT (RGADR),A
OUT (RGMOD),A OUT (RGMOD),A
OUT (SLOT0),A ;!HARDCODE zx page number OUT (SLOT0),A
LD A,5 ;!HARDCODE zx page number ; [ ] 16/09/24 free zx pages!
OUT (SLOT1),A ;LD A,5
LD A,2 ;!HARDCODE zx page number ;OUT (SLOT1),A
OUT (SLOT2),A ;LD A,2
;OUT (SLOT2),A
OUT (SLOT2),A
DEC A
OUT (SLOT1),A
;
LD A,DCP_PAGE LD A,DCP_PAGE
OUT (SLOT3),A OUT (SLOT3),A
JP 0 ;Restart JP 0 ;Restart

View File

@ -212,8 +212,6 @@ INIT_SYS_ALL:
XOR A XOR A
LD (SYS_PAGE.INT_ID - #4000),A LD (SYS_PAGE.INT_ID - #4000),A
; ;
;!TODO çâ® §  ¯¥à¥¬¥­­ë¥?
LD HL,SYS_PAGE.DISK_TYPE - #4000 LD HL,SYS_PAGE.DISK_TYPE - #4000
LD (HL),DRIVE_CODES.TRDOS.FDD ; FDD A LD (HL),DRIVE_CODES.TRDOS.FDD ; FDD A
INC HL INC HL
@ -223,13 +221,13 @@ INIT_SYS_ALL:
INC HL INC HL
LD (HL),DRIVE_CODES.TRDOS.HDD LD (HL),DRIVE_CODES.TRDOS.HDD
INC HL INC HL
LD (HL),0 ; SYS_PAGE.COPY_SLOT0 LD (HL),ZERO_PAGE ; [x] free zx pages! ; SYS_PAGE.COPY_SLOT0, ¡ë«® 0
INC HL INC HL
LD (HL),5 ; SYS_PAGE.COPY_SLOT1 LD (HL),SHARED_PAGE; [x] free zx pages! ; SYS_PAGE.COPY_SLOT1, ¡ë«® 5
INC HL INC HL
LD (HL),2 ; SYS_PAGE.COPY_SLOT2 LD (HL),ZERO_PAGE ; [x] free zx pages! ; SYS_PAGE.COPY_SLOT2, ¡ë«® 2
INC HL INC HL
LD (HL),0 ; SYS_PAGE.COPY_SLOT3 LD (HL),ZERO_PAGE ; [x] free zx pages! ; SYS_PAGE.COPY_SLOT3, ¡ë«® 0
LD A,9 LD A,9
LD (SYS_PAGE.MSD_SECS - #4000),A LD (SYS_PAGE.MSD_SECS - #4000),A
@ -252,6 +250,9 @@ INIT_SYS_ALL:
XOR A XOR A
LD (SYS_PAGE.CURRENT_RAM_DRV - #4000),A LD (SYS_PAGE.CURRENT_RAM_DRV - #4000),A
; ;
; [ ] free zx pages!
;;; init task's
;
LD DE,ZG_ADDRESS ;  ¤à¥á §­ ª®£¥­¥à â®à  LD DE,ZG_ADDRESS ;  ¤à¥á §­ ª®£¥­¥à â®à 
LD (SYS_PAGE.WIN_ZG - #4000),DE LD (SYS_PAGE.WIN_ZG - #4000),DE
; ;

View File

@ -54,12 +54,7 @@
;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨ ;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨
FN_ENTRANCE: ;!TODO A - TASK NUMBER FN_ENTRANCE: ;!TODO A - TASK NUMBER
EXX EXX
GET_ZX_TASK_DATA_OFFSET CALL GET_ZX_TASK_DATA
ADD A,_#ZX_TASK_DATA
LD C,A
LD B,0
LD IX,SYS_PAGE.ZX_TASK.CURRENT
ADD IX,BC ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨
; ;
LD C,SLOT3 LD C,SLOT3
IN B,(C) IN B,(C)
@ -102,6 +97,18 @@ FN_ENTRANCE: ;!TODO A - TASK NUMBER
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚室: 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
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;‚室: A - TASK NUMBER ;‚室: A - TASK NUMBER
@ -226,7 +233,7 @@ SET_7FFD: LD A,(HL)
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï âàñå áâà ­¨æ އ“ 48k ;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï âàñå áâà ­¨æ އ“ 48k
GET_48k_MEM: LD D,3 GET_48k_MEM: LD D,3+1
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,3+29
@ -313,6 +320,219 @@ GET_SCORP_RAM: CALL FREE_vRAM
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
IF FREE_ZX_PAGES ;----------------------------------------------------[v]
;!TODO § ¤¥©á⢮¢ âì
; ‚室: B = 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
; A = TASK
GOTO_SPEC: DI
PUSH AF
; set shared pages
XOR A
OUT (SLOT2),A ; ZERO_PAGE
DEC A
OUT (SLOT1),A ; SHARED_PAGE
;
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,B
LD (SYS_PAGE.CONFIG_DE.ZX_START),A
;
POP AF
LD SP,#C000
CALL GET_ZX_TASK_DATA
;
;!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
; ãáâ ­®¢ª  ¨­â 
LD A,(IX + _#ZX_TASK_DATA.FN_SYNC)
AND %0000'0111
CALL FN_SYNC
; ãáâ ­®¢ª  à §¢ñà⪨
LD A,(IX + _#ZX_TASK_DATA.FN_SYNC)
AND %1100'0000
OR %0010'0000
RLCA
RLCA
CALL FN_SYNC
;
CALL SET_TXT_PALETTE.ZX ; [ ] free zx pages! ¯à®¯ã᪠âì íâ®, ç⮡ § ¤ ¢ âì ¯®«ì§®¢ â¥«ìáªãî ¯ «¨âàã
;
LD E,0
CALL LP_SET_32
;
LD E,0
LD HL,#5104
CALL LP_SET_32.X
;¬®¦­® ¨á¯®«ì§®¢ âì ª®£¤ -­¨¡ã¤ì ª ª-­¨¡ã¤ì
; LD D,#35
; CALL CMOS_RD
; BIT 0,A
; PUSH AF
; CALL Z,SPRINTER_1
; POP AF
; PUSH AF
; CALL NZ,AY8910
; POP AF
.TASK_0: XOR A ; § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â
.START_TASK: LD IY,.BASIC_128
JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
;
;start_basic:
.BASIC_128: LD SP,#C000
LD HL,RES128_PROG
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë ­  BASIC-¥.
LD BC,RES128_PROG.Size
LDIR
DI
JP ZX_VARS.PRINTER_BUFFER
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;*****************************************
;
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ¤«ï
; ᯥªâà㬮¢áª®£® ०¨¬  ¨
; ¢®ááâ ­®¢«¥­¨¥ ᯥªâà㬮¢áª®£®
; íªà ­ 
;
; ‚®§¢à â ¯® IX
;
; !!! NO USE STACK !!!
;
;*****************************************
;!TODO á⥪ ãáâ ­®¢«¥­ ¢® ¢â®à®© áâà ­¨æ¥, ­¥ ¨á¯®«ì§®¢ âì ¨«¨ ãáâ ­ ¢«¨¢ âì ¢ ¤àã£ãî!
; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum
INIT_PAGES:
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:
OUT (SLOT0),A
XOR 5 ; [ ] free zx pages!
OUT (SLOT1),A
XOR 7 ; [ ] free zx pages!
OUT (SLOT2),A
OR #0F ; [ ] free zx pages!
LD E,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)
;-----------------------------------------------------------------------;
ELSE ;--------------------------------------------------------------------[|]
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;!TODO § ¤¥©á⢮¢ âì ;!TODO § ¤¥©á⢮¢ âì
GOTO_SPEC: IN A,(SLOT3) GOTO_SPEC: IN A,(SLOT3)
@ -320,7 +540,7 @@ GOTO_SPEC: IN A,(SLOT3)
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD A,B LD A,B
LD (SYS_PAGE.CONFIG_DE+1),A LD (SYS_PAGE.CONFIG_DE.ZX_START),A
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
@ -329,7 +549,7 @@ GOTO_SPEC: IN A,(SLOT3)
;NO_SETUP_1: ;NO_SETUP_1:
;!TODO ᤥ« âì  ªâ¨¢ æ¨î ¢¨­â  ¤«ï ¯ à ¬¥âà  ¨§ Setup ;!TODO ᤥ« âì  ªâ¨¢ æ¨î ¢¨­â  ¤«ï ¯ à ¬¥âà  ¨§ Setup
.ZX_MODE: LD A,#FE ; !HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã ACC-off Spectrum-MODE .ZX_MODE: LD A,#FE ; !HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã ACC-off Spectrum-MODE
LD BC,Port_All_Mode LD BC,Port_All_Mode
OUT (C),A OUT (C),A
LD SP,#C000 LD SP,#C000
@ -369,73 +589,6 @@ GOTO_SPEC: IN A,(SLOT3)
JP ZX_VARS.PRINTER_BUFFER JP ZX_VARS.PRINTER_BUFFER
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;
;>$< >$< >$< >$< >$< >$< [ <20><EFBFBD>…Œ…™€…Œ€Ÿ އ“ ] >$< >$< >$< >$< >$< >$< ;
;--------[ <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+1),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
ENT
.Size EQU $-RES128_PROG
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
;***************************************** ;*****************************************
@ -489,7 +642,7 @@ INIT_PAGES:
SCORPION_256_MODE: SCORPION_256_MODE:
LD D,16 LD D,16
AND #30 ; ¤® 4-å ᯥªâà㬮¢ AND #30 ; ¤® 4-å ᯥªâà㬮¢
ALL_MODE: ALL_MODE:
OUT (SLOT0),A OUT (SLOT0),A
@ -524,9 +677,9 @@ ALL_MODE:
INIT_VIDEO_REG: INIT_VIDEO_REG:
XOR A XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á  OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
; OUT (RGSCR),A ; ॣ¨áâà íªà ­  ; OUT (RGSCR),A ; ॣ¨áâà íªà ­ 
;!TEST ;!TEST
; Restore old Spectrum Screen ; Restore old Spectrum Screen
@ -541,7 +694,7 @@ INIT_VIDEO_REG:
; EX AF,AF' ; EX AF,AF'
; LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ  ; LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ 
; LD BC,#7FFD ; LD BC,#7FFD
; OUT (C),A ; OUT (C),A
@ -561,6 +714,74 @@ NO_SCREEN_ALT:
AND A AND A
JP (IX) JP (IX)
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
ENDIF ;--------------------------------------------------------------------[^]
;
;>$< >$< >$< >$< >$< >$< [ <20><EFBFBD>…Œ…™€…Œ€Ÿ އ“ ] >$< >$< >$< >$< >$< >$< ;
;--------[ <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
ENT
.Size EQU $-RES128_PROG
;-----------------------------------------------------------------------;
;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 <E28098><EFBFBD>ˆ]----------------------; ;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 <E28098><EFBFBD>ˆ]----------------------;
@ -581,7 +802,7 @@ PROG_NO_ROM:
DISP Spec_Page.no_zx_rom DISP Spec_Page.no_zx_rom
DI DI
; ;
LD A,#FF LD A,SHARED_PAGE
OUT (SLOT3),A OUT (SLOT3),A
OUT (SLOT2),A OUT (SLOT2),A
OUT (SLOT1),A OUT (SLOT1),A

View File

@ -175,7 +175,11 @@ TASK_SWITCH:
; ; ¨ ¯®ª  ¯®ä¨£ à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨! ; ; ¨ ¯®ª  ¯®ä¨£ à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨!
TASK_SET: TASK_SET:
LD IX,TASK_RESTORE IF FREE_ZX_PAGES
LD IY,TASK_RESTORE
ELSE
LD IX,TASK_RESTORE
ENDIF
LD A,C LD A,C
EXX EXX
JP INIT_PAGES ; ¯¥à¥ª«îç¨âì ¢á¥ áâà ­¨æë! JP INIT_PAGES ; ¯¥à¥ª«îç¨âì ¢á¥ áâà ­¨æë!