mirror of
https://github.com/Tolik-Trek/Sprinter-BIOS.git
synced 2026-06-15 01:11:47 +03:00
392 lines
7.2 KiB
NASM
392 lines
7.2 KiB
NASM
;
|
||
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
|
||
|
||
|
||
; [ ] free zx pages!
|
||
; ????? SYS_PAGE.SHARED_BUFFER_256b
|
||
IF FREE_ZX_PAGES
|
||
;----------------[‚뤥«¥¨¥/®á¢®¡®¦¤¥¨¥ áâà ¨æ ᯥªâà㬠]-------------;
|
||
;¢å®¤: ॣ B: 0 - ¨¨â ¯ ¬ï⨠Spectrum 48k
|
||
; 1 - ¨¨â ¯ ¬ï⨠Pentagon 128k
|
||
; 2 - ¨¨â ¯ ¬ï⨠Pentagon 512k
|
||
; 3 - ¨¨â ¯ ¬ï⨠Scorpion 256k
|
||
; ॣ A: âॡ㥬®¥ ª®«-¢® áâà ¨æ ¤«ï vROM
|
||
;
|
||
;¢ë室: CF = 0: A - ®¬¥à à ¬¡«®ª
|
||
; CF = 1: A - ®¬¥à ®è¨¡ª¨
|
||
MANAGE_ZX_PAGES:
|
||
|
||
|
||
.GET_SCORP: IN A,(SLOT3)
|
||
LD E,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
; ¯à®¢¥à¨âì «¨ç¨¥ ᢮¡®¤ëå áâà ¨æ ᪮à¯
|
||
; B = ª®«¨ç¥á⢮ áâà ¨æ
|
||
LD B,8
|
||
XOR A
|
||
.check_loop: DEC L
|
||
JR Z,.error_no_mem
|
||
CP (HL)
|
||
JR NZ,.check_loop
|
||
;
|
||
CALL .check_barred_pages
|
||
LD A,0
|
||
JR Z,.check_loop
|
||
DJNZ .check_loop
|
||
; A = 0
|
||
; ¢ë¤¥«¨âì áâà ¨æë ᪮à¯
|
||
LD B,8
|
||
.allocate_loop: DEC L
|
||
CP (HL)
|
||
JR NZ,.allocate_loop
|
||
;
|
||
CALL .check_barred_pages
|
||
LD A,0
|
||
JR Z,.allocate_loop
|
||
;
|
||
LD (HL),C
|
||
LD C,L
|
||
DJNZ .allocate_loop
|
||
; L = 㪠§ â¥«ì æ¥¯®çª¨.
|
||
AND A
|
||
.exit: LD A,E
|
||
OUT (SLOT3),A
|
||
LD A,L
|
||
RET
|
||
; 䨫ìâà ¤«ï áâà ¨æ ᪮à¯
|
||
;¢ë室: ZF=1 - áâà ¨æ ¥ ¯®¤å®¤¨â
|
||
.check_barred_pages:
|
||
; check reset page
|
||
LD A,L
|
||
CP RESET_PAGE
|
||
RET C
|
||
RET Z
|
||
; check isa page
|
||
AND #F0
|
||
XOR #D0 ; áâà ¨æë ISA #D0..#DF
|
||
RET NZ
|
||
LD L,#D0
|
||
RET
|
||
;
|
||
.error_no_mem: LD L,BIOS.Error.EMM.NoMemory
|
||
SCF
|
||
JR .exit
|
||
;-----------------------------------------------------------------------;
|
||
ENDIF
|
||
|
||
|
||
;-----------------------------------------------------------------------;
|
||
;!TODO § ¤¥©á⢮¢ âì
|
||
GOTO_SPEC: IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,B
|
||
LD (SYS_PAGE.CONFIG_DE+1),A
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
|
||
;NO_SETUP_2: CP #FC
|
||
; JR Z,SPECTRUM_0 ; Ю䍣ãà æ¨ï AY
|
||
|
||
;NO_SETUP_1:
|
||
;!TODO ᤥ« âì ªâ¨¢ æ¨î ¢¨â ¤«ï ¯ à ¬¥âà ¨§ Setup
|
||
.ZX_MODE: LD A,#FE ; !HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã ACC-off Spectrum-MODE
|
||
LD BC,Port_All_Mode
|
||
OUT (C),A
|
||
LD SP,#C000
|
||
;
|
||
CALL FN_SYNC.INT_PENT
|
||
CALL SET_TXT_PALETTE.ZX
|
||
;
|
||
LD E,0
|
||
CALL LP_SET_32
|
||
;
|
||
LD E,0
|
||
LD HL,#5104
|
||
CALL LP_SET_32.X
|
||
|
||
; ????? ¬®¦® ¨á¯®«ì§®¢ âì ª®£¤ -¨¡ã¤ì ª ª-¨¡ã¤ì
|
||
; LD D,#35
|
||
; CALL CMOS_RD
|
||
; BIT 0,A
|
||
; PUSH AF
|
||
; CALL Z,SPRINTER_1
|
||
; POP AF
|
||
; PUSH AF
|
||
; CALL NZ,AY8910
|
||
; POP AF
|
||
|
||
.TASK_0: XOR A ; § ¤ ç 0, ०¨¬ 256 ª¨«®¡ ©â
|
||
.START_TASK: LD IX,.BASIC_128
|
||
JP INIT_PAGES ; ¨¨æ¨ «¨§ æ¨ï ®¬¥à®¢ áâà ¨æ ०¨¬ ᯥªâàã¬
|
||
;
|
||
;start_basic:
|
||
.BASIC_128: LD SP,#C000
|
||
LD HL,RES128_PROG
|
||
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë BASIC-¥.
|
||
LD BC,RES128_PROG.Size
|
||
LDIR
|
||
DI
|
||
JP ZX_VARS.PRINTER_BUFFER
|
||
;-----------------------------------------------------------------------;
|
||
|
||
;
|
||
;>$< >$< >$< >$< >$< >$< [ <20>…<EFBFBD>…Œ…™€…Œ€Ÿ ‚ އ“ ] >$< >$< >$< >$< >$< >$< ;
|
||
|
||
;--------[ <20>à®£à ¬¬ , à §¬¥é ¥¬ ï á #5B00 ¤«ï § ¯ã᪠Spectrum ]--------;
|
||
RES128_PROG:
|
||
DISP ZX_VARS.PRINTER_BUFFER ;#5B00
|
||
LD A,ROM.BIOS
|
||
OUT (SYS_PORT.RAM),A ; ‚®§¢à â ¢ 128k ROM
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD DE,(SYS_PAGE.CONFIG_DE)
|
||
XOR A
|
||
LD (SYS_PAGE.CONFIG_DE+1),A
|
||
OUT (C),B
|
||
|
||
LD BC,#1FFD
|
||
OUT (C),A ; Scorp ¯®àâ
|
||
LD B,#7F
|
||
OUT (C),A ; 128 ¯®àâ
|
||
|
||
LD A,E ; ãáâ ®¢ª ª®ä¨£ãà æ¨¨ ¨ ०¨¬ TURBO
|
||
OUT (SYS_PORT.RAM),A ; CONFIG_SET
|
||
|
||
INC D
|
||
DEC D
|
||
; 0 ‚•Ž„ ‚ BASIC-128
|
||
JP Z,0
|
||
; 1 ‚•Ž„ ‚ BASIC-48
|
||
LD A,#10
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0
|
||
; 2 ‚•Ž„ ‚ TR-DOS
|
||
LD HL,0
|
||
PUSH HL
|
||
DEC D
|
||
JP Z,#3D29
|
||
; 3 ‚•Ž„ ‚ EXPANSION
|
||
;!TODO ¯®ª ¥ à ¡®â ¥â. Page #45, BIOS (ZX_EXP) #E0
|
||
XOR A
|
||
OUT (C),A
|
||
LD A,#02
|
||
LD B,#1F
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0
|
||
;
|
||
XOR A
|
||
OUT (C),A
|
||
LD A,#30
|
||
LD B,#7F
|
||
OUT (C),A
|
||
;!TEST
|
||
LD A,CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET
|
||
OUT (CNF_PORT.OFF),A
|
||
;
|
||
DEC D
|
||
; 4 ‚•Ž„ ‚ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
|
||
JP Z,#3D29
|
||
; 5 ‚•Ž„ ‚ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
|
||
JP 0
|
||
ENT
|
||
.Size EQU $-RES128_PROG
|
||
;-----------------------------------------------------------------------;
|
||
|
||
|
||
;-----------------------------------------------------------------------;
|
||
;*****************************************
|
||
;
|
||
; ˆ¨æ¨ «¨§ æ¨ï áâà ¨æ ¤«ï
|
||
; ᯥªâà㬮¢áª®£® ०¨¬ ¨
|
||
; ¢®ááâ ®¢«¥¨¥ ᯥªâà㬮¢áª®£®
|
||
; íªà
|
||
;
|
||
; ‚®§¢à â ¯® IX
|
||
;
|
||
; !!! NO USE STACK !!!
|
||
;
|
||
;*****************************************
|
||
;!TODO
|
||
; ¨¨æ¨ «¨§ æ¨ï áâà ¨æ zx spectrum
|
||
INIT_PAGES:
|
||
AND A
|
||
LD E,A
|
||
EX AF,AF'
|
||
LD A,E
|
||
|
||
; BIT 7,A
|
||
; JR Z,SCORPION_256_MODE
|
||
; BIT 6,A
|
||
; JR Z,PENTAGON_128_MODE
|
||
;
|
||
;PENTAGON_48_MODE:
|
||
; AND #3C
|
||
; OUT (SLOT0),A
|
||
; INC A
|
||
; OUT (SLOT1),A
|
||
; INC A
|
||
; OUT (SLOT2),A
|
||
; INC A
|
||
; LD D,A
|
||
; LD BC,#1FFD
|
||
; XOR A
|
||
; OUT (C),A
|
||
; LD B,#7F
|
||
; OUT (C),A
|
||
; LD A,D
|
||
; OUT (SLOT3),A
|
||
; JR INIT_VIDEO_REG
|
||
;
|
||
;
|
||
; PENTAGON_128_MODE:
|
||
; LD D,8
|
||
; AND #38
|
||
; JR ALL_MODE
|
||
|
||
SCORPION_256_MODE:
|
||
LD D,16
|
||
AND #30 ; ¤® 4-å ᯥªâà㬮¢
|
||
|
||
ALL_MODE:
|
||
OUT (SLOT0),A
|
||
XOR 5
|
||
OUT (SLOT1),A
|
||
XOR 7
|
||
OUT (SLOT2),A
|
||
OR #0F
|
||
LD E,A
|
||
|
||
.loop: DEC D
|
||
|
||
LD A,D
|
||
RLCA
|
||
AND #10
|
||
LD BC,#1FFD
|
||
OUT (C),A
|
||
|
||
LD A,D
|
||
AND 7
|
||
OR #40
|
||
LD B,#7F
|
||
OUT (C),A
|
||
|
||
LD A,E
|
||
OUT (SLOT3),A
|
||
DEC E
|
||
|
||
DEC D
|
||
INC D
|
||
JR NZ,.loop
|
||
|
||
INIT_VIDEO_REG:
|
||
XOR A
|
||
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥® ¤à¥á
|
||
; OUT (RGSCR),A ; ॣ¨áâà íªà
|
||
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
|
||
|
||
;!TEST
|
||
; Restore old Spectrum Screen
|
||
;; LD HL,#4000
|
||
;; LD DE,#4000
|
||
;; LD BC,#1B00
|
||
;; LDIR
|
||
|
||
; EX AF,AF'
|
||
; BIT 6,A
|
||
; JR NZ,NO_SCREEN_ALT
|
||
|
||
; EX AF,AF'
|
||
|
||
; LD A,7 ; á¥¤ì¬ ï íªà ï áâà ¨æ
|
||
; LD BC,#7FFD
|
||
; OUT (C),A
|
||
|
||
; Restore old Spectrum Screen 2
|
||
;; LD HL,#C000
|
||
;; LD DE,#C000
|
||
;; LD BC,#1B00
|
||
;; LDIR
|
||
|
||
; XOR A
|
||
; LD BC,#7FFD
|
||
; OUT (C),A
|
||
;
|
||
|
||
EX AF,AF'
|
||
NO_SCREEN_ALT:
|
||
AND A
|
||
JP (IX)
|
||
;-----------------------------------------------------------------------;
|
||
|
||
|
||
;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 ‘’<E28098>€<EFBFBD>ˆ–›]----------------------;
|
||
;-------------[RST 08]
|
||
RAM_BIOS_PROG: ; for CALL BIOS in #41 page
|
||
DISP Spec_Page.to_bios
|
||
PUSH AF
|
||
LD A,ROM.BIOS
|
||
OUT (SYS_PORT.ROM),A
|
||
POP AF
|
||
RET
|
||
ENT
|
||
.Length EQU $-RAM_BIOS_PROG
|
||
;-------------------[]
|
||
;
|
||
;-------------[RST 38]
|
||
PROG_NO_ROM:
|
||
DISP Spec_Page.no_zx_rom
|
||
DI
|
||
;
|
||
LD A,#FF
|
||
OUT (SLOT3),A
|
||
OUT (SLOT2),A
|
||
OUT (SLOT1),A
|
||
;
|
||
LD SP,#BF00
|
||
;
|
||
LD E,0
|
||
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||
RST ToBIOS
|
||
;
|
||
LD DE,0
|
||
LD HL,#2050
|
||
LD C,BIOS.LP_CLS_WIN
|
||
RST ToBIOS
|
||
; set scr-2
|
||
LD A,1
|
||
OUT (SCREEN_SWITCH),A
|
||
;
|
||
LD HL,MESSAGE_NR
|
||
LD DE,#A000
|
||
LD BC,MESSAGE_NR.size
|
||
LD A,C
|
||
LDIR
|
||
;
|
||
LD HL,#A000
|
||
LD D,0 ; delimiter
|
||
LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED
|
||
LD B,A
|
||
LD C,BIOS.LP_PRINT_LINE3
|
||
RST ToBIOS
|
||
;
|
||
.loop: DI
|
||
HALT
|
||
JR .loop
|
||
;
|
||
MESSAGE_NR: DZ " Spectrum ROM not installed. Use spectrum.exe Press Ctrl+Alt+Del or RESET"
|
||
.size EQU $-MESSAGE_NR
|
||
ENT
|
||
PROG_NO_ROM.size EQU $-PROG_NO_ROM
|
||
;-------------------[]
|
||
;-----------------------------------------------------------------------;
|
||
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
|
||
;
|
||
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
|
||
; |