Shared_Includes/constants/SP2000.inc
Tolik Trek cb54ddb207 ...
2026-05-02 22:15:49 +10:00

2673 lines
90 KiB
PHP
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DEFDEVICE SPRINTER, #4000, 256
DEFINE SLOT? +(SLOT0 | ((#C0 & high $)>>>1))
DEFINE OFFSET? +(SLOT3 ^ SLOT?)*512
IFNDEF _includedSP2000 : DEFINE _includedSP2000 : ENDIF
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;!TODO
STRUCT _ZX_TASK_DATA
.STATE BYTE 0 ; +00 b0 - ᢮¡®¤­ /á®åà ­¥­ , b1 - ¦¤ñâ/à ¡®â ¥â, b2 - áâ ­¤ àâ­ ï/ª á⮬­ ï ¯ «¨âà 
.SLOT3_PAGE BYTE 0 ; +01 âà¥âìï áâà ­¨æ  § ¤ ç¨
.SP WORD 0 ; +02 㪠§ â¥«ì ­  áâíª
.TYPE BYTE 0 ; +04 ⨯ ¯ ¬ïâ¨: 0 - 48k, 1 - Pent128, 2 - Pent512, 3 - Scorp256
.vRAM_ID BYTE 0 ; +05 RAM ID ¤«ï áâà ­¨æ އ“ ᯥªâà㬠
.vROM_ID BYTE 0 ; +06 RAM ID ¤«ï áâà ­¨æ <EFBFBD>‡“ ᯥªâà㬠
.PORT_ALL_MODE BYTE 0 ; +07
.FN_SYNC BYTE 0 ; +08 bit2..0 - ⨯ ¨­â . bit7..6 ⨯ à §¢ñà⪨
.CNF_PORT BYTE 0 ; +09
.RESERVED BYTE 0 ; +10
BYTE 0 ; +11
BYTE 0 ; +12
BYTE 0 ; +13
BYTE 0 ; +14
BYTE 0 ; +15
ENDS
STRUCT _ZX_TASK
.CURRENT BYTE 0
.RESERVED BLOCK 16 - 1
.ID_0 _ZX_TASK_DATA
.ID_1 _ZX_TASK_DATA
.ID_2 _ZX_TASK_DATA
.ID_3 _ZX_TASK_DATA
ENDS
; MODULE FDD_INIT_TABLE
; FDD EQU 3
; FDD_0 EQU SYS_PAGE.FDD_0
; .DISK EQU FDD_0+0
; .F144 EQU .DISK
; .SECTORS EQU FDD_0+1
; .MS_SECS EQU .SECTORS
; .HEADS EQU FDD_0+2
; .CYLINDL EQU FDD_0+3
; .CYLINDH EQU FDD_0+4
; .BytesPerSector EQU FDD_0+5 ;WORD B_P_S
; .ID EQU .BytesPerSector + 2
; ; FDD_1 EQU SYS_PAGE.FDD_1
; ; .DISK EQU FDD_1+0
; ; .F144 EQU .DISK
; ; .SECTORS EQU FDD_1+1
; ; .MS_SECS EQU .SECTORS
; ; .HEADS EQU FDD_1+2
; ; .CYLINDL EQU FDD_1+3
; ; .CYLINDH EQU FDD_1+4
; ; .BytesPerSector EQU FDD_1+5 ;WORD B_P_S
; ; .ID EQU .BytesPerSector + 1
; ENDMODULE
;
STRUCT FDD_TABLE_s
.DISK BYTE #80 ; bit7 - 720/1440, bit0 - fdd number
.SECTORS BYTE #12 ;
.HEADS BYTE #02 ;
.CYLINDL BYTE #50 ;
.CYLINDH BYTE #00 ;
.BytesPerSector WORD #0200 ; ; WORD B_P_S
.ID BYTE #03 ; #FF -none; 1 - 3.5; 2 - 5.25; 3 -??? ; .BytesPerSector + 2.
ENDS
;
; STRUCT FDD_720_TABLE
; .DISK BYTE #00 ; bit0 - fdd number, bit7 - 720/1440
; .SECTORS BYTE #09 ;
; .HEADS BYTE #02 ;
; .CYLINDL BYTE #50 ;
; .CYLINDH BYTE #00 ;
; .BytesPerSector WORD #0200 ; ; WORD B_P_S
; .ID BYTE #03 ; 0 -none; 1 - 3.5; 2 - 5.25; 3 -??? ; .BytesPerSector + 2.
; ENDS
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; <EFBFBD>à¥à뢠­¨ï ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; ‚¥ªâ®à #FF:
; ª« ¢¨ âãà  - ¢¨á¨â 32 â ªâ . ¬®¦­® ¯à®¢¥à¨âì ¯® ¡ãä¥àã ¢ ¯à®æ¥, ¬®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨.
; ª ¤à®¢®¥ - ¢¨á¨â 32 â ªâ . Œ®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨.
; CBL - ¢¨á¨â ¤® § å¢ â  ¯à®æ¥¬, ¬®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨.
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; €¤à¥á  ¯®à⮢ ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; <EFBFBD>Ž<EFBFBD> #FE
; Read:
; bit0 - keyboard
; bit1 - keyboard
; bit2 - keyboard
; bit3 - keyboard
; bit4 - keyboard
; bit5 - display sync: 1 - «ãç>256, 0 - «ãç<256. •®¤ «ãç  0..319 / 0..311, ¢ § ¢¨á¨¬®á⨠®â à §¢ñà⪨. <EFBFBD> ¡®â ¥â ⮫쪮 ¯à¨  ªâ¨¢¨à®¢ ­­®¬ CBL, ¨­ ç¥ ¢á¥£¤  0
; bit6 - Tape in
; bit7 - ¥á«¨  ªâ¨¢¨à®¢ ­ë ¯à¥à뢠­¨ï CBL: 1 - CBL interrupt, ¨­ ç¥ à áè¨à¥­­ë© ¡¨â ᯥªâà㬮¢áª®© ª« ¢¨ âãàë
;
; Write:
; bit0 - Border Color
; bit1 - Border Color
; bit2 - Border Color
; bit3 - Tape out
; bit4 - Beeper out
; bit5 -
; bit6 -
; bit7 -
ZX_Tape_Out EQU #FE ; bit 3
ZX_Tape_In EQU #FE ; bit 6
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;
MODULE SP_SND
Beeper EQU #FE ; bit 4
.mask EQU #10
;
AY EQU #FD ; low address
.CTRL EQU #FFFD
.DATA EQU #BFFD
/*
AY_FFFD_READ
AY_FFFD_WRITE EQU #90 ; AY-8910-port (FFFD) ;!!!!! § ¯¨áì  ¤à¥á ??????
AY_BFFD EQU #91 ; AY-8910-port (BFFD)
*/
; Covox Blaster
CBL:
.OUT EQU #4F ; <20>®àâ ¤«ï ¢ë¢®¤  §¢ãª  = #FB
.BUFFER_PAGE EQU #FD ; áâà ­¨æ -¡ãä¥à ¤«ï ª¨¤ ­¨ï ¬ã§«   ªá¥«¥¬ (¯à¥à뢠­¨ï CBL ¤®«¦­ë ¡ëâì ¢ª«î祭ë)
.INT_PORT EQU #FE ; .SYS_PORT:bit4=1 --> .INT_PORT:bit7=1 § ¯à®á ­  § ¯®«­¥­¨¥ ¯®«ã¡ãä¥à  ¤ ­­ë¬¨
.SYS_PORT EQU #004E ; ¯®àâ ã¯à ¢«¥­¨ï COVOX-Blaster (CBL_DIR). 16-bit port!!!, ¯¨á âì ç¥à¥§ OUT (c),reg ¨«¨ ®ç¥­ì ®áâ®à®¦­®))
.COVOX_OUT EQU #FB ; <20>®àâ ¤«ï ¢ë¢®¤  §¢ãª  = #4F
; Data for .SYS_PORT
;Bit 7
.Covox EQU #00
.Blaster EQU #80
;Bit 6
.Mono EQU #00
.Stereo EQU #40
;Bit 5
.is8bit EQU #00
.is16bit EQU #20
;Bit 4
.Int_off EQU #00
.Int_on EQU #10
;Bit 3..0
.KHz_16old EQU #00
.KHz_22old EQU #01
.KHz_8 EQU #08
.KHz_11 EQU #09
.KHz_16 EQU #0A
.KHz_22 EQU #0B
.KHz_31 EQU #0C
.KHz_44 EQU #0D
.KHz_55 EQU #0E
.KHz_109 EQU #0F
;
; #00 - COVOX on, standart Pentagon mode
; #80 - CBL on, 15 kHz mono
; #81 - CBL on, 22 kHz mono
; Bits:
; 7 - covox/CBL
; 6 - ¬®­®/áâ¥à¥®
; 5 - 8/16 ¡¨â
; 4 - ¢ëª«/¢ª« ¯à¥à뢠­¨© (¢¥ªâ®à #FF, ¯à¨§­ ª - ¯®àâ #FE.bit7 ¨ ¢¥á¨â ¤® § å¢ â  ¯à®æ¥¬)
; 3..0 - ç áâ®â  ; ¤®¯®«­¨âì
; — áâ®âë:
; Žâ 8 ¤® 15
; ‡­ ç¥­¨ï 0..7 ¤«ï ᮢ¬¥á⨬®á⨠ᮠáâ àë¬ ¡« áâ¥à®¬: 0 - 16, 1 - 22 ªƒæ
;
; ¡ãä¥à - 256/512 ¡ ©â (8/16 bit mode)
; (2 ¡ ­ª¨ ¯® 128/256)
; ¯à¥à뢠­¨¥ ¯à¨«¥â ¥â ¯®á«¥ ª ¦¤®©
; ¡ ­ª¨
;
; <EFBFBD>¥¦¨¬ 8 ¡¨â:
; ã஢¥­ì ­ã«ï ¢ ᥬ¯« å - #80
; <EFBFBD>¥¦¨¬ 16 ¡¨â:
; ã஢¥­ì ­ã«ï ¢ ᥬ¯« å - #0000
; Stereo-áí¬¯«ë:
; ç¥à¥¤ãî騥áï ®âáç¥âë L ¨ R ª ­ «®¢.
;
; mono_8bit:
; DB 80h,81h,7Fh....
; mono_16bit:
; DW 0,1000,-1000...
; stereo_8bit:
; DB 80h,80h,81h,80h,7Fh,80h... ; §¤¥áì ®¤¨­ ª ­ « ¨£à ¥â, ¢â®à®© ¬®«ç¨â
; stereo_16bit:
; DW 0,0,1000,0,-1000,0... ;  ­ «®£¨ç­®, ®¤¨­ ª ­ « ¨£à ¥â, ¢â®à®© ¬®«ç¨â
;
; CASE CBL_XX[3..0] IS
; WHEN 0 => CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo
; WHEN 1 => CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo
; WHEN 2 => CBL_TAB[] = 0; -- reserved
; WHEN 3 => CBL_TAB[] = 0; -- reserved
; WHEN 4 => CBL_TAB[] = 0; -- reserved
; WHEN 5 => CBL_TAB[] = 0; -- reserved
; WHEN 6 => CBL_TAB[] = 0; -- reserved
; WHEN 7 => CBL_TAB[] = 0; -- reserved
;
; WHEN 8 => CBL_TAB[] = 27; -- 7.8125 KHz -- mono/stereo 8/16 bit
; WHEN 9 => CBL_TAB[] = 19; -- 10.9375 KHz -- mono/stereo 8/16 bit
; WHEN 10=> CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo 8/16 bit
; WHEN 11=> CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo 8/16 bit
; WHEN 12=> CBL_TAB[] = 6; -- 31.25 KHz -- mono/stereo 8/16 bit
; WHEN 13=> CBL_TAB[] = 4; -- 43.75 KHz -- mono/stereo 8/16 bit
; WHEN 14=> CBL_TAB[] = 3; -- 54.6875 KHz -- mono/stereo 8/16 bit
; WHEN 15=> CBL_TAB[] = 1; -- 109.375 KHz -- mono/stereo 8/16 bit
; END CASE;
ENDMODULE
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;
; SYS_PORT / CNF_PORT
;
; § ¬ ¯«¥­ ç¥à¥§ ª àâã ¯®à⮢ ­  #7C/#3C ¨ #74/#24
CNF_PORT:
.ON EQU #74
.OFF EQU #24
.vBIOS EQU .ON
.vZX_ROM EQU .OFF
; Data:
.BIOS EQU 0
.EXTENSION EQU 1
.TURBO.OFF EQU 2 ; ¤ ­­ë¥ ¤«ï ¢ëª«î祭¨ï TURBO
.TURBO.ON EQU 3 ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
.CNF_0 EQU #04 ; ª àâ  ¯®à⮢ 0 - ¯®àâë á¯à¨­â¥à 
.CNF_1 EQU #0C ; ª àâ  ¯®à⮢ 1 - ¤«ï ०¨¬  Scorpion
.CNF_2 EQU #14 ; ª àâ  ¯®à⮢ 2 - ¤«ï ०¨¬  Pentagon
.CNF_3 EQU #1C ; ª àâ  ¯®à⮢ 3 - ¤«ï ¤®áâ㯠 ª ƒ93 ¡¥§ ᨣ­ «  DOS_ON
.PENT_RESET EQU #20
.SCORP_RESET EQU #40
.CNF_512 EQU #80 ; ¢ª«î祭¨¥ Pentagon 128
.ZX_BIOS EQU #00
.ZX_EXTENSION EQU #01
; ¯à¨¡¨â ¢ ª®­ä¥ £¢®§¤ï¬¨ ­  #7C/#3C
SYS_PORT:
.ON EQU #7C
.OFF EQU #3C
.RAM EQU .OFF
.ROM EQU .ON
; Data:
.PAGE0 EQU 1
.PAGE8 EQU 0
.EXTENSION EQU .PAGE0
.BIOS EQU .PAGE8
.TURBO.ON EQU CNF_PORT.TURBO.ON
.TURBO.OFF EQU CNF_PORT.TURBO.OFF
.CNF_0 EQU CNF_PORT.CNF_0
.CNF_1 EQU CNF_PORT.CNF_1
.CNF_2 EQU CNF_PORT.CNF_2
.CNF_3 EQU CNF_PORT.CNF_3
.PENT_RESET EQU CNF_PORT.PENT_RESET
.SCORP_RESET EQU CNF_PORT.SCORP_RESET
.CNF_512 EQU CNF_PORT.CNF_512
/*
---------------------------------------------------
CNF_PORT ¢¨á¨â ­  4 ¢­¥è­¨å ¯®àâ å (#7C/#3C ¨ #74/#24) ç¥à¥§ ª àâã ¯®à⮢.
SYS_PORT £¢®§¤ï¬¨ ¢ ª®­ä¥ ­  #7C/#C
SYS_PORT ⮫쪮 ¯¥à¥ª«îç ¥â RAM/ROM
CNF_PORT ¬¥­ï¥â ¢áñ ®áâ «ì­®¥, ¯à¨ ¡¨â1=0 ¬¥­ïîâáï áâà ­¨æë í¬ã«ïâ®à  <20>‡“ ç¥à¥§ ¡¨â0
CNF_PORT
bit0 - TURBO: ¨«¨ vROM:
0 - off #24 - áâà ­¨æ  ¨§ ¢­.¯®àâ  (#E0..#E3)/(#E4..#E7)
1 - on #74 - áâà ­¨æ  ¨§ ¢­.¯®àâ  #EB/#EF
bit1 - 1 - Set TURBO, 0 - Set vROM page
bit2 - 1 - CNF ena
bit3 - \_ cnf0..cnf3 -\
bit4 - / - \
bit5 - CNF_PN[5..0]_RESET by 1 - á¡à®á <20>¥­â. ¯®àâ  - -|---> ¤¥©áâ¢ãîâ ⮫쪮 ¯à¨ bit2=1
bit6 - CNF_SC_RESET by 1 - á¡à®á ‘ª®à¯. ¯®àâ  - /
bit7 - CNF_PN[7..6]_RESET by 0 - á¡à®á <20>¥­â-512 -/
<09>¥à¥ª«î祭¨¥ áâà ­¨æ vROM:
____________________________________________________
| ‡­ ç¥­¨¥ | ‡ ¯¨áì ¢® ¢­¥è­¨© ¯®àâ: |
| ¨§ ¢­ãâà. |____________________________________|
| ¯®àâ  | #24 ---- | | | |
| €«ìâ¥àë | #3C (-rom) | | | |
| ||| | #7C (+rom) | #74 | 1FFD | 7FFD |
| \|/ | bit1..0 | bit1..0 | bit1 | bit4 |
|_____________|____________|_________|______|______|
|E0 | 00 | | 1 | ... |
|E1 (+dos_on) | 00 | | 0 | ... |
|E2 | 00 | | 0 | 0 |
|E3 | 00 | | 0 | 1 |
|E4 | 01 | | 1 | ... |
|E5 (+dos_on) | 01 | | 0 | ... |
|E6 | 01 | | 0 | 0 |
|E7 | 01 | | 0 | 1 |
|EB | | 00 | ... | ... |
|EF | | 01 | ... | ... |
|_____________|____________|_________|______|______|
... - §­ ç¥­¨¥ ஫¨ ­¥ ¨£à ¥â
‘â ­¤ àâ­ë¥ áâà ­¨æë އ“ ¤«ï ®¡à §®¢ <20>‡“ ᯥªâà㬠:
Page Name Int.Port Page Name Int.Port
#42 BASIC 128 #E2 | ??? BASIC_128_2 #E6
#43 BASIC 48 #E3 | ??? BASIC_48_2 #E7
#44 TR-DOS #E1 | ??? TR_DOS_2 #E5
#45 ZX_EXPANSION #E0 | ??? EXPANSION_2 #E4
#46 ZX_BIOS_1 #EB |
#47 ZX_BIOS_2 #EF |
SYS_PORT:
bit0 - TURBO: on/off ¨«¨ BIOS:
0 - ROM 8
1 - ROM 0
bit1 - 1 - TURBO ena, 0 - ¯¥à¥ª«î祭¨¥ BIOS-PAGE
bit2 - 1 - CNF ena
bit3 - \_ cnf0..cnf3 -\
bit4 - / - \
bit5 - CNF_PN[5..0]_RESET by 1 - á¡à®á <20>¥­â. ¯®àâ  - -|---> ¤¥©áâ¢ãîâ ⮫쪮 ¯à¨ bit2=1
bit6 - CNF_SC_RESET by 1 - á¡à®á ‘ª®à¯. ¯®àâ  - /
bit7 - CNF_PN[7..6]_RESET by 0 - á¡à®á <20>¥­â-512 -/
”ã­ªæ¨ï bit0 ®¯à¥¤¥«ï¥âáï ç¥à¥§ bit1
bit7..bit3 áà ¡ â뢠î⠯ਠbit2 = 1
‡ ¯¨áì ¢ ¯®àâ #7C ¯®¤ª«îç ¥â <20>‡“ ¢ ®ª­® 0, § ¯¨áì ¢ ¯®àâ #3C ®âª«îç ¥â
<EFBFBD>‡“ ®â ®ª­  0, ¯®í⮬㠯®àâ 7/3C ­ §ë¢ ¥âáï System/User.
<EFBFBD>¥à¥ª«î祭¨¥ áâà ­¨æ <20>‡“ à ¡®â ¥â ¢ í⮬ ¢ à¨ ­â¥ â ª:
¢ <20>‡“ 16 áâà ­¨æ ®â 0 ¤® 15, ¯®àâ #5C ¨å ¯¥à¥ª«îç ¥â á bit3 xor /SYS (SYS_PORT bit[1..0] = b"0X" (BIOS: Part1/Part0))
¥á«¨ ᤥ« âì ld a,1 : out (sys_port_on),a - â® ­ã¬¥à æ¨ï áâà ­¨æ <20>‡“ ¡ã¤¥â ¯à ¢¨«ì­ ï ®â 0 ¤® 15,
¥á«¨ ᤥ« âì ld a,0 : out (sys_port_on),a - â® ­ã¬¥à æ¨ï áâà ­¨æ <20>‡“ ¡ã¤¥â á ¨­¢¥àâ¨à®¢ ­­ë¬ bit3:
áâà ­¨æë <20>‡“ 0-7 ¡ã¤ã⠭㬥஢ âìáï ª ª 8-15
áâà ­¨æë <20>‡“ 8-15 ¡ã¤ã⠭㬥஢ âìáï ª ª 0-7
¯¥à¥ª«î祭¨¥ áâà ­¨æ <20>‡“ ¯®à⮬ #5C ¯à®¨á室¨â ⮫쪮 ¯à¨ ¢®âª­ã⮩ <20>‡“ ç¥à¥§ sys_port.
Œ®¦­® ¯¥à¥ª«îç âì áâà ­¨æë ç¥à¥§ ¢­ãâ७­¨© ¯®àâ #8F, ⮣¤  bit4 í⮣® ¯®àâ  ¢ª«îç ¥â ᨣ­ « § ¯¨á¨ ¤«ï <20>‡“.
’ ª ¦¥ íâ®â ¯®àâ ¤ ñâ ¯àï¬ãî ­ã¬¥à æ¨î áâà ­¨æ ¯à¨ ãáâ ­®¢«¥­­®¬ bit4.
;-------------------------------------------------------------------------------------------------------------------------------
„«ï vROM ¬®¦­® ¨á¯®«ì§®¢ âì «î¡ë¥ ᢮¡®¤­ë¥ áâà ­¨æë އ“.
„«ï vRAM ­¥«ì§ï ¨á¯®«ì§®¢ âì:
#1FFD b4=1: #A0,#D0..#DF
*/
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;
; ¯®àâë ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ ä áâà ¬
FastRAM:
.ON EQU #FB ; ‚ª«î祭¨¥ ªíè  IN A,(FastRAM.ON) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
.OFF EQU #7B ; Žâª«î祭¨¥ ªíè  IN A,(FastRAM.OFF) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
.SLOT0 EQU #5C ; <20>¥à¥ª«î祭¨¥ áâà ­¨æ ªíè  ¯à¨ FastRAM.ON ¢ ­ã«¥¢®¬ ®ª­¥ (bit0..1) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
; <EFBFBD>¥à¥ª«î祭¨¥ áâà ­¨æ à ¡®â ¥â ⮫쪮 ¯à¨ SYS_PORT.ROM.
;!TODO ¯®áâ ¢¨âì ¢ ª à⥠¯®à⮢ ­  ç⥭¨¥ ¯®àâ  #FB ¢­ãâ७­¨© ¯®àâ SLOT0
; ç⮡ ¯à¨ ¢ª«î祭¨¨ ªíè ¢ ॣ¨áâà á®åà ­ï« áì áâà ­¨æ  ¢ ¡ ­ª¥ 0 (¯®«¥§­® ¯à¨ ¢ª«î祭¨¨ ªíè ¨§ ¡ ­ª¨ ­®«ì)
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;
; <EFBFBD>®àâ ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ <EFBFBD>‡“
; <EFBFBD>¥à¥ª«î祭¨¥ áâà ­¨æ <EFBFBD>‡“ ¯à¨ FastRAM.OFF ¢ ­ã«¥¢®¬ ®ª­¥.
ROM:
.SLOT0 EQU #5C ; <20>ਡ¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
.BIOS EQU SYS_PORT.BIOS ; ¤«ï sys_port.on D_ROM16OFF
.EXTENSION EQU SYS_PORT.EXTENSION ; ¤«ï sys_port.on D_ROM16ON
vROM:
.BIOS EQU CNF_PORT.BIOS ; ¤«ï sys_port.on D_ROM16OFF
.EXTENSION EQU CNF_PORT.EXTENSION ; ¤«ï sys_port.on D_ROM16ON
; ‡­ ç¥­¨ï:
; ­®¬¥à áâà ­¨æë bit3..0
; à §à¥è¥­¨¥ § ¯¨á¨ bit4 (0 - no Write; 1 - Write)
; ¯à¨ bit4 == 1 ¯à¨­ã¤¨â¥«ì­® ¢ëáâ ¢«ï¥âáï ¨ ¡«®ª¨àã¥âáï sys_pg ¢ 1 (ld a,1 : out (sys_port_on),a)
; ¯®ª  bit4 ­¥ á¡à®è¥­ ¯¥à¥ª«îç âì áâà ­¨æë <EFBFBD>‡“ system/user ç¥à¥§ ¯®àâ
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
CELL_PORT:
.TMP_1 EQU 4
.TMP_2 EQU 5
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;P_KBD_OUT EQU #F8 ;!TODO
;P_KBD_IN EQU #FE
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; KEMPSTON
KEMPSTON:
.JOYSTICK EQU 7
; —⥭¨¥: ¯®àâ ¤¦®©á⨪  ¨ ᨣ­ «ë DRQ, INTRQ ª®­â஫«¥à  ¤¨áª®¢®¤ .
; ‡ ¯¨áì: § ¯¨áì ¢ ¬¨ªà®á奬㠌9 - á¨á⥬­ë© ¯®àâ TR-DOS
; Š¥¬¯áâ®­ ¨§ DOS_ON ¤«ï ᯥ樠«ì­®£® è­ãઠ LPT+JOY ç⮡ ¯®
; PC Link ª®­­¥ªâ¨âìáï ª PC
.PC_Link EQU #FF ;JOY_DOS
; <EFBFBD>  ª ¦¤ë© ¢­¥è­¨© ¯®àâ ¬ë誨 ¯à®¯¨á ­ ®¤¨­ ¢­¥è­¨©, §­ ç¨â
; ª®­ä  ¬®­¨â®à¨â áâ à訩  ¤à¥á, DCP+Conf ®¡à ¡®âª .
.MOUSE.X EQU #FBDF
.MOUSE.Y EQU #FFDF
; bit0: «¥¢ ï ª­®¯ª  (0=­ ¦ â )
; bit1: ¯à ¢ ï ª­®¯ª  (0=­ ¦ â )
; bit2: á।­ïï ª­®¯ª  (0=­ ¦ â )
; bit3: § à¥§¥à¢¨à®¢ ­® ¯®¤ ¥éñ ®¤­ã ª­®¯ªã (0=­ ¦ â )
; bit4..7: ª®®à¤¨­ â  ª®«ñᨪ 
.MOUSE.Buttons EQU #FADF
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;
; Border
BorderColor EQU #FE
; 梥⠡®à¤îà  ¢ ०¨¬¥ á¯à¨­â¥à  ¡¥àñâáï ¨§ 4 ¯ «¨âàë.
; 梥⠢ ¯ «¨âॠ¢ëç¨á«ï¥âáï ¤ã¡«¨à®¢ ­¨¥¬ ¢ ­®¬¥à¥ æ¢¥â  ¡®à¤îà  bit2..0 ¢ bit5..3
; ¬®¦­® ¢ëç¨á«ïâì ¨â®£®¢ë© ¨­¤¥ªá ¢ ¯ «¨âॠ㬭®¦¥­¨¥¬ æ¢¥â  ­  9, «¨¡®
; âਠᤢ¨£  æ¢¥â  ¢«¥¢® ¯«îá ¨á室­ë© 梥â. Š ¦¤ë© 梥⠢ ¤¥ä®«â­®© ¯ «¨âà¥
; ¯®¢â®àï¥âáï 16 à §:
; 0 - BLACK color index #00 #00/#10 = 0
; 1 - BLACK color index #00 #00/#10 = 0
; 2 - BLUE color index #12 #12/#10 = 1
; 3 - BLUE color index #1B #1B/#10 = 1
; 4 - GREEN color index #24 #24/#10 = 2
; 5 - GREEN color index #2D #2D/#10 = 2
; 6 - CYAN color index #36 #36/#10 = 3
; 7 - CYAN color index #3F #3F/#10 = 3
;---------------------------------------
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; ZX keyboard
;
; ü ÉÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍ»
; <EFBFBD>ˆA º 0º 1º 2º 3º 4º 4º 3º 2º 1º 0º
; ÈÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍͼ
; ü ÚÄÄÂÄÄÂÄÄÂÄÄÂÄÄÒÄÄÂÄÄÂÄÄÂÄÄÂÄÄ¿ ü
; <EFBFBD> 3³ 1³ 2³ 3³ 4³ 5º 6³ 7³ 8³ 9³ 0³ 4 <EFBFBD>
; Ž ÃÄÄÅÄÄÅÄÄÅÄÄÅÄĺÄÄÅÄÄÅÄÄÅÄÄÅÄÄ´ Ž
; 2³ 5
; ÃÄÄÅÄÄÅÄÄÅÄÄÅÄĺÄÄÅÄÄÅÄÄÅÄÄÅÄÄ´
; <EFBFBD> 1³ L³EN³ 6 <EFBFBD>
; Ÿ ÃÄÄÅÄÄÅÄÄÅÄÄÅÄĺÄÄÅÄÄÅÄÄÅÄÄÅÄÄ´ Ÿ
; 0³CS³ M³SS³SP³ 7
; ÀÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÙ
; Š« ¢¨è  ­ ¦ â : ¡¨â = 0
; 3 - #F7 7 - #7F
; 2 - #FB 6 - #BF
; 1 - #FD 5 - #DF
; 0 - #FE 4 - #EF
; ‚®§¬®¦­® ®¤­®¢à¥¬¥­­®¥ ç⥭¨¥
; ­¥áª®«ìª¨å ¯®«ãà冷¢ ¯à¨ á¡à®á¥
; ­¥áª®«ìª¨å ¡¨â ¢ áâ à襬 ¡ ©â¥
;  ¤à¥á  ¯®àâ 
ZXKeys EQU #FE
.Line_0 EQU #FEFE
.Line_1 EQU #FDFE
.Line_2 EQU #FBFE
.Line_3 EQU #F7FE
.Line_4 EQU #EFFE
.Line_5 EQU #DFFE
.Line_6 EQU #BFFE
.Line_7 EQU #7FFE
; ????? —â®-â® ¯à® à áè¨à¥­­ë© ¡¨â ª« ¢ë ¢ #FE
; CS - caps shift
; SS - symbol shift
; FS - function shift
; Left Shift => CS
; Right SHIFT => CS
; Ctrl => SS
; Alt => SS+CS
; left WIN => ENTER+CS
; ESC => SPACE+CS
; Right WIN => ENTER+SS
; Right Mouse => SPACE+SS
; Back => 0+CS
; Tab => 1+CS
; Caps Lock => 2+CS
; PUp => 3+CS
; PDn => 4+CS
; <- => 5+CS
; Dn => 6+CS
; Up => 7+CS
; -> => 8+CS
; DEL => 9+CS
; ~ => A+SS
; '' => D+SS
; / => V+SS
; Grey * => B+SS
; , => N+SS
; . => M+SS
; [ => Y+SS
; ] => U+SS
; Grey 5 => I+SS
; ; => O+SS
; ' => P+SS
; Home => Q+SS
; Ins => W+SS
; End => E+SS
; - => J+SS
; Grey - => J+SS
; Grey + => K+SS
; = => L+SS
; F1 => 1+FS
; F2 => 2+FS
; F3 => 3+FS
; F4 => 4+FS
; F5 => 5+FS
; F6 => 6+FS
; F7 => 7+FS
; F8 => 8+FS
; F9 => 9+FS
; F10 => 0+FS
; Scroll Lock => CS+FS
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; ᨭåà®­¨§ æ¨ï íªà ­ 
SCR_SyncPort EQU #FE
; bit 5 - ᨭåà®­¨§ æ¨ï íªà ­ 
; ª ¤à®¢ë© ¨¬¯ã«ìá
; ¤«¨­  - 4 ¬á
; ¯¥à¨®¤ - 20 ¬á
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;
SLOT0 EQU #82 ; ­®¬¥à ¡ ­ª¨ 0
.MEM_ADDR EQU #00
SLOT1 EQU #A2 ; ­®¬¥à ¡ ­ª¨ 1
.MEM_ADDR EQU #4000
SLOT2 EQU #C2 ; ­®¬¥à ¡ ­ª¨ 2
.MEM_ADDR EQU #8000
SLOT3 EQU #E2 ; ­®¬¥à ¡ ­ª¨ 3
.MEM_ADDR EQU #C000
RGADR EQU #89 ; áâà ­¨æ  VIDEO-RAM ¤«ï ᯥªâà㬮¢áª®£® ०¨¬ 
PORT_Y EQU RGADR ; ¢¥à⨪ «ì­ ï ª®®à¤¨­ â  â®çª¨ ­  £à ä¨ç¥áª®¬ íªà ­
;RGSCR EQU #E9 = RGMOD
RGMOD EQU #C9 ; ¯®àâ ०¨¬  íªà ­ . <20>¥à¥ª«îç ¥â áâà ­¨æë ०¨¬  íªà ­ .
SCREEN_SWITCH EQU RGMOD
;RGACC EQU #A9
;PGACC EQU #FC
PORT_SCALE EQU #FC ; <20>®àâ ¬ áèâ ¡¨à®¢ ­¨ï
;VIDEO_PAGE EQU #50
ZX_MEM_PORT EQU #FD
.Scorpion EQU #1FFD
.Pentagon EQU #7FFD
Port_All_Mode EQU #204E
.SPECTRUM_MODE_OFF EQU 1 ; ACC on, KBD Int on, ZX Screen off
.MEM_WAITS_OFF EQU 4
.STOP_KBD_INT_OFF EQU 8
.RESERVED EQU #F2
.DEFAULT EQU .RESERVED + .STOP_KBD_INT_OFF + .MEM_WAITS_OFF + .SPECTRUM_MODE_OFF
; bit0 - 0: ¢ëª«  ªá¥«¥à â®à  ¨ ¯à¥à뢠­¨© ®â ª« ¢¨ âãàë, ¢ª«î祭¨¥ ᯥª®¢áª®©  ¤à¥á æ¨¨ íªà ­ .
; bit1 -
; bit2 - ¢ª«/¢ëª« original zx spectrum waits
; bit3 - ¢ª«/¢ëª« ®â¤¥«ì­®¥ ®â  ªá¥«¥à â®à  ¯à¥à뢠­¨ï ®â ª« ¢¨ âãàë
; bit4 -
; bit5 -
; bit6 -
; bit7 -
////////////////////////////////////////////////////////////////////////
;ISA-8
;
;Interaction with ISA devices:
;1) send 10h value to port 1FFDh(system port);
;2) send control byte to port 0E2h(third memory window port);
;control byte:
;D7...should be 1
;D6...should be 1
;D5...should be 0
;D4...should be 1
;D3...should be 0
;D2...specify access mode (0 - ISA memory, 1 - ISA ports)
;D1...specify number of ISA slot
;D0...should be 0
;
;fixed bug with D2 and D1 bits (functional exchange, but not documented)
;
;The r/w signals are forming from r/w signals memory range #C000h-#FFFF.
;And the address lines A13...A0 has taken from processor data-BUS.
;The other ISA-signals such as RESET, AEN, A19...A14 can be set in port
; #9FBDh. And default value is 0.
;port 9FBDh:
;D7...RESET, 1=reset, 0=normal
;D6...AEN, 1=
;D5...A19
;D4...A18
;D3...A17
;D2...A16
;D1...A15
;D0...A14
PORT_ISA EQU #9FBD
SLOT3_ISA: EQU SLOT3
.IRQ0_RAM EQU #D0
.IRQ0_IO EQU #D4
.IRQ1_RAM EQU #D2
.IRQ1_IO EQU #D6
////////////////////////////////////////////////////////////////////////
Port_VSYNC EQU #BD ; #41 - 320Lines/49Hz, #61 - 312Lines/50Hz
.SET_320L EQU #41
.SET_312L EQU #61
FDD_Density EQU #BD
.SET_720 EQU #01
.SET_1440 EQU #21
Port_HardReset EQU #AC
.Step1 EQU #41
.Step2 EQU #40
;
;----------------------------------------------------------------------;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; €¤à¥á  áâà ­¨æ ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SCR_PAGE EQU #FD
; PAL_PAGE EQU #FD
PAL_V_PAGE EQU #9E ;?????
PAL_SCP EQU #1E ;?????
; áâà ­¨æ  ¯®à⮢
DCP_PAGE EQU #40
; áâà ­¨æ  ¨á¯®«ì§ã¥¬ ï DSS
;DSS_PAGE EQU #FF
SHARED_PAGE EQU #FF
ZERO_PAGE EQU 0
ZX_PAGE:
.SLOT0 EQU ZERO_PAGE
.SLOT1 EQU 5
.SLOT2 EQU 2
.SLOT3 EQU .SLOT0
; áâà ­¨æ  ¤«ï ¯¥à¥å¢ â  à¥á¥â  ¨ ¥éñ 祣®-â®
Spec_Page EQU #41
.page_0 EQU #FFF0
.page_1 EQU #FFF1
.page_2 EQU #FFF2
.page_3 EQU #FFF3
.RET_addr EQU #FFF4 ; word
; ; ; ;
; #FF - áâ à®¥ ¯®¢¥¤¥­¨¥ (BIOS 3.05 ¨ ¬« ¤è¥)
; 0 - ­®¢®¥ ¯®¢¥¤¥­¨¥, ¢®§¢à â á SYS_PORT.BIOS
; 1 - ­®¢®¥ ¯®¢¥¤¥­¨¥, ¢®§¢à â á SYS_PORT.RAM
.Reload_Version EQU #FFF6
;
.Stack_Point EQU #FFF7 ; word
; RST ®¡®§­ ç îâ, çâ® íâ® à¥á¥â ¯®á«¥ ¯¥à¥§ «¨¢ª¨ ª®­äë
.flag_R EQU #FFFB
.flag_S EQU #FFFC
.flag_T EQU #FFFD
; ZX ®¡®§­ ç îâ, çâ® § £à㦥­ë ROM ᯥªâà㬠
.flag_Z EQU #FFFE
.flag_X EQU #FFFF
;
.no_zx_rom EQU #38
.to_bios EQU 8
.init_acex EQU #E000 ;!TEST
.bitstream_pages EQU .init_acex-(4+1) ;!TEST ;!HARDCODE ª®«¨ç¥á⢮ áâà ­¨æ ¢ ªíè ¤«ï ¡¨áâਬ  ¯«îá ®¤­ 
;LD (#FFF3),A ; á®å࠭塞 ¢ ᯥæáâà ­¨æã ­®¬¥à Spec_Page
;ZX_RAM_ID EQU 1 ; à ¬¡«®ª á® áâà ­¨æ ¬¨ ¤«ï ०¨¬  ᯥªâà㬠. “<><E2809C><EFBFBD>Ž
RESET_PAGE EQU #A0
; ‘¡à®á ¬®¦¥â ¡ëâì ®áãé¥á⢫¥­ § ¯¨áìî ¢ áâà ­¨æã #A0, ãáâ ­®¢«¥­­ãî ¢ à áè¨à¥­­ãî
; áâà ­¨æã Scorpion-®¢áª®£® à á¯à¥¤¥«¥­¨ï ¯®à⮢, â.¥. á«¥¤ãî饩 ¯à®£à ¬¬®©:
; DI
; LD A,16
; LD BC,#1FFD
; OUT (C),A
; LD A,RESET_PAGE
; OUT (PAGE3),A
; LD (#C000),A ; ¢ íâ®â ¬®¬¥­â ¯®¤ ¥âáï RESET
;
MODULE DRIVE_CODES
SPRINTER:
.FDD EQU #00
.RAM EQU #60
.ATA EQU #80
.HDD EQU .ATA
.ATAPI EQU #C0
.CDROM EQU .ATAPI
TRDOS:
.FDD EQU #00
.RAM EQU #04
.HDD EQU #40
ENDMODULE
;---------------------------------------------------------------------[]
; Câà ­¨æ  á á¨á⥬­ë¬¨ ¯¥à¥¬¥­­ë¬¨ BIOS
;---------------------------------------------------------------------[]
SYS_PAGE EQU #FE
.ID_FLAG EQU #C000 ; ª®¯¨ï ID_SPRINTER ¤«ï ¤¥â¥ªâ  ¯®«­®© ¨­¨æ¨ «¨§ æ¨¨. 32 bytes max
.ID_FLAG.Size EQU #20
; vsync:
; bit0 1 - 320L, 0 - 312L
; bit1 1 - no waits, 0 - original waits
.VSyncAndWaits EQU #C020
;!TODO EQU #C021 - #C027
; STACK for FN_LIB end EQU #C028
.SYS_SP EQU #C100 ; „Ž<E2809E>Ž<C5BD>ˆœ<E280B9>‰ ‘’…Š ¤«ï FN_LIB ¨ ¥éñ 祣®-â®
.DISK_TYPE EQU #C100 ; ¯¥à¥ ¤à¥á æ¨ï ¤¨áª®¢ (¯à®æ¥¤ãà ¬¨ ¤¨áª ¢ë¡¨à ¥âáï ¡¥§ ãçñâ  áâ à襣® ¡ ©â   ¤à¥á  ¨ ¯¥à¥¯®«­¥­¨ï)
.DISK_TYPE.A EQU #C100 ; ¯¥à¥ ¤à¥á æ¨ï ¤¨áªa A
.DISK_TYPE.B EQU #C101 ; ¯¥à¥ ¤à¥á æ¨ï ¤¨áªa B
.DISK_TYPE.C EQU #C102 ; ¯¥à¥ ¤à¥á æ¨ï ¤¨áªa C
.DISK_TYPE.D EQU #C103 ; ¯¥à¥ ¤à¥á æ¨ï ¤¨áªa D
.COPY_SLOT0 EQU #C104 ; ª®¯¨¨ §­ ç¥­¨© ¯®à⮢ áâà ­¨æ
.COPY_SLOT1 EQU #C105
.COPY_SLOT2 EQU #C106
.COPY_SLOT3 EQU #C107
.RAMD_VARS EQU #C108 ; ¯¥à¥¬¥­­ë¥ RAM-¤¨áª®¢ ;!TODO á®åà ­ïâì âã⠯ਧ­ ª ᬥ­ë à ¬¤¨áª  ¨«¨ ¥£® ¡«®ª  ¯ ¬ï⨠¤«ï ¤à ©¢¥à  DSS
.A_RAMD_VARS EQU #C118 ; ⥪ã騩 RAM-Disk
.SP_SAVE EQU #C11A ; ¬¥áâ® ¤«ï á®åà ­¥­¨ï  ¤à¥á  á⥪ 
.ERR_SAVE EQU #C11C
.COPY_RGADR EQU #C11D
.RAM_MSD EQU #C11E ; áâà ­¨æ  ¤«ï à ¡®âë ¢ MS-DOS
.MSD_SECS EQU #C11F ; —¨á«® ᥪâ®à®¢ ¢ MS-DOS
.MSD_NAME EQU #C120 ; €¤à¥á ¨¬¥­¨ ­ ©¤¥­­®£® ä ©« 
;.HDD_WRITE_PROTECT EQU #C122 ;!TODO ; ª®¯¨ï ᮤ¥à¦¨¬®£® ï祩ª¨ ª¬®á
.CURRENT_RAM_DRV EQU #C122 ; ⥪ã騩 ­ ¡®à à ¬¤¨áª®¢ ¤«ï ä㭪樨 SWAP_RAM_DRIVES
.INT_ADRESS EQU #C124 ;  ¤à¥á ®¡à ¡®â稪  ¯à¥à뢠­¨ï
.INT_PAGE EQU #C126 ; áâà ­¨æ  á ®¡à ¡®â稪®¬ ¯à¥à뢠­¨ï
.INT_ID EQU #C127 ; ¥á«¨ = #AA - §­ ç¨âì ®¡à ¡®â稪 ãáâ ­®¢«¥­
.DS_1440 EQU #C128 ; ä« £¨ ¯¥à¥ª«î祭¨ï 720/1440
.DS_1440.IS_SET EQU %0000'0010 ; bit1 - 720/1440
.FilesPerSector EQU #C129 ;.F_P_S ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
.SectorsPerCluster EQU #C12A ;.S_P_C ; ç¨á«® ᥪâ®à®¢ ä ©«®¢ëå § ¯¨á¥© ¢ ª« áâ¥à¥ Root Dir
.COUNT_FL EQU #C12B ; áç¥â稪 ä ©«®¢ ¢ ᥪâ®à¥
.COUNT_SEC EQU #C12C ; áç¥â稪 ᥪâ®à®¢ ¢ ª â «®£¥
.CURRENT_HDD EQU #C12D ; [x] bit0 - master/slave, bit1: Primary/Secondary, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR
.Block_IDs EQU #C12E
.Block_ID.vROM EQU .Block_IDs + 0 ; [ ] free zx pages!
.Block_ID.vRAM EQU .Block_IDs + 1 ; [ ] free zx pages!
.FAT_FLAG EQU #C130 ; FAT ä« £ + FAT sector??? #81FF - FAT16, #01FF - FAT12
.MSD_CONT_SEC EQU #C132 ; ⥪ã騩 ᥪâ®à ¤«ï MS-DOS
.MSD_CONT_SEC2 EQU #C134
.S_X_H EQU #C136 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥
.SCREEN_TABLE EQU #C138 ; "CONFIG_ALL"  ¤à¥á ­  â ¡«¨æã ®¯¨á â¥«ï íªà ­  - 2 ¡ ©â 
;
;…áâì â ª®© ª®¤, ­ ¯à¨¬¥à:
; LD DE,CNF_0+D_TBOFF
; LD (SYS_PAGE.CONFIG_DE),DE
; ¯¥à¢ë© ¡ ©â ¤«ï SYS_PORT_ON/OFF (०¨¬ âãà¡® ¨ CNF).
; ¢â®à®© ¡ ©â ¤«ï ¢ë¡®à  ®âªã¤  áâ à⮢ âì ¯à¨ § ¯ã᪥ äã­ªæ¨ï¬¨ <EFBFBD>‡“:
; 0 - ‚•Ž„ BASIC 128
; 1 - ‚•Ž„ BASIC 48
; 2 - ‚•Ž„ TR-DOS 128
; 3 - ‚•Ž„ EXPANSION
; 4 - ‚•Ž„ TR-DOS 48
; 5 - ‚•Ž„ BASIC 48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
.CONFIG_DE EQU #C13A ; ®¯¨á â¥«ì ª®­ä¨£ãà æ¨¨ - 2 ¡ ©â 
.CONFIG_DE.CNF_PORT EQU .CONFIG_DE
.CONFIG_DE.ZX_START EQU .CONFIG_DE+1
;
; 2 ¡ ©â  ª®­ä¨£ãà æ¨¨ - ­ á«¥¤¨¥ Sp97.
; Œ« ¤è¨© ¡ ©â ⥪ãé ï ª®­ä  (⨯  PG_SP1)
; ‘â à訩 ¡ ©â ¥á«¨ 0, â® íâ  ª®­ä   ªâ¨¢¨à®¢ ­ .
; Sp2000 â㤠 ¯¨å ¥âáï §­ ç¥­¨¥ ⨯  #FEFF
.CONFIG_BYTE EQU #C13E
;
;;;; ;!TODO 16 bytes
; .WIN_MAP_SC EQU #C140 ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_TAB_SC EQU #C142 ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_SAV_HL EQU #C144 ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_SAV_DE EQU #C146 ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_SAV_BC EQU #C148 ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_ZG EQU #C14A ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_PLACE_WIN EQU #C14C ; ­¥ ¨á¯®«ì§ãîâáï
; .WIN_GR_MAP EQU #C14E ; ­¥ ¨á¯®«ì§ãîâáï
;;;;
.SYS_WORK1 EQU #C150 ; word
.SYS_WORK2 EQU #C152 ; word
;.SYS_WORK3 EQU #C154 ; word ­¥ ¨á¯®«ì§ãîâáï
;.SYS_WORK4 EQU #C156 ; word ­¥ ¨á¯®«ì§ãîâáï
.TAP_RAM_BLK EQU #C158 ; byte
.TAP_RAM_POINT EQU #C159 ; word
;.TAP_FULL_SIZE EQU #C15B ; 3 bytes
;!TODO #C15E - #C15F
.MSD_FAT_SEC EQU #C160 ; ZX-ROMS TR-DOS ; ­ ç «ì­ë© ᥪâ®à FAT
.MSD_FAT_SEC2 EQU #C162 ; ZX-ROMS TR-DOS ; ­ ç «ì­ë© ᥪâ®à FAT
.MSD_CAT_SEC EQU #C164 ; ZX-ROMS TR-DOS ; ­ ç «ì­ë© ᥪâ®à CAT
.MSD_CAT_SEC2 EQU #C166 ; ZX-ROMS TR-DOS ; ­ ç «ì­ë© ᥪâ®à CAT
.MSD_DAT_SEC EQU #C168 ; ZX-ROMS TR-DOS ; ­ ç «ì­ë© ᥪâ®à DAT
.MSD_DAT_SEC2 EQU #C16A ; ZX-ROMS TR-DOS ; ­ ç «ì­ë© ᥪâ®à DAT
.CLUSTER_LEN EQU #C16C ; ZX-ROMS TR-DOS ; ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
.CLUSTER_LEN2 EQU #C16E ; ZX-ROMS TR-DOS ; ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
.TMP_BUFFER EQU #C170; - #C17F
.TMP_BUFFER.Size EQU 16
.RAMD_KEYS EQU #C180 ; RAM-Disks ID's -  ¤à¥á ¢ SYS_PAGE ¤«ï ª ¦¤®© ¡ãª¢ë à ¬¤¨áª 
.RAMD_KEYS.E EQU #C180 ; ¯® ª®â®à®¬ã åà ­¨âáï ¥£® ­ ç «ì­ë© ¡«®ª ¯ ¬ïâ¨
.RAMD_KEYS.F EQU #C181
.RAMD_KEYS.G EQU #C182
.RAMD_KEYS.H EQU #C183
.RAMD_KEYS.I EQU #C184
.RAMD_KEYS.J EQU #C185
.RAMD_KEYS.K EQU #C186
.RAMD_KEYS.L EQU #C187
.RAMD_KEYS.M EQU #C188
.RAMD_KEYS.N EQU #C189
.RAMD_KEYS.O EQU #C18A
.RAMD_KEYS.P EQU #C18B
.RAMD_KEYS.Q EQU #C18C
.RAMD_KEYS.R EQU #C18D
.RAMD_KEYS.S EQU #C18E
.RAMD_KEYS.T EQU #C18F
.RAMD_KEYS.NUM EQU 16
;!TODO EQU #C190..#C191
.HDD_PARTITION_OFFSET EQU #C192 ; - #C195 ; [x] à ¡®â  á à §¤¥« ¬¨ ¤«ï ä㭪権 4x ¢ BIOS
;[ ] current dir ¤«ï TR-DOS HDD
.CURRENT_DIR_SEC_L EQU #C196 ; word
.CURRENT_DIR_SEC_H EQU #C198 ; word
.CURRENT_DIR_DRIVE EQU #C19A
.CURRENT_DIR_DRIVE_COPY EQU #C19B
;
;=======================================================================
;.ATAPI_DRQ_INTERCEPTOR EQU #C19C ; [ ] ¤«ï ä㭪権 5x ¨ ATAPI ;!FIXIT
;!TODO EQU #C19C..#C19F
;.LIB_TABLE EQU #C1A0..#C1BF ; â ¡«¨æë Library 32 ¡ ©â 
; <EFBFBD> <EFBFBD>€‡„…Ÿœ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; .IDE_0 EQU #C1C0
; .IDE_1 EQU #C1C8
; .IDE_2 EQU #C1D0
; .IDE_3 EQU #C1D8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=======================================================================
;
; <EFBFBD> <EFBFBD>€‡„…Ÿœ! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.IDE_0 EQU #C1A0
.IDE_1 EQU #C1B0
.IDE_2 EQU #C1C0
.IDE_3 EQU #C1D0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;=======================================================================
.FDD_0 EQU #C1E0
.FDD_1 EQU #C1E8
;
.FDD_TABLE.A: FDD_TABLE_s = .FDD_0
.FDD_TABLE.A.Size EQU FDD_TABLE_s
;
.FDD_TABLE.B: FDD_TABLE_s = .FDD_1
.FDD_TABLE.B.Size EQU FDD_TABLE_s
;
;=======================================================================
;
; ª®¯¨¨ à ¬¤¨áª®¢ ¤«ï ¯¥à¥ª«î祭¨ï ¬¥¦¤ã ०¨¬ ¬¨ Spectrum / Sprinter
.Sp_RAMD_KEYS EQU #C1F0
.Sp_RAMD_KEYS.E EQU #C1F0
.Sp_RAMD_KEYS.F EQU #C1F1
.Sp_RAMD_KEYS.G EQU #C1F2
.Sp_RAMD_KEYS.H EQU #C1F3
.Sp_RAMD_KEYS.I EQU #C1F4
.Sp_RAMD_KEYS.J EQU #C1F5
.Sp_RAMD_KEYS.K EQU #C1F6
.Sp_RAMD_KEYS.L EQU #C1F7
.Sp_RAMD_KEYS.M EQU #C1F8
.Sp_RAMD_KEYS.N EQU #C1F9
.Sp_RAMD_KEYS.O EQU #C1FA
.Sp_RAMD_KEYS.P EQU #C1FB
.Sp_RAMD_KEYS.Q EQU #C1FC
.Sp_RAMD_KEYS.R EQU #C1FD
.Sp_RAMD_KEYS.S EQU #C1FE
.Sp_RAMD_KEYS.T EQU #C1FF
.Sp_RAMD_KEYS.NUM EQU .RAMD_KEYS.NUM
;
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.RAM_TABLE EQU #C200 ; ALIGN 256 ; RAM Table
.RAM_TABLE.Size EQU 256
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; !TODO EQU #C300 ; 256 ¡ ©â®¢
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.MS_BPB EQU #C400 ; ¡ãä¥à BPB
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
; IDENTIFY ATA buffer ; !FIXIT áâàãªâãன ᤥ« âì!!!
.HD_IDF_ADR EQU #C600 ; á çñâ­®£®  ¤à¥á . ˆá¯®«ì§ã¥âáï ¢ HDD_PROG tr-dos
.HD_IDF_ADR.sec_cyl EQU .HD_IDF_ADR+4
.HD_IDF_ADR.heads EQU .HD_IDF_ADR+6 ; Number of heads
.HD_IDF_ADR.sectors EQU .HD_IDF_ADR+12 ; Number of sectors per track
.HD_IDF_ADR.LBA_CHS EQU .HD_IDF_ADR+99 ; LBA/CHS
.HD_IDF_ADR.ModelNum EQU .HD_IDF_ADR+54
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.MS_DIR EQU #C800 ; ¡ãä¥à DIR sector
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.MS_FAT EQU #CC00 ; ¡ãä¥à FAT sector
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.MS_BUF EQU #D000 ; ¡ãä¥à DAT sector
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.WIN_MAP_IX EQU #E000 ; ¤ ­­ë¥ ª àâ ®ª®­ (96 ®¯¨á â¥«¥© ¯® 32 ¡ ©â )
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
.ZX_TASK _ZX_TASK = #EC00 ; ’¥ªãé ï § ¤ ç 
;.END EQU #EC4F
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;!TODO EQU #EC50 ;-ECFF
.SHARED_BUFFER_256b EQU #ED00
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;!TODO EQU #EE00 - #EFFF
.RESTART_ID EQU #F000 ; db "RESTART",0 ;First start identificator
.PowerOnTime EQU #F008 ; ¢à¥¬ï ¢ª«î祭¨ï ¨ ¯¥à¥§ £à㧪¨ #F008 - #F017
.USER_VARS EQU #F018 ; ¯¥à¥¬¥­­ë¥ ¯®«ì§®¢ â¥«ï
.SHARED_BUFFER_32b EQU #FEE0; - #FEFF
.CMOS_EMULATOR EQU #FF00
.USER_VARS_2 EQU .CMOS_EMULATOR + CMOS.MAX_ADDRESS + 1
;------------[ OLD ]-------------;
;.SYSTEM_ID EQU #C020 ; ¨á¯®«ì§®¢ « áì ¤«ï ¯®¤¬¥­ë ¡¨®á "NEW_BIOS"
;.MSD_FAT_SEC EQU #C122 ; ­ ç «ì­ë© ᥪâ®à FAT
;.INT_ADRESS EQU #C124 ; ­ ç «ì­ë© ᥪâ®à CAT
;.INT_PAGE EQU #C126 ; ­ ç «ì­ë© ᥪâ®à DAT
;.ClusterPerBank EQU #C12D ;.C_P_B ; <20>ˆ<CB86>Žœ‡“…Ÿ ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“
;.CLASTER_LEN EQU #C12E ; WORD ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
;.CMOS_FLAG_1 EQU #C170
;.WIN_MAP_LAB1 EQU #C158
;.WIN_MODE_SH EQU #C15C ; ¬¥áâ® ¯® ¢¥à⨪ «¨ á  ¤à¥á®¬
;.WIN_MODE_SC EQU #C15E ; ¬¥áâ® ¯® £®à¨§®­â «¨ ¨ áâà ­¨æ  ¬®¤ë
;---------------------------------------------------------------------[]
;
;
STRUCT BIOS_DATE_FORMAT ; !FIXIT ¯¥à¥¤¥« âì ¯®¤ áâàãªâãà㠢ᥠ¯¥à¥¬¥­­ë¥ #FE
hour BYTE
minute BYTE
second BYTE
day BYTE
month BYTE
year_high BYTE
year_low BYTE
reserved BYTE
ENDS
PowerOnDate BIOS_DATE_FORMAT = SYS_PAGE.PowerOnTime
RebootDate BIOS_DATE_FORMAT = PowerOnDate + BIOS_DATE_FORMAT
;#F008-#F00F : db hour,min,sec,day,month,century-1,year-century,reserved ; PowerOn date
;#F010-#F017 : db hour,min,sec,day,mouth,century-1,year-century,reserved ; Reboot date
;
;----------[CMOS Registers]-------------
CMOS.Port.Data:
.Read EQU #FFBD
.Write EQU #BFBD
CMOS.Port.Address:
.Write EQU #DFBD
CMOS.Register:
.seconds EQU #00
.alarmSeconds EQU #01
.minutes EQU #02
.alarmMinutes EQU #03
.hours EQU #04
.alarmHours EQU #05
.dayOfWeek EQU #06
.date EQU #07
.month EQU #08
.year EQU #09
.century EQU #32
; bit7 - Update-In-Progress. read-only
; bit6..4 - %010: to turn the oscillator on and allow the RTC to keep time.
; %11x: enables the oscillator but holds the countdown chain in reset.
; The next update occurs at 500ms after a pattern of 010 is written.
; bit3..0 - Rate Selector. These four rate-selection bits select one of
; the 13 taps on the 15-stage divider or disable the divider output.
; The tap selected can be used to generate an output square wave (SQW pin)
; and/or a periodic interrupt. The user can do one of the following:
; 1) Enable the interrupt with the PIE bit;
; 2) Enable the SQW output pin with the SQWE bit;
; 3) Enable both at the same time and the same rate; or
; 4) Enable neither.
.CTRLregA EQU #0A
; bit7 - SET. ¢ëáâ ¢«ïâì ¢ 1 ¯¥à¥¤ ãáâ ­®¢ª®© ¢à¥¬¥­¨/¤ âë, ¯®á«¥ ®¡à â­® ¢ 0.
; bit6 - Periodic Interrupt Enable (PIE)
; bit5 - Alarm Interrupt Enable (AIE)
; bit4 - Update-Ended Interrupt Enable (UIE)
; bit3 - Square-Wave Enable (SQWE)
; bit2 - Data Mode (DM). ä®à¬ â ¤ âë ¨ ¢à¥¬¥­¨: BCD/HEX
; bit1 - time format: 12/24
; bit0 - Daylight Saving Enable (DSE)
.CTRLregB EQU #0B
; bit7 - Interrupt Request Flag (IRQF)
; bit6 - Periodic Interrupt Flag (PF), read-only
; bit5 - Alarm Interrupt Flag (AF)
; bit4 - Update-Ended Interrupt Flag (UF)
; bit3..0 - Unused, read-only == 0
.CTRLregC EQU #0C ; read-only
; bit7 - Valid RAM and Time (VRT). …᫨ 1, â® ¡ â à¥ï ¢ ­®à¬¥, ¥á«¨ 0, â® ¡ â à¥ï ᤮嫠.
; bit6..0 - Unused, read-only == 0
.CTRLregD EQU #0D ; read-only
CMOS.USED_MIN_ADDRESS EQU #0E
CMOS.USED_MAX_ADDRESS EQU #3F
CMOS.MAX_ADDRESS EQU #7F
CMOS.TEST_CELL EQU CMOS.MAX_ADDRESS
CMOS.Cell.CheckSum EQU CMOS.USED_MAX_ADDRESS
MODULE CMOS_CELL
BootUpParams EQU #0E
.Mask.MemTest EQU %1000'0000 * 256 + BootUpParams ;!TODO ; MEMORY TEST
.Mask.SaveRAMdisks EQU %0100'0000 * 256 + BootUpParams ; SAVE RAM DISKS
.Mask.UpdBios EQU %0010'0000 * 256 + BootUpParams ;!TODO ; UPDATE BIOS
.Mask.StartDelay EQU %0001'1000 * 256 + BootUpParams ; START DELAY
.Mask.Language EQU %0000'0100 * 256 + BootUpParams ; LANGUAGE
.Mask.BootSound EQU %0000'0010 * 256 + BootUpParams ; StartUp Sound
.Mask.QuickStartROM EQU %0000'0001 * 256 + BootUpParams ; QUICK START
Typematic EQU #0F
.Mask.Enabled EQU %1000'0000 * 256 + Typematic ; ON/OFF
.Mask.Delay EQU %0110'0000 * 256 + Typematic ; DELAY 00-250, 01-500, 10-750, 11-1000
;.Mask.Reserved EQU %0001'1000 * 256 + Typematic
.Mask.Rate EQU %0000'0111 * 256 + Typematic ; RATE 0-6, 1-8, 2-10, 3-12, 4-15, 5-20, 6-24, 7-30
;FDD-1, FDD-2, IDE-1, IDE-2, IDE-3, IDE-4, Ram Dsk, Recovery
BootDrives EQU #10
.Mask.SysDisk EQU %0000'0111 * 256 + BootDrives
.Mask.AltSysDisk EQU %0111'0000 * 256 + BootDrives
DrivesSetup_1 EQU #11
.Mask.FirstFDD EQU %0000'0011 * 256 + DrivesSetup_1 ; FDD First 720/1.44/NONE
.Mask.SecondFDD EQU %0000'1100 * 256 + DrivesSetup_1 ; FDD Second 720/1.44/NONE
.Mask.PriIDEmaster EQU %0011'0000 * 256 + DrivesSetup_1 ; IDE Pri Master Auto/Setup/Disabled
.Mask.PriIDEslave EQU %1100'0000 * 256 + DrivesSetup_1 ; IDE Pri Slave Auto/Setup/Disabled
IDE_Setup.PriMaster:
.CylindersLow EQU #12
.CylindersHigh EQU #13
.Heads EQU #14
.Sectros EQU #15
IDE_Setup.PriSlave:
.CylindersLow EQU #16
.CylindersHigh EQU #17
.Heads EQU #18
.Sectros EQU #19
ScreenSET EQU #1A
.Mask.ColorStyle EQU %0000'1111 * 256 + ScreenSET ; COLOR STYLE For Setup
.Mask.Int EQU %0011'0000 * 256 + ScreenSET ; Frame Int (Default/Pentagon/Scorpion/Original)
.Mask.Sinc EQU %1100'0000 * 256 + ScreenSET ; Screen V-Sinc (Default/312 lines 50 HZ/320 Lines 49 Hz)
;;;;;;;;;;;;;;;;;;;;;;;; CONFIG ;;;;;;;;;;;;;;;;;;;;;;;;;
HardwareConfiguration EQU #1B
.Mask.TurboMode EQU %0000'0001 * 256 + HardwareConfiguration ; TURBO MODE (D0..D3 - 6 OR 7)
.Mask.TurboExchange EQU %0000'0010 * 256 + HardwareConfiguration ; TURBO EXCHANGE ON/OFF - 1
.Mask.PortExchange EQU %0000'0100 * 256 + HardwareConfiguration ; PORT EXCHANGE ON/OFF - 1
.Mask.Computer EQU %0001'1000 * 256 + HardwareConfiguration ; CONF: 0 - sprinter, 1 - spectrum, 2 - , 3 - ;!TODO
;
QuickStartSetUp EQU #1C
.Mask.ZxRom EQU %0000'0111 * 256 + QuickStartSetUp
.ZxRom.Basic128 EQU 0
.ZxRom.Basic48_Ram128 EQU 1
.ZxRom.TrDos EQU 2
.ZxRom.Expansion EQU 3
.ZxRom.TrDos48 EQU 4
.ZxRom.Basic48 EQU 5
.Mask.Hardware EQU %0011'1000 * 256 + QuickStartSetUp
.Hardware.SprinterZX EQU 0
.Hardware.Pentagon48 EQU 1
.Hardware.Pentagon128 EQU 2
.Hardware.Pentagon512 EQU 3
.Hardware.Scorpion256 EQU 4
.Hardware.ZXSpectrum48 EQU 5
.Hardware.ZXSpectrum128 EQU 6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Options EQU #1D
.Mask.HDDwriteProtect EQU %0000'0001 * 256 + Options ; [x] ã¡à ­®. à ¡®â «® ⮫쪮 á äã­ªæ¨ï¬¨ 5å ¨ ¯®áâ®ï­­® ¤ñ࣠«® CMOS ¯à¨ § ¯¨á¨
.Mask.RebootMSG EQU %0000'0010 * 256 + Options
.Mask.LoadZXroms EQU %0000'1100 * 256 + Options
TRDOSmount EQU #1E
.Mask.A EQU %0000'0011 * 256 + TRDOSmount ;Default - 0/ FDD - 1/ HDD - 2/ RMD - 3
.Mask.B EQU %0000'1100 * 256 + TRDOSmount
.Mask.C EQU %0011'0000 * 256 + TRDOSmount
.Mask.D EQU %1100'0000 * 256 + TRDOSmount
ScreenPosition EQU #1F
.Mask.X EQU %1111'0000 * 256 + ScreenPosition
.Mask.Y EQU %0000'1111 * 256 + ScreenPosition
DrivesSetup_2 EQU #20
.Mask.SecIDEmaster EQU %0011'0000 * 256 + DrivesSetup_2 ; IDE Sec Master Auto/Setup/Disabled
.Mask.SecIDEslave EQU %1100'0000 * 256 + DrivesSetup_2 ; IDE Sec Slave Auto/Setup/Disabled
; <20>ˆ<CB86>Žœ‡“…Ÿ, â㤠 áàãâ áâ àë¥ ¯à®£¨ ¨ vROM
;REGISTER #35 - BASIC SETTING 1 (SYS_PAGE.CONFIG_DE+1 = #C13B on PAGE #FE), §­ ç¥­¨¥ ¤«ï CNF_PORT
; HardwareConfiguration EQU #35
; .Mask.TurboMode EQU %0000'0001 * 256 + HardwareConfiguration ; TURBO MODE (D0..D3 - 6 OR 7)
; .Mask.TurboExchange EQU %0000'0010 * 256 + HardwareConfiguration ; TURBO EXCHANGE ON/OFF - 1
; .Mask.PortExchange EQU %0000'0100 * 256 + HardwareConfiguration ; PORT EXCHANGE ON/OFF - 1
; .Mask.Computer EQU %0001'1000 * 256 + HardwareConfiguration ; COMPUTER: 0-SPRINTER, 1-Scorpion 256, 2-PENTAGON 128, 3-Other
; <20>ˆ<CB86>Žœ‡“…Ÿ ¯®ª 
;REGISTER #36 - BASIC SETTING 2
; %0000 0111
; QuickStartSetUp EQU #36
; .Mask.ZxRom EQU %0000'0111 * 256 + QuickStartSetUp
; ; 0 - Basic128
; ; 1 - Basic48_Ram128
; ; 2 - TrDos
; ; 3 - Expansion
; ; 4 - TrDos48
; ; 5 - Basic48
; .Mask.Hardware EQU %0011'1000 * 256 + QuickStartSetUp
; ; 0 - ZX-Sprinter
; ; 1 - Pentagon 48
; ; 2 - Pentagon 128
; ; 3 - Pentagon 512
; ; 4 - Scorpion 256
; ; 5 - ZX Spectrum 48
; ; 6 - ZX Spectrum 128
IDE_Setup.SecMaster:
.CylindersLow EQU #37
.CylindersHigh EQU #38
.Heads EQU #39
.Sectros EQU #3A
IDE_Setup.SecSlave:
.CylindersLow EQU #3B
.CylindersHigh EQU #3C
.Heads EQU #3D
.Sectros EQU #3E
CheckSum EQU CMOS.Cell.CheckSum
; Disabled use word CONFIG_DE
;
; LD A,#1C
; CALL READCMS
; PUSH AF
; LD A,#1B
; CALL READCMS
; POP DE
; LD E,A
ENDMODULE
;-----------------------------------------------------------------------
; <20>®àâë Š<>1818ƒ93 ¨ â.¯.
FDC_93:
.Command EQU #0F ; WG_COM R_COM ;Command/Status
.Track EQU #3F ; WG_TRK R_TRK ;Track
.Sector EQU #5F ; WG_SEC R_SEC ;Sector
.Data EQU #7F ; WG_DATA R_DAT ;Data
.DrvCTRL EQU #FF ; P_DOS_FF R_DSK ;Drive Control
;
;***************************************
; !FIXIT ¨á¯®«ì§®¢ âì áâàãªâãàã _sBOOT_SECTOR
SEC_SIZE EQU 11
CLAST_SIZE EQU 13
RESERV_SECS EQU 14
FATS_NUM EQU 16
FLS_NUM EQU 17
S_P_D EQU 19
FORM_CODE EQU 21
S_P_F EQU 22
S_P_T EQU 24
H_P_S EQU 26
SPECIAL_SECS EQU 28
FAT_ID EQU #36
;***************************************
; ***** - Žª®­­ë¥ ¯¥à¥¬¥­­ë¥ - *****
STRUCT Window_UserVars
.SIZE_H BYTE 0 ; +00 £®à¨§®­â «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
.SIZE_V BYTE 0 ; +01 ¢¥à⨪ «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
.PLACE_H BYTE 0 ; +02 ¯®«®¦¥­¨¥ ¯® £®à¨§®­â «¨, ¢ §­ ª®¬¥áâ å
.PLACE_V BYTE 0 ; +03 ¯®«®¦¥­¨¥ ¯® ¢¥à⨪ «¨ ¢ §­ ª®¬¥áâ å
.MODE BYTE 0 ; +04 ०¨¬ §­ ª®¬¥áâ 
.MODE_S BYTE 0 ; +05 ¤®¯®«­¨â¥«ì­ë© ०¨¬: ¡¨â 0 - Sp-SCR
.GR_X BYTE 0 ; +06 ¯®«®¦¥­¨¥ ¯® X ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
.GR_Y BYTE 0 ; +07 ¯®«®¦¥­¨¥ ¯® Y ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ ¬)
ENDS
;
STRUCT Window_Variables
.USER Window_UserVars 0,0,0,0,0,0,0,0
; text mode
.LineAddr WORD 0;.reg_HL ; +08 á®åà ­¥­¨¥ HL. HL - ª®®à¤¨­ â  Y ¢ ®¯¨á â¥«ïå ¤«ï SLOT3
.reg_BC WORD 0;.reg_BC ; +10 á®åà ­¥­¨¥ BC. B - ª®«-¢® ᨬ¢®«®¢ ¢ áâப¥. C - temp
.ColumnRGADR_TXTMode WORD 0;.reg_DE ; +12 á®åà ­¥­¨¥ DE. D - PORT_Y (ª®®à¤. X), E - bit0: mode txt40/80
;
.V_BEG BYTE 0 ; +14 ­ ç «® ®ª­  ¯® ¢¥à⨪ «¨
.V_END BYTE 0 ; +15 ª®­¥æ ®ª­  ¯® ¢¥à⨪ «¨
.H_BEG BYTE 0 ; +16 ­ ç «® ®ª­  ¯® £®à¨§®­â «¨
.H_END BYTE 0 ; +17 ª®­¥æ ®ª­  ¯® £®à¨§®­â «¨
.SIZE_REL BYTE 0 ; +18 ॠ«ì­ë© à §¬¥à ¢ ᨬ¢®« å
.MODE_E BYTE 0 ; +19 ¤®¯®«­¨â¥«ì­ë© ०¨¬ íªà ­ . bit0 - RGMOD
.WORK_1 BYTE 0 ; +20 à ¡®ç ï ¯¥à¥¬¥­­ ï 1
.WORK_2 BYTE 0 ; +21 à ¡®ç ï ¯¥à¥¬¥­­ ï 2
.WORK_3 WORD 0 ; +22 à ¡®ç ï ¯¥à¥¬¥­­ ï 3
.GRAF_X WORD 0 ; +24 ­ ç «ì­ ï ª®®à¤¨­ â  ¯® X
.GRAF_Y WORD 0 ; +26 ­ ç «ì­ ï ª®®à¤¨­ â  ¯® Y
.RESERVED BLOCK 4,0 ; +28 § à¥§¥à¢¨à®¢ ­® ¤® 32-å ¡ ©â®¢
ENDS
;-------------[]
; default window
WIN_ID_0 Window_Variables = SYS_PAGE.WIN_MAP_IX + Window_Variables * 0
;WIN_ID_1 Window_Variables = SYS_PAGE.WIN_MAP_IX + Window_Variables * 1
;WIN_ID_2 Window_Variables = SYS_PAGE.WIN_MAP_IX + Window_Variables * 2
; ...
;WIN_ID_95 Window_Variables = SYS_PAGE.WIN_MAP_IX + Window_Variables * 95
;-------------[]
; ; ***** - Žª®­­ë¥ ¯¥à¥¬¥­­ë¥ - *****
; WIN_SIZE_H EQU 0 ; £®à¨§®­â «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
; WIN_SIZE_V EQU 1 ; ¢¥à⨪ «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
; WIN_PLACE_H EQU 2 ; ¯®«®¦¥­¨¥ ¯® £®à¨§®­à «¨, ¢ §­ ª®¬¥áâ å
; WIN_PLACE_V EQU 3 ; ¯®«®¦¥­¨¥ ¯® ¢¥à⨪ «¨ ¢ §­ ª®¬¥áâ å
; WIN_MODE EQU 4 ; ०¨¬ §­ ª®¬¥áâ 
; WIN_MODE_S EQU 5 ; ¤®¯®«­¨â¥«ì­ë© ०¨¬ ; ¡¨â 0 - Sp-SCR,
; WIN_GR_X EQU 6 ; ¯®«®¦¥­¨¥ ¯® X ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ)
; WIN_GR_Y EQU 7 ; ¯®«®¦¥­¨¥ ¯® Y ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ)
; WIN_HL EQU 8 ; á®åà ­¥­¨¥ HL
; WIN_BC EQU 10 ; á®åà ­¥­¨¥ BC
; WIN_DE EQU 12 ; á®åà ­¥­¨¥ DE
; WIN_V_BEG EQU 14 ; ­ ç «® ®ª­  ¯® ¢¥à⨪ «¨
; WIN_V_END EQU 15 ; ª®­¥æ ®ª­  ¯® ¢¥à⨪ «¨
; WIN_H_BEG EQU 16 ; ­ ç «® ®ª­  ¯® £®à¨§®­â «¨
; WIN_H_END EQU 17 ; ª®­¥æ ®ª­  ¯® £®à¨§®­â «¨
; WIN_SIZE_REL EQU 18 ; ॠ«ì­ë© à §¬¥à ¢ ᨬ¢®« å
; WIN_MODE_E EQU 19 ; ¤®¯®«­¨â¥«ì­ë© ०¨¬ íªà ­ 
; WIN_WORK_1 EQU 20 ; à ¡®ç ï ¯¥à¥¬¥­­ ï 1
; WIN_WORK_2 EQU 21 ; à ¡®ç ï ¯¥à¥¬¥­­ ï 2
; WIN_GRAF_X EQU 24 ; ­ ç «ì­ ï ª®®à¤¨­ â  ¯® X
; WIN_GRAF_Y EQU 26 ; ­ ç «ì­ ï ª®®à¤¨­ â  ¯® Y
;
;
;SW_ROM EQU #3CF9 ;!HARDCODE from zx roms
; IF .PROJ4
;RGADR EQU 0D0H
;RGSCR EQU 0D1H
;RGMOD EQU 0D2H
;RGACC EQU 0D3H
;PGACC EQU 0FCH
;PAGE0 EQU 0C0H
;PAGE1 EQU 0C5H
;PAGE2 EQU 0C2H
;PAGE3 EQU 0C0H
; ELSE
; ENDIF
;ALTERA EQU #1400 ; ¤à¥á ¢ <20>‡“ ᦠ⮩ áâà ­¨æë DCP
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
MODULE ACEX
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DEFINE ACEX.RELOAD_STRING 'ACEX_30K_LOADING'
LOADER:
.String_Address EQU #FEF0
.Reload_Flag_Address EQU #FEE0
.Reload_Flag EQU 'MI'
Chip_ID:
.K30 EQU #397B
.K50 EQU #3C7B
;
; ¢­ãâ७­¨¥ ¯®àâë Altera (ç áâ¨ç­® ­¥à §®¡à ­® ®â Sp97)
;#00 <09>¥â ¯®àâ 
;#01 reserved
;#02 reserved
;#03 reserved
;#04 reserved
;#05 reserved
;#06 reserved
;#07 reserved
;#08 reserved
;#09 reserved
;#0A reserved
;#0B reserved
;#0C reserved
;#0D reserved
;#0E reserved
;#0F reserved
VG93_1F EQU #10 ; ¯®àâ ƒ93 (1F)
VG93_3F EQU #11 ; ¯®àâ ƒ93 (3F)
VG93_5F EQU #12 ; ¯®àâ ƒ93 (5F)
VG93_7F EQU #13 ; ¯®àâ ƒ93 (7F)
VG93_State EQU #14 ; ¯®àâ ­  § ¯¨áì - á®áâ®ï­¨¥ ª®­â஫«¥à  ¤¨áª®¢®¤  (¢­¥è­¨© ¯®àâ #FF)
JOY_VG93 EQU #15 ; ¯®àâ ­  ç⥭¨¥ - ¤¦®©á⨪ ¨ IRQ/INTRQ ª®­â஫«¥à  ƒ93
; <20>®àâ FDD 720 ; #00BD - ¯¥à¥ª«î祭¨¥ ¢ 720 - § á« âì 1. ¬®¦­® LD A,#01 : OUT (#BD),A. <20> ¡®â ¥â c DOS ON «¨¡® ¢ CNF_3 á DOS OFF
FDD720 EQU #16
; <20>®àâ FDD 1.44 ; #20BD - ¯¥à¥ª«î祭¨¥ ¢ 1.44 - § á« âì 1. ¬®¦­® LD A,#21 : OUT (#BD),A. <20> ¡®â ¥â c DOS ON «¨¡® ¢ CNF_3 á DOS OFF
FDD144 EQU #17
;#18 reserved
;#19 reserved
;#1A reserved
ISA_CTRL EQU #1B ; #9FBD
CMOS_DATA.READ EQU #1C ; #FFBD
CMOS_ADDR.WRITE EQU #1D ; #DFBD
CMOS_DATA.WRITE EQU #1E ; #BFBD
;#1F reserved
IDE_DATA_1F0 EQU #20 ; HDD - ॣ¨áâà ¤ ­­ëå. ¢­¥è­¨© #0050
IDE_ERROR_1F1 EQU #21 ; HDD - ॣ¨áâà á®áâ®ï­¨ï/®è¨¡®ª. ¢­¥è­¨© #0051
IDE_COUNTER_1F2 EQU #22 ; HDD - ॣ. ª®«-¢  ᥪ-®¢ ¤«ï R/W. ¢­¥è­¨© #0052
IDE_SECTOR_1F3 EQU #23 ; HDD - ॣ¨áâà ᥪâ®à . ¢­¥è­¨© #0053
IDE_CYLINDER_L_1F4 EQU #24 ; HDD - ॣ¨áâà ¤®à®¦ª¨-low. ¢­¥è­¨© #0054
IDE_CYLINDER_H_1F5 EQU #25 ; HDD - ॣ¨áâà ¤®à®¦ª¨-high. ¢­¥è­¨© #0055
IDE_DEVICE_HEAD_1F6 EQU #26 ; HDD - ॣ. heads/¢ë¡®à  mas-slave. ¢­¥è­¨© #4052
IDE_STATUS_CMD_1F7 EQU #27 ; HDD - ॣ¨áâà ª®¬ ­¤. ¢­¥è­¨© #4053
IDE_CONTROL_3F6 EQU #28 ; HDD - ¤®¯. ॣ¨áâà ã¯à ¢«¥­¨ï 3F6. ¢­¥è­¨© #4054
IDE_STATUS_3F7 EQU #29 ; HDD - ¤®¯. ॣ¨áâà á®áâ®ï­¨ï 3F7. ¢­¥è­¨© #4055
IDE_CHANEL_1 EQU #2A ; HDD - ¢ë¡¨à ¥â Secondary IDE, ¢­¥è­¨© #BC
IDE_CHANEL_2 EQU #2B ; HDD - ¢ë¡¨à ¥â Primary IDE, ¢­¥è­¨© #BC
VSYNC320 EQU #2C ; #40BD
VSYNC312 EQU #2D ; #60BD
RESET EQU #2E ; S_RESET - #40A4 - Reset port
UNKNOWN EQU #2F ; ????? ; #60BC - çâ®-â® ­  § ¯¨áì
;#30 - ????? ISA-SLOT 1 - ports R/W
;#31 - ????? ISA-SLOT 2 - ports R/W
ISA_Control EQU #32 ; ISA-signals such as RESET, AEN, A19...A14. ‚­¥è­¨© #9FBD
;#33 - ????? ISA-SLOT 2 - memory R/W
;#34 reserved
;#35 reserved
;#36 reserved
;#37 reserved
;#38 reserved
;#39 reserved
;#3A reserved
;#3B reserved
;#3C reserved
;#3D reserved
;#3E reserved
;#3F reserved
ZX_Keyboard EQU #40 ; ZX-Keyboard (¯®àâ FE)
;#41 reserved
;#42 reserved
;#43 reserved
;#44 reserved
;#45 reserved
;#46 reserved
;#47 reserved
;#48 reserved
;#49 reserved
;#4A reserved
;#4B reserved
;#4C reserved
;#4D reserved
;#4E reserved
;#4F reserved
;#50 reserved
;#51 reserved
AY_FFFD_READ EQU #52 ; AY_D READ ; AY-8910-port (FFFD) ç⥭¨¥ ¤ ­­ëå
;#53 reserved
;#54 reserved
;#55 reserved
;#56 reserved
;#57 reserved
Kempston_Mouse EQU #58 ; #FADF ¢­¥è­¨©
;#59 reserved
;#5A reserved
;#5B reserved
;#5C reserved
;#5D reserved
;#5E reserved
;#5F reserved
;#60 reserved
;#61 reserved
;#62 reserved
;#63 reserved
;#64 reserved
;#65 reserved
;#66 reserved
;#67 reserved
;#68 reserved
;#69 reserved
;#6A reserved
;#6B reserved
;#6C reserved
;#6D reserved
;#6E reserved
;#6F reserved
;#70 reserved
;#71 reserved
;#72 reserved
;#73 reserved
;#74 reserved
;#75 reserved
;#76 reserved
;#77 reserved
;#78 reserved
;#79 reserved
;#7A reserved
;#7B reserved
;#7C reserved
;#7D reserved
;#7E reserved
;#7F reserved
;- - - - - - - - - - - - - - - [RAM CELLS] - - - - - - - - - - - - - - -;
;#80 reserved
;#81 reserved
;#82 reserved
;#83 reserved
;#84 reserved
;#85 reserved
;#86 reserved
;#87 reserved
CBL_OUT EQU #88 ; Write to COVOX/COVOX-Blaster
CBL_SYS_PORT EQU #89 ; CBL_DIR
;#8A reserved
;#8B reserved
;#8C reserved 3000 -- AY_D READ ; !TEST
;#8D reserved 2000 -- AY_A WRITE ; ¢ ª®­ä¥ å à¤ª®¤ ­  #90
;#8E reserved 2000 -- AY_D WRITE ; ¢ ª®­ä¥ å à¤ª®¤ ­  #91
ROM_RG EQU #8F ; ¯®àâ ¯¥à¥ª«î祭¨ï áâà ­¨æ ROM ¨ FastRam, ¤ã¡«¨àã¥âáï ¢­¥è­¨¬ ¯®à⮬ #5C
AY_FFFD_WRITE EQU #90 ; AY-8910-port (FFFD) ;!!!!! § ¯¨áì  ¤à¥á ??????
AY_BFFD EQU #91 ; AY-8910-port (BFFD)
;#92 reserved
;#93 reserved
;#94 reserved
;#95 reserved
;#96 reserved
;#97 reserved
;#98 reserved
;#99 reserved
;#9A reserved
;#9B reserved
;#9C reserved
;#9D reserved
;#9E reserved
;#9F reserved
;#A0 reserved
;#A1 reserved
;#A2 reserved
;#A3 reserved
;#A4 reserved
;#A5 reserved
;#A6 reserved
;#A7 reserved
;#A8 reserved
;#A9 reserved
;#AA reserved
;#AB reserved
;#AC reserved
;#AD reserved
;#AE reserved
;#AF reserved
;#B0 reserved
;#B1 reserved
;#B2 reserved
;#B3 reserved
;#B4 reserved
;#B5 reserved
;#B6 reserved
;#B7 reserved
;#B8 reserved
;#B9 reserved
;#BA reserved
;#BB reserved
;#BC reserved
;#BD reserved
;#BE reserved
;#BF reserved
Scorp_1FFD EQU #C0
Pent_7FFD EQU #C1
Border_FE EQU #C2 ; #FE, write only
ALL_MODE EQU #C3 ; ‚­¥è­¨© - #204E
PORT_Y EQU #C4 ; #89
RGMOD EQU #C5 ; #C9
CNF_PORT EQU #C6 ; #3C / #7C, #24 / #74
SCALE EQU #C7 ;PGACC - SCALE_PORT (#FC)
;#C8 - ª®¯¨ï Scorp_1FFD
;#C9 - ª®¯¨ï Pent_7FFD
;#CA - ª®¯¨ï Border_FE
HOLD EQU #CB ; ‡ ¤ ñâ §­ ç¥­¨ï áçñâ稪®¢ ᨭåà®­¨§ â®à  ᨭåந¬¯ã«ìᮢ. %xxxx'yyyy - ¯®§¨æ¨ï íªà ­ 
;#CC - ª®¯¨ï PORT_Y
;#CD - ª®¯¨ï RGMOD
;#CE - ª®¯¨ï CNF_PORT
;#CF - ª®¯¨ï SCALE
;#D0 - vRAM page 0 for 512 kb (®ª­® C000-FFFF)
;#D1 - vRAM page 1 for 512 kb (®ª­® C000-FFFF)
;#D2 - vRAM page 2 for 512 kb (®ª­® C000-FFFF)
;#D3 - vRAM page 3 for 512 kb (®ª­® C000-FFFF)
;#D4 - vRAM page 4 for 512 kb (®ª­® C000-FFFF)
;#D5 - vRAM page 5 for 512 kb (®ª­® C000-FFFF)
;#D6 - vRAM page 6 for 512 kb (®ª­® C000-FFFF)
;#D7 - vRAM page 7 for 512 kb (®ª­® C000-FFFF)
;#D8 - vRAM page 8 for 512 kb (®ª­® C000-FFFF)
;#D9 - vRAM page 9 for 512 kb (®ª­® C000-FFFF)
;#DA - vRAM page A for 512 kb (®ª­® C000-FFFF)
;#DB - vRAM page B for 512 kb (®ª­® C000-FFFF)
;#DC - vRAM page C for 512 kb (®ª­® C000-FFFF)
;#DD - vRAM page D for 512 kb (®ª­® C000-FFFF)
;#DE - vRAM page E for 512 kb (®ª­® C000-FFFF)
;#DF - vRAM page F for 512 kb (®ª­® C000-FFFF)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vROM: ;
.ZX_EXPANSION: EQU #E0 ; vROM page EXPANSION. Port #1FFD bit1=1 (#24 bit6=0, bit0=0)
.TR_DOS: EQU #E1 ; vROM page TR-DOS. PC = #3D00..#3DFF and #1FFD bit1=0 (#24 bit0=0)
.BASIC_128: EQU #E2 ; vROM page BASIC-128. #7FFD bit4=0 and #1FFD bit1=0 (#24 bit0=0)
.BASIC_48: EQU #E3 ; vROM page BASIC-48. #7FFD bit4=1 and #1FFD bit1=0 (#24 bit0=0)
; ;
.ZX_EXPANSION_2: EQU #E4 ; vROM page EXPANSION 2. Port #1FFD bit1=1 (#24 bit6=0, bit0=1)
.TR_DOS_2: EQU #E5 ; vROM page TR-DOS 2. PC = #3D00..#3DFF and #1FFD bit1=0 (#24 bit0=1)
.BASIC_128_2: EQU #E6 ; vROM page BASIC-128 2. #7FFD bit4=0 and #1FFD bit1=0 (#24 bit0=1)
.BASIC_48_2: EQU #E7 ; vROM page BASIC-48 2. #7FFD bit4=1 and #1FFD bit1=0 (#24 bit0=1)
;
.ZX_BIOS_1 EQU #EB ; vROM page BIOS-3 Port #74 = 0
.ZX_BIOS_2 EQU #EF ; vROM page BIOS-4 Port #74 = 1
;
TMP_CELL_1 EQU #EC ; user's memory cell = FF. ˆá¯®«ì§ã¥âáï ¢ ०¨¬¥ ᯥªâà㬠 ¢ TR-DOS
TMP_CELL_2 EQU #ED ; user's memory cell = 00. ˆá¯®«ì§ã¥âáï ¢ ०¨¬¥ ᯥªâà㬠 ¢ TR-DOS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SLOT0 EQU #E8 ; RAM page (®ª­® 0000-3FFF)
SLOT1 EQU #E9 ; RAM page (®ª­® 4000-7FFF)
SLOT2 EQU #EA ; RAM page (®ª­® 8000-BFFF)
RET_PORT EQU #EE ; Page set after Soft RESET. ‹î¡®¥, ªà®¬¥ 0, §­ ç¥­¨¥ - áâà ­¨æ  ªã¤  ¯¥à¥¤ áâáï ã¯à ¢«¥­¨¥ ¯®á«¥ Soft reset
; “áâ ­®¢ª  §­ ç¥­¨ï ¢ ª ª®© «¨¡® ¯®àâ ®â #F0 ¤® #FF ¯à¨¢¥¤¥â ª ®¤­®¬ã ¨ ⮬㠦¥ १ã«ìâ âã, çâ® ¨ ¯à®áâ® ãáâ ­®¢ª  §­ ç¥­¨ï ¢ ¯®àâ #F0. á奬¥ ᤥ« ­ 
; ¯¥à¥ ¤à¥á æ¨ï ­®¬¥à  ¯®àâ  â ª, çâ® ¯à¨ §­ ç¥­¨¨ #Fx ­®¬¥à ¯®àâ  ¡¥à¥âáï ª ª #F0+Spectrum_PAGE, £¤¥ Spectrum_PAGE - ­®¬¥à ᯥªâà㬮¢áª®© áâà ­¨æë,  ¤à¥á㥬®©
; ¯® ¯®àâ ¬ #7FFD ¨ #1FFD. ’ ª¨¬ ®¡à §®¬ ¤®á⨣ ¥âáï ᮢ¬¥á⨬®áâì á <20>¥­â £®­®¬ ¨ ‘ª®à¯¨®­®¬ ¯® à á¯à¥¤¥«¥­¨î ¯ ¬ï⨠¨ ¤¥« ¥âáï ¢®§¬®¦­ë¬ ãáâ ­®¢ª  «î¡®£®
; ­®¬¥à  áâà ­¨æë á¯à¨­â¥à®¢áª®© ¯ ¬ï⨠¤«ï «î¡®© áâà ­¨æë ‘¯¥ªâà㬠.
;
SLOT3 EQU #F0 ; RAM page for 128/256 kb (®ª­® C000-FFFF)
;F1h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F2h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F3h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F4h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F5h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F6h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F7h - RAM page for 128/256 kb (®ª­® C000-FFFF)
;F8h - RAM page for 256 kb (®ª­® C000-FFFF)
;F9h - RAM page for 256 kb (®ª­® C000-FFFF)
;FAh - RAM page for 256 kb (®ª­® C000-FFFF)
;FBh - RAM page for 256 kb (®ª­® C000-FFFF)
;FCh - RAM page for 256 kb (®ª­® C000-FFFF)
;FDh - RAM page for 256 kb (®ª­® C000-FFFF)
;FEh - RAM page for 256 kb (®ª­® C000-FFFF)
;FFh - RAM page for 256 kb (®ª­® C000-FFFF)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;------------------------;
Config_ID:
.Sp2000 EQU #FEFF
; OLD:
.Sp97_DOOM EQU #FFF9
.Sp97_Video EQU #FFFA
.Sp97_Game EQU #FFFB
.Sp97_AY EQU #FFFC
.Sp97_2 EQU #FFFD
.Sp97_1 EQU #FFFE
;
Config_PG:
.Sp2000_AcexSetUpSet EQU #FA ; [x] ãáâ ­®¢ª  ¯¥à¥å¢ â  c ¯¥à¥§ «¨¢ª®© ª®­äë
.Sp2000_SoftRestartSet EQU #FB ; [x] ãáâ ­®¢ª  ¯¥à¥å¢ â  soft-à¥á¥â 
.Sp2000_SoftRestartNow EQU #FC ; [x] soft-à¥á¥â á ¯¥à¥å¢ â®¬
.Sp2000_SetUp EQU #FD ; [x] २­¨â ( ªá¥«ï, ­ ¯à¨¬¥à)
.Sp2000_AcexSetUpNow EQU #FE ; [x] ¯¥à¥§ «¨¢ª  ª®­äë á ¯¥à¥å¢ â®¬
; áâà ­¨æë á ª®­ä®© ¤«ï Sp97, ¤«ï ᮢ¬¥á⨬®áâ¨ á ¤à¥¢­¨¬¨ ¯à®£ ¬¨
.Sp97_AY EQU #EA
.Sp97_1 EQU #EC
.Sp97_2 EQU #EE
;------------------------;
; DW #FEFF ; Sprinter-2000
;
; DW #FFFE ; Sprinter-1
; DB 0 ; ⨯  ªá¥«¥à â®à 
; DB 1 ; íªà ­
; DB 2 ; ª« ¢¨ âãà 
; DB 1 ; ª®¢®ªá;
;
; DW #FFFD ; Sprinter-2
; DB 2 ; ⨯  ªá¥«¥à â®à 
; DB 1 ; íªà ­
; DB 0 ; ª« ¢¨ âãà 
; DB 1 ; ª®¢®ªá;
;
; DW #FFFC ; AY
; DB 0 ; ⨯  ªá¥«¥à â®à 
; DB 0 ; íªà ­
; DB 2 ; ª« ¢¨ âãà 
; DB 0 ; ª®¢®ªá;
;
; DW #FFF9 ; ¨¤¥­â¨ä¨ª â®à ª®­ä¨£ãà æ¨¨ DooM
; DB 3 ; ⨯  ªá¥«¥à â®à 
; DB 1 ; íªà ­
; DB 0 ; ª« ¢¨ âãà 
; DB 2 ; ª®¢®ªá (¡« áâ¥à)
;------------------------;
;;;;;;;
ENDMODULE
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;
/*
¢­ãâ७­¨¥ ¯®àâë Z84C15:
#10
#11
#12
#13
#14
#15
#16
#17
#18
#19
#1A
#1B
#1C
#1D
#1E
#1F
#EE
#EF
#F0
#F1
#F4
*/
;=======================================
;===============[ CMOS ]================ ; !TODO
;REGISTER #0E
; %10000000 - MEMORY TEST
; %01000000 - SAVE RAM DISKS
; %00100000 - UPDATE BIOS
; %00011000 - START DELAY
; %00000100 - LANGUAGE
; %00000010 - NOT USED ;!TODO
; %00000001 - QUICK START
;REGISTER #0F
; %10000000 - TYPEMATIC ON/OFF
; %01100000 - TYPEMATIC DELAY 00-250, 01-500, 10-750, 11-1000
; %00011111 - TYPEMATIC RATE 0-6, 1-8, 2-10, 3-12, 4-15, 5-20, 6-24, 7-30
;REGISTER #10
; %00000111 - SYSTEM DISK
; 1st FDD
; 2nd FDD
; 1st IDE
; 2nd IDE
; 3rd IDE
; 4th IDE
; Ram Dsk
; Recovery
; %01110000 - ALT SYSTEM DISK
;REGISTER #11
; %00000011 - FDD FIRST 720 / 1.44 / NONE
; %00001100 - FDD SECOND
; %00110000 - IDE Primary MASTER AUTO / SETUP / DISABLED
; %11000000 - IDE Primary SLAVE -----//------
;-------------[HDD PRIMARY]-------------
;REGISTER #12 - CYLINDERS (MASTER) L
;REGISTER #13 - -----//------ H
;REGISTER #14 - HEADS (MASTER)
;REGISTER #15 - SECTORS (MASTER)
;
;REGISTER #16 - CYLINDERS (SLAVE) L
;REGISTER #17 - -----//------ H
;REGISTER #18 - HEADS (SLAVE)
;REGISTER #19 - SECTORS (SLAVE)
;----------------------------------------
;------------[HDD Secondary]-------------
;REGISTER #37 - CYLINDERS (MASTER) L
;REGISTER #38 - -----//------ H
;REGISTER #39 - HEADS (MASTER)
;REGISTER #3A - SECTORS (MASTER)
;
;REGISTER #3B - CYLINDERS (SLAVE) L
;REGISTER #3C - -----//------ H
;REGISTER #3D - HEADS (SLAVE)
;REGISTER #3E - SECTORS (SLAVE)
;----------------------------------------
;REGISTER #1A
; %00001111 - COLOR STYLE
; %00110000 - Frame Int (Default/Pentagon/Scorpion/Original)
; %11000000 - Screen V-Sinc (Default/312 lines 50 HZ/320 Lines 49 Hz)
;!FIXIT <EFBFBD> ˆ<EFBFBD>Žœ‡“…Ÿ
;REGISTER #1B - HARDWARE CONFIGURATION
; %00000001 - TURBO MODE (D0..D3 - 6 OR 7)
; %00000010 - TURBO EXCHANGE ON/OFF - 1
; %00000100 - PORT EXCHANGE ON/OFF - 1
; %00011000 - COMPUTER:
; 0-SPRINTER
; 1-SPECTRUM 256
; 2-PENTAGON 128
; 3-OTHER
; %11100000 - RESERVED ;!TODO
;!FIXIT <EFBFBD> ˆ<EFBFBD>Žœ‡“…Ÿ
;REGISTER #1C - RESET MODE
; 0-RESET 128 Basic
; 1-RESET 48 Basic & 128 mem
; 2-RESET TR-DOS & 128 mem
; 3-RESET EXPANSION (Disabled)
; 4-RESET TR-DOS & 48 mem
; 5-RESET 48 Basic
;REGISTER #1D
; %00000010 - Reboot message
; %00000001 - HDD Write protect
;REGISTER #1E
; %00000011 - TR DOS A: Default / FDD / HDD / RMD
; %00001100 - TR DOS B: Default / FDD / HDD / RMD
; %00110000 - TR DOS C: Default / FDD / HDD / RMD
; %11000000 - TR DOS D: Default / FDD / HDD / RMD
;REGISTER #1F ;R06
; %11110000 - X-Screen position
; %00001111 - Y-Screen position
;REGISTER #20
; %00110000 - IDE Secondary MASTER AUTO / SETUP / DISABLED
; %11000000 - IDE Secondary SLAVE -----//------
; .
; .
;REGISTER#36 - BASIC SETTING 2 ; áâ àë¥ §­ ç¥­¨ï ­¥¨§¢¥áâ­ë
; %0000 0111
; ­®¢ë¥ §­ ç¥­¨ï:
; 0 - ZX-Sprinter
; 1 - Pentagon 48
; 2 - Pentagon 128
; 3 - Pentagon 512
; 4 - Scorpion 256
; 5 - ZX Spectrum 48
; 6 - ZX Spectrum 128
;REGISTER #3F - CHECKSUM SETTING
;=======================================
;
;-------------------------------[ TEST ]--------------------------------
MODULE IDE
;
; 0 - ª®¯¨ï DRV_HEAD. bit6 - LBA/CHS, bit4 - MASTER/SLAVE, bit0 - Primary/Secondary Chanel
; 1 - ᥪâ®à®¢ ­  ¤®à®¦ª¥
; 2 - ç¨á«® £®«®¢®ª
; 3 - ª®«¨ç¥á⢮ 樫¨­¤à®¢ ¬«.
; 4 - ª®«¨ç¥á⢮ 樫¨­¤à®¢ áâ à訩.
; 5 - ᥪâ®à®¢ ­  樫¨­¤à ¬«.
; 6 - ᥪâ®à®¢ ­  樫¨­¤à áâ àè.
; 7 - ⨯ ¤à ©¢  HDD - 1, CD-ROM - 2...
; 8 - à §¬¥à ᥪâ®à 
;10 - Removable Media Parameters
;11 - Peripheral Device Type for ATAPI
STRUCT HDD_INIT_TABLE
.DRV_Flags BYTE ; 0 DRVHD_H
.SectorsPerTrack BYTE ; 1 SC_PT_H
.HeadsNumber BYTE ; 2 HEADS_H
.CylinderNumberLow BYTE ; 3 CYL_L_H ; for ATAPI MediaSizeLow (word)
.CylinderNumberHigh BYTE ; 4 CYL_H_H
.SectorsPerCylinderLow BYTE ; 5 SPCLL_H ; for ATAPI MediaSizeHigh (word)
.SectorsPerCylinderHigh BYTE ; 6 SPCLH_H
.DriveType BYTE ; 7 DTYPE_H
.SectorSize WORD ; 8
.MediaParameters BYTE ; 10 ; bit0=1 removable, bit1=1 drive changed, bit3=1 no media, bit7..3 reserved
.PDT BYTE ; 11 ; Peripheral Device Type for ATAPI
.RESERVED_2 BYTE ; 12
.RESERVED_3 BYTE ; 13
.RESERVED_4 BYTE ; 14
.RESERVED_5 BYTE ; 15
ENDS
HDD_INIT_TABLE.MediaSizeLow EQU HDD_INIT_TABLE.CylinderNumberLow ; For ATAPI
HDD_INIT_TABLE.MediaSizeHigh EQU HDD_INIT_TABLE.SectorsPerCylinderLow; For ATAPI
;
INIT_TBL_IDE0 HDD_INIT_TABLE = SYS_PAGE.IDE_0 ; !HARDCODE table in SYS_PAGE
INIT_TBL_IDE1 HDD_INIT_TABLE = SYS_PAGE.IDE_1 ; !HARDCODE table in SYS_PAGE
INIT_TBL_IDE2 HDD_INIT_TABLE = SYS_PAGE.IDE_2 ; !HARDCODE table in SYS_PAGE
INIT_TBL_IDE3 HDD_INIT_TABLE = SYS_PAGE.IDE_3 ; !HARDCODE table in SYS_PAGE
;
; <EFBFBD>¥£¨áâà  ¤à¥á  ­ ª®¯¨â¥«ï (#3F7 ç⥭¨¥) ᮤ¥à¦¨â ­®¬¥à £®«®¢ª¨ ¨ HDD, ¢ë¡à ­­ë¥ ¢ ¯à¥¤ë¤ã饩 ®¯¥à æ¨¨.
; <EFBFBD>¨âë 0, 1 - /DSO, /DS1 - ¡¨âë ¢ë¡®à  á®®â¢¥âáâ¢ãî饣® ­ ª®¯¨â¥«ï 0 ¨«¨ 1.
; <EFBFBD>¨âë 2...5 - /HSO../HS3 - ᮤ¥à¦ â ¤¢®¨ç­ë© ª®¤ ¢ë¡à ­­®© £®«®¢ª¨.
; <EFBFBD>¨â 6 - Write Gate - ¡¨â ¢ë¯®«­¥­¨ï § ¯¨á¨,  ªâ¨¢¥­ ¢® ¢à¥¬ï ®¯¥à æ¨¨ § ¯¨á¨
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
.ByteCountLow EQU .CylinderLow ; ATAPI
.ByteCountHigh EQU .CylinderHigh ; ATAPI
.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
.InterruptReason EQU .Counter ; ATAPI
.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
.ByteCountLow EQU .CylinderLow ; ATAPI
.ByteCountHigh EQU .CylinderHigh ; ATAPI
.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
ErrorBit:
.Abort EQU 2
ErrorByte:
.Abort EQU #04
InterruptReasonBit: ; 0000 0000
; EQU 7;ÄÄÄÄÙ³³³ ³³³³ ; reserved
; EQU 6;ÄÄÄÄÄÙ³³ ³³³³ ; reserved
; EQU 5;ÄÄÄÄÄÄÙ³ ³³³³ ; reserved
; EQU 4;ÄÄÄÄÄÄÄÙ ³³³³ ; reserved
; EQU 3;ÄÄÄÄÄÄÄÄÄÙ³³³ ; reserved
; EQU 2;ÄÄÄÄÄÄÄÄÄÄÙ³³ ; reserved
.IO EQU 1;ÄÄÄÄÄÄÄÄÄÄÄÙ³ ; Direction for the Information transfer. 1 - to Host
.CoD EQU 0;ÄÄÄÄÄÄÄÄÄÄÄÄÙ ; Command or user Data
InterruptReasonByte: ; 0000 0000
; EQU #80;ÄÄÙ³³³ ³³³³ ; reserved
; EQU #40;ÄÄÄÙ³³ ³³³³ ; reserved
; EQU #20;ÄÄÄÄÙ³ ³³³³ ; reserved
; EQU #10;ÄÄÄÄÄÙ ³³³³ ; reserved
; EQU #08;ÄÄÄÄÄÄÄÙ³³³ ; reserved
; EQU #04;ÄÄÄÄÄÄÄÄÙ³³ ; reserved
.IO EQU #02;ÄÄÄÄÄÄÄÄÄÙ³ ; Direction for the Information transfer. 1 - to Host
.CoD EQU #01;ÄÄÄÄÄÄÄÄÄÄÙ ; Command or user Data
CtrlBit: ; 0000 0000 ; Bits for IDE.Read.Status
.Busy EQU 7;ÄÄÄÄÙ³³³ ³³³³ ; BSY
.Ready EQU 6;ÄÄÄÄÄÙ³³ ³³³³ ; RDY
.Fault EQU 5;ÄÄÄÄÄÄÙ³ ³³³³ ; DMA ready for ATAPI
.SeekComplete EQU 4;ÄÄÄÄÄÄÄÙ ³³³³ ; Service for ATAPI
.DataRequest EQU 3;ÄÄÄÄÄÄÄÄÄÙ³³³ ; DRQ
.CorrectedData EQU 2;ÄÄÄÄÄÄÄÄÄÄÙ³³ obsolete
.Index EQU 1;ÄÄÄÄÄÄÄÄÄÄÄÙ³ obsolete; .SenseDataAvailable
.Error EQU 0;ÄÄÄÄÄÄÄÄÄÄÄÄÙ ; Indicates an error occurred. Send a new command to clear it (or nuke it with a Software Reset).
.CheckCondition EQU .Error
.StreamError EQU .Fault
.ATAPI_DMAReady EQU .Fault
.ATAPI_Service EQU .SeekComplete
CtrlByte: ; Bytes for IDE.Read.Status
.Busy EQU #80 ; BSY
.Ready EQU #40 ; RDY
.Fault EQU #20
.SeekComplete EQU #10
.DataRequest EQU #08 ; DRQ
.CorrectedData EQU #04 ; obsolete
.Index EQU #02 ; obsolete
.Error EQU #01 ; Indicates an error occurred. Send a new command to clear it (or nuke it with a Software Reset).
.CheckCondition EQU .Error
.StreamErrror EQU .Fault
.ATAPI_DMAReady EQU .Fault
.ATAPI_Service EQU .SeekComplete
; Bit Abbreviation Function
; 7 BSY Indicates the drive is preparing to send/receive data (wait for it to clear). In case of 'hang' (it never clears), do a software reset.
; 6 RDY Bit is clear when drive is spun down, or after an error. Set otherwise.
; 5 DF Drive Fault Error (does not set ERR).
; 4 SRV Overlapped Mode Service Request.
; 3 DRQ Set when the drive has PIO data to transfer, or is ready to accept PIO data.
; 2 CORR Corrected data. Always set to zero.
; 1 IDX Index. Always set to zero.
; 0 ERR Indicates an error occurred. Send a new command to clear it (or nuke it with a Software Reset).
; device/head register bits
DeviceHeadByte:
.Obsolute EQU #A0
.LBA EQU #40 + .Obsolute
.CHS EQU #00 + .Obsolute
.Master EQU #00 + .Obsolute
.Slave EQU #10 + .Obsolute
;
DeviceHeadBit:
.LBA EQU 6 ; LBA = 1
.Slave EQU 4 ; Slave = 1
;
Drive:
.Master EQU DeviceHeadByte.Master
.Slave EQU DeviceHeadByte.Slave
DeviceControlBit:
.Always_Set EQU 3
.Reset EQU 2 ;SRST
.Int EQU 1 ;nIEN
.AlwaysClear EQU 0
DeviceControlByte:
.setReset EQU #0C ;SRST
.setInt EQU #0A ;nIEN
.resReset EQU #08
.resInt EQU #08
Chanel:
.Set_0: EQU #20BC ; ¤«ï ¨á¯®«ì§®¢ ­¨ï á ¯®«­®©  ¤à¥á æ¨¥© (ॣ BC), § á« âì '1'
.Set_1: EQU #00BC ; ¤«ï ¨á¯®«ì§®¢ ­¨ï á ¯®«­®©  ¤à¥á æ¨¥© (ॣ BC), § á« âì '1'
.Set: EQU #BC ; ¤«ï ¨á¯®«ì§®¢ ­¨ï á ­¥¯®«­®©  ¤à¥á æ¨¥© out (#bc),a.
.Primary EQU #21 ; ¤«ï ¨á¯®«ì§®¢ ­¨ï á ­¥¯®«­®©  ¤à¥á æ¨¥© out (#bc),a. ‚ë¡®à ª ­ «  0
.Secondary EQU #01 ; ¤«ï ¨á¯®«ì§®¢ ­¨ï á ­¥¯®«­®©  ¤à¥á æ¨¥© out (#bc),a. ‚ë¡®à ª ­ «  1
; <EFBFBD>ã¬¥à æ¨ï BIOS
MODULE Device
NONE EQU #FF
HDD EQU 1 ;!TODO ¯¥à¥¨¬¥­®¢ âì ¢ ATA
ATAPI EQU 2
.MAGNETIC_DISKETTE EQU #00
.CDROM EQU #05
.OPTICAL_DISKETTE EQU #07
.UNKNOWN EQU #1F
ENDMODULE
;
;
MODULE CMD
ATAPI:
.Reset EQU #08
.Packet EQU #A0
.IdentifyPacketDevice EQU #A1
;
ATA:
; ATA-2 commands ************************
.ExecuteDeviceDiagnostic EQU #90
.IdentifyDevice EQU #EC
.InitializeDeviceParameters EQU #91
.ReadSectorsWithRetry EQU #20
.ReadSectors EQU #21
.ReadVerifySectorsWithRetry EQU #40
.ReadVerifySectors EQU #41
.Seek EQU #70
.WriteSectorsWithRetry EQU #30
.WriteSectors EQU #31
; ****** additional commands ************
.AcknowledgeMediaChange EQU #db
.PostBoot EQU #dc
.PreBoot EQU #dd
.DoorLock EQU #de
.DoorUnlock EQU #df
.DownloadMicrocode EQU #92
; Power Mode
.CheckPowerMode EQU #98
.CheckPowerMode2 EQU #e5
.Idle EQU #97
.Idle2 EQU #e3
.IdleImmediate EQU #95
.IdleImmediate2 EQU #e1
.Sleep EQU #99
.Sleep2 EQU #e6
.Standby EQU #96
.Standby2 EQU #e2
.StandbyImmediate EQU #94
.StandbyImmediate2 EQU #e0
;
.MediaEject EQU #ed
.Nop EQU #00
.ReadBuffer EQU #e4
.ReadDMA EQU #c8
.ReadLong EQU #22
.ReadMultiple EQU #c4
.Recalibrate EQU #10
.SetFeatures EQU #ef
.SetFeatures.Disable8bit EQU #81 ; Disable 8-bit data transfers (¯¨á âì ¢ .Features)
.SetFeatures.DisableWriteCache EQU #82 ; Disable write cache (¯¨á âì ¢ .Features)
.SetMultipleMode EQU #c6
.WriteBuffer EQU #e8
.WriteDMA EQU #ca
.WriteLong EQU #32
.WriteMultiple EQU #c5
.WriteSame EQU #e9
.WriteVerify EQU #3c
; **** device specific commands *************
.FormatTrack EQU #50
; command modificators:
; for ReadSectors, WriteSectors, ReadVerifySectors,
; ReadDMA, WriteDMA, ReadLong, WriteLong
.WithoutRetry EQU #01
; ATA
; .Master EQU #A0
; .Slave EQU #B0
ENDMODULE
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º Š ª à ¡®â ¥â á奬  ç⥭¨ï/§ ¯¨á¨? º
; º º
; º Z80 ÚÄÄÄ¿ º
; º bus ³Buf³ º
; º ÄÄÂÄÄ´<Ä>ÃÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄ<Ä> Low Byte º
; º ³ ³ 1 ³ ³ º
; º ³ ÃÄÄÄ´ ÚÄÄÄ¿ ³ º
; º ³ ³Buf³ ³Reg³ ³ º
; º ÀÄÄ´ÄÄ>ÃÄÄÂÄÄ´ÄÄ>ÃÄÄÙ HDD bus º
; º ³ 2 ³ ³ ³ 3 ³ º
; º ÀÄÄÄÙ ³ ÀÄÄÄÙ º
; º ³ º
; º ÀÄÄÄÄÄÄÄÄÄÄÄÄ<Ä> High Byte º
; º º
; º 1. —⥭¨¥ ¢á¥å ॣ¨áâ஢, ªà®¬¥ ॣ¨áâà  ¤ ­­ëå, A8 = 0 º
; º „ ­­ë¥ á 設ë HDD ç¥à¥§ ¡ãä¥à 1 ¯¥à¥¤ îâáï ¢ ¯à®æ¥áá®à. º
; º ’®«ìª® ¬« ¤è¨© ¡ ©â, áâ à訩 ­¥ ­ã¦¥­. º
; º º
; º 2.1 —⥭¨¥ ॣ¨áâà  ¤ ­­ëå, A8 = 0 º
; º „ ­­ë¥ á 設ë HDD ç¥à¥§ ¡ãä¥à 1 ¯¥à¥¤ îâáï ¢ ¯à®æ¥áá®à. º
; º ’®«ìª® ¬« ¤è¨© ¡ ©â, áâ à訩 ­ã¦¥­ ¨ ®­ § é¥«ª¨¢ ¥âáï ¢ º
; º ॣ¨áâॠ3 º
; º º
; º 2.2 —⥭¨¥ ॣ¨áâà  ¤ ­­ëå, A8 = 1 º
; º „ ­­ë¥ ¨§ ॣ¨áâà  3 ç¥à¥§ ¡ãä¥à 1 ¯¥à¥¤ îâáï ¢ ¯à®æ¥áá®à. º
; º - áâ à訩 ¡ ©â - HDD ¢ íâ®â ¬®¬¥­â ­¥ ¢ë¡¨à ¥âáï º
; º º
; º 3. ‡ ¯¨áì ¢á¥å ॣ¨áâ஢, ªà®¬¥ ॣ¨áâà  ¤ ­­ëå, A8 = 1 º
; º „ ­­ë¥ á 設ë Z80 ç¥à¥§ ¡ãä¥à 1 ¯¥à¥¤ îâáï ­  設ã HDD. º
; º ’®«ìª® ¬« ¤è¨© ¡ ©â, áâ à訩 ­¥ ­ã¦¥­. º
; º º
; º 4.1 ‡ ¯¨áì ॣ¨áâà  ¤ ­­ëå, A8 = 0 º
; º „ ­­ë¥ á 設ë Z80 ç¥à¥§ ¡ãä¥à 2 ¯¥à¥¤ îâáï ¢ ॣ¨áâà 3. º
; º ’®«ìª® ¬« ¤è¨© ¡ ©â, áâ à訩 ­ã¦¥­ ¨ ®­ ®¦¨¤ ¥âáï ¢ á«¥¤ãî饬 º
; º 横«¥. HDD ¢ íâ®â ¬®¬¥­â ­¥ ¢ë¡¨à ¥âáï. º
; º º
; º 4.2 ‡ ¯¨áì ॣ¨áâà  ¤ ­­ëå, A8 = 1 º
; º „ ­­ë¥ ¨§ ॣ¨áâà  3 ¯¥à¥¤ îâáï ­  設ã HDD - ¬« ¤è¨© ¡ ©â. º
; º - áâ à訩 ¡ ©â - ç¥à¥§ ¡ãä¥à 2 ¯¥à¥¤ ¥âáï á ¯à®æ¥áá®à  º
; º º
; º <EFBFBD>®ç¥¬ã ¯ã­ªâ 4.2 ®â«¨ç ¥âáï ®â 3, å®âï ®¯¥à æ¨¨ ¯® ¢¨¤ã º
; º ®¤¨­ ª®¢ë? º
; º <EFBFBD>®â®¬ã çâ® ¯¥à¥¤ 4.2 ¢á¥£¤  ¨¤¥â 4.1, ª®â®àë© ãáâ ­ ¢«¨¢ ¥â º
; º âਣ¥à WRH ¢ ¥¤¨­¨æã ¨, â ª¨¬ ®¡à §®¬ ¯¥à¥ª«î砥⠯ãâì º
; º ¯à®å®¦¤¥­¨ï ¡ ©â®¢. <EFBFBD>â® ¨ ¯®§¢®«ï¥â ¨á¯®«ì§®¢ âì ª®¬ ­¤ë OUTI º
; º ¤«ï § ¯¨á¨ ᥪâ®à  ¢ HDD º
; º º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
; ŠŽ„› Ž˜ˆ<EFBFBD>ŽŠ, އ<EFBFBD>€™€…Œ „ˆ‘ŠŽ‚މ ‘ˆ‘’…ŒŽ‰
; #08 ;Ž˜ˆ<CB9C>Š€ €„<E282AC>ˆˆ
; #09 ;Š€<C5A0> <20><20><>ˆŽ…„ˆ<E2809E><EFBFBD>
; #40 ;Ž˜ˆ<CB9C>Š€ €<><E282AC><EFBFBD><E28099>
; #41 ;<3B>ŽŽˆ… „<>€‰<E2809A>€ €<><E282AC><EFBFBD><E28099>
; #50 ;<3B>…„Ž<E2809E>ˆŒ<20>ŽŒ…<C592><>€‰<E2809A> Š€<C5A0>
; #51 ;„<>€‰<E2809A> Ž’‘“’‘’‚“…’
; #52 ;‡€<E280A1><E282AC>…™…<E284A2><E280A6>€Ÿ ŠŽŒ€<C592>„€
; #53 ;Ž˜ˆ<CB9C>Š€ ‚‚Ž„€/‚›‚Ž„€
; #54 ;‡€™ˆ’€ Ž’ ‡€<E280A1>ˆˆ
; #56 ;<3B>… Ž<><C5BD><EFBFBD>Ž<E28099><E282AC>€Ÿ ”€œ<E280B9>€Ÿ Ž˜ˆ<CB9C>Š€
; #59 ;<3B> ƒŽŽ<C5BD>Žˆ<><E282AC><EFBFBD><E28099> (TIMEOUT)
; #81 ;…ŠŽ<E28099> <20><20>€‰„…<E2809E>
; #82 ;€„<E282AC><E280A6>‰ Œ€<C592>Š…<C5A0> <20><20>€‰„…<E2809E>
; #83 ;OVERRUN
; #84 ;Ž˜ˆ<CB9C>Š€ CRC
ENDMODULE
;-----------------------------------------------------------------------
;
/*
KBD_COM EQU #1B
KBD_DAT EQU #1A
COM_B EQU #1B
DAT_B EQU #1A
COM_A EQU #19
DAT_A EQU #18
LPT1_D EQU #1C
LPT1_C EQU #1D
LPT2_D EQU #1E
LPT2_C EQU #1F
STC0_C EQU #10
STC1_C EQU #11
STC2_C EQU #12
STC3_C EQU #13
*/
; !TODO ¯à¨¤ã¬ âì ª ª ®¡®§¢ âì, ç⮡ ¡ë«® ¯®­ïâ­® ª®£¤  ¯¨èãâ ¤«ï ¬ë誨, ª®£¤  ¤«ï ª« ¢ë ¨ â.¤.
MODULE Z84
;-------------------[Ports]
; Counter Timer Control
CTC:
.Ch_0 EQU #10 ; Control Register
.Ch_1 EQU #11 ; Control Register
.Ch_2 EQU #12 ; Control Register
.Ch_3 EQU #13 ; Control Register
; Serial I/O
SIO:
.Ch_A.Data EQU #18 ; Data register keyboard DAT_A
.Ch_A.Ctrl EQU #19 ; Control register keyboard COM_A
.Ch_B.Data EQU #1A ; Data register mouse DMOUSE
.Ch_B.Ctrl EQU #1B ; Control register mouse CMOUSE
; Parallel I/O
PIO:
.Port_A.Data EQU #1C ; Data register LPT1_D LPT 1
.Port_A.Command EQU #1D ; Command register LPT1_C LPT 1
.Port_B.Data EQU #1E ; Data register LPT2_D LPT 2
;⮫쪮 ç¥à¥§ ॣ¨áâà BC, ¨­ ç¥ €«ìâ¥à  ¯¥à¥å¢ â¨â
.Port_B.Command EQU #1F ; Command register LPT2_C LPT 2
; Watch Dog timer
WDT:
.Master_Reg EQU #F0 ; Master register WDTMR
.Control_Reg EQU #F1 ; Control register WDTCR
; Interrupt Priority Register
IntPrior_Reg EQU #F4
;System Control
SYS:
.Control EQU #EE ; System Control Register Pointer SCRP
.Data EQU #EF ; System Control Data Port SCDP
;------------------------[]
;-------------------[Regs ]
REG:
.WaitState_Ctrl EQU 00 ; Wait state control register WCR
.WaitState_MemBound EQU 01 ; Memory Wait state Boundary Register MWBR
.CS_Boundary EQU 02 ; Chip Select Boundary Register CSBR
.Misc_Ctrl EQU 03 ; Misc.Control Register MCR
;------------------------[]
ENDMODULE
;
;INIT_TIMER:
; LD A,#D5 ; 7-© ¡¨â à §à¥è¥­¨¥ ¯à¥à뢠­¨ï
; OUT (#12),A
; LD A,20
; OUT (C),A
; LD A,#55 ; 7-© ¡¨â à §à¥è¥­¨¥ ¯à¥à뢠­¨ï
; OUT (#13),A
; LD A,0
; OUT (C),A
; LD A,0 ; ¢¥ªâ®à ¯à¥à뢠­¨ï
; OUT (#10),A
; LD A,TABLE/256
; LD I,A
; IM 2
;Disable:
; DI
; LD BC,#12 ; 2-nd timer
; LD A,#55 ; 7-© ¡¨â à §à¥è¥­¨¥ ¯à¥à뢠­¨ï
; OUT (C),A
; IM 1
; EI
; RET
;=======================================================================;
; <EFBFBD><EFBFBD>Ž <EFBFBD><EFBFBD>ˆŠŽ ˆ<EFBFBD> ;
;=======================================================================;
; ¥á«¨ ª ­ « ¯ãá⮩, â® ç¨â ¥âáï ¨§ ¯®àâ  â®, çâ® ¡ë«® ¢ëáâ ¢«¥­®
; ¯®á«¥¤­¨¬ ­  設ã c çñâ­®£®  ¤à¥á  ¢ ¯ ¬ï⨠  íâ® ¯¥à¢ë© ¨«¨ ¢â®à®©
; ¡ ©â ª®¤  ª®¬ ­¤ë
; ALIGN 2 ; âã⠭㦭® ¢ëà ¢­¨¢ ­¨¥ ¯® § ¤ã¬ ­­ë¬  ¤à¥á ¬ ¤«ï ª®¬ ­¤ ç⥭¨ï ¨§ ¯®à⮢
; .CheckChanel: LD BC,IDE.Read.Status
; IN A,(C) ;#ED78 A=#78
; IN L,(C) ;#ED68 L=#68
; LD D,A
; IN A,(C) ;#ED60 A=#ED
; LD E,L
; ; ¥á«¨ ¯ãá⮩: DE=#7868, A=#ED
; ;
; LD HL,#7868 + #ED
; AND A
; SBC HL,DE
; XOR L
; RET NZ ; not absent
; SCF
; RET ; absent
;==============================================================================================================;
;=======================================================================;
; <EFBFBD><EFBFBD>Ž Š€„<EFBFBD> ˆ<EFBFBD> ;
;=======================================================================;
;INT_X = !DFF(GND,(SVIDEO.INTT & KEYS.int),,((/IO or /M1) & DFF(DFF(!INT_X,CTH2,,),CTH2,,))) or !CBL_INT;
;BORD = DFF( (MODE0[7..4] == 15), LWR_COL,,);
;INTTX = DFF( (BORD & MODE03 & MODE02 & MODE00), LWR_COL,,);
;
;INTT = DFF( !(INTTX & (CTV[2..0] == 7)), CT5,,);
;CTV - áçñâ稪 áâப, CT - áçñâ稪 ¯¨ªá¥«¥© ¢ ª¢ ¤à â¨ª¥ (0-7), CTH - áçñâ稪 §­ ª®¬¥áâ
;
; | --- | --- | ---- | --- | --- | ---- |
; | S | R | C | D | Q+1 | !Q+1 |
; | --- | --- | ---- | --- | --- | ---- |
; | 1 | 0 | - | - | 1 | 0 |
; | 0 | 1 | - | - | 0 | 1 |
; | 1 | 1 | - | - | 1* | 1* |
; | 0 | 0 | 0->1 | 1 | 1 | 0 |
; | 0 | 0 | 0->1 | 0 | 0 | 1 |
; | 0 | 0 | 0 | - | Q | !Q |
; | --- | --- | ---- | --- | --- | ---- |
;384 448*320*6=860160 20966400 ⠪⮢ 41932800 448*312=139776 *6 =
;<EFBFBD> §à¥è¥­¨¥ íªà ­  56 ª¢ ¤à â®¢ ¯® £®à¨§®­â «¨ ¨ 39(40) ¯® ¢¥à⨪ «¨ (᪮௠¨«¨ ¯¥­ì)
;
; - <EFBFBD>  ª ªãî ­®£ã âਣ£¥à  ᨣ­ « ¨¤¥â?
; - ­  ª«®ª, ¯® äà®­âã ­  ¢ë室 ª®¯¨àã¥âáï §­ ç¥­¨¥ á ¤ âë
; - ª®£¤  íâ® äà®­â ¢®§­¨ª ¥â?
; - ¯® ¨­â㠮⠢¨¤¥®/ª« ¢ë
;
;‚ᥠ¦¥ ¯à®áâ®. <EFBFBD>  ª¢ ¤à â¨ª å á ¨­â®¬ INTT = 0, ­  ®áâ «ì­ëå INTT = 1
;¯®«ãç ¥âáï, çâ® äà®­â ¢®§­¨ª ¥â ¯à¨ ¯¥à¥å®¤¥ á ª¢ ¤à â¨ª  á ¨­â®¬ ­  ª¢ ¤à â¨ª ¡¥§ ¨­â 
;Žâ ª®«¨ç¥á⢠ ª¢ ¤à â®¢ ¤«¨­  ¨­â  ­¥ § ¢¨á¨â
; Š®à®ç¥, ¯®£­ «¨ ®â M1 ¨ IO. Ž­¨ ¢¬¥á⥠¢ ­ã«¥ ª®£¤  ¯à¥à뢠­¨¥ ¯®¤â¢¥à¤¨«®áì. <EFBFBD>®«ì ­  ¨å OR ¡ã¤¥â ⮫쪮
; ¯à¨ ¯®¤â¢¥à¦¤¥­¨¨ ¯à¥à뢠­¨ï. <EFBFBD>®«ì ã室¨â ¤ «ìè¥ ­  AND ¨ ®ââ㤠 ­  S, ¯®á«¥ 祣® ­  !Q ã
; ­ á ⮦¥ ­®«ì - ¨­â á­ï«áï. …᫨ ¨­â á­ï«áï ¨ à ¢¥­ 0, â® 1 ¨¤ñâ ­  á ¬ë© «¥¢ë© âਣ£¥à ¢ D, ­®
; ¯¥à¥å®¤¨â ­  á।­¨© âਣ£¥à ⮫쪮 ¯® CTH2 - áçñâ稪 ¤«¨­ë ¨­â  ª®â®àë© â¨ª ¥â ­¥§ ¢¨á¨¬® ®â ⮣®, ¥áâì
; ®­ ¨«¨ ­¥â. Š®£¤  ⨪­¥â, ¥¤¨­¨æ  ¯¥à¥å®¤¨â ¤ «ìè¥ ­  D ¨ ¦¤¥â ®¯ïâì ⨪ , ¯®á«¥ 祣® ¯®¯ ¤ ¥â ­  AND,  
; â ¬ ­  ¢â®à®¬ ¢ë¢®¤¥ ⮦¥ 1, ¯®â®¬ã ç⮠ᨣ­ «ë M1 ¨ IO ¨­¢¥àá­ë¥ ¨ ç¥à¥§ OR,   ¢¬¥á⥠¢ ­ã«¥ ®­¨ ⮫쪮
; ¯à¨ ¯®¤â¢¥à¦¤¥­¨¨ ¨­â . …¤¨­¨æ  ®ââ㤠 ¢â몠¥âáï ¢ S, çâ® ¤ ñâ ¢®§¬®¦­®áâì ¯¥à¥¤ âì ªã᮪ !§¥¬«¨ á D ­  !Q
; ¯à¨ ¯¥à¥å®¤¥ ª«®ª  á 0 ¢ 1. â ª®© ¯¥à¥å®¤ ¡ã¤¥â ⮫쪮 ¢ áâப¥ á«¥¤ãî饣® ¯®á«¥ ¨­â®¢®£® ­¥¨­â®¢®£®
; ª¢ ¤à â¨ª  á 3 ­  4 ¯¨ªá¥«. á«¥¤ãî騩 ª¢ ¤à â¨ª á ¨­â®¬ ¯®á«¥ ª¢ ¤à â¨ª  ¨­â  ®ââ¢ ¥â £¥­¥à æ¨î ¨­â 
; ­  ᥡï. Š®à®ç¥, ¨­â £¥­¥à¨àã¥âáï ¯®á«¥ ¯¥à¥å®¤  á ª¢ ¤à â  ¨­â  ­  ª¢ ¤à â ¡¥§ ¨­â . …᫨ â®ç­¥¥, â® ¢®
; ¢à¥¬ï ¯à®à¨á®¢ª¨ ¯®á«¥¤­¥© «¨­¨¨ §­ ª®¬¥áâ  ­  á«¥¤ãî饬 §­ ª®¬¥áâ¥. „¢  ª¢ ¤à â  ¨­â  ç¥à¥§ ®¡ëç­ë©
; ª¢ ¤à â ­¥ ᬮ£ãâ ¯®¢«¨ïâì ¯®â®¬ã çâ® ¨­â «¨¡® ¡ã¤¥â ¢áñ ¥éñ ¢¨á¥âì ¨ íâ® ¡ã¤¥â § ¬¥­  1 ­  1))) «¨¡® ¨­â
; á­¨¬¥âáï ç¥à¥§ IO ¨ M1 ãáâ ­®¢¨¢ S ¢ ¯®«®¦¥­¨¥ ?¯®å¥à ­  D ¨ C?, ª®â®à®¥ ᬥ­¨âáï ⮫쪮 ¯®á«¥ ⮣® ª ª
; ¯à®â¨ª îâ «¥¢ë¥ áçñâ稪¨.
;==============================================================================================================;
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ <EFBFBD>«®ª-‘奬  ‚¨¤¥®ª®­â஫«¥à  ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
;³ Š®¬¯ìîâ¥à  Sprinter ³ ³ RGB Registers ÃÄÄÄ> RED ³
;³ (ᨫ쭮 ã¯à®é¥­­ ï) ³ ³ & Video DACs ÃÄÄÄ> GREEN ³
;³ ³ ³ ÃÄÄÄ> BLUE ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÂÂÄÄÄÄÄÄÄÙ ³
;³ ÚÄÂÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ ³³ ÚÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄ¿ ³
;³ CPU ÄÄÄ´ ³MXAÃÄÄÄ´ Video ÃÄÅÅÄ´MODE³Pixel³PAL ÃÄÄÄ· ³
;³ Adress ÄÄÄ´ ³ ÃÄÄÄ´ MEM ÃÄÅÅÄ´Reg ³Atrib³Reg ÃÄÄĶ ³
;³ ÃÄ´ ÃÄÄÄ´ ÃÄÅÅÄ´ ³ Reg ³ ÃÄÄĶ ³
;³ Y-port ÄÄÄ´ ³ ÃÄÄÄ´ ÃÄÅÅÄ´ ³ ³ ³.. º ³
;³ Graf Reg ÄÄÄ´ ³ ÃÄÄÄ´ ³ ³³ ³ ³ ³ ³.. º ³
;³ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÃÄ´ ÃÄÄÄ´ ³ ³³ ³ ³ ³ ³.. º ³
;³ ³ Mode ÃÄÄÄ´ ³ ÃÄÄÄ´ ÃÄÅÅÄ´ ³ ³ ÃÄÄĶ ³
;³ ³ Counter ÃÄÄÄ´ ³ ÃÄÄÄ´ ÃÄÁÁÄ´ ³ ³ ÃÄÄĶ ³
;³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ ÃÄ´ ÃÄÄÄ´ ³ ÀÄÂÂÄÁÄÄÄÂÄÁÄÄÄÄÙ º ³
;³ ÖÄÄ Adress ÄÄÄ´ ³ ÃÄÄÄ´ ³ ³³ ÀÄÄÄÄÄÄÄÄ>Ķ ³
;³ ÇÄÄ From MODE ÄÄÄ´ ³ ÃÄÄÄ´ ³ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>Ķ ³
;³ º ÚÄÄÄÄÄÄÄÄÄÄ¿ ÃÄ´ ÃÄÄÄ´ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>Ķ ³
;³ º ³ Line/Pix ÃÄÄÄ´ ³ ÃÄÄÄ´ ³ º ³
;³ º ³ Counters ÃÄÄÄ´ ³ ÃÄÄÄ´ ³ º ³
;³ º ÀÄÄÄÄÄÄÄÄÄÄÙ ÃÄ´ ÃÄÄÄ´ ³ º ³
;³ ÇÄÄ Pixel/PAL ÄÄÄ´ ³ ÃÄÄÄ´ ³ º ³
;³ ÇÄÄ Registers ÄÄÄ´ ³ ÃÄÄÄ´ ³ º ³
;³ º ÀÄÁÄÄÄÙ ÀÄÄÄÄÄÄÄÙ º ³
;³ º º ³
;³ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
;³ Š ª à ¡®â ¥â ¢¨¤¥®ª®­â஫«¥à? ³
;³ ³
;³ €¤à¥á ¢¨¤¥®¤ ­­ëå á®áâ ¢«ï¥â 16 ¡¨â ³
;³ ˜¨à¨­  è¨­ë ¤ ­­ëå ¢¨¤¥®-އ“ - 32 ¡¨â. ³
;³ ޤ­®¢à¥¬¥­­® ¨á¯®«ì§ãîâáï ¤® 3 ¡ ©â. ³
;³ <EFBFBD>ਠ£à ä¨ç¥áª®©  ¤à¥á æ¨¨ ¢¨¤¥®-އ“ ¯à¥¤áâ ¢«ï¥â ᮡ®© 256 ³
;³ «¨­¨© ¯® 1024 ¡ ©â . ‹¨­¨¨  ¤à¥áãîâáï ç¥à¥§ Y-port,   ¡ ©âë ¢ ³
;³ «¨­¨¨ 10 ¬« ¤è¨¬¨ ¡¨â ¬¨  ¤à¥á  ¯à®æ¥áá®à . ³
;³ ⥪á⮢®¬ ०¨¬¥ ¢¨¤¥®-އ“ ¯à¥¤áâ ¢«ï¥â ᮡ®© ­ ¡®à ¨§ ³
;³ 32-å 8Kb áâà ­¨æ, ª®â®àë¥ ¯®¤ª«îç îâáï ª ¯¥à¢®© ¯®«®¢¨­¥ ³
;³ 5-© ¨ 7-© áâà ­¨æë ¯ ¬ï⨠ZX-Spectrum. <EFBFBD>®¬¥à áâà ­¨æë § ¤ ¥âáï³
;³ ⥬ ¦¥ Y-port-®¬. <EFBFBD>¥à¥ª«î祭¨¥ ०¨¬   ¤à¥á æ¨¨ ¯à®¨§¢®¤¨âáï ³
;³ ¯® ­®¬¥àã áâà ­¨æë އ“. ’ ª, ¤ ¦¥ ¥á«¨ ¢ 5-© ᯥªâà㬮¢áª®© ³
;³ áâà ­¨æ¥ ®ª ¦¥âáï ãáâ ­®¢«¥­  áâà ­¨æ  50h އ“, â® ¢¨¤¥®¯ ¬ïâì³
;³ ¡ã¤¥â  ¤à¥á®¢ âìáï ª ª £à ä¨ç¥áª ï. ³
;³ ’¥ªá⮢ ï  ¤à¥á æ¨ï ï¥âáï â ª ¦¥ ¨ ᯥªâà㬮¢áª®©. ³
;³ ” ªâ¨ç¥áª¨ ¢ ¢¨¤¥®-އ“ ¨¬¥¥âáï 32 ᯥªâà㬮¢áª¨å íªà ­ , ¨§ ³
;³ ª®â®àëå ॠ«ì­® ¬®¦­® ¨á¯®«ì§®¢ âì 24, ¯®â®¬ã çâ® ³
;³ ®áâ «ì­ë¥ áâà ­¨æë ¨á¯®«ì§ãîâáï ¤«ï ¯ «¨âàë ¨ ¤ ­­ëå ०¨¬®¢ ³
;³ íªà ­ . ³
;³ ³
;³ <EFBFBD>ªà ­ ¯à¥¤áâ ¢«ï¥â ᮡ®© ­ ¡®à §­ ª®¬¥áâ, ¢ ª®â®àëå ¬®¦­® ³
;³ ­¥§ ¢¨á¨¬® ãáâ ­ ¢«¨¢ âì ०¨¬ ®â®¡à ¦¥­¨ï ¨­ä®à¬ æ¨¨. ³
;³ Š ¦¤®¥ §­ ª®¬¥áâ® ¯® à §¬¥àã ᮮ⢥âáâ¢ã¥â ª¢ ¤à âã 8x8 ०¨¬ ³
;³ 320 â®ç¥ª ¢ «¨­¨¨. ‚ᥣ® ­  íªà ­¥ 40x32 §­ ª®¬¥áâ. ”¨§¨ç¥áª¨ ³
;³ ¨¬¥¥âáï 64x64 §­ ª®¬¥áâ, ­® ç áâì ¨§ ­¨å ­¨ª®£¤  ­¥ ¯®¯ ¤ ¥â ³
;³ ­  íªà ­,   ç áâì ­ å®¤¨âáï ¢ ®¡« á⨠¨¬¯ã«ìᮢ ᨭåà®­¨§ æ¨¨ ³
;³ ¨ £ è¥­¨ï «ãç . ª ¦¤®¬ §­ ª®¬¥á⥠¬®¦­® ãáâ ­®¢¨âì ᢮© ³
;³ ०¨¬, ¢¯«®âì ¤® ãáâ ­®¢ª¨ ०¨¬®¢ ¡®à¤¥à  ¨ £ è¥­¨ï «ãç . ³
;³ Žá­®¢­ë¥ ०¨¬ë, ãáâ ­ ¢«¨¢ ¥¬ë¥ ¢ §­ ª®¬¥áâ å: ³
;³ ZX-40 ⥪áâ®¢ë© à¥¦¨¬ 40 ᨬ¢®«®¢ ¢ áâப¥ ¨«¨ 1 ᨬ¢®« ­  ³
;³ §­ ª®¬¥áâ®. Ž­ ¦¥ ᯥªâà㬮¢áª¨©. ³
;³ ZX-80 ⥪áâ®¢ë© à¥¦¨¬ 80 ᨬ¢®«®¢ ¢ áâப¥ ¨«¨ 2 ᨬ¢®«  ­  ³
;³ §­ ª®¬¥áâ®. ³
;³ GR-256-8 £à ä¨ç¥áª¨© ०¨¬ 320x256 â®ç¥ª, 256 梥⮢. Ž­ ¦¥ ³
;³ 8x8 â®ç¥ª 256 梥⮢ ­  ®¤­® §­ ª®¬¥áâ® ³
;³ GR-16-16 £à ä¨ç¥áª¨© ०¨¬ 640x256 â®ç¥ª, 16 梥⮢. Ž­ ¦¥ ³
;³ 16x8 â®ç¥ª 16 梥⮢ ­  ®¤­® §­ ª®¬¥áâ® ³
;³ „®¯®«­¨â¥«ì­ë¥ ०¨¬ë: ³
;³ BORDER §­ ª®¬¥áâ® ¢ëᢥ稢 ¥âáï æ¢¥â®¬ ¡®à¤¥à  ³
;³ BLANK §­ ª®¬¥áâ® § â¥¬­¥­® ³
;³ INT-Mode ०¨¬ £¥­¥à æ¨¨ ᨣ­ «  INT ¤¥©áâ¢ã¥â ⮫쪮 ­  ³
;³ §­ ª®¬¥áâ å á ०¨¬®¬ BLANK ¨ ¯®§¢®«ï¥â ãáâ ­ ¢«¨¢ âì INT ³
;³ ¢ ­ã¦­®¥ ¬¥áâ®, ¢¯«®âì ¤® ãáâ ­®¢ª¨ 40 ¨¬¯ã«ìᮢ INT ­  ª ¤à ³
;³ ³
;³ ’ ªâ®¢ ï ç áâ®â  - 42MHz <EFBFBD>¥à¨®¤ - 6 ®¤­®â ªâ®¢ëå æ¨ª«®¢ ³
;³ ³
;³ –¨ª«ë à á¯à¥¤¥«ïîâáï á«¥¤ãî騬 ®¡à §®¬: ³
;³ ³
;³ ’ ªâ 1 - ¢ë¡®àª  ¡ ©â  ¯¨ªá¥«¥© ⥪á⮢®£® ०¨¬  ³
;³ ¢ £à ä¨ç¥áª®¬ ०¨¬¥ - 宫®á⮩ 室 ³
;³ ’ ªâ 2 - ¢ë¡®àª  ¡ ©â   âਡã⮢ ⥪á⮢®£® ०¨¬  ³
;³ ®­ ¦¥ ¢ë¡®àª  ¡ ©â  ¯¨ªá¥«ï £à ä¨ç¥áª®£® ०¨¬  ³
;³ ’ ªâ 3 - ¢ë¡®àª  3-å ¡ ©â ¯ «¨âàë á § ¯¨áìî ¢ RGB ॣ¨áâàë ³
;³ ¤«ï ०¨¬®¢ 640 â®ç¥ª, ¢ ०¨¬¥ 320 宫®á⮩ 室 ³
;³ ’ ªâ 4 - ¢ë¡®àª  á«®¢  ०¨¬  íªà ­  ³
;³ ¢ë¡®àª  ¯à®¨§¢®¤¨âáï ®¤¨­ à § ¢ ç¥âëॠ¯¥à¨®¤  ³
;³ ’ ªâ 5 - 横« § ¯¨á¨ ¤ ­­ëå ®â ¯à®æ¥áá®à  ³
;³ ¥áâ¥á⢥­­®, ¤ ­­ë¥ ¯¨èãâáï ⮫쪮 ª®£¤  ­ã¦­® ³
;³ ’ ªâ 6 - ¢ë¡®àª  3-å ¡ ©â ¯ «¨âàë á § ¯¨áìî ¢ RGB ॣ¨áâàë ³
;³ ³
;³ ‚ᥠ­ ç¨­ ¥âáï á â ªâ  4. €¤à¥á ¤«ï ०¨¬  ®¯à¥¤¥«ï¥âáï ³
;³ áç¥â稪®¬ ¢¥à⨪ «¨ ¨ £®à¨§®­â «¨. ‘ç¨â îâáï 8 â®ç¥ª 320-£® ³
;³ ०¨¬  ¯® ¢¥à⨪ «¨ ¨ 8 áâப ¯® £®à¨§®­â «¨. ³
;³ <EFBFBD>¥¦¨¬ § ¤ ¥âáï 16 ¡¨â ¬¨, ¨§ ª®â®àëå 12 § ¤ îâ  ¤à¥á ª¢ ¤à â  ³
;³ 8x8 ¡ ©â £à ä¨ç¥áª®£® ०¨¬ . ⥪á⮢®¬ ०¨¬¥ í⨠¦¥ ¡¨âë ³
;³ § ¤ îâ  ¤à¥á ¤ ­­ëå íªà ­ , ­® ­¥áª®«ìª® ¨­ ç¥. ³
;³ Žá⠢訥áï 4 ¡¨â  ०¨¬  § ¤ îâ ᮡá⢥­­® ०¨¬. ޤ¨­ ¡¨â ³
;³ § ¤ ¥â £à ä¨ç¥áª¨© ¨«¨ ⥪áâ®¢ë© à¥¦¨¬ §­ ª®¬¥áâ . …é¥ ®¤¨­ ³
;³ ¡¨â § ¤ ¥â ०¨¬ 320 ¨«¨ 640 â®ç¥ª. „¢  ®áâ ¢è¨åáï ¡¨â  ¢ ³
;³ ⥪á⮢®¬ ०¨¬¥ ïîâáï ¤®¯®«­¥­¨¥¬  ¤à¥á  ¤ ­­ëå,   ¢ ³
;³ £à ä¨ç¥áª®¬ § ¤ îâ ®¤­ã ¨§ 4-å 256-â¨æ¢¥â­ëå ¯ «¨âà ³
;³ ³
;³ ¯ïâë¬ â ªâ®¬ ¢á¥ ïá­®. ‡  ¨áª«î祭¨¥¬ ⮣®, çâ® ¤«ï ³
;³ £à ä¨ç¥áª®£® ¨ ⥪á⮢®£® ०¨¬®¢ ¨§¬¥­ï¥âáï  ¤à¥á æ¨ï އ“ ³
;³ ˆ§¬¥­¥­¨¥ § ¤ ¥âáï ­®¬¥à®¬ áâà ­¨æë ‘âà ­¨æë 50..5F áç¨â îâáï ³
;³ £à ä¨ç¥áª¨¬ އ“. ‘«¥¤ã¥â ®â¬¥â¨âì, çâ® ¯®­ï⨥ £à ä¨ç¥áª®£® ¨ ³
;³ ⥪á⮢®£® ०¨¬   ¤à¥á æ¨¨ ­¥ ᮢᥬ ¢¥à­® ®âà ¦ ¥â áãâì. ³
;³ ‚뢮¤ ¤ ­­ëå ¢ íªà ­­®¥ އ“ ¬®¦¥â ®áãé¥á⢫ïâìáï ¢ ®¡®¨å ³
;³ ०¨¬ å ­¥§ ¢¨á¨¬® ®â ¤¥©á⢨⥫쭮£® ०¨¬  íªà ­ . ³
;³ ³
;³ 6-© â ªâ. —⥭¨¥ ¯ «¨âàë. ⥪á⮢®¬ ०¨¬¥  ¤à¥á ¯ «¨âàë ³
;³ á®áâ ¢«ï¥â 10 ¡¨â. 8 ¡¨â - ¡ ©â  âਡãâ . 1 ¡¨â - ¯¨ªá¥«ì. ³
;³ 1 ¡¨â - FLASH. <EFBFBD>â®â ¡¨â ä ªâ¨ç¥áª¨ ¯¥à¥ª«î砥⠤¢¥ ¯ «¨âàë ³
;³ á ç áâ®â®© FLASH. …᫨ ¯ «¨âàë ¤«ï ¤ ­­®£®  âਡãâ  á®¢¯ ¤ îâ ³
;³ â® FLASH ­¥ ­ ¡«î¤ ¥âáï. ³
;³ £à ä¨ç¥áª®¬ ०¨¬¥  ¤à¥á ¯ «¨âàë á®áâ ¢«ï¥â 8 ¡¨â ¡ ©â  ³
;³ ¯¨ªá¥«ï ¨ 2 ¡¨â  ­®¬¥à  ¯ «¨âàë, áç¨â ­­®£® ¢ 4-¬ â ªâ¥, ­® ³
;³ § ¤¥à¦ ­­®£® ­  1 ¯¥à¨®¤ ¤«ï ᨭåà®­­®£® ¨§¬¥­¥­¨ï ०¨¬  ³
;³ ¨ ¯ «¨âàë ¢ §­ ª®¬¥áâ¥. ³
;³ …é¥ ®¤¨­ ¡¨â  ¤à¥á  ¨á¯®«ì§ã¥âáï ¤«ï à §¤¥«¥­¨ï ¯ «¨âà ³
;³ ⥪á⮢®£® ¨ £à ä¨ç¥áª®£® ०¨¬®¢. Žá⠢訥áï  ¤à¥á  އ“ ³
;³ ãáâ ­ ¢«¨¢ îâáï ¢ "1" ¨ ¢áï ¯ «¨âà  ®ª §ë¢ ¥âáï ­  ª®­æ å ³
;³ 1024-å ¡ ©â®¢ëå «¨­¨© £à ä¨ç¥áª®£® ०¨¬ . ³
;³ ³
;³ ’ ªâ 1. ‡¤¥áì ­ ç¨­ ¥â ¤¥©á⢮¢ âì ­®¢ë© ०¨¬, áç¨â ­­ë© ¢ ³
;³ ⠪⥠4. €¤à¥á އ“ ï¥âáï  ¤à¥á®¬ ¡ ©â  ¯¨ªá¥«¥© ⥪á⮢®£® ³
;³ ०¨¬ . <EFBFBD> ©â ¯¨ªá¥«¥© § ¯¨á뢠¥âáï ¢ ᤢ¨£®¢ë© ॣ¨áâà ¨ ³
;³ ¯¥à¢ë© ¢ë¤¢¨­ãâë© ¡¨â ­ ç¨­ ¥â ¤¥©á⢮¢ âì ¢ 6-¬ â ªâ¥. ³
;³ ³
;³ ’ ªâ 2. ‚롨ࠥâáï ¡ ©â  âਡãâ . €¤à¥á ®â«¨ç ¥âáï ®â  ¤à¥á  ³
;³ ¡ ©â  ¯¨ªá¥«¥© ¯® ¨§¢¥áâ­®¬ã ‘¯¥ªâà㬮¢áª®¬ã § ª®­ã. ³
;³ …᫨ ¯¥à¥¤ í⨬ ¢ 4-¬ ⠪⥠¡ë« áç¨â ­ £à ä¨ç¥áª¨© ०¨¬, â® ³
;³ €¤à¥á  âਡãâ  áâ ­®¢¨âáï ¤à㣨¬ ¨ ᮮ⢥âáâ¢ã¥â ¡ ©âã ¯¨ªá¥«ï³
;³ £à ä¨ç¥áª®£® ०¨¬ . <EFBFBD>¥£¨áâà  âਡãâ  ¢ £à ä¨ç¥áª®¬ ०¨¬¥ ³
;³ ï¥âáï ॣ¨áâ஬ ¡ ©â  ¯¨ªá¥«ï. ³
;³ ³
;³ ’ ªâ 3. —⥭¨¥ ¯ «¨âàë ¤«ï ०¨¬  640 â®ç¥ª. ‘«¥¤ã¥â § ¬¥â¨âì ³
;³ çâ® ¢ £à ä¨ç¥áª®¬ ०¨¬ 640 â®ç¥ª, 4 áâ àè¨å ¡¨â  ॣ¨áâà  ³
;³ ¯¨ªá¥«ï ¬ áª¨àãîâáï ­ã«ï¬¨ ¨ ¢ í⮬ ⠪⥠¢ ¬« ¤è¨å ¡¨â å ³
;³  ¤à¥á  ®ª §ë¢ îâáï ⥠ç¥âëॠ¡¨â , ª®â®àë¥ ¡ë«¨ § ¬ áª¨à®¢ ­ë ³
;³ ¢ 6-¬ â ªâ¥. ’ ª ®à£ ­¨§ã¥âáï 16 梥⮢ ­  â®çªã. ³
;³ ³
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
;³ <EFBFBD>ணࠬ¬¨à®¢ ­¨¥. ³
;³ 1. ’¥ªáâ®¢ë© à¥¦¨¬  ¤à¥á æ¨¨ ®¡êï¥âáï ®â¬¨à î騬 ¨ ¥£® ³
;³ ¨á¯®«ì§®¢ ­¨¥ à §à¥è¥­® ⮫쪮 ¤«ï ª®­ä¨£ãà æ¨© ᮢ¬¥á⨬ëå á ³
;³ ZX-Spectrum. .¥. Sprinter-1 ¨ AY. (¢ AY ¤à㣮£® ¨ ­¥â) ³
;³ 2. ‚ª«î祭¨¥ £à ä¨ç¥áª®£® ०¨¬   ¤à¥á æ¨¨. ³
;³ „«ï í⮣® ¤®áâ â®ç­® ¢ª«îç¨âì áâà ­¨æã 50..5F ¢ ª ª®¥ «¨¡® ¨§ ³
;³ ®ª®­ ¯à®æ¥áá®à . ³
;³ <EFBFBD>ਬ¥à: ³
;³ LD A,50h ³
;³ OUT (PAGE3),A ³
;³ <EFBFBD>®á«¥ ¨á¯®«­¥­¨ï íâ¨å ª®¬ ­¤ ®ª­® C000..FFFF ¡ã¤¥â ᮤ¥à¦ âì ³
;³ ¤ ­­ë¥ £à ä¨ç¥áª®© ¯ ¬ï⨠(¢¥à­¥¥, ¥¥ ª®¯¨¨ ¢ ®á­®¢­®¬ އ“) ³
;³ 3. “áâ ­®¢ª  ­®¬¥à  «¨­¨¨. ³
;³ ƒà ä¨ç¥áª®¥ އ“, ª ª 㦥 ¡ë«® ᪠§ ­®, á®á⮨⠨§ 256-⨠«¨­¨©³
;³ ¯® 1024 ¡ ©â. ®ª­¥ ¡ã¤¥â ¢¨¤­  ⮫쪮 ®¤­  «¨­¨ï. €¤à¥á  ³
;³ ®â«¨ç î騥áï ­  ç¨á«® ªà â­®¥ 400h 䨧¨ç¥áª¨  ¤à¥áãîâ ®¤­¨ ¨ ³
;³ ⥠¦¥ ï祩ª¨ ¯ ¬ïâ¨. ³
;³ „«ï ¨§¬¥­¥­¨ï ­®¬¥à  «¨­¨¨ ­ ¤® ¢ë¢¥á⨠­®¬¥à «¨­¨¨ ¢ ¯®àâ. ³
;³ LD A,40h ³
;³ OUT (Y_port),A ³
;³ <EFBFBD>®á«¥ ¨á¯®«­¥­¨ï íâ¨å ª®¬ ­¤ á  ¤à¥á  ¢ ®ª­¥ ¢¨¤¥®-އ“ ¡ã¤¥â ³
;³ ­ å®¤¨âìáï 64-ï «¨­¨ï íªà ­  (­ ç¨­ ï ᢥàåã, á 0-©) ³
;³ 4. Š ¦¤ë© ª¢ ¤à â ¢¨¤¥®-އ“ à §¬¥à®¬ 8x8 ¡ ©â ¬®¦¥â ¡ëâì ³
;³ ãáâ ­®¢«¥­ ¢ «î¡®¥ §­ ª®¬¥áâ®. €¤à¥á ¢­ãâਠª¢ ¤à â  ¥áâì ³
;³ ¬« ¤è¨¥ âਠ¡¨â   ¤à¥á  «¨­¨¨ ¨ ¬« ¤è¨¥ âਠ¡¨â  ­®¬¥à  «¨­¨¨.³
;³ <EFBFBD> ©âë 000..2FFh ­  «¨­¨ïå ïîâáï ¯à®áâ묨 ¤ ­­ë¬¨, ª®â®àë¥ ³
;³ ¬®¦­® ¨á¯®«ì§®¢ âì ¤«ï ¢ë¢®¤  ­  íªà ­. ³
;³ <EFBFBD> ©âë 300h..3A0h ïîâáï ¡ ©â ¬¨ ०¨¬  íªà ­ . ³
;³ <EFBFBD> ©âë 3E0h..3FFh - ¡ ©âë ¯ «¨âà. ³
;³ €¤à¥á ª¢ ¤à â  ¤ ­­ëå, ª®â®àë¥ ¢ë¢®¤¨âáï ¢ §­ ª®¬¥áâ® § ¤ ¥âáï³
;³ ¢ ¡ ©â å ०¨¬  íªà ­ . ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
;__________________________________________________________________________________________________________#
; MACRO _mGET_FAT_START slot_num
; .correct EQU (SLOT3 and slot_num)*2
; IN A,(slot_num)
; LD B,A
; LD A,SYS_PAGE
; OUT (slot_num),A
; LD HL,SYS_PAGE.RAM_TABLE - .correct
; DISPLAY "CORRECT = ",/h,.correct
; ENDM
; MACRO _mGET_FAT_END slot_num
; OUT (slot_num),A
; ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; DW #FEFF ; Sprinter-2000
;
; DW #FFFE ; Sprinter-1
; DB 0 ;  ªá¥«¥à â®à
; DB 1 ; íªà ­
; DB 2 ; ª« ¢¨ âãà 
; DB 1 ; ª®¢®ªá;
;
; DW #FFFD ; Sprinter-2
; DB 2 ;  ªá¥«¥à â®à
; DB 1 ; íªà ­
; DB 0 ; ª« ¢¨ âãà 
; DB 1 ; ª®¢®ªá;
;
; DW #FFFC ; AY
; DB 0 ;  ccselerator
; DB 0 ; Screen
; DB 2 ; ª« ¢¨ âãà 
; DB 0 ; ª®¢®ªá;
;
; DW #FFF9 ; ¨¤¥­â¨ä¨ª â®à ª®­ä¨£ãà æ¨¨ DooM
; DB 3 ; accelerator type
; DB 1 ; íªà ­
; DB 0 ; ª« ¢¨ âãà 
; DB 2 ; ª®¢®ªá (¡« áâ¥à)
;
;ELCOM256 EQU 1 ; ०¨¬ ELCOM-256
;IF ELCOM256 EQ 1
;ELSE
;D_TBON EQU 03h ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
;D_TBOFF EQU 02h ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
;D_ROM16ON EQU 40h
;D_ROM16OFF EQU 00h
;CNF_0 EQU 04h
;CNF_1 EQU 0Ch
;CNF_2 EQU 14h
;CNF_3 EQU 1Ch
;ENDIF
;TTTT_EEEE EQU 100
;R170 EQU #0050 ;Data
;R171 EQU #0051 ;Error
;R172 EQU #0052 ;Direct
;R173 EQU #0053 ;Reserve
;R174 EQU #0054 ;Lenght block low
;R175 EQU #0055 ;Lenght block high
;R176 EQU #4052 ;Drive device
;R177 EQU #4053 ;Status
;W170 EQU #0150 ;Data
;W171 EQU #0151 ;????
;W172 EQU #0152 ;????
;W173 EQU #0153 ;Reserve
;W174 EQU #0154 ;Lenght block low
;W175 EQU #0155 ;Lenght block high
;W176 EQU #4152 ;Drive device
;W177 EQU #4153 ;Command
;HDW_COM EQU #4153 ; #1F7 Command
;P_CMD EQU #4153 ; WRITE
;HDW_DRV EQU #4152 ; #1F6 Drive Control
;P_HD_CS EQU #4152
;HDW_CLH EQU #0155 ; #1F5 Cylinder High
;P_C_HIG EQU #0155
;HDW_CLL EQU #0154 ; #1F4 Cylinder Low
;P_C_LOW EQU #0154
;HDW_SEC EQU #0153 ; #1F3 Sector
;P_S_NUM EQU #0153
;HDW_CNT EQU #0152 ; #1F2 Counter
;P_S_CNT EQU #0152
;HDW_ERR EQU #0151 ; #1F1 Error
;HDW_DAT EQU #0150 ; #1F0 Data
;HDR_CTL EQU #4053 ; #1F7 Status (Control)
;P_HDST EQU #4053 ; READ
;HDR_DRV EQU #4052 ; #1F6 Drive Control
;HDR_CLH EQU #0055 ; #1F5 Cylinder High
;HDR_CLL EQU #0054 ; #1F4 Cylinder Low
;HDR_SEC EQU #0053 ; #1F3 Sector
;HDR_CNT EQU #0052 ; #1F2 Counter
;HDR_ERR EQU #0051 ; #1F1 Error
;P_ERR EQU #0051 ; READ
;HDR_DAT EQU #0050 ; #1F0 Data
;P_DATS EQU #0050 ; READ/WRITE INIR/OTIR
;;Bits for HDR_CTL
;;---[]
;BSY EQU 7
;RDY EQU 6
;DRQ EQU 3
;ERR EQU 0
;;---[]
;HDD EQU 1
;CDROM EQU 2
;;EQU FOR IY+
;DRVHD_H EQU 0
;SC_PT_H EQU 1
;HEADS_H EQU 2
;CYL_L_H EQU 3
;CYL_H_H EQU 4
;SPCLL_H EQU 5
;SPCLH_H EQU 6
;DTYPE_H EQU 7
;IDE0 EQU #C1C0
;IDE1 EQU #C1C8
;IDE2 EQU #C1D0
;IDE3 EQU #C1D8
;HDD_INI_TABLE EQU #C1C0
; D_TBON EQU 3 ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
; D_TBOFF EQU 2 ; ¤ ­­ë¥ ¤«ï ¢ëª«î祭¨ï TURBO
; CNF_0 EQU #04 ; ª àâ  ¯®à⮢ 0
; CNF_1 EQU #0C ; ª àâ  ¯®à⮢ 1
; CNF_2 EQU #14 ; ª àâ  ¯®à⮢ 2
; CNF_3 EQU #1C ; ª àâ  ¯®à⮢ 3
; CNF_512 EQU #80 ; ¢ª«î祭¨¥ Pentagon 128
; áâà ­¨æë á ª®­ä®© ¤«ï Sp97, ¤«ï ᮢ¬¥á⨬®áâ¨ á ¤à¥¢­¨¬¨ ¯à®£ ¬¨
; PG_SP1 equ #EC
; PG_SP2 equ #EE
; PG_AY equ #EA
; SPRINTER EQU 4 ; <EFBFBD>ˆŸ !!!
; ISD_WARM EQU 3
; ISD_COLD EQU 0
; IS_KEY EQU #40 ; „€<E2809E><E282AC>… „‹Ÿ ‚›‚Ž„€ <20>Ž<EFBFBD> <20><>ˆ Šž—…<E28094>ˆˆ IS-DOS
; IS_RAM_ADR EQU #5BC0 ; €„<E282AC> ‡€ƒ<E282AC>“‡Šˆ <20><>Žƒ<C5BD>€ŒŒ <20><EFBFBD>…•Ž„€ IS-DOS
; TB_WAITES EQU #00 ; WAITë ¤«ï TURBO-MODE
; NTB_WAITES EQU #00 ; WAITë ¤«ï neTURBO-MODE
; IS_WAITES EQU #00 ; WAITë ¤«ï IS-DOS
; SYS_PORT_ON EQU #7D
; SYS_PORT_OFF EQU #3D
; RAMD_LET EQU ('R' - 'A')
; HD_HEADS EQU 5
; HD_CS EQU #A0
; HD_S_P_T EQU 17
; HD_S_X_H EQU (HD_S_P_T * HD_HEADS) ; ??? ç¨á«® ᥪâ®à®¢ ­  樫¨­¤à¥
; P_DATS EQU #50 ; READ/WRITE INIR/OTIR
; P_ERR EQU #051 ; READ
; P_PREC EQU #151 ; WRITE
; P_S_CNT EQU #152
; P_S_NUM EQU #153
; P_C_LOW EQU #154
; P_C_HIG EQU #155 ;<-\
; P_HD_CS EQU #4152 ;<-/
; P_HDST EQU #4053 ; READ
; P_CMD EQU #4153 ; WRITE
; P_HD3F6 EQU #4154 ; WRITE 3F6
; P_HD3F7 EQU #4055 ; READ 3F7
;---------------------------------------
; GR_BIT_END EQU 7
; S_BIT_END EQU 7
; S_BIT_LIN EQU 6
; S_BIT_MOD EQU 5
; BIT_1440 EQU 1
; BIT_MASK_1440 EQU %00000010
; ¥á«¨ à㤨¬¥­â, â® ã¡à âì ¨§ १¥à¢¨à®¢ ­¨ï ¢ â ¡«¨æ¥ áâà ­¨æ
;MODE_PAGE EQU #FC
;---------------------------------------
;=================================================================================
; <EFBFBD>®pâë Sprinter. (¡ ©âë PORT_X)<<
; 0 - port FF<<
; 1 - port keyboard<<
; 2 - port BORDER<<
; 3 - port 1FFDh<<
; 4 - port 7FFDh<<
; 5 - port 3FFDh<<
; 6 - port Start-ROM<<
; 7 - port Start-ROM-ALT<<
; 8 - port ROM-BASIC48<<
; 9 - port ROM-BASIC128<<
; 10 - port ROM-TR-DOS<<
; 11 - port ROM-EXPANSION<<
; 12 - port ROM-BASIC48-ALT<<
; 13 - port ROM-BASIC128-ALT<<
; 14 - port ROM-TR-DOS-ALT<<
; 15 - port ROM-EXPANSION-ALT<<
; 16 ??<<
; .. ??<<
; 31 ???ports RAM-PAGES - ¯®pâë 㪠§ë¢ î騥, ª ª ï áâp ­¨æ  އ“<<
; ¯®¤ª«î祭  ¢ ª ç¥á⢥ áâp ­¨æë 0..F ¢ ª®­ä¨£ãp æ¨¨ Scorpion.<<
; 33 - port RAM-0 áâp ­¨æ  އ“ ¯®¤ª«îç ¥¬ ï ¢ ­ã«¥¢®¥ ®ª­® ¯p®æ¥áá®p <<
; 34 - port RAM-5 áâp ­¨æ  އ“ ¯®¤ª«îç ¥¬ ï ¢ ¯¥p¢®¥ ®ª­® ¯p®æ¥áá®p <<
; 35 - port RAM-2 áâp ­¨æ  އ“ ¯®¤ª«îç ¥¬ ï ¢® ¢â®p®¥ ®ª­® ¯p®æ¥áá®p <<
; 36 - port CONFIG<<
; 37 - port COVOX-1<<
; 38 - port COVOX-2<<
; 39 - port AY-3-8910-adr<<
; 40 - port AY-3-8910-dat<<
; 41 - port KEMPSTON<<
; 42 - port ISA-interface<<
; 43 ??reserv<<
; .. ??<<
; 47 ??<<
; 48 - 51 ¯®pâë ƒ93<<
; 52 - ¯®pâ DOS-1<<
; 53 - ¯®pâ DOS-2<<
; 54 ?? á«ã¦¥¡­ë¥ ¯®pâë<<
; .. ??<<
; 63 ??<<
; 64 ?? ¯®pâë IDE interface<<
; .. ??<<
; 79 ??<<
; 80..127 - p¥§¥p¢.<<
; 128..143 - ¯®pâë ¨¤¥­â¨ä¨ª â®p  ¬ è¨­ë ( ⮫쪮 ¤«ï ç⥭¨ï.)<<
; 144..254 - p¥§¥p¢<<
; 255 - ­ã«ì-¯®pâ - ®âª«î祭­®¥ á®áâ®ï­¨¥.<<
;=================================================================================