322 lines
5.9 KiB
NASM
322 lines
5.9 KiB
NASM
;**************************************************************************
|
|
;**************************************************************************
|
|
;
|
|
; WDOS-BIOS - Quelle (C) ZFT/KEAW Abt. Basissoftware - 1988
|
|
; Programm: orgs.asm
|
|
;
|
|
; Bearbeiter : P. Hoge
|
|
; Datum : 24.1.89
|
|
; Version : 1.1
|
|
;
|
|
;**************************************************************************
|
|
;
|
|
; System-Einspruenge und Vereinbarungen
|
|
;
|
|
;**************************************************************************
|
|
;**************************************************************************
|
|
|
|
|
|
.EXTERNAL DISK_SETUP;NEAR
|
|
.EXTERNAL SEEK;NEAR
|
|
.EXTERNAL START;NEAR
|
|
.EXTERNAL NMIINT;NEAR
|
|
.EXTERNAL BOOT;NEAR
|
|
.EXTERNAL KBOARD;NEAR
|
|
.EXTERNAL KBINT;NEAR
|
|
.EXTERNAL DISK;NEAR
|
|
.EXTERNAL DISKINT;NEAR
|
|
.EXTERNAL PRINTER;NEAR
|
|
.EXTERNAL VIDEO;NEAR
|
|
.EXTERNAL MEMSIZE;NEAR
|
|
.EXTERNAL EQUIP;NEAR
|
|
.EXTERNAL CASSETTE;NEAR
|
|
.EXTERNAL TOFDAY;NEAR
|
|
.EXTERNAL TIMERINT;NEAR
|
|
.EXTERNAL RS232;NEAR
|
|
.EXTERNAL PRSCREEN;NEAR
|
|
|
|
.public connect
|
|
.public reset
|
|
.public intin
|
|
.public ttyin
|
|
.public clkin
|
|
.public diskin
|
|
.public intout
|
|
.public ttyout
|
|
.public lpout
|
|
.public diskout
|
|
.public hdtyp
|
|
.public date
|
|
.public ttybuf
|
|
.public lpbuf
|
|
.public diskrq
|
|
.PUBLIC VECTOR_TABLE
|
|
.PUBLIC DUMMY_RET
|
|
.PUBLIC FD_TBL
|
|
.PUBLIC FD1_TBL
|
|
.PUBLIC FD2_TBL
|
|
.PUBLIC DISK_BASE
|
|
|
|
|
|
ORG 0D000H
|
|
connect: ;---- Uebergabe-Bereich
|
|
reset: db -1 ;reset
|
|
intin: db 0 ;intin
|
|
db 0 ;dummy in
|
|
db 0
|
|
db 0
|
|
db 0
|
|
ttyin: db 9 ;vector Tastatur
|
|
db 0 ;instop
|
|
db 0 ;inbyte
|
|
db 0 ;dummy
|
|
clkin: db 8 ;vector Timer
|
|
db 0 ;instop
|
|
db 0 ;inbyte
|
|
db 0 ;dummy
|
|
diskin: db 0eh ;vector Disk
|
|
db 0 ;instop
|
|
db 0 ;inbyte
|
|
db 0 ;dummy
|
|
intout: db 0 ;intout
|
|
db 0 ;dummy
|
|
db 0 ;dummy out
|
|
db 0
|
|
db 0
|
|
db 0
|
|
ttyout: db 0 ;outstop TTY
|
|
db 0 ;dummy
|
|
dw 0 ;noutb
|
|
lpout: db 0 ;outstop LP
|
|
db 0 ;dummy
|
|
dw 0 ;noutb
|
|
diskout db 0 ;outstop Disk
|
|
db 0 ;dummy
|
|
dw 0 ;noutb
|
|
hdtyp: db 0 ;Harddisk 0 Typ
|
|
db 0 ;Harddisk 1 Typ
|
|
date: db 0 ;sec Date/Time
|
|
db 0 ;min
|
|
db 0 ;hour
|
|
db 0 ;day
|
|
db 0 ;mon
|
|
db 0 ;year
|
|
ttybuf: blkb 800h
|
|
lpbuf: blkb 100h
|
|
diskrq: blkb 10h
|
|
|
|
|
|
ORG 0E05BH
|
|
RESET: JMP START
|
|
|
|
ORG 0E2C3H ;----- NMI ENTRY
|
|
NMI_INT:
|
|
JMP NMIINT
|
|
|
|
;------ FIXED DISK PARAMETER TABLE
|
|
|
|
FD_TBL: ;Drive 5 MByte
|
|
DW 500 ;CYLINDERS
|
|
DB 2 ;HEADS
|
|
DW 0 ;nicht benutzt
|
|
DW -1 ;(WRITE PRE-COMPENSATION CYL)
|
|
DB 0 ;nicht benutzt
|
|
DB 0 ;(CONTROL BYTE)
|
|
DB 0,0,0 ;nicht benutzt
|
|
DW 0 ;(LANDING ZONE) nicht benutzt
|
|
DB 10 ;SECTORS/TRACK
|
|
DB 0 ;nicht benutzt
|
|
|
|
FD1_TBL: ;Drive 10 MByte
|
|
DW 500 ;CYLINDERS
|
|
DB 4 ;HEADS
|
|
DW 0 ;nicht benutzt
|
|
DW -1 ;(WRITE PRE-COMPENSATION CYL)
|
|
DB 0 ;nicht benutzt
|
|
DB 0 ;(CONTROL BYTE)
|
|
DB 0,0,0 ;nicht benutzt
|
|
DW 0 ;(LANDING ZONE) nicht benutzt
|
|
DB 10 ;SECTORS/TRACK
|
|
DB 0 ;nicht benutzt
|
|
|
|
FD2_TBL: ;Drive 20 MByte
|
|
DW 500 ;CYLINDERS
|
|
DB 8 ;HEADS
|
|
DW 0 ;nicht benutzt
|
|
DW -1 ;(WRITE PRE-COMPENSATION CYL)
|
|
DB 0 ;nicht benutzt
|
|
DB 0 ;(CONTROL BYTE)
|
|
DB 0,0,0 ;nicht benutzt
|
|
DW 0 ;(LANDING ZONE) nicht benutzt
|
|
DB 10 ;SECTORS/TRACK
|
|
DB 0 ;nicht benutzt
|
|
|
|
ORG 0E6F2H ;------ BOOT LOADER INTERRUPT
|
|
BOOTSTRAP:
|
|
JMP BOOT
|
|
|
|
ORG 0E739H ;----- RS232
|
|
RS232_IO:
|
|
JMP RS232
|
|
|
|
ORG 0E82EH ;------ KEYBOARD
|
|
KBOARD_IO:
|
|
JMP KBOARD
|
|
|
|
ORG 0E987H ;------ KEYBOARD INT
|
|
KB_INT:
|
|
JMP KBINT
|
|
|
|
ORG 0EC59H ;------ DISKETTE I/O
|
|
DKETTE_IO:
|
|
JMP DISK
|
|
|
|
ORG 0EF57H ;------ DISKETTE INT
|
|
DISK_INT:
|
|
JMP DISKINT
|
|
|
|
ORG 0EFC7H ;------ DISK BASE
|
|
DISK_BASE:
|
|
DB 0
|
|
DB 0
|
|
DB 0
|
|
DB 2 ;512 Byte/Sector
|
|
DB 9 ;letzter Sector
|
|
DB 1BH ;GPL
|
|
DB 0FFH
|
|
DB 54H ;GPL fuer Format
|
|
DB 0F6H ;Datenbyte fuer Format
|
|
DB 0
|
|
DB 0
|
|
|
|
ORG 0EFD2H ;------ PRINTER IO
|
|
PRINTR_IO:
|
|
JMP PRINTER
|
|
|
|
ORG 0F045H ;------ VIDEO IO
|
|
|
|
.EXTERNAL SET_MODE;NEAR
|
|
.EXTERNAL SET_CTYPE;NEAR
|
|
.EXTERNAL SET_CPOS;NEAR
|
|
.EXTERNAL READ_CURSOR;NEAR
|
|
.EXTERNAL READ_LPEN;NEAR
|
|
.EXTERNAL ACT_DISP_PAGE;NEAR
|
|
.EXTERNAL SCROLL_UP;NEAR
|
|
.EXTERNAL SCROLL_DOWN;NEAR
|
|
.EXTERNAL READ_AC_CURRENT;NEAR
|
|
.EXTERNAL WRITE_AC_CURRENT;NEAR
|
|
.EXTERNAL WRITE_C_CURRENT;NEAR
|
|
.EXTERNAL SET_COLOR;NEAR
|
|
.EXTERNAL WRITE_DOT;NEAR
|
|
.EXTERNAL READ_DOT;NEAR
|
|
.EXTERNAL WRITE_TTY;NEAR
|
|
.EXTERNAL VIDEO_STATE;NEAR
|
|
|
|
M1: DW SET_MODE ;TABLE OF ROUTINES WITHIN VIDEO I/O
|
|
DW SET_CTYPE
|
|
DW SET_CPOS
|
|
DW READ_CURSOR
|
|
DW READ_LPEN
|
|
DW ACT_DISP_PAGE
|
|
DW SCROLL_UP
|
|
DW SCROLL_DOWN
|
|
DW READ_AC_CURRENT
|
|
DW WRITE_AC_CURRENT
|
|
DW WRITE_C_CURRENT
|
|
DW SET_COLOR
|
|
DW WRITE_DOT
|
|
DW READ_DOT
|
|
DW WRITE_TTY
|
|
DW VIDEO_STATE
|
|
M1L EQU $-M1
|
|
|
|
ORG 0F065H
|
|
VIDEO_IO:
|
|
JMP VIDEO
|
|
|
|
ORG 0F0A4H
|
|
VIDEO_PARMS:
|
|
DB 0
|
|
|
|
|
|
ORG 0F841H ;------ MEMORY SIZE
|
|
MEMSIZE_D:
|
|
JMP MEMSIZE
|
|
|
|
ORG 0F84DH ;------ EQUIPMENT DETERMINE
|
|
EQUIPMENT:
|
|
JMP EQUIP
|
|
|
|
ORG 0F859H ;------ CASSETTE (NO BIOS SUPPORT)
|
|
CASSET_IO:
|
|
JMP CASSETTE
|
|
|
|
ORG 0FE6EH ;------ TIME OF DAY
|
|
T_OF_DAY:
|
|
JMP TOFDAY
|
|
|
|
ORG 0FEA5H ;------ TIMER INTERRUPT
|
|
TIMER_INT:
|
|
JMP TIMERINT
|
|
|
|
ORG 0FEE3H ;------ VECTOR TABLE
|
|
VECTOR_TABLE:
|
|
DW DUMMY_RET ;INT 0
|
|
DW DUMMY_RET ;INT 1
|
|
DW NMI_INT ;INT 2
|
|
DW DUMMY_RET ;INT 3
|
|
DW DUMMY_RET ;INT 4
|
|
DW PR_SCREEN ;INT 5
|
|
DW DUMMY_RET ;INT 6
|
|
DW DUMMY_RET ;INT 7
|
|
DW TIMER_INT ;INT 8
|
|
DW KB_INT ;INT 9
|
|
DW DUMMY_RET ;INT A
|
|
DW DUMMY_RET ;INT B
|
|
DW DUMMY_RET ;INT C
|
|
DW DUMMY_RET ;INT D
|
|
DW DISK_INT ;INT E
|
|
DW DUMMY_RET ;INT F
|
|
|
|
;------ SOFTWARE INTERRUPTS
|
|
|
|
DW VIDEO_IO ;INT 10H
|
|
DW EQUIPMENT ;INT 11H
|
|
DW MEMSIZE_D ;INT 12H
|
|
DW DKETTE_IO ;INT 13H
|
|
DW RS232_IO ;INT 14H
|
|
DW CASSET_IO ;INT 15H
|
|
DW KBOARD_IO ;INT 16H
|
|
DW PRINTR_IO ;INT 17H
|
|
DW DUMMY_RET ;INT 18H
|
|
DW BOOTSTRAP ;INT 19H
|
|
DW T_OF_DAY ;INT 1AH
|
|
DW DUMMY_RET ;INT 1BH -- KEYBOARD BREAK ADDR
|
|
DW DUMMY_RET ;INT 1CH -- TIMER BREAK ADDR
|
|
DW VIDEO_PARMS ;INT 1DH -- VIDEO PARAMETERS
|
|
DW DISK_BASE ;INT 1EH -- DISK PARMS
|
|
DW 0 ;INT 1FH -- POINTER TO VIDEO EXT
|
|
|
|
ORG 0FF53H ;------ DUMMY INT HANDLER
|
|
DUMMY_RET:
|
|
IRET
|
|
|
|
ORG 0FF54H ;------ PRINT SCREEN
|
|
PR_SCREEN:
|
|
JMP PRSCREEN
|
|
|
|
ORG 0FFF0H ;------ POWER ON RESET
|
|
|
|
P_O_R: DB 0EAH ;HARD CODE JUMP
|
|
DW RESET ;OFFSET
|
|
DW 0F000H ;SEGMENT
|
|
|
|
db '01/10/88' ;RELEASE MARKER
|
|
;bei 01/10/84 (Original) wird Harddisk-
|
|
;Treiber im Disketten-BIOS benutzt
|
|
|
|
ORG 0FFFEH
|
|
DB 0FCH ;THIS PC'S ID
|
|
|
|
END
|