;[BEGIN] ;//MODULE: DRV-MAIN AUTHOR: Denis Parinov ;//CREATE: 2003-03-12 ;--------------------------------------------------------------- ;Rev Date Name Description ;--------------------------------------------------------------- ;R00 2003-03-19 DNS Initial version ;--------------------------------------------------------------- // INCLUDE "hardware.inc" // INCLUDE "bios.inc" ; ORG #0000 MODULE DRV ; !FIXIT обойтись без модуля ;PAGEDRV EQU 0 ;!TODO ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[NOT USED]> ; A0000: JP RST_00 ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; RST_00: LD A,DSS_Error.drv.INVALID_COMMAND SCF RET ; ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[BIOS API]> ; BLOCK 8-$,#FF ; A0008: PUSH AF ; LD A,SYS_PORT.PAGE8; OUT (SYS_PORT.ON),A ; POP AF ; RET ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ;!FIXIT ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[DSS API]> ; BLOCK #10-$,#FF ; A0010: ;JP RST_10 ; DI : HALT ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[DRIVE API]> ; BLOCK #18-$,#FF ; ;A0018 JP INTDISK ; A0018: PUSH AF ; PUSH BC ; MAIN_PG_NUMBER+2: ; LD BC,0*256 + SLOT0 ; !FIXIT сюда не должны вставляться номера выделенных страниц? JP PORTAL.outDRV ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ;!TODO ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[NOT USED]> ; BLOCK #20-$,#FF ; A0020: JP RST_20 ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; RST_20: LD A,DSS_Error.drv.INVALID_COMMAND SCF RET ; ;!TODO ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[NOT USED]> ; BLOCK #28-$,#FF ; A0028: JP RST_28 ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; RST_28: LD A,DSS_Error.drv.INVALID_COMMAND SCF RET ; ;!TODO ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[NOT USED]> ; BLOCK #30-$,#FF ; A0030: JP RST_30 ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; RST_30: LD A,DSS_Error.drv.INVALID_COMMAND SCF RET ; ;!FIXIT ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[MAIN INT]> ; BLOCK #38-$,#FF ; A0038: ; ; JP RST_38 ; ; RST_38: ; ; INT_: PUSH AF ; ; EX AF,AF' ; ; PUSH AF ; ; PUSH BC ; ; PUSH DE ; ; PUSH HL ; ; EXX ; ; PUSH BC ; ; PUSH DE ; ; PUSH HL ; ; PUSH IX ; ; PUSH IY ; ; CALL KEYSCAN ; ; LD C,#80 ; ; RST #30 ; ; POP IY ; ; POP IX ; ; POP HL ; ; POP DE ; ; POP BC ; ; EXX ; ; POP HL ; ; POP DE ; ; POP BC ; ; POP AF ; ; EX AF,AF' ; ; POP AF ; EI ; RETI ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; KEYSCAN: RET ;!FIXIT ; ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[ NMI ]> ; NMI: RETN ; BLOCK #66-$,#FF ; A0066: JP NMI ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ;-------------------------------; ;ADRST10 EQU #00 ;!!!!! ;-------------------------------; ;!FIXIT 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 #7E-$,0 ; PORTAL.toMAIN: ; PUSH BC ; RETBANK+2: ; LD BC,0*256+SLOT0 ; OUT (C),B ; ASSERT $!=84,'-> Portal error!'; ;Entry point from DSS main page ; !FIXIT если 2 раза прилететь на эту точку входа, то засрётся RETBANK LD (RETBANK),A ; POP BC ; POP AF ; ADCALL+1: ; CALL DISPATCH ; патчится на INTDISK JR PORTAL.toMAIN ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; /* push hl */ ;!FIXIT чёт не то тут ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; LD B,#00; ; OUT (C),A ; ;--- ; POP BC ; RET ; PORTAL.outDRV: ; RET ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; ; DISPATCH: CALL INITDVC LD HL,INTDISK LD (ADCALL),HL LD A,(LDRIVE) AND A RET ; LDRIVE DB #00 INCLUDE 'dss/media_drivers/Shared.asm' INCLUDE 'dss/media_drivers/ide.asm' INCLUDE 'dss/media_drivers/fdd.asm' INCLUDE 'dss/media_drivers/ram_disk.asm' ; DB 0 ENDMODULE ; OUTEND ;[END]