diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 7df2abf..e71581d 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -1,23 +1,26 @@ -; +;; DEFDEVICE SPRINTER, #4000, 256 DEFINE SLOT? +(SLOT0 | ((#C0 & high $)>>>1)) DEFINE OFFSET? +(SLOT3 ^ SLOT?)*512 IFNDEF _includedSP2000 : DEFINE _includedSP2000 : ENDIF -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; 뢠 ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; + + +;; +; 뢠 ; +;; ; #FF: ; - 32 ⠪. ஢ , ⠫묨. ; ஢ - 32 ⠪. ⠫묨. ; CBL - 墠 楬, ⠫묨. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; ⮢ ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +; ⮢ ; +;; ; #FE ; Read: ; bit0 - keyboard @@ -38,13 +41,12 @@ ; bit5 - ; bit6 - ; bit7 - - - ZX_Beeper EQU #FE ; bit 4 ZX_Tape_Ou EQU #FE ; bit 3 ZX_Tape_In EQU #FE ; bit 6 - -;------------[Covox Blaster]------------; +;; +; +; Covox Blaster CBL: .OUT EQU #4F ; 뢮 㪠 = #FB .BUFFER_PAGE EQU #FD ; ࠭- 㧫 ᥫ (뢠 CBL 祭) @@ -75,7 +77,7 @@ CBL: .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 @@ -93,14 +95,14 @@ CBL: ; (2 128/256) ; 뢠 ਫ⠥ ᫥ ; - +; ; 8 : ; ஢ ᥬ - #80 ; 16 : ; ஢ ᥬ - #0000 ; Stereo-: ; ।騥 L R . - +; ; mono_8bit: ; DB 80h,81h,7Fh.... ; mono_16bit: @@ -109,8 +111,7 @@ CBL: ; 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 @@ -120,7 +121,7 @@ CBL: ; 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 @@ -130,9 +131,10 @@ CBL: ; 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; -;---------------------------------------; - -;======================================= +;; +; +; SYS_PORT / CNF_PORT +; ; १ ⮢ #7C/#3C #74/#24 CNF_PORT: .ON EQU #74 @@ -248,10 +250,14 @@ bit7..bit3 ४祭 ࠭ ⮬ #5C ந室 ⮫쪮 ⪭⮩ १ sys_port. ४ ࠭ १ ७ #8F, ⮣ bit4 ⮣ 砥 ᨣ . 㬥 ࠭ ⠭ bit4. ----------------------------------------------------- -*/ -;======================================= +;------------------------------------------------------------------------------------------------------------------------------- + vROM ᯮ짮 ࠭ . + vRAM ᯮ짮: + #1FFD b4=1: #A0,#D0..#DF +*/ +;; +; ; ࠢ ࠭栬 ࠬ FastRAM: .ON EQU #FB ; 祭 IN A,(FastRAM.ON) - ਡ ﬨ @@ -259,8 +265,8 @@ FastRAM: .SLOT0 EQU #5C ; ४祭 ࠭ FastRAM.ON 㫥 (bit0..1) - ਡ ﬨ ;!TODO ⠢ ⮢ ⥭ #FB ७ SLOT0 ; ⮡ 祭 ॣ ࠭﫠 ࠭ 0 ( 祭 ) - - +;; +; ; ࠢ ࠭栬 ; ४祭 ࠭ FastRAM.OFF 㫥 . ROM: @@ -275,12 +281,11 @@ vROM: ; ࠧ襭 bit4 (0 - no Write; 1 - Write) ; bit4 == 1 ਭ㤨⥫쭮 ⠢ sys_pg 1 (ld a,1 : out (sys_port_on),a) ; bit4 襭 ४ ࠭ system/user १ - - +;; ;P_KBD_OUT EQU #F8 ;!TODO ;P_KBD_IN EQU #FE - -;-----------------------------[ KEMPSTON ]------------------------------; +;; +; KEMPSTON KEMPSTON: .JOYSTICK EQU 7 @@ -289,7 +294,6 @@ KEMPSTON: ; ⮭ DOS_ON ᯥ樠쭮 ઠ LPT+JOY ⮡ ; PC Link PC .PC_Link EQU #FF ;JOY_DOS - ; 譨 誨 யᠭ 譨, ; 訩 , DCP+Conf ࠡ⪠. .MOUSE.X EQU #FBDF @@ -300,10 +304,9 @@ KEMPSTON: ; bit3: १ࢨ஢ (0=) ; bit4..7: न ᨪ .MOUSE.Buttons EQU #FADF -;-----------------------------------------------------------------------; - - -;---------------[Border]---------------- +;; +; +; Border BorderColor EQU #FE ; 梥 ० ਭ 4 . ; 梥 㡫஢ 梥 bit2..0 bit5..3 @@ -319,8 +322,12 @@ BorderColor EQU #FE ; 6 - CYAN color index #36 #36/#10 = 3 ; 7 - CYAN color index #3F #3F/#10 = 3 ;--------------------------------------- +;; -;-------------[ZX keyboard]------------- + +;; +; ZX keyboard +; ; ͻ ; A 0 1 2 3 4 4 3 2 1 0 ; ͼ @@ -353,13 +360,10 @@ ZXKeys EQU #FE .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 @@ -414,18 +418,19 @@ ZXKeys EQU #FE ; 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 diff --git a/constants/standart_colors.inc b/constants/standart_colors.inc index df9bb5f..b320bdc 100644 --- a/constants/standart_colors.inc +++ b/constants/standart_colors.inc @@ -29,7 +29,7 @@ PALETTE: DB #00, #00, #00, #00 ; 0 BLACK ; CGA FLASH EQU #80 ; CGA -INC: +INK: .BLACK EQU #00 ; .BLUE EQU #01 ; .GREEN EQU #02 ; @@ -48,14 +48,14 @@ INC: .WHITE EQU #0F ; ; CGA PAPER: -.BLACK EQU 16*INC.BLACK -.BLUE EQU 16*INC.BLUE -.GREEN EQU 16*INC.GREEN -.CYAN EQU 16*INC.CYAN -.RED EQU 16*INC.RED -.MAGENTA EQU 16*INC.MAGENTA -.BROWN EQU 16*INC.BROWN -.LGRAY EQU 16*INC.LGRAY +.BLACK EQU 16*INK.BLACK +.BLUE EQU 16*INK.BLUE +.GREEN EQU 16*INK.GREEN +.CYAN EQU 16*INK.CYAN +.RED EQU 16*INK.RED +.MAGENTA EQU 16*INK.MAGENTA +.BROWN EQU 16*INK.BROWN +.LGRAY EQU 16*INK.LGRAY ; CGA BORDER: diff --git a/printf.asm b/printf.asm new file mode 100755 index 0000000..33ab081 --- /dev/null +++ b/printf.asm @@ -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 + +