mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
356 lines
9.9 KiB
NASM
356 lines
9.9 KiB
NASM
;[BEGIN]
|
||
;//MODULE: DRV-MAIN AUTHOR: Denis Parinov
|
||
;//CREATE: 2003-03-12
|
||
;---------------------------------------------------------------
|
||
;Rev Date Name Description
|
||
;---------------------------------------------------------------
|
||
;R00 2003-03-19 DNS Initial version
|
||
;---------------------------------------------------------------
|
||
|
||
; ORG #0000
|
||
|
||
;PAGEDRV EQU 0
|
||
|
||
|
||
;===============;
|
||
;!FIXIT ¢ ¯à®æ¥¤ãॠª®â®à ï ¡ã¤¥â ®â¢¥ç âì § ¯¥à¥å®¤ ¨§ í⮩ áâà ¨æë ®¡à â® ¢ MAIN ¤«ï ¢ë§®¢ äãªæ¨©
|
||
; „‘‘ ¨, ¢®§¬®¦®, ¯®¢â®à®¬ã § 室㠢 íâã áâà ¨æã ç¥à¥§ RST #18 ¨§ ¤à㣨å áâà ¨æ (ª®â®àëå ¯®ª ¥â)
|
||
; ᤥ« âì ¥çâ® ¯®¤®¡®¥ á ¯à®£à ¬¬ë¬ á⥪®¬ áâà ¨æ. <20>â ¯à®æ¥¤ãà ¨å á®åà ï¥â, ¯à¨¬¥à® â ª ï ¦¥
|
||
; ¤®«¦ ¢®ááâ ¢«¨¢ âì.
|
||
; PUSH HL
|
||
;.SP+1: LD HL,DRV_PAGE.RSTx18_RET_PAGES
|
||
; LD (HL),A
|
||
; DEC L ; <20>¥ HL, L - ç⮡ § ª®«ì楢 âì ®¡« áâì
|
||
; LD (.SP),HL
|
||
; POP HL
|
||
;===============;
|
||
|
||
;!TODO
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[NOT USED]>
|
||
A0000: JP RST_00
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;
|
||
RST_00:
|
||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||
SCF
|
||
RET
|
||
;
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[BIOS API]>
|
||
BLOCK 8-$,#C7 ; #C7 - "RST 0" opcode
|
||
A0008: PUSH AF
|
||
LD A,SYS_PORT.PAGE8
|
||
OUT (SYS_PORT.ON),A
|
||
POP AF
|
||
RET
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;!FIXIT
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[DSS API]>
|
||
BLOCK #10-$,#C7 ; #C7 - "RST 0" opcode
|
||
A0010: ;JP DRV_PAGE.RST_10
|
||
DI : HALT
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[DRIVE API]>
|
||
BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode
|
||
;A0018 JP INTDISK
|
||
A0018: ;PUSH AF
|
||
;PUSH BC
|
||
SCF
|
||
RET
|
||
DRV_PAGE.MAIN_PAGE_NUMBER+2:
|
||
LD BC,0*256 + SLOT0 ; !FIXIT áî¤ ¥ ¤®«¦ë ¢áâ ¢«ïâìáï ®¬¥à ¢ë¤¥«¥ëå áâà ¨æ?
|
||
;JP PORTAL.outDRV
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;!TODO
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[NOT USED]>
|
||
BLOCK #20-$,#C7 ; #C7 - "RST 0" opcode
|
||
A0020: JP DRV_PAGE.RST_20
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;
|
||
DRV_PAGE.RST_20:
|
||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||
SCF
|
||
RET
|
||
;
|
||
|
||
;!TODO
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[NOT USED]>
|
||
BLOCK #28-$,#C7 ; #C7 - "RST 0" opcode
|
||
A0028: JP DRV_PAGE.RST_28
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;
|
||
DRV_PAGE.RST_28:
|
||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||
SCF
|
||
RET
|
||
;
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
BLOCK #30-$,#C7 ; #C7 - "RST 0" opcode
|
||
RST_30: JP MOUSE_DRV.API
|
||
.RET: OUT (SLOT0),A
|
||
JP MOUSE_HANDLER
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;!FIXIT
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[MAIN INT]> ;
|
||
BLOCK #38-$,#C7 ;
|
||
/*
|
||
;!TEST SIO INT
|
||
; reg 0 - error reset
|
||
IF KEYBOARD_INT_ENABLED && MOUSE_INT_ENABLED == 0
|
||
PUSH AF
|
||
; reg 0 - error reset
|
||
LD A,%0011'0000
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; reg 0 - return from int
|
||
LD A,%0011'1000
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
POP AF
|
||
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED == 0
|
||
PUSH AF
|
||
; reg 0 - error reset
|
||
LD A,%0011'0000
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
; reg 0 - return from int
|
||
LD A,%0011'1000
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
POP AF
|
||
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED
|
||
PUSH AF
|
||
; reg 0 - error reset
|
||
LD A,%0011'0000
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
; reg 0 - return from int
|
||
LD A,%0011'1000
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
POP AF
|
||
ENDIF
|
||
EI ;
|
||
RETI ;
|
||
*/
|
||
RST_38_DRV: JP .Portal
|
||
BLOCK RST_38_IM1.Portal - $,0
|
||
.Portal: PUSH AF
|
||
LD A,(DRV_PAGE.MAIN_PAGE_NUMBER)
|
||
OUT (SLOT0),A
|
||
POP AF
|
||
EI
|
||
RETI
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
;
|
||
DRV_PAGE.KEYSCAN: RET ;!FIXIT
|
||
;
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[ NMI ]> ;
|
||
DRV_PAGE.NMI: RETN ;
|
||
BLOCK #66-$,#C7;
|
||
A0066: JP DRV_PAGE.NMI ;
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
;-------------------------------;
|
||
;ADRST10 EQU #00 ; ;!!!!!
|
||
;-------------------------------;
|
||
;!FIXIT
|
||
; DRV_PAGE.RST_10:
|
||
; PUSH HL
|
||
; LD L,C
|
||
; LD H,ADRST10/256
|
||
; LD C,(HL)
|
||
; INC H
|
||
; LD H,(HL)
|
||
; LD L,C
|
||
; EX (SP),HL
|
||
; RET
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
; <[DRIVE PAGE SWITCH]> ;
|
||
BLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
|
||
PORTAL.out_DRV: PUSH BC ;
|
||
.RETBANK+2: LD BC,SLOT0 + 0*256; ;!!!!! ReScnDRV ¨á¯®«ì§ã¥â íâ® § 票¥
|
||
.switch: OUT (C),B ;
|
||
ASSERT $!=84,'-> Portal error!';
|
||
;Entry point from DSS main page
|
||
LD (.RETBANK),A ;
|
||
POP BC ;
|
||
POP AF ;
|
||
.ADCALL+1: CALL DISPATCH ; ¯ âç¨âáï INTDISK
|
||
JP PORTAL.out_DRV ;
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
MOUSE_HANDLER: POP AF
|
||
CALL MOUSE_DRV.API
|
||
PUSH AF
|
||
.CorePage EQU $$$ + 1
|
||
LD A,#FF
|
||
JP RST_30.RET
|
||
////////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
DRV_PAGE.LDRIVE: DB #00
|
||
|
||
DISPATCH:
|
||
LD HL,INTDISK
|
||
LD (PORTAL.out_DRV.ADCALL),HL
|
||
INITDVC_RET_DRIVE:
|
||
CALL INITDVC
|
||
LD A,(DRV_PAGE.LDRIVE)
|
||
AND A
|
||
RET
|
||
|
||
INCLUDE 'dss/Drivers/media/shared-drv.asm'
|
||
INCLUDE 'dss/Drivers/media/ide-drv.asm'
|
||
INCLUDE 'dss/Drivers/media/fdd-drv.asm'
|
||
INCLUDE 'dss/Drivers/media/ram_disk-drv.asm'
|
||
INCLUDE "dss/Drivers/input/MOUSE.ASM"
|
||
/////////////////////////// [ DRIVE TABLES ] \\\\\\\\\\\\\\\\\\\\\\\\\\\;
|
||
;
|
||
;------------------------[shared-drv.asm table]------------------------;
|
||
DEVICE EQU $
|
||
.TBL_Entry EQU 3
|
||
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
|
||
.End EQU DEVICE.Size + 1 ; ¤«ï á⮯-¡ ©â #FF
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
;
|
||
;-------------------------[ IDE-DRV.ASM table]-------------------------;
|
||
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||
;+01 LONG SECTOR OFFSET
|
||
;+05 LONG SIZE IN SECTORS
|
||
;+09 BYTE PARTITION RECORD NUMBER (in drive MBR)
|
||
;+09 FREE
|
||
;+15
|
||
LOGDRV EQU DEVICE + DEVICE.End
|
||
.TBL_Entry EQU 16
|
||
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
|
||
;!TODO ᤥ« âì áâàãªâãன
|
||
.PHISICAL_DRV_NUMBER EQU 0
|
||
.SECTOR_OFFSET EQU 1
|
||
.SIZE_IN_SECTORS EQU 5
|
||
.PARTITION_RECORD_NUM EQU 9
|
||
; ‚•Ž„: L - «®£¨ç¥áª¨© ®¬¥à ¢ â ¡«¨æ¥
|
||
; ‚›•Ž„: IY - ç «® § ¯¨á¨
|
||
; <20>Ž<EFBFBD>’ˆ’: HL, IY. HL<-->DE
|
||
; MACRO LOGDRV_ENTRY_FIND tbl_addr
|
||
; LD H,0
|
||
; ADD HL,HL
|
||
; ADD HL,HL
|
||
; ADD HL,HL
|
||
; ADD HL,HL
|
||
; ;LD B,H
|
||
; ;LD C,L
|
||
; EX DE,HL
|
||
; LD IY,tbl_addr
|
||
; ADD IY,DE
|
||
; ENDM
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
;
|
||
;-----------------------[ram_disk-drv.asm table]-----------------------;
|
||
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
|
||
RAMDTBL EQU LOGDRV + LOGDRV.Size
|
||
.TBL_Entry EQU 2
|
||
.Size EQU .TBL_Entry * MAX_RAMDRIVES
|
||
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||
; DB #FF
|
||
; EDUP
|
||
; .Size EQU $-RAMDTBL
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
////////////////////////////////////////////////////////////////////////;
|
||
|
||
|
||
///////////////////////// [ DRIVE TABLES COPY] \\\\\\\\\\\\\\\\\\\\\\\\\;
|
||
MODULE OLD_TABLES
|
||
;
|
||
;------------------------[shared-drv.asm table]------------------------;
|
||
DEVICE EQU @RAMDTBL + @RAMDTBL.Size
|
||
.TBL_Entry EQU @DEVICE.TBL_Entry
|
||
.Size: EQU @DEVICE.Size
|
||
.End EQU @DEVICE.End
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
;
|
||
;-------------------------[ IDE-DRV.ASM table]-------------------------;
|
||
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||
;+01 LONG SECTOR OFFSET
|
||
;+05 LONG SIZE IN SECTORS
|
||
;+09 FREE
|
||
;+15
|
||
LOGDRV EQU DEVICE + DEVICE.End
|
||
.TBL_Entry EQU @LOGDRV.TBL_Entry
|
||
.Size EQU @LOGDRV.Size
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
;
|
||
;-----------------------[ram_disk-drv.asm table]-----------------------;
|
||
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
|
||
RAMDTBL EQU LOGDRV + LOGDRV.Size
|
||
.TBL_Entry EQU @RAMDTBL.TBL_Entry
|
||
.Size EQU @RAMDTBL.Size
|
||
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||
; DB #FF
|
||
; EDUP
|
||
; .Size EQU $-RAMDTBL
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
ENDMODULE
|
||
////////////////////////////////////////////////////////////////////////;
|
||
;DISPLAY "DEVICE start: ", /H, DEVICE
|
||
;DISPLAY "Old DEVICE start: ", /H, OLD_TABLES.DEVICE
|
||
;DISPLAY "LOGDRV start: ", /H, LOGDRV
|
||
;DISPLAY "Old LOGDRV start: ", /H, OLD_TABLES.LOGDRV
|
||
;DISPLAY "RAMDTBL start: ", /H, RAMDTBL
|
||
;DISPLAY "Old RAMDTBL start: ", /H, OLD_TABLES.RAMDTBL
|
||
|
||
;
|
||
;DRV_TEMP_BUFFER:
|
||
|
||
;---------[256 bytes stack for return pages of RST #18 callers]--------;
|
||
; #3F00 - #3FFF
|
||
DRV_PAGE.RSTx18_RET_PAGES EQU #3FFF
|
||
;----------------------------------------------------------------------;
|
||
; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size + LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page"
|
||
; ENDMODULE
|
||
; OUTEND
|
||
;[END] |