Sprinter-BIOS/src/bios/exp/FUNC_SYS.ASM
2023-06-28 04:06:18 +10:00

489 lines
11 KiB
NASM
Raw 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.

;----------------------------------------------------------------------;
; <20>®«ã祭¨¥  ¤à¥á®¢ ¯®à⮢ ¨ ¤ ­­ëå ¤«ï ¢®ááâ ­®¢«¥­¨ï
; ‚室: A - ­®¬¥à ®ª­  ¯à®¥æ¨à®¢ ­¨ï
; ‚ë室: B - ¤ ­­ë¥, C -  ¤à¥á ¯®àâ  ®ª­ 
EMM.GetBanksPorts:
INC A
LD B,A
DJNZ .slot1
LD C,SLOT0
IN B,(C)
RET ;45t
.slot1: DJNZ .slot2
LD C,SLOT1
IN B,(C)
RET ;58t
.slot2: DJNZ .slot3
LD C,SLOT2
IN B,(C)
RET ;71t
.slot3: DJNZ .error
LD C,SLOT3
IN B,(C)
RET ;84t
.error: SCF
RET ;74t
; old version
; LD C,SLOT0
; IN B,(C)
; AND A
; RET Z ;34t
; LD C,SLOT1
; IN B,(C)
; DEC A
; RET Z ;62t
; LD C,SLOT2
; IN B,(C)
; DEC A
; RET Z ;90t
; LD C,SLOT3
; IN B,(C)
; DEC A
; RET Z ;118t
; SCF
; RET ;150t
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; HL - ¡ãä¥à
; !FIXIT SYS_PAGE.CONFIG_BYTE 㦥 ­¥ â® ¯®ª §ë¢ ¥â, ¨ ¢®®¡é¥ ¢áî ¡ë ¯¥à¥¤¥« âì, ¯®¯à ¢¨âì ¢ ¤®ª¥, ª ª ¬¨­¨¬ã¬
FN_VERSION:
PUSH HL
EX DE,HL
LD HL,ID_SPRINTER_length
ld c,(hl)
inc hl
ld b,0
LDIR
POP HL
LD DE,(ID_Version) ;rdlow-ok
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD BC,(SYS_PAGE.CONFIG_BYTE-#4000) ; Version PLD ; !TODO ç¥à¥§ áâàãªâãàã ¤«ï ¯¥à¥¬¥­­ëå ¡¨®á 
EX AF,AF'
OUT (SLOT2),A
LD A,2 ; —¨á«® ¯®«¥©
AND A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
FN_CRIPT:
DEC B
SCF
RET NZ
LD HL,(ROM_NUMBER.part1) ;rdlow-ok
LD A,(ROM_NUMBER.part2) ;rdlow-ok
LD BC,(BoardID.start) ;rdlow-ok
LD DE,(BoardID.end) ;rdlow-ok
AND A
RET
; BoardID_start old address #312A
; BoardID_end old address #312D
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;EMM_FN7
EMM.CheckColdInit:
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
LD HL,#8000
LD DE,ID_SPRINTER_length
ld a,(de)
inc de
ld b,a
.loop: LD A,(DE)
CP (HL)
JR NZ,INIT_SYS_ALL
INC HL
INC DE
DJNZ .loop
EX AF,AF'
OUT (SLOT2),A
RET
;MSDOS_COLD_VARS:
EMM.FullInit:
DI
IN A,(SLOT2)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT2),A
INIT_SYS_ALL:
LD HL,ID_SPRINTER_length
LD DE,SYS_PAGE.ID_FLAG - #4000
LD C,(hl)
LD B,0
INC hl
LDIR
;!TODO çâ® §  ¯¥à¥¬¥­­ë¥?
LD HL,SYS_PAGE.DISK_TYPE-#4000
LD (HL),0 ;!HARDCODE
INC HL
LD (HL),1 ;!HARDCODE
INC HL
LD (HL),#40 ;!HARDCODE HDD
INC HL
LD (HL),3 ;!HARDCODE
INC HL
LD (HL),0 ; SYS_PAGE.COPY_SLOT0
INC HL
LD (HL),5 ; SYS_PAGE.COPY_SLOT1
INC HL
LD (HL),2 ; SYS_PAGE.COPY_SLOT2
INC HL
LD (HL),0 ; SYS_PAGE.COPY_SLOT3
LD A,9
LD (SYS_PAGE.MSD_SECS-#4000),A
LD A,0
LD (SYS_PAGE.DS_1440-#4000),A
LD HL,SYS_PAGE.RAMD_KEYS-#4000
LD DE,SYS_PAGE.RAMD_KEYS+1-#4000
LD BC,SYS_PAGE.RAMD_KEYS.NUM-1
LD (HL),0
LDIR
LD DE,ZG_ADDRESS ;  ¤à¥á §­ ª®£¥­¥à â®à 
LD (SYS_PAGE.WIN_ZG-#4000),DE
;
;-----------[new code start]------------ ; !!!!! ¯®á¬®âà¥âì-¯à¨ç¥á âì
INIT_VSyncAndWaits:
LD D,CMOS.Cell.ScreenSET
CALL CMOS_RD
ld d,a
jr nc,.cmos_OK
; ¥á«¨ ­¥â CMOS, â® áâ ­¤ àâ­ë¥ ­ áâனª¨
ld a,3
ld (SYS_PAGE.VSyncAndWaits-#4000),A
jr z,INIT_CONFIG_ALL.setDefaultINT
.cmos_OK:
and CMOS.Cell.ScreenSET.Mask.Sinc
bit 6,a
ld a,3 ; 320 lines & no waits
jr z,.setVSyncAndWaits
dec a ; 312 lines & no waits
.setVSyncAndWaits:
ld (SYS_PAGE.VSyncAndWaits-#4000),A
INIT_CONFIG_ALL:
ld a,d
and CMOS.Cell.ScreenSET.Mask.Int
jr z,.setDefaultINT ; set default int
xor CMOS.Cell.ScreenSET.Mask.Int
LD HL,SCREEN_TABLES.ORIGINAL ; set original int
jr z,.setINT
and #10
LD HL,SCREEN_TABLES.SCORPION ; set scorpion int
jr z,.setINT
.setDefaultINT:
LD HL,SCREEN_TABLES.PENTAGON ; set pentagon int
.setINT:
LD (SYS_PAGE.CONFIG_ALL-#4000),HL
;------------[new code end]-------------
;
LD DE,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON + ROM.BIOS
LD (SYS_PAGE.CONFIG_DE-#4000),DE
LD HL,SYS_PAGE.TASK_DATA-#4000 ; 㡨âì ¢á¥ § ¤ ç¨
LD DE,SYS_PAGE.TASK_DATA+1-#4000
LD BC,#FF
LD (HL),0
LDIR
EX AF,AF'
OUT (SLOT2),A
CALL EMM.InitMem
;**************************************************************
; —⥭¨¥ ¯®á«¥¤­¨å 256 ¡ ©â®¢ <20>‡“ ¢ á«ã¦¥¡­ãî áâà ­¨æã
; § ç¥¬-â®, ⨯ , ä«¥è¥à ¬®£ â ¬ á®åà ­¨âì ¤ ­­ë¥ CMOS.
;READ_ROM_PAGE_X:
; IN A,(SLOT3)
; PUSH AF
; LD A,SYS_PAGE
; OUT (SLOT3),A
; CALL READ_ROM_PAGE_X ; READ CMOS-DATA
; POP AF
; OUT (SLOT3),A
;**************************************************************
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
FN_TURBO:
CP 2
JR Z,.TURBO_SWITCH
CP 3
JR Z,.TURBO_SWITCH
CP #12
JR Z,.SET_FDD_720
CP #13
JR Z,.SET_FDD_1440
SCF
RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_720:
LD A,1
OUT (#BD),A ; !HARDCODE
AND A
RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_1440:
LD A,#21
OUT (#BD),A ; !HARDCODE
AND A
RET
.TURBO_SWITCH:
LD C,A
IN A,(SLOT3)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
;!TEST
;LD DE,(SYS_PAGE.CONFIG_DE)
;LD A,E
LD A,(SYS_PAGE.CONFIG_DE)
;
AND #FC ; !HARDCODE
OR C
;!TEST
;LD E,A
;LD (SYS_PAGE.CONFIG_DE),DE
LD (SYS_PAGE.CONFIG_DE),A
AND 3
;
OUT (SYS_PORT.ROM),A
LD A,B
OUT (SLOT3),A
AND A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
READ_PORTS: ; !TODO ᤥ« âì
WRITE_PORTS: ; !TODO ᤥ« âì
SCF
RET
;----------------------------------------------------------------------;
;!TODO
;FN_GET_SYS_VAR:
; ‚室: HL - ­®¬¥à á¨á⥬­®© ¯¥à¥¬¥­­®©
; ‚ë室: HL - §­ ç¥­¨¥ á¨á⥬­®© ¯¥à¥¬¥­­®©
; RET
;!TODO ᪮¬¯®­®¢ âì
;----------------------------------------------------------------------;
FN_SEND_BYTE:
LD E,A ; á®åà ­¨âì ¡ ©â
CALL SEND_HALF_BYTE ; ¯¥à¥¤ âì ¯®«ã¡ ©â ¨§ …
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
LD A,E ; ᤢ¨­ãâì ¡ ©â ­  4 ¡¨â 
RRCA
RRCA
RRCA
RRCA
LD E,A
SEND_HALF_BYTE: ; ¯¥à¥¤ âì ¯®«®¢¨­ã ¡ ©â  _E_!!
LD A,E
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
LD BC,0 ; áç¥â稪 â ©¬- ãâ 
WAIT_SENT_1:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  1 ¯à¨ £®â®¢­®á⨠PC
BIT 4,A
JR NZ,CONTINUE_SENT
DEC BC
LD A,B
OR C
JR NZ,WAIT_SENT_1
XOR A
SCF ; â ©¬- ãâ
RET
CONTINUE_SENT: ; PC - £®â®¢
LD A,E
AND #0F ; á¡à®á¨âì áâ à訥 ¡¨âë LPT -
OUT (Z84.PIO.Port_A.Data),A
; áç¥â稪 â ©¬- ãâ 
LD BC,0
;
WAIT_SENT_2:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  0 - á®®¡é¥­¨¥ ®â PC
BIT 4,A
JR Z,CONTINUE_SENT2
DEC BC
LD A,B
OR C
JR NZ,WAIT_SENT_2
LD A,E
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
XOR A
SCF ; â ©¬- ãâ
RET
CONTINUE_SENT2: ; ¯®«ã¡ ©â ¯¥à¥¤ ­
LD A,E
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
XOR A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
FN_RESEIVE_B: ; ¯à¨­ïâì ¡ ©â ¢ A
CALL RESEIVE_POLU_BYTE ; ¯à¨­ïâì ¯®«ã¡ ©â
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
RLCA
RLCA
RLCA
RLCA
AND #F0
LD E,A
CALL RESEIVE_POLU_BYTE ; ¢â®à®©
RET C
AND 0Fh
OR E
RET ; ¡ ©â ¯à¨­ïâ
RESEIVE_POLU_BYTE: ; ¯à¨­ïâì ¯®«®¢¨­ã ¡ ©â  ¢ …
LD A,#F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
LD BC,0 ; áç¥â稪 â ©¬- ãâ 
WAIT_RES_1:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  1 ¯à¨ £®â®¢­®á⨠PC
BIT 4,A
JR NZ,CONTINUE_RES
DEC BC
LD A,B
OR C
JR NZ,WAIT_RES_1
XOR A
SCF ; â ©¬- ãâ
RET
CONTINUE_RES: ; PC - £®â®¢, ¦¤ âì 0
XOR A ; á¡à®á¨âì áâ à訥 ¡¨âë LPT - ¦¤¥¬ ¯®«ã¡ ©â
OUT (Z84.PIO.Port_A.Data),A
LD BC,0 ; áç¥â稪 â ©¬- ãâ 
WAIT_RES_2:
IN A,(KEMPSTON.PC_Link) ; ¯à®¢¥à¨âì ¡¨â 4 ­  0 - á®®¡é¥­¨¥ ®â PC
BIT 4,A
JR Z,CONTINUE_RES2
DEC BC
LD A,B
OR C
JR NZ,WAIT_RES_2
LD A,#F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â 
OUT (Z84.PIO.Port_A.Data),A
SCF
RET ; ®è¨¡ª 
CONTINUE_RES2: ; ¯®«ã¡ ©â ¢ëáâ ¢«¥­
LOOP_EQ: ; ¯à®ç¨â âì ¥é¥ à §, çâ® ¡ë ᮢ¯ «®
AND #0F
LD B,A
IN A,(KEMPSTON.PC_Link)
AND #0F
CP B
JR NZ,LOOP_EQ
OR #F0 ; ãáâ ­®¢¨âì áâ à訥 ¡¨âë LPT ¤ â  ¢ 1 - ¯à¨­ïâ®
OUT (Z84.PIO.Port_A.Data),A
RET
;----------------------------------------------------------------------;
;
;----------------------------------------------------------------------;
;**********************************
;!!!!! £«ï­ãâì
; START_DI:
; PUSH AF
; LD A,R
; JP PE,XX_DI
; LD A,R
; XX_DI: LD A,#80
; JP PE,XX_DI2
; XOR A
; XX_DI2: LD R,A
; DI
; POP AF
; RET
; END_DI: PUSH AF
; LD A,R
; BIT 7,A
; JR Z,XX_DI3
; EI
; POP AF ; PE
; RET
; XX_DI3: DI
; POP AF ; PO
; RET
;**********************************
;----------------------------------------------------------------------;?????
;DE - ªã¤  - áâà ­¨æ  ®âªàëâ !
;BC - ᪮«ìª®
;HL - ¡ãä¥à
;
; PUSH BC
; LD H,D
; LD L,E
; ADD HL,BC
; JR C,CUT
; LD HL,BUFER
; LDIR
; POP BC
; RET
;CUT:
; PUSH HL
; LD A,L
; LD L,C
; LD C,A
; LD A,H
; LD H,B
; LD B,A
;
; AND A
; SBC HL,BC
; LD B,H
; LD C,L
; LD HL,BUFER
; LDIR
; CALL NEXT_BANK
; POP BC
; LD A,B
; OR C
; JR Z,LAB
; LDIR
;LAB: POP BC
; RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;