This commit is contained in:
Tolik 2024-08-14 02:38:09 +10:00
parent 7b2364f46e
commit 49355dafb8
3 changed files with 456 additions and 53 deletions

View File

@ -1,23 +1,26 @@
; ;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
DEFDEVICE SPRINTER, #4000, 256 DEFDEVICE SPRINTER, #4000, 256
DEFINE SLOT? +(SLOT0 | ((#C0 & high $)>>>1)) DEFINE SLOT? +(SLOT0 | ((#C0 & high $)>>>1))
DEFINE OFFSET? +(SLOT3 ^ SLOT?)*512 DEFINE OFFSET? +(SLOT3 ^ SLOT?)*512
IFNDEF _includedSP2000 : DEFINE _includedSP2000 : ENDIF IFNDEF _includedSP2000 : DEFINE _includedSP2000 : ENDIF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
; <EFBFBD>à¥à뢠­¨ï ; ; <EFBFBD>à¥à뢠­¨ï ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
; ‚¥ªâ®à #FF: ; ‚¥ªâ®à #FF:
; ª« ¢¨ âãà  - ¢¨á¨â 32 â ªâ . ¬®¦­® ¯à®¢¥à¨âì ¯® ¡ãä¥àã ¢ ¯à®æ¥, ¬®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨. ; ª« ¢¨ âãà  - ¢¨á¨â 32 â ªâ . ¬®¦­® ¯à®¢¥à¨âì ¯® ¡ãä¥àã ¢ ¯à®æ¥, ¬®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨.
; ª ¤à®¢®¥ - ¢¨á¨â 32 â ªâ . Œ®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨. ; ª ¤à®¢®¥ - ¢¨á¨â 32 â ªâ . Œ®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨.
; CBL - ¢¨á¨â ¤® § å¢ â  ¯à®æ¥¬, ¬®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨. ; CBL - ¢¨á¨â ¤® § å¢ â  ¯à®æ¥¬, ¬®¦¥â ­ «®¦¨âìáï á ®áâ «ì­ë¬¨.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
; €¤à¥á  ¯®à⮢ ; ; €¤à¥á  ¯®à⮢ ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
; <EFBFBD>Ž<EFBFBD> #FE ; <EFBFBD>Ž<EFBFBD> #FE
; Read: ; Read:
; bit0 - keyboard ; bit0 - keyboard
@ -38,13 +41,12 @@
; bit5 - ; bit5 -
; bit6 - ; bit6 -
; bit7 - ; bit7 -
ZX_Beeper EQU #FE ; bit 4 ZX_Beeper EQU #FE ; bit 4
ZX_Tape_Ou EQU #FE ; bit 3 ZX_Tape_Ou EQU #FE ; bit 3
ZX_Tape_In EQU #FE ; bit 6 ZX_Tape_In EQU #FE ; bit 6
;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;------------[Covox Blaster]------------; ;
; Covox Blaster
CBL: CBL:
.OUT EQU #4F ; <20>®àâ ¤«ï ¢ë¢®¤  §¢ãª  = #FB .OUT EQU #4F ; <20>®àâ ¤«ï ¢ë¢®¤  §¢ãª  = #FB
.BUFFER_PAGE EQU #FD ; áâà ­¨æ -¡ãä¥à ¤«ï ª¨¤ ­¨ï ¬ã§«   ªá¥«¥¬ (¯à¥à뢠­¨ï CBL ¤®«¦­ë ¡ëâì ¢ª«î祭ë) .BUFFER_PAGE EQU #FD ; áâà ­¨æ -¡ãä¥à ¤«ï ª¨¤ ­¨ï ¬ã§«   ªá¥«¥¬ (¯à¥à뢠­¨ï CBL ¤®«¦­ë ¡ëâì ¢ª«î祭ë)
@ -75,7 +77,7 @@ CBL:
.KHz_44 EQU #0D .KHz_44 EQU #0D
.KHz_55 EQU #0E .KHz_55 EQU #0E
.KHz_109 EQU #0F .KHz_109 EQU #0F
;
; #00 - COVOX on, standart Pentagon mode ; #00 - COVOX on, standart Pentagon mode
; #80 - CBL on, 15 kHz mono ; #80 - CBL on, 15 kHz mono
; #81 - CBL on, 22 kHz mono ; #81 - CBL on, 22 kHz mono
@ -93,14 +95,14 @@ CBL:
; (2 ¡ ­ª¨ ¯® 128/256) ; (2 ¡ ­ª¨ ¯® 128/256)
; ¯à¥à뢠­¨¥ ¯à¨«¥â ¥â ¯®á«¥ ª ¦¤®© ; ¯à¥à뢠­¨¥ ¯à¨«¥â ¥â ¯®á«¥ ª ¦¤®©
; ¡ ­ª¨ ; ¡ ­ª¨
;
; <EFBFBD>¥¦¨¬ 8 ¡¨â: ; <EFBFBD>¥¦¨¬ 8 ¡¨â:
; ã஢¥­ì ­ã«ï ¢ ᥬ¯« å - #80 ; ã஢¥­ì ­ã«ï ¢ ᥬ¯« å - #80
; <EFBFBD>¥¦¨¬ 16 ¡¨â: ; <EFBFBD>¥¦¨¬ 16 ¡¨â:
; ã஢¥­ì ­ã«ï ¢ ᥬ¯« å - #0000 ; ã஢¥­ì ­ã«ï ¢ ᥬ¯« å - #0000
; Stereo-áí¬¯«ë: ; Stereo-áí¬¯«ë:
; ç¥à¥¤ãî騥áï ®âáç¥âë L ¨ R ª ­ «®¢. ; ç¥à¥¤ãî騥áï ®âáç¥âë L ¨ R ª ­ «®¢.
;
; mono_8bit: ; mono_8bit:
; DB 80h,81h,7Fh.... ; DB 80h,81h,7Fh....
; mono_16bit: ; mono_16bit:
@ -109,8 +111,7 @@ CBL:
; DB 80h,80h,81h,80h,7Fh,80h... ; §¤¥áì ®¤¨­ ª ­ « ¨£à ¥â, ¢â®à®© ¬®«ç¨â ; DB 80h,80h,81h,80h,7Fh,80h... ; §¤¥áì ®¤¨­ ª ­ « ¨£à ¥â, ¢â®à®© ¬®«ç¨â
; stereo_16bit: ; stereo_16bit:
; DW 0,0,1000,0,-1000,0... ;  ­ «®£¨ç­®, ®¤¨­ ª ­ « ¨£à ¥â, ¢â®à®© ¬®«ç¨â ; DW 0,0,1000,0,-1000,0... ;  ­ «®£¨ç­®, ®¤¨­ ª ­ « ¨£à ¥â, ¢â®à®© ¬®«ç¨â
;
; CASE CBL_XX[3..0] IS ; CASE CBL_XX[3..0] IS
; WHEN 0 => CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo ; WHEN 0 => CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo
; WHEN 1 => CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo ; WHEN 1 => CBL_TAB[] = 9; -- 21.875 KHz -- mono/stereo
@ -120,7 +121,7 @@ CBL:
; WHEN 5 => CBL_TAB[] = 0; -- reserved ; WHEN 5 => CBL_TAB[] = 0; -- reserved
; WHEN 6 => CBL_TAB[] = 0; -- reserved ; WHEN 6 => CBL_TAB[] = 0; -- reserved
; WHEN 7 => CBL_TAB[] = 0; -- reserved ; WHEN 7 => CBL_TAB[] = 0; -- reserved
;
; WHEN 8 => CBL_TAB[] = 27; -- 7.8125 KHz -- mono/stereo 8/16 bit ; 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 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 10=> CBL_TAB[] = 13; -- 15.625 KHz -- mono/stereo 8/16 bit
@ -130,9 +131,10 @@ CBL:
; WHEN 14=> CBL_TAB[] = 3; -- 54.6875 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 ; WHEN 15=> CBL_TAB[] = 1; -- 109.375 KHz -- mono/stereo 8/16 bit
; END CASE; ; END CASE;
;---------------------------------------; ;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;
;======================================= ; SYS_PORT / CNF_PORT
;
; § ¬ ¯«¥­ ç¥à¥§ ª àâã ¯®à⮢ ­  #7C/#3C ¨ #74/#24 ; § ¬ ¯«¥­ ç¥à¥§ ª àâã ¯®à⮢ ­  #7C/#3C ¨ #74/#24
CNF_PORT: CNF_PORT:
.ON EQU #74 .ON EQU #74
@ -248,10 +250,14 @@ bit7..bit3
¯¥à¥ª«î祭¨¥ áâà ­¨æ <EFBFBD>‡“ ¯®à⮬ #5C ¯à®¨á室¨â ⮫쪮 ¯à¨ ¢®âª­ã⮩ <20>‡“ ç¥à¥§ sys_port. ¯¥à¥ª«î祭¨¥ áâà ­¨æ <EFBFBD>‡“ ¯®à⮬ #5C ¯à®¨á室¨â ⮫쪮 ¯à¨ ¢®âª­ã⮩ <20>‡“ ç¥à¥§ sys_port.
Œ®¦­® ¯¥à¥ª«îç âì áâà ­¨æë ç¥à¥§ ¢­ãâ७­¨© ¯®àâ #8F, ⮣¤  bit4 í⮣® ¯®àâ  ¢ª«îç ¥â ᨣ­ « § ¯¨á¨ ¤«ï <20>‡“. Œ®¦­® ¯¥à¥ª«îç âì áâà ­¨æë ç¥à¥§ ¢­ãâ७­¨© ¯®àâ #8F, ⮣¤  bit4 í⮣® ¯®àâ  ¢ª«îç ¥â ᨣ­ « § ¯¨á¨ ¤«ï <20>‡“.
’ ª ¦¥ íâ®â ¯®àâ ¤ ñâ ¯àï¬ãî ­ã¬¥à æ¨î áâà ­¨æ ¯à¨ ãáâ ­®¢«¥­­®¬ bit4. ’ ª ¦¥ íâ®â ¯®àâ ¤ ñâ ¯àï¬ãî ­ã¬¥à æ¨î áâà ­¨æ ¯à¨ ãáâ ­®¢«¥­­®¬ bit4.
---------------------------------------------------- ;-------------------------------------------------------------------------------------------------------------------------------
*/ <EFBFBD> vROM <EFBFBD>Ν<EFBFBD> <EFBFBD><EFBFBD>М<EFBFBD> <EFBFBD><EFBFBD> 徕酄<EFBFBD> <EFBFBD>.
;======================================= <EFBFBD> vRAM <EFBFBD><EFBFBD>э <EFBFBD><EFBFBD>М<EFBFBD>:
#1FFD b4=1: #A0,#D0..#DF
*/
;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;
; ¯®àâë ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ ä áâà ¬ ; ¯®àâë ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ ä áâà ¬
FastRAM: FastRAM:
.ON EQU #FB ; ‚ª«î祭¨¥ ªíè  IN A,(FastRAM.ON) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥ .ON EQU #FB ; ‚ª«î祭¨¥ ªíè  IN A,(FastRAM.ON) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
@ -259,8 +265,8 @@ FastRAM:
.SLOT0 EQU #5C ; <20>¥à¥ª«î祭¨¥ áâà ­¨æ ªíè  ¯à¨ FastRAM.ON ¢ ­ã«¥¢®¬ ®ª­¥ (bit0..1) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥ .SLOT0 EQU #5C ; <20>¥à¥ª«î祭¨¥ áâà ­¨æ ªíè  ¯à¨ FastRAM.ON ¢ ­ã«¥¢®¬ ®ª­¥ (bit0..1) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
;!TODO ¯®áâ ¢¨âì ¢ ª à⥠¯®à⮢ ­  ç⥭¨¥ ¯®àâ  #FB ¢­ãâ७­¨© ¯®àâ SLOT0 ;!TODO ¯®áâ ¢¨âì ¢ ª à⥠¯®à⮢ ­  ç⥭¨¥ ¯®àâ  #FB ¢­ãâ७­¨© ¯®àâ SLOT0
; ç⮡ ¯à¨ ¢ª«î祭¨¨ ªíè ¢ ॣ¨áâà á®åà ­ï« áì áâà ­¨æ  ¢ ¡ ­ª¥ 0 (¯®«¥§­® ¯à¨ ¢ª«î祭¨¨ ªíè ¨§ ¡ ­ª¨ ­®«ì) ; ç⮡ ¯à¨ ¢ª«î祭¨¨ ªíè ¢ ॣ¨áâà á®åà ­ï« áì áâà ­¨æ  ¢ ¡ ­ª¥ 0 (¯®«¥§­® ¯à¨ ¢ª«î祭¨¨ ªíè ¨§ ¡ ­ª¨ ­®«ì)
;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;
; <EFBFBD>®àâ ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ <EFBFBD>‡“ ; <EFBFBD>®àâ ã¯à ¢«¥­¨ï áâà ­¨æ ¬¨ <EFBFBD>‡“
; <EFBFBD>¥à¥ª«î祭¨¥ áâà ­¨æ <EFBFBD>‡“ ¯à¨ FastRAM.OFF ¢ ­ã«¥¢®¬ ®ª­¥. ; <EFBFBD>¥à¥ª«î祭¨¥ áâà ­¨æ <EFBFBD>‡“ ¯à¨ FastRAM.OFF ¢ ­ã«¥¢®¬ ®ª­¥.
ROM: ROM:
@ -275,12 +281,11 @@ vROM:
; à §à¥è¥­¨¥ § ¯¨á¨ bit4 (0 - no Write; 1 - Write) ; à §à¥è¥­¨¥ § ¯¨á¨ bit4 (0 - no Write; 1 - Write)
; ¯à¨ bit4 == 1 ¯à¨­ã¤¨â¥«ì­® ¢ëáâ ¢«ï¥âáï ¨ ¡«®ª¨àã¥âáï sys_pg ¢ 1 (ld a,1 : out (sys_port_on),a) ; ¯à¨ bit4 == 1 ¯à¨­ã¤¨â¥«ì­® ¢ëáâ ¢«ï¥âáï ¨ ¡«®ª¨àã¥âáï sys_pg ¢ 1 (ld a,1 : out (sys_port_on),a)
; ¯®ª  bit4 ­¥ á¡à®è¥­ ¯¥à¥ª«îç âì áâà ­¨æë <EFBFBD>‡“ system/user ç¥à¥§ ¯®àâ ; ¯®ª  bit4 ­¥ á¡à®è¥­ ¯¥à¥ª«îç âì áâà ­¨æë <EFBFBD>‡“ system/user ç¥à¥§ ¯®àâ
;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;P_KBD_OUT EQU #F8 ;!TODO ;P_KBD_OUT EQU #F8 ;!TODO
;P_KBD_IN EQU #FE ;P_KBD_IN EQU #FE
;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;-----------------------------[ KEMPSTON ]------------------------------; ; KEMPSTON
KEMPSTON: KEMPSTON:
.JOYSTICK EQU 7 .JOYSTICK EQU 7
@ -289,7 +294,6 @@ KEMPSTON:
; Š¥¬¯áâ®­ ¨§ DOS_ON ¤«ï ᯥ樠«ì­®£® è­ãઠ LPT+JOY ç⮡ ¯® ; Š¥¬¯áâ®­ ¨§ DOS_ON ¤«ï ᯥ樠«ì­®£® è­ãઠ LPT+JOY ç⮡ ¯®
; PC Link ª®­­¥ªâ¨âìáï ª PC ; PC Link ª®­­¥ªâ¨âìáï ª PC
.PC_Link EQU #FF ;JOY_DOS .PC_Link EQU #FF ;JOY_DOS
; <EFBFBD>  ª ¦¤ë© ¢­¥è­¨© ¯®àâ ¬ë誨 ¯à®¯¨á ­ ®¤¨­ ¢­¥è­¨©, §­ ç¨â ; <EFBFBD>  ª ¦¤ë© ¢­¥è­¨© ¯®àâ ¬ë誨 ¯à®¯¨á ­ ®¤¨­ ¢­¥è­¨©, §­ ç¨â
; ª®­ä  ¬®­¨â®à¨â áâ à訩  ¤à¥á, DCP+Conf ®¡à ¡®âª . ; ª®­ä  ¬®­¨â®à¨â áâ à訩  ¤à¥á, DCP+Conf ®¡à ¡®âª .
.MOUSE.X EQU #FBDF .MOUSE.X EQU #FBDF
@ -300,10 +304,9 @@ KEMPSTON:
; bit3: § à¥§¥à¢¨à®¢ ­® ¯®¤ ¥éñ ®¤­ã ª­®¯ªã (0=­ ¦ â ) ; bit3: § à¥§¥à¢¨à®¢ ­® ¯®¤ ¥éñ ®¤­ã ª­®¯ªã (0=­ ¦ â )
; bit4..7: ª®®à¤¨­ â  ª®«ñᨪ  ; bit4..7: ª®®à¤¨­ â  ª®«ñᨪ 
.MOUSE.Buttons EQU #FADF .MOUSE.Buttons EQU #FADF
;-----------------------------------------------------------------------; ;鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍鞍<EFBFBD>;
;
; Border
;---------------[Border]----------------
BorderColor EQU #FE BorderColor EQU #FE
; 梥⠡®à¤îà  ¢ ०¨¬¥ á¯à¨­â¥à  ¡¥àñâáï ¨§ 4 ¯ «¨âàë. ; 梥⠡®à¤îà  ¢ ०¨¬¥ á¯à¨­â¥à  ¡¥àñâáï ¨§ 4 ¯ «¨âàë.
; 梥⠢ ¯ «¨âॠ¢ëç¨á«ï¥âáï ¤ã¡«¨à®¢ ­¨¥¬ ¢ ­®¬¥à¥ æ¢¥â  ¡®à¤îà  bit2..0 ¢ bit5..3 ; 梥⠢ ¯ «¨âॠ¢ëç¨á«ï¥âáï ¤ã¡«¨à®¢ ­¨¥¬ ¢ ­®¬¥à¥ æ¢¥â  ¡®à¤îà  bit2..0 ¢ bit5..3
@ -319,8 +322,12 @@ BorderColor EQU #FE
; 6 - CYAN color index #36 #36/#10 = 3 ; 6 - CYAN color index #36 #36/#10 = 3
; 7 - CYAN color index #3F #3F/#10 = 3 ; 7 - CYAN color index #3F #3F/#10 = 3
;--------------------------------------- ;---------------------------------------
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
;-------------[ZX keyboard]-------------
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
; ZX keyboard
;
; ü ÉÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍ» ; ü ÉÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍËÍÍ»
; <EFBFBD>ˆA º 0º 1º 2º 3º 4º 4º 3º 2º 1º 0º ; <EFBFBD>ˆA º 0º 1º 2º 3º 4º 4º 3º 2º 1º 0º
; ÈÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍͼ ; ÈÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍÍÊÍͼ
@ -353,13 +360,10 @@ ZXKeys EQU #FE
.Line_6 EQU #BFFE .Line_6 EQU #BFFE
.Line_7 EQU #7FFE .Line_7 EQU #7FFE
; ????? —â®-â® ¯à® à áè¨à¥­­ë© ¡¨â ª« ¢ë ¢ #FE ; ????? —â®-â® ¯à® à áè¨à¥­­ë© ¡¨â ª« ¢ë ¢ #FE
; CS - caps shift ; CS - caps shift
; SS - symbol shift ; SS - symbol shift
; FS - function shift ; FS - function shift
; Left Shift => CS ; Left Shift => CS
; Right SHIFT => CS ; Right SHIFT => CS
; Ctrl => SS ; Ctrl => SS
@ -414,18 +418,19 @@ ZXKeys EQU #FE
; F9 => 9+FS ; F9 => 9+FS
; F10 => 0+FS ; F10 => 0+FS
; Scroll Lock => CS+FS ; Scroll Lock => CS+FS
;--------------------------------------- ;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
;
;--------[ᨭåà®­¨§ æ¨ï íªà ­ ]---------
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 愍酄瓲
SCR_SyncPort EQU #FE SCR_SyncPort EQU #FE
; bit 5 - ᨭåà®­¨§ æ¨ï íªà ­  ; bit 5 - ᨭåà®­¨§ æ¨ï íªà ­ 
; ª ¤à®¢ë© ¨¬¯ã«ìá ; ª ¤à®¢ë© ¨¬¯ã«ìá
; ¤«¨­  - 4 ¬á ; ¤«¨­  - 4 ¬á
; ¯¥à¨®¤ - 20 ¬á ; ¯¥à¨®¤ - 20 ¬á
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹<EFBFBD>;
;---------------------------------------
; ;
SLOT0 EQU #82 ; ­®¬¥à ¡ ­ª¨ 0 SLOT0 EQU #82 ; ­®¬¥à ¡ ­ª¨ 0
.MEM_ADDR EQU #00 .MEM_ADDR EQU #00
SLOT1 EQU #A2 ; ­®¬¥à ¡ ­ª¨ 1 SLOT1 EQU #A2 ; ­®¬¥à ¡ ­ª¨ 1

View File

@ -29,7 +29,7 @@ PALETTE: DB #00, #00, #00, #00 ; 0 BLACK
; CGA ; CGA
FLASH EQU #80 FLASH EQU #80
; CGA ; CGA
INC: INK:
.BLACK EQU #00 ; —…<E28094><E280A6> .BLACK EQU #00 ; —…<E28094><E280A6>
.BLUE EQU #01 ; ˆ<E28098>ˆ .BLUE EQU #01 ; ˆ<E28098>ˆ
.GREEN EQU #02 ; ‡…<E280B9> .GREEN EQU #02 ; ‡…<E280B9>
@ -48,14 +48,14 @@ INC:
.WHITE EQU #0F ; <20> .WHITE EQU #0F ; <20>
; CGA ; CGA
PAPER: PAPER:
.BLACK EQU 16*INC.BLACK .BLACK EQU 16*INK.BLACK
.BLUE EQU 16*INC.BLUE .BLUE EQU 16*INK.BLUE
.GREEN EQU 16*INC.GREEN .GREEN EQU 16*INK.GREEN
.CYAN EQU 16*INC.CYAN .CYAN EQU 16*INK.CYAN
.RED EQU 16*INC.RED .RED EQU 16*INK.RED
.MAGENTA EQU 16*INC.MAGENTA .MAGENTA EQU 16*INK.MAGENTA
.BROWN EQU 16*INC.BROWN .BROWN EQU 16*INK.BROWN
.LGRAY EQU 16*INC.LGRAY .LGRAY EQU 16*INK.LGRAY
; CGA ; CGA
BORDER: BORDER:

398
printf.asm Executable file
View File

@ -0,0 +1,398 @@
;universal color print to console procedure like printf()
;in: DE
printf#: LD YH,D
LD YL,E
LD L,(IY) ; at iy we have pointer to format string
LD H,(IY+1)
loop: LD A,(HL)
INC HL
OR A
RET Z
CP '%'
JR Z,loc3
loc4: CALL outch
JP loop
loc3: LD A,(HL)
INC HL
CP '%'
JR Z,loc4
DEC HL
CALL scan_length ; scan [-][0][0-9*][lL]
loop1: LD A,(HL)
INC HL
CP 'x'
JP Z,prt_x1
CP 'X'
JP Z,prt_x2 ; hexadecimal
;
AND %1101'1111
;
CP 'D'
JP Z,prt_d ; signed decimal
CP 'U'
JP Z,prt_u ; unsigned decimal
CP 'L'
JP Z,prt_l
CP 'C'
JP Z,prt_c ; print single character
CP 'O'
JP Z,prt_o ; octal
CP 'S'
JP Z,prt_s ; string
JP loop
; %l - long
prt_l: LD (flong),A
INC HL
JP loop1
; %c symbol
prt_c: LD A,(iy+2)
CALL outch
; ld de,(nprtd+1)
; inc de
; ld (nprtd+1),de
prt_q: INC IY
INC IY
LD A,(flong)
OR A
JP Z,loop ; false
INC IY
INC IY
JP loop
; %s string
prt_s: LD A,' '
LD (padch),A
PUSH HL
PUSH IY
LD L,(iy+2)
LD H,(iy+3)
fmt0: PUSH HL
CALL _strlen
EX DE,HL
LD HL,(flen)
LD A,H
OR L
JR Z,fmt01
; call _pad
; or a
SBC HL,DE
LD (flen),HL
LD A,(fladj)
OR A
CALL Z,_pad
fmt01:
POP HL
fmt1: LD A,(HL)
INC HL
OR A
JR Z,fmt21
CALL outch
; ld de,(nprtd+1)
; inc de
; ld (nprtd+1),de
JP fmt1
fmt2:
LD HL,(flen)
LD A,(fladj)
OR A
CALL NZ,_pad
fmt21: POP IY
POP HL
JP prt_q
; %u unsigned decimal
prt_u: PUSH HL
PUSH IY
CALL getnum
JR fmt4
; %d signed decimal
prt_d: PUSH HL
PUSH IY
CALL getnum
LD A,(flong)
OR A
JR NZ,fmt3 ; true
BIT 7,H
JR Z,fmt3
LD DE,-1
fmt3: BIT 7,D
JR Z,fmt4
LD A,'-'
LD (sign),A
XOR A
SUB L
LD L,A
LD A,0
SBC A,H
LD H,A
LD A,0
SBC A,E
LD E,A
LD A,0
SBC A,D
LD D,A
fmt4: LD A,10 ; base
LD BC,char1
CALL mk_num
JP fmt0
; %o octal
prt_o: PUSH HL
PUSH IY
CALL getnum
LD A,8 ; base
LD BC,char1
CALL mk_num
JP fmt0
; %X hex
prt_x2: LD BC,char1
prt_x: PUSH HL
PUSH IY
CALL getnum
LD A,16 ; base
CALL mk_num
JP fmt0
; %x hex
prt_x1: LD BC,char2
JR prt_x
;---------------------------------------
getnum: XOR A
LD (sign),A
LD L,(iy+2)
LD H,(iy+3)
LD A,(flong)
OR A
JR Z,gnu1 ; false
LD E,(iy+4)
LD D,(iy+5)
RET
gnu1: LD DE,0
RET
mk_num: LD (mn0+1),A ; base
LD (chars),BC
EXX
LD HL,number
EXX
CALL mn0
EXX
LD (HL),0
EXX
LD HL,number
LD A,(sign)
OR A
RET Z
DEC HL
RET
mn0: LD BC,0x200a
XOR A
mn1: ADD HL,HL
RL E
RL D
RLA
CP C
JR C,mn2
SUB C
INC L
mn2: DJNZ mn1
; DEHL-quot; A-rem
PUSH AF
LD A,D
OR E
OR H
OR L
CALL NZ,mn0
POP AF
PUSH HL
chars+1: LD HL,char1 ; save char1 or char2
LD C,A
LD B,0
ADD HL,BC
LD A,(HL)
POP HL
EXX
LD (HL),A
INC HL
EXX
RET
scan_length:
XOR A
LD (flong),A ; false
LD (fladj),A
LD (flen+0),A ; make length = 0
LD (flen+1),A
LD A,' '
LD (padch),A ; space padding by default
LD A,(HL)
CP '-'
JR NZ,SL1
LD (fladj),A ; all will be LEFT adjusted, not right
INC HL
sl1: LD A,(HL)
CP '0'
JR NZ,sl2
LD A,(fladj)
OR A
JR NZ,sl1a
LD A,'0'
LD (padch),A ; pad numbers with '0's, not spaces
sl1a: INC HL
sl2: LD DE,0
sl2a: LD A,(HL)
SUB '0'
JR C,sl3
CP 9+1
JR NC,sl3
EX DE,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,HL
ADD HL,BC
ADD HL,HL
LD B,0
LD C,A
ADD HL,BC
EX DE,HL
INC HL
JR sl2a
sl3: LD (flen),DE ; set explicit length
LD A,(HL)
CP 'l'
JR Z,sl4
CP 'L'
RET NZ
sl4: LD (flong),A ; true
INC HL
RET
_pad: DEC HL
BIT 7,H
RET NZ
PUSH HL
LD A,(padch)
CALL outch
POP HL
; ld de,(nprtd+1)
; inc de
; ld (nprtd+1),de
JP _pad
_strlen: EX DE,HL
LD HL,0
.loop0: LD A,(DE)
OR A
RET Z
INC HL
INC DE
JR .loop0
;---------------------------------------
outch: PUSH IY
PUSH HL
CP cr
JP Z,.new_line
CP lf
JP Z,.prtNullX
CP tab
JP Z,.tabpr
CP col_cmd
JP Z,.set_attr
.next0: EX AF,AF
LD DE,(coords)
LD A,(print_attr)
LD B,A
EX AF,AF'
LD C,ESTEX_wrchar
RST 0x10
LD A,(coords)
INC A
CP 80 ;ª®®à¤¨­ â  ¯® X 0..79 (¨â®£® 80)
JR NC,.new_line ;­  ­®¢ãî áâபã.
LD (coords),A
.end_pr: POP HL
POP IY
RET
.new_line: LD A,(coords+1) ;Y
CP 31
JR C,.noscroll
CALL .ScrollUP
JR .prtNullX
.noscroll: INC A
LD (coords+1),A ;y
.prtNullX: XOR A
LD (coords),A ;x
JR .end_pr
.ScrollUP: LD DE,0
LD HL,0x2050
LD BC,0x0155
XOR A
RST 0x10
RET
.tabpr: LD C,0x53
RST 0x10
INC E ;x++
LD A,E
ADD A,8
AND 0x78
LD E,A
LD (coords),DE
LD C,0x52 ; fix
RST 0x10
JP .end_pr
;Set attribute
.set_attr: LD A,(HL)
LD (print_attr),A
POP HL
POP IY
INC HL
RET
; jp .end_pr
char1: DB '0123456789ABCDEF'
char2: DB '0123456789abcdef'
flen: DW 0
fladj: DB 0
flong: DB 0 ; false/true
padch: DB ' '
sign: DB 0 ; §­ ª ç¨á« 
number: DS 16 ; ¡ãä¥à ç¨á« 
coords: DW 0
print_attr: DB 7