чёт поковырял

This commit is contained in:
Tolik 2024-08-07 23:08:26 +10:00
parent 2d0ee5e639
commit 8cc1bd11af
13 changed files with 310 additions and 326 deletions

@ -1 +1 @@
Subproject commit 93ab93917db326a86a0ffecc02a62f6f6ef7a938
Subproject commit 1535d92eeecb8aa730ae7fe6eb82e9d32a4acb4d

View File

@ -137,7 +137,9 @@
OUTEND
;---------------------------------------
;
EXPORT ROM_NUMBER ; !FIXIT part1, part2 ¤«ï Flasher
;EXPORT ROM_NUMBER ; !FIXIT part1, part2 ¤«ï Flasher
EXPORT BOARD_INFO.number
EXPORT BOARD_INFO.type
EXPORT BoardID.start
EXPORT BoardID.end
EXPORT FN_CRIPT.cnf

View File

@ -43,8 +43,6 @@
Set_Block 'ROM free space: ', #4000
;
;PAGE 1
; INCBIN 'Build/Bin/LOGO_PAL.BIN'
; INCBIN 'Build/Bin/LOGO_DAT.BIN'
INCBIN 'Build/Bin/LOGO.BIN'
Set_Block 'LOGO free space: ', #8000
;
@ -76,7 +74,6 @@
;PAGE 9-11 (#09, #0A, #0B) Recovery image part 2
INCBIN IMG_RECOVERY,#C000,#C000
DISPLAY "ROM Disk recovery part2, pages 9..11: 2x4000..3x0000"
Set_Block 'Empty space: ', #30000
;
;PAGE 12-15 (#0C, #0D, #0E, #0F)

View File

@ -12,14 +12,13 @@
; CCED/AAAAAAAAA
; NN1OW116517210
; FF2SR54 3
;DCP_DATA: 108
; ....0..11.1110
; WORD %00000001101110 ; -  ¤à¥á
; WORD %00001001101111 ; - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
; BYTE ACEX.Border_FE ; - ¯®àâ
; 108
;DCP_DATA: ....0..11.1110
; WORD %00000001101110 ; - b13..12 cnf, b11 pent512, b10 dos, b9 r/w, b8..0  ¤à¥á
; WORD %00001001101111 ; - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
; BYTE ACEX.Border_FE ; - ¯®àâ
; DCP END MARKER
; DW 0,0,0
;-----------------------------------------------------------------------;
;
;
@ -135,30 +134,6 @@
DB ACEX.CMOS_DATA.WRITE
;
;---------HDD[v]
/*
Write:
.Data EQU #0150 ; cnf 20 ; HDW_DAT W170 ; #1F0 Data register
.Features EQU #0151 ; cnf 21 ; HDW_ERR W171 ; #1F1 Features register
.Counter EQU #0152 ; cnf 22 ; HDW_CNT P_S_CNT W172 ; #1F2 Counter register
.Sector EQU #0153 ; cnf 23 ; HDW_SEC P_S_NUM W173 ; #1F3 Sector register
.CylinderLow EQU #0154 ; cnf 24 ; HDW_CLL P_C_LOW W174 ; #1F4 Cylinder Low register
.CylinderHigh EQU #0155 ; cnf 25 ; HDW_CLH P_C_HIG W175 ; #1F5 Cylinder High register
.DeviceHead EQU #4152 ; cnf 26 ; HDW_DRV P_HD_CS ; #1F6 Device/Head register
.Command EQU #4153 ; cnf 27 ; HDW_COM P_CMD ; #1F7 Command register
.DeviceControl EQU #4154 ; cnf 28 ; ; #3F6 Device Control register
Read:
.Data EQU #0050 ; cnf 20 ; HDR_DAT P_DATS R170 ; #1F0 Data register
.Error EQU #0051 ; cnf 21 ; HDR_ERR P_ERR R171 ; #1F1 Error register
.Counter EQU #0052 ; cnf 22 ; HDR_CNT R172 ; #1F2 Counter register
.Sector EQU #0053 ; cnf 23 ; HDR_SEC R173 ; #1F3 Sector register
.CylinderLow EQU #0054 ; cnf 24 ; HDR_CLL R174 ; #1F4 Cylinder Low register
.CylinderHigh EQU #0055 ; cnf 25 ; HDR_CLH R175 ; #1F5 Cylinder High register
.Control EQU #4052 ; cnf 26 ; HDR_DRV R176 ; #1F6 Device/Head register
.Status EQU #4053 ; cnf 27 ; HDR_CTL P_HDST R177 ; #1F7 Status (Control) register
.AltStatus EQU #4054 ; cnf 28 ; ; #3F6 Alternate Status register
.DrvAddress EQU #4055 ; cnf 29 ; ; #3F7
*/
DW %00'000'0'0100'0000
DW %11'000'0'0110'1111
DB ACEX.IDE_DATA_1F0
@ -465,7 +440,7 @@ Read:
DW %11'010'0'0110'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT3
; DCP END MARKER
; DCP END MARKER
DW 0,0,0
;-----------------------------------------------------------------------;
;

View File

@ -15,9 +15,12 @@ EXP_START:
JP GLOBAL_RESET
;---------------------------------------
ROM_NUMBER:
.part1: DW MotherBoardID
.part2: DB 0
;ROM_NUMBER:
;.part1: DW MotherBoardID
;.part2: DB 0
BOARD_INFO:
.number: DW MotherBoardID
.type: DB MotherBoardType
;---------------------------------------
;---------------------------------------
@ -305,20 +308,19 @@ NO_RESTART:
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#62
OUT (Z84.SIO.Ch_A.Ctrl),A
;
LD A,#CF ; BITS I/O
OUT (Z84.PIO.Port_A.Command),A
XOR A
OUT (Z84.PIO.Port_A.Command),A
OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros
; -¨­¨æ¨ «¨§ æ¨ï á¨á⥬­ëå ¯®à⮢ Z84C15-
LD BC,#FF*256 + Z84.SYS.Control
XOR A ; Z84.REG.WaitState_Ctrl
OUT (C),A ; Z84.SYS.Control
INC C ; Z84.REG.WaitState_MemBound
OUT (C),A ; Z84.SYS.Data ; set 0 Waits
;
DEC C
LD A,3 ; Z84.REG.Misc_Ctrl
OUT (C),A ; Z84.SYS.Control
@ -745,7 +747,7 @@ POST_5_OK:
; SBC HL,BC
;JR Z,set_config ;!TODO  ªâ¨¢ æ¨ï ¬¥âª¨ IX:IY ¨§ «® ¤¥à 
;LD IX,ACEX.Config_ID.Sp97_2
LD HL,ACEX.Config_ID.Sp2000
LD HL,ACEX.Config_ID.Sp2000
set_config:
LD (SYS_PAGE.CONFIG_BYTE),HL ; á®åà ­¨âì ­®¬¥à ¯à®è¨¢ª¨
;LD (SYS_PAGE.CONFIG_BYTE),IX ; á®åà ­¨âì ­®¬¥à ¯à®è¨¢ª¨
@ -767,14 +769,14 @@ set_config:
OUT (RGMOD),A
OUT (SLOT3),A
OUT (SLOT0),A
LD A,5
LD A,5 ; !HARDCODE page 5
OUT (SLOT1),A
LD A,2
LD A,2 ; !HARDCODE page 2
OUT (SLOT2),A
;*********************************
; Don't use stack (SP) before this point if it`s normal booting!!!
LD SP,#BFFE ; <20> ç «® ¨á¯®«ì§®¢ ­¨ï á⥪ !!!
LD SP,#C000 ; <20> ç «® ¨á¯®«ì§®¢ ­¨ï á⥪ !!!
PUSH HL ; á®åà ­¨âì ­®¬¥à ¯à®è¨¢ª¨
CALL PORTS_INIT ; ¨­¨æ¨ «¨§¨à®¢ âì ¯®àâë
@ -782,20 +784,7 @@ set_config:
OUT (BorderColor),A
CALL EMM.CheckColdInit ; ¨­¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
POP HL ; ª®­ä¨£ãà æ¨ï
JR Reset_Handler.start
; *************************************
; ‘ç¨â ¥¬, çâ® ¢å®¤ ¢ SETUP ¢á¥£¤  !!!
; *************************************
; LD A,H
; CP #FF
; JR NZ,NO_SETUP_1
; LD A,L
; JR NZ,NO_SETUP_2
;[---------------------------------------------------------------------]
; JR Reset_Handler.start
MODULE Reset_Handler
start: DI
@ -908,7 +897,7 @@ init_rom_address EQU #8200 ;!HARDCODE
LD BC,RAM_BIOS_PROG.Length
LDIR
*/
No_Need_To_Load_ZXROMS:
;No_Need_To_Load_ZXROMS:
POP AF
OUT (SLOT3),A
;-------------------------------------------------------------------------------------------------------------------;

View File

@ -256,8 +256,7 @@ FN_HDD_READ_NEXT:
RET C
CALL NEXT_ADD_SEC
JR FN_HDD_READ.L1
;
; HL - BUFER, A - PAGE
FN_HDD_READ:
AND A
@ -488,7 +487,7 @@ FN_HDD_TEST_IDE:
; <20>¥ ¤®«¦­  ¯®àâ¨âì ॣ¨áâà E!!!
TEST_HDD_DRV:
; EXP_HDD.ASM variant
LD HL,#01FE ; ?????
LD HL,#01FE
LD BC,IDE.Write.Counter
OUT (C),L
IF IDE_Optimization
@ -496,36 +495,36 @@ TEST_HDD_DRV:
OUT (C),H ; IDE.Write.Sector
;
DEC C
INC B
IN A,(C) ; ????? IDE.Write.Counter+#100
DEC B
IN A,(C) ; IDE.Read.Counter
CP L
RET NZ
INC C
ELSE
LD BC,IDE.Write.Sector
OUT (C),H
LD BC,IDE.Write.Counter+#100
LD BC,IDE.Read.Counter
IN A,(C)
CP L
RET NZ
LD BC,IDE.Write.Sector+#100
LD BC,IDE.Read.Sector
ENDIF
IN A,(C) ; ????? IDE.Write.Sector+#100
IN A,(C) ; IDE.Read.Sector
CP H
RET
; TEST_HDD_DRV:
; ; EXTENDED.ASM variant
; LD HL,#00FF ;?????
; LD HL,#00FF
; LD BC,IDE.Write.CylinderLow
; OUT (C),L
; IF IDE_Optimization
; INC C
; OUT (C),H ; IDE.Write.CylinderHigh
; OUT (C),H ; IDE.Write.CylinderHigh
; INC B
; DEC C
; IN A,(C) ; ????? ’ãâ ॣ¨áâà BC = #0254 - çâ® §  ¯®àâ â ª®© ¨ çâ® ®ââ㤠 ¯à®ç¨â ¥âáï?
; IN A,(C) ; ’ãâ ॣ¨áâà BC = #0254 - .CylinderLow
; CP L
; RET NZ
; INC C
@ -533,14 +532,14 @@ TEST_HDD_DRV:
; ELSE
; LD BC,IDE.Write.CylinderHigh
; OUT (C),H
; LD BC,#0254 ;???!!!!
; LD BC,#0254
; IN A,(C)
; CP L
; RET NZ
; LD BC,#0255 ;???!!!!
; LD BC,#0255
; ENDIF
; IN A,(C) ; ????? ’ãâ ॣ¨áâà BC = #0255 - çâ® §  ¯®àâ â ª®© ¨ çâ® ®ââ㤠 ¯à®ç¨â ¥âáï?
; IN A,(C) ; ’ãâ ॣ¨áâà BC = #0255 - .CylinderHigh
; CP H
; RET
@ -628,7 +627,7 @@ FN_HDD_INIT:
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
OUT (C),A
WAIT_HDD
BIT IDE.ControlBit.DataRequest,A
AND IDE.ControlByte.DataRequest
;JR NZ,.L2
SCF
RET Z
@ -704,22 +703,21 @@ HD_WAIT:
PUSH BC
PUSH AF
LD DE,0
HD_WAIT1:
LD BC,IDE.Read.Status
.loop: LD BC,IDE.Read.Status
IN A,(C)
AND IDE.ControlByte.Busy
JR Z,HD_W_EXIT
JR Z,.EXIT
DEC DE
LD A,D
OR E
JR NZ,HD_WAIT1
JR NZ,.loop
POP AF
POP BC
POP DE
SCF
RET
HD_W_EXIT:
POP AF
;
.EXIT: POP AF
POP BC
POP DE
AND A

View File

@ -768,7 +768,7 @@ LP_BEG_P:
LP_INI_P:
EX AF,AF'
EXX
LP_OPEN_PG
LP_OPEN_PG
LD A,(WIN_ID_0.USER.MODE)
CP #C0
JR NC,LP_INI_NO_ZG ; ®âªàë⨥ ¡®à¤¥à ...
@ -1221,12 +1221,12 @@ LP_MODE_LINE3: ;
LD A,#50
OUT (SLOT3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP 80H
CP #80
JR NC,LP_EXIT_MODE3
LP_MODE_RECURSE3:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND 7FH
AND #7F
SUB 80
JR C,LP_MODE_LL3
SUB 48
@ -1238,7 +1238,7 @@ LP_MODE_RECURSE3:
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND 3FH
AND #3F
SUB C
JR NC,LP_EXIT_MODE3
NEG
@ -1248,7 +1248,7 @@ LP_MODE_RECURSE3:
LP_MODE_LL3:
NEG
RRA
AND 3FH
AND #3F
CP C
JR NC,LP_MODE_LR3
LD C,A

View File

@ -1,10 +1,10 @@
;===================[ ”㭪樨 à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠]===================;
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
;!TEST ¢á¥ SLOT2 ­  SLOT1
;
;----------------------------------------------------------------------;
; Ž¯à¥¤¥«¥­¨¥ ®¡ê¥¬  ¯ ¬ïâ¨.
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
; Ž¯à¥¤¥«¥­¨¥ ®¡ê¥¬  ¯ ¬ïâ¨.
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
EMM.GetMemSize:
IN A,(SLOT1)
LD B,A
@ -32,7 +32,7 @@ EMM.GetMemSize:
;
;----------------------------------------------------------------------;
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
EMM.InitMem:
PUSH BC
PUSH HL
@ -42,7 +42,7 @@ EMM.InitMem:
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 ; €¤à¥á FAT އ“.
LD HL,SYS_PAGE.RAMD_FAT ; €¤à¥á RAM FAT ¢ އ“.
; ®¡­ã«ï¥¬ â ¡«¨æã
XOR A
.loopFree:
@ -50,7 +50,7 @@ EMM.InitMem:
INC L
JR NZ,.loopFree
; १¥à¢¨à㥬 ᯥæ.áâà ­¨æë ¨ áâà ­¨æë ZX
LD B,RESERVED_PAGES.Blocks
LD B,RESERVED_PAGES.Blocks
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
.loop: LD A,(DE)
CP #FF
@ -63,10 +63,10 @@ EMM.InitMem:
CP #FF
JR NZ,.loopBlk
.exitLoop:
INC DE
DJNZ .loop
LD L,A
LD (HL),A
INC DE
DJNZ .loop
LD L,A
LD (HL),A
; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
XOR A
LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000
@ -89,27 +89,27 @@ EMM.InitMem:
RET
;---------------------------------------------------------------------[]
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
;!FIXIT áâà ­¨æë 16..31 ­¥ § à¥§¥à¢¨à®¢ ­ë, ­® ¨á¯®«ì§ãîâáï ¢ Pentagon 512
;
;
; í¬ã«ïâ®à <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 #FF ; End of the block
;
;
;; Block #2 - ­¥«ì§ï ®á¢®¡®¦¤ âì
DB 0,2,5 ; for Spectrum and BIOS starting
;; Block #2 - ­¥«ì§ï ®á¢®¡®¦¤ âì
DB 0,2,5 ; for Spectrum and BIOS starting
DB DCP_PAGE ; Ports map
DB Spec_Page ; Page for Spectrum mode
; Screen pages
; Screen pages
DB #50,#51,#52,#53,#54,#55,#56,#57
DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F
;
DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F
;
;DB MODE_PAGE ; ?????
DB CBL.BUFFER_PAGE ; Page for CBL audio
DB SYS_PAGE ; Page for system (BIOS) variables
DB #FF ; End of the block
DB CBL.BUFFER_PAGE ; Page for CBL audio
DB SYS_PAGE ; Page for system (BIOS) variables
DB #FF ; End of the block
;
.Blocks EQU 2
;----------------------------------------------------------------------;
@ -119,10 +119,10 @@ RESERVED_PAGES:
;
;----------------------------------------------------------------------;
; <EFBFBD>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes,
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
; <EFBFBD>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes,
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;EMM_FN2M:
EMM.GetMem:
;PUSH DE
@ -141,7 +141,7 @@ EMM.GetMem:
JR NZ,.loop
DJNZ .loop
; Œ¥áâ® ¥áâì !
; Œ¥áâ® ¥áâì !
LD B,C ; ‚®ááâ ­®¢¨âì ­ã¦­ë© ®¡ê¥¬ ¤¨áª 
LD C,#FF ; Œ…’Š€ ŠŽ<C5A0>€ RAM-Disk
LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000
@ -155,7 +155,7 @@ EMM.GetMem:
LD C,L
DJNZ .loop2
; L - 㪠§ â¥«ì 楯®çª¨.
; L - 㪠§ â¥«ì 楯®çª¨.
EX AF,AF'
OUT (SLOT3),A
LD A,L
@ -179,10 +179,10 @@ EMM.GetMem:
;
;----------------------------------------------------------------------;
; <20>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes, ¤«ï RAM-Disk A
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢, A - RAM-Disk
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
; <20>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes, ¤«ï RAM-Disk A
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢, A - RAM-Disk
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;EMM.GetMem:
EMM.GetMemRMD:
PUSH AF
@ -194,7 +194,7 @@ EMM.GetMemRMD:
CALL BLK_TO_RAMD
RET NC
.error2:
LD L,2 ; RAM-Disk § ­ïâ ;!TODO ¯¥à¥ç¨á«¨âì ¢á¥ ¢ à¨ ­âë ®è¨¡®ª ¨ ¨å ­®¬¥à  ª ª ¤«ï „‘‘
LD L,2 ; RAM-Disk § ­ïâ ;!TODO ¯¥à¥ç¨á«¨âì ¢á¥ ¢ à¨ ­âë ®è¨¡®ª ¨ ¨å ­®¬¥à  ª ª ¤«ï „‘‘
LD A,L
RET
.error1:
@ -208,8 +208,8 @@ EMM.GetMemRMD:
;----------------------------------------------------------------------;
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk
EMM.FreeMemRMD:
CALL GET_RAMD_ST
RET C
@ -227,8 +227,8 @@ EMM.FreeMemRMD:
LD A,C
;JR EMM.FreeMem
;------[
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
; <20><20>Ž<EFBFBD>ˆœ DE!!!
;EMM_FN3M:
EMM.FreeMem:
@ -274,19 +274,19 @@ EMM_FN3M_ERR:
; WARNING!!! ­¥ âண âì DE
;----------------------------------------------------------------------;
; <20>®«ãç¨âì áâà ­¨æã N ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ 
; <20>®«ãç¨âì áâà ­¨æã N ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ 
EMM.GetMemPageRMD:
CALL GET_RAMD_ST
RET C
SCF
RET Z
;JR EMM.GetMemPage
;------[
; <20>®«ãç¨âì áâà ­¨æã N ¡«®ª  K
; ‚室: A - ¡«®ª, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ , IF CF - A=0 - ­¥â ¡«®ª , A=FF - END
;------[
; <20>®«ãç¨âì áâà ­¨æã N ¡«®ª  K
; ‚室: A - ¡«®ª, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ , IF CF - A=0 - ­¥â ¡«®ª , A=FF - END
;EMM_FN4M:
EMM.GetMemPage:
LD L,A
@ -327,9 +327,9 @@ EMM_F4M_END:
;
;----------------------------------------------------------------------;
; <20>®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¯® FAT
; ‚室: A - áâà ­¨æ  އ“
; ‚ë室: A - á«¥¤ãîé ï áâà ­¨æ  އ“
; <20>®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¯® FAT
; ‚室: A - áâà ­¨æ  އ“
; ‚ë室: A - á«¥¤ãîé ï áâà ­¨æ  އ“
;EMM_FN5:
EMM.GetMemPageNext:
LD L,A
@ -357,9 +357,9 @@ EMM.GetMemPageNext:
;
;----------------------------------------------------------------------;
; <20>®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¢ HL
; ‚室: A - ¡«®ª, HL -  ¤à¥á ¡ãä¥à  - 256 ¡ ©â.
; ‚ë室: HL -  ¤à¥á ¡«®ª , B - ¤«¨­  ¡«®ª  ¢ áâà ­¨æ å އ“
; <20>®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¢ HL
; ‚室: A - ¡«®ª, HL -  ¤à¥á ¡ãä¥à  - 256 ¡ ©â.
; ‚ë室: HL -  ¤à¥á ¡«®ª , B - ¤«¨­  ¡«®ª  ¢ áâà ­¨æ å އ“
;EMM_FN5M:
EMM.GetMemBlkPages:
PUSH DE
@ -433,17 +433,17 @@ EMM.GetMemBlkPages:
;
;----------------------------------------------------------------------; !FIXIT SAFE_RGADR
;RAMD_R_W:
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR º\
; º HL - BUFER º\
; º DE - ABS sector ¢ 256b ¡«®ª å º\
; º B - ç¨á«® ¤ ­­ëå ¢ 256b ¡«®ª å º\
; º A - block RAM º\
; º A' - ª®¬ ­¤  ç⥭¨¥/§ ¯¨áì/ç⥭¨¥ ROM Disk º\
; º 0 - read, 255 - write, 70 - read ROM DISK º\
; º ** NOT USED TR-DOS VARS ** º\
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR º\
; º HL - BUFER º\
; º DE - ABS sector ¢ 256b ¡«®ª å º\
; º B - ç¨á«® ¤ ­­ëå ¢ 256b ¡«®ª å º\
; º A - block RAM º\
; º A' - ª®¬ ­¤  ç⥭¨¥/§ ¯¨áì/ç⥭¨¥ ROM Disk º\
; º 0 - read, 255 - write, 70 - read ROM DISK º\
; º ** NOT USED TR-DOS VARS ** º\
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
BLK_RD_WR:
AND A
SCF
@ -453,42 +453,42 @@ BLK_RD_WR:
INC B
DEC B
RET Z
;
; á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨©
LD C,A
LD A,R
PUSH AF
;
; á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨©
LD C,A
LD A,R
PUSH AF
; á®å࠭塞 PORT_Y
IN A,(PORT_Y)
PUSH AF
LD A,#C0
OUT (PORT_Y),A
;
LD A,C
DI
CALL .start
EX AF,AF'
; ¢®ááâ ­ ¢«¨¢ ¥¬ PORT_Y
LD A,C
DI
CALL .start
EX AF,AF'
; ¢®ááâ ­ ¢«¨¢ ¥¬ PORT_Y
POP AF
OUT (PORT_Y),A
; ¢®ááâ ­ ¢«¨¢ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
POP AF
JP PO,.noInterrupts
EI
POP AF
JP PO,.noInterrupts
EI
.noInterrupts:
EX AF,AF'
RET
;
;
.start: EX AF,AF'
AND A ; 0 - read
AND A ; 0 - read
JR Z,.reset_Z
CP #FF ; write
CP #FF ; write
JR Z,.keep_Z
CP 5 ; old read
CP 5 ; old read
JR Z,.reset_Z
CP 6 ; old write
CP 6 ; old write
JR Z,.keep_Z
CP #46
@ -499,19 +499,19 @@ BLK_RD_WR:
RET
.reset_Z:
INC A ; set Z for WRITE
INC A ; set Z for WRITE
.keep_Z:
EX AF,AF'
;
;
PUSH HL
PUSH BC
LD C,SLOT1
IN B,(C)
LD H,A
LD H,A
LD A,SYS_PAGE
OUT (SLOT1),A
LD A,H
LD A,H
LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000)
LD L,A
@ -562,7 +562,7 @@ BLK_RD_WR:
RES 7,D
SET 6,D
.BLK_CONT1: ; DE - RamDisk, HL - data
.BLK_CONT1: ; DE - RamDisk, HL - data
EX AF,AF'
JR Z,.NO_EX_RW1 ; WRITE
EX DE,HL ; for READ
@ -574,7 +574,7 @@ BLK_RD_WR:
DUP 16
LDI
EDUP
DEC A
JR NZ,.BLK_LL1
@ -582,7 +582,7 @@ BLK_RD_WR:
JR Z,.NO_EX_RW2 ; WRITE
EX DE,HL ; for READ
.NO_EX_RW2:
EX AF,AF' ; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥à­ã«áï
EX AF,AF' ; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥à­ã«áï
INC B ; B 㦥 㬥­ì訫áï ­  1,
DEC B
JP Z,.BLK_EXIT_1
@ -628,7 +628,7 @@ BLK_RD_WR:
.BLK_EXIT_1:
LD A,D
DEC A
DEC A
RLCA
LD A,C
JR C,.BLK_EXIT_2
@ -645,19 +645,19 @@ BLK_RD_WR:
;
;----------------------------------------------------------------------;
;****************************************
;!!!!! READ_ROM_PAGE_X ç⥭¨¥ ¯®á«¥¤­¨å
; 256 ¡ ©â®¢ <20>‡“ ¢ á«ã¦¥¡­ãî áâà ­¨æã § ç¥¬-â®
; READ_ROM_PAGE_X:
; LD DE,0
; LD BC,#100 ; ®¤¨­ ᥪâ®à
; PUSH DE
; PUSH BC
; LD HL,#3F00
; LD DE,#FF00
; LD A,#1F ; last page ROM
; JR ROM_DISK.loopRead
;****************************************
;****************************************
;!!!!! READ_ROM_PAGE_X ç⥭¨¥ ¯®á«¥¤­¨å
; 256 ¡ ©â®¢ <20>‡“ ¢ á«ã¦¥¡­ãî áâà ­¨æã § ç¥¬-â®
; READ_ROM_PAGE_X:
; LD DE,0
; LD BC,#100 ; ®¤¨­ ᥪâ®à
; PUSH DE
; PUSH BC
; LD HL,#3F00
; LD DE,#FF00
; LD A,#1F ; last page ROM
; JR ROM_DISK.loopRead
;****************************************
; —⥭¨¥ á ROM-Disk
; HL -  ¤à¥á, ªã¤  ç¨â âì
@ -665,10 +665,10 @@ BLK_RD_WR:
; B - ç¨á«® ᥪâ®à®¢
; A' - à §¬¥à ᥪâ®à  (1 - 256b, 2 - 512 b)
ROM_DISK:
; á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨©
;LD A,R
; á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨©
;LD A,R
EX AF,AF'
LD C,0 ; áç¥â稪
LD C,0 ; áç¥â稪
DEC A
JR Z,.loop
;JR Z,.start
@ -682,18 +682,18 @@ ROM_DISK:
LD A,B
ADD A,A
LD B,A
;!!!!!
;!!!!!
RET C
DI
CALL .loop
; ; ¢®ááâ ­ ¢«¨¢ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
DI
CALL .loop
; ; ¢®ááâ ­ ¢«¨¢ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
; EX AF,AF'
; JP PO,.noInterrupts
; EI
; JP PO,.noInterrupts
; EI
; .noInterrupts:
; EX AF,AF'
; ;
; ;
RET C
AND A
RR D
@ -702,39 +702,39 @@ ROM_DISK:
RET
; .start:
; DI
; CALL .loop
; ; ¢®ááâ ­ ¢«¨¢ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
; DI
; CALL .loop
; ; ¢®ááâ ­ ¢«¨¢ ¥¬ á®áâ®ï­¨¥ ¯à¥à뢠­¨©
; EX AF,AF'
; JP PO,.noInterrupts2
; EI
; JP PO,.noInterrupts2
; EI
; .noInterrupts2:
; EX AF,AF'
; ;
; RET
; ;
; RET
.loop: PUSH DE ; ­®¬¥à ᥪâ®à 
.loop: PUSH DE ; ­®¬¥à ᥪâ®à 
PUSH BC
LD A,E
AND #3F ; ADRESS in ROM-Page
PUSH AF ; á®åà ­¨âì  ¤à¥á
PUSH AF ; á®åà ­¨âì  ¤à¥á
EX DE,HL ; DE -  ¤à¥á ¡ãä¥à 
EX DE,HL ; DE -  ¤à¥á ¡ãä¥à 
ADD HL,HL
ADD HL,HL ; H - ­®¬¥à ¡ ­ª¨
ADD HL,HL ; H - ­®¬¥à ¡ ­ª¨
LD A,(ROM_DISK.Pages.Number)
INC H
CP H
LD L,H
LD H, high ROM_DISK.Pages.Number ; ROM-Disk pages!
LD A,(HL) ; PAGE-ROM
LD H, high ROM_DISK.Pages.Number ; ROM-Disk pages!
LD A,(HL) ; PAGE-ROM
POP HL ; ¢®ááâ ­®¢¨âì  ¤à¥á ¢ ROM-Page
LD L,0 ; ¥á«¨ ¤ «¥ª® § å®â¥«¨ - ¢ë室 á ®è¨¡ª®©
JR C,.errorExit ; ROM-Disk-end
POP HL ; ¢®ááâ ­®¢¨âì  ¤à¥á ¢ ROM-Page
LD L,0 ; ¥á«¨ ¤ «¥ª® § å®â¥«¨ - ¢ë室 á ®è¨¡ª®©
JR C,.errorExit ; ROM-Disk-end
; DE - ¡ãä¥à
; HL -  ¤à¥á ¢ ROM
; B - ç¨á«® ᥪâ®à®¢
@ -757,37 +757,37 @@ ROM_DISK:
; DE - next address
; HL - ROM address
.readNext:
POP BC ; ç¨á«® ᥪâ®à®¢
POP BC ; ç¨á«® ᥪâ®à®¢
INC C ; áç¥â稪 áç¨â ­­ëå ᥪâ®à®¢
DEC B ; ᥪâ®à  ª®­ç¨«¨áì?
INC C ; áç¥â稪 áç¨â ­­ëå ᥪâ®à®¢
DEC B ; ᥪâ®à  ª®­ç¨«¨áì?
JR Z,.normExit
BIT 6,H ; ç⥭¨¥ ­¥ § ª®­ç¥­®
JR Z,.normExit
BIT 6,H ; ç⥭¨¥ ­¥ § ª®­ç¥­®
PUSH BC ; á®åà ­¨âì áç¥â稪¨
JR Z,.loopRead ; ç¨â âì ¤ «ìè¥
POP BC
PUSH BC ; á®åà ­¨âì áç¥â稪¨
JR Z,.loopRead ; ç¨â âì ¤ «ìè¥
POP BC
POP HL ; ­®¬¥à ᥪâ®à 
POP HL ; ­®¬¥à ᥪâ®à 
LD A,B
LD B,0
ADD HL,BC
LD B,A ; ¢ëç¨á«¨âì á«¥¤.ᥪâ®à
LD A,B
LD B,0
ADD HL,BC
LD B,A ; ¢ëç¨á«¨âì á«¥¤.ᥪâ®à
EX DE,HL ; ⥯¥àì HL -  ¤à¥á, DE ᥪâ®à, B - ᪮«ìª® ¥é¥ ç¨â âì
EX DE,HL ; ⥯¥àì HL -  ¤à¥á, DE ᥪâ®à, B - ᪮«ìª® ¥é¥ ç¨â âì
JP .loop ; ­ ç âì ¢á¥ á­®¢ !
JP .loop ; ­ ç âì ¢á¥ á­®¢ !
; ç⥭¨¥ § ª®­ç¥­®
.normExit:
POP HL ; ᥪâ®à, ®âªã¤  ¢¥«®áì ç⥭¨¥
ADD HL,BC ; ¯® ¢®§¢à âã: HL - á«¥¤. ¤à¥á
EX DE,HL ; DE - á«¥¤.ᥪâ®à
EX DE,HL ; DE - á«¥¤.ᥪâ®à
AND A
RET
; ®è¨¡ª 
.errorExit: ; !TODO ᤥ« âì, ç⮡ ­  ¢ë室¥ ¯®ª §ë¢ «®áì ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢
.errorExit: ; !TODO ᤥ« âì, ç⮡ ­  ¢ë室¥ ¯®ª §ë¢ «®áì ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢
POP BC
POP DE
SCF
@ -814,8 +814,8 @@ ROM_DISK:
;
;----------------------------------------------------------------------;
; ¢å®¤: DE - ram_disk trk_sec, A - RAM-Disk
; ¢ë室: HL -  ¤à¥á, A - page
; ¢å®¤: DE - ram_disk trk_sec, A - RAM-Disk
; ¢ë室: HL -  ¤à¥á, A - page
RAMD_CALC_PAGE:
CP 16
CCF
@ -843,32 +843,32 @@ RAMD_CALC_PAGE:
;
;----------------------------------------------------------------------;
; ‚室:
; A - RAM Disk ID
; ‚ë室:
; A - Number (0..15)
; ‚室:
; A - RAM Disk ID
; ‚ë室:
; A - Number (0..15)
GET_RAMD_NUM:
EX AF,AF'
IN A,(SLOT1)
EX AF,AF'
LD BC,SYS_PAGE * 256 + SLOT1
OUT (C),B
EX AF,AF'
IN A,(SLOT1)
EX AF,AF'
LD BC,SYS_PAGE * 256 + SLOT1
OUT (C),B
LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM
CPIR
LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM
CPIR
EX AF,AF'
OUT (SLOT1),A
EX AF,AF'
EX AF,AF'
OUT (SLOT1),A
EX AF,AF'
SCF
RET PE
SCF
RET PE
DEC L
LD A,L
SUB low SYS_PAGE.RAMD_KEYS
RET
DEC L
LD A,L
SUB low SYS_PAGE.RAMD_KEYS
RET
;----------------------------------------------------------------------;
;
@ -876,12 +876,12 @@ GET_RAMD_NUM:
;
;----------------------------------------------------------------------;
; [x] 04/11/2023
; ‚室:
; B = 0: swap to Sp
; ‚室:
; B = 0: swap to Sp
; B = #FF: swap to ZX
; B = #FE: no swap, only get info
; ‚ë室:
; A - current RAM Drives set
; ‚ë室:
; A - current RAM Drives set
SWAP_RAM_DRIVES:
IN A,(SLOT3)
EX AF,AF'
@ -928,7 +928,7 @@ SWAP_RAM_DRIVES:
;
;----------------------------------------------------------------------;
; ­  ¢ë室¥ ¯à¨ € = 0 ¤®«¦¥­ ¡ëâì ãáâ ­®¢«¥­ ä« £ Z
; ­  ¢ë室¥ ¯à¨ € = 0 ¤®«¦¥­ ¡ëâì ãáâ ­®¢«¥­ ä« £ Z
; ­¥ 㡨¢ ¥â DE ¨ BC
GET_RAMD_ST:
CP SYS_PAGE.RAMD_KEYS.NUM
@ -959,7 +959,7 @@ GET_RAMD_ST:
;
;----------------------------------------------------------------------;
; RAM-Disk A, BLK - B
; RAM-Disk A, BLK - B
BLK_TO_RAMD:
CP SYS_PAGE.RAMD_KEYS.NUM
CCF

View File

@ -391,39 +391,36 @@ REINIT: DEC B
;
;[x]
.Restart:
DI
LD A,0
LD BC,#1FFD
OUT (C),A
LD B,#7F
OUT (C),A
LD A,#40
OUT (SLOT3),A
LD A,5
OUT (SLOT1),A
LD A,2
OUT (SLOT3),A
LD A,0
OUT (SLOT0),A
OUT (RGADR),A
OUT (RGMOD),A
JP 0 ;Restart
.Restart: DI
XOR A
LD BC,#1FFD
OUT (C),A
LD B,#7F
OUT (C),A
OUT (RGADR),A
OUT (RGMOD),A
OUT (SLOT0),A
LD A,5
OUT (SLOT1),A
LD A,2
OUT (SLOT2),A
LD A,DCP_PAGE
OUT (SLOT3),A
JP 0 ;Restart
;
;
.SoftReset:
DI
LD A,#10
LD BC,#1FFD
OUT (C),A ; 8-ï áâà ­¨æ  !!
LD A,RESET_PAGE
OUT (SLOT3),A
LD A,CNF_PORT.TURBO.OFF
OUT (SYS_PORT.ROM),A
.loop2: LD (#C000),A ; Soft RESET !!!
JR .loop2
.SoftReset: DI
LD A,#10
LD BC,#1FFD
OUT (C),A ; 8-ï áâà ­¨æ  !!
;
LD A,RESET_PAGE
OUT (SLOT3),A
LD A,CNF_PORT.TURBO.OFF
OUT (SYS_PORT.ROM),A
.loop2: LD (#C000),A ; Soft RESET !!!
JR .loop2
;
;----------------------------------------------------------------------;
;

View File

@ -63,8 +63,8 @@ FN_CRIPT:
; BoardID_start old address #312A
; BoardID_end old address #312D
.board_id:
LD HL,(ROM_NUMBER.part1) ;rdlow-ok
LD A,(ROM_NUMBER.part2) ;rdlow-ok
LD HL,(BOARD_INFO.number) ;rdlow-ok
LD A,(BOARD_INFO.type) ;rdlow-ok
LD BC,(BoardID.start) ;rdlow-ok
LD DE,(BoardID.end) ;rdlow-ok
AND A

View File

@ -811,7 +811,7 @@ RESCREEN: ;R06
; LD E,A
; LD A,DCP_PAGE
; OUT (SLOT3),A
; LD A,(#C400) ;c400 for first cfg 50176 ; !TODO ¬®¦­® ¯¥à¥¤¥« âì ­  ¢ë§®¢ ä㭪樨 ¡¨®á 
; LD A,(#C400) ;c400 for first cfg 50176
; LD D,A
; LD A,ACEX.HOLD
; LD (#C400),A
@ -1142,30 +1142,64 @@ PIDNUM: LD HL,memBUFFER.ID
CALL PRINTZ
RET
PIDBOARD:
CALL FN_CRIPT.board_id
PIDBOARD: CALL FN_CRIPT.board_id
;
IF MotherBoardType > 0
PUSH AF
ENDIF
PUSH DE
PUSH HL
PUSH BC
LD A,B
CALL PRNHEX
LD A,'-'
CALL PRINT_CHAR
POP BC
LD A,C
CALL PRNHEX
LD A,'-'
CALL PRINT_CHAR
POP HL
CALL IZPRINT
POP DE
PUSH DE
LD A,D
CALL PRNHEX
POP DE
LD A,E
IF MotherBoardType == 0
JP PRNHEX
ELSE
CALL PRNHEX
LD A,' '
CALL PRINT_CHAR
POP AF
; type 0 - Classic
RET Z
; type 1 - DX
LD HL,.ver_DX
DEC A
JP Z,PRINTZ
; type 2 - DP
LD HL,.ver_DP
DEC A
JP Z,PRINTZ
; type 3 - Max
LD HL,.ver_Max
DEC A
JP Z,PRINTZ
; type 4 - test
LD HL,.Test
DEC A
JP Z,PRINTZ
RET
;
.ver_DX: DZ "DX"
.ver_DP: DZ "DP"
.ver_Max: DZ "Max"
.Test DZ "0123456789A"
ENDIF
PUSH DE
PUSH HL
PUSH BC
LD A,B
CALL PRNHEX
LD A,'-'
CALL PRINT_CHAR
POP BC
LD A,C
CALL PRNHEX
LD A,'-'
CALL PRINT_CHAR
POP HL
CALL IZPRINT
POP DE
PUSH DE
LD A,D
CALL PRNHEX
POP DE
LD A,E
JP PRNHEX
CNF_VER_PRINT:
LD HL,memBUFFER.ID

View File

@ -259,7 +259,7 @@ SHOW_LOGO: LD IX,win_descriptor.tab320x256
SAFE_PORTY
DI
LD A,1
LD A,SYS_PORT.PAGE0
OUT (SYS_PORT.ON),A
OUT (ROM.SLOT0),A
@ -283,21 +283,12 @@ SHOW_LOGO: LD IX,win_descriptor.tab320x256
SAFE_PORTY
DI
LD A,1
LD A,SYS_PORT.PAGE0
OUT (SYS_PORT.ON),A
;LD A,1
OUT (ROM.SLOT0),A
LD HL,MAIN_LOGO.Raster ; ­ ç «® ª à⨭ª¨ ¢ ¡ ­ª¥ <20>‡“
; CALL DECODE
CALL LOGO_TO_SCREEN
;
;--------------[<5B> áå «ª ]--------------[]
IF Pashalki
_PASHALKI_CODE
ENDIF
;--------------------------------------[]
;
XOR A
OUT (SYS_PORT.ON),A
OUT (ROM.SLOT0),A

View File

@ -14,6 +14,7 @@ BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD
DEFINE BoardID_start #5283
DEFINE BoardID_end #47E8
DEFINE MotherBoardID #0000
DEFINE MotherBoardType #00 ; !TODO 0 - Legacy, 1 - DX, 2 - Max
;=======================================
;============[For ROM part]============= ;!FIXIT ¢ë ­¥ ¯®­¨¬ ¥â¥, íâ® ¤à㣮¥))