mirror of
https://github.com/romychs/SprinterFirmware.git
synced 2025-10-24 12:06:02 +03:00
Initial commit
This commit is contained in:
commit
8003040904
54
DOS/README.md
Normal file
54
DOS/README.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Sprinter DOS source code
|
||||||
|
|
||||||
|
There is sources, mixed from original source codes and recovered by me from binary files of v1.62.100.
|
||||||
|
|
||||||
|
You can use [SjasmPlus](https://github.com/z00m128/sjasmplus) to compile this code.
|
||||||
|
|
||||||
|
|
||||||
|
`sjasmplus --fullpath "--raw=system.dos dos-main.asm`
|
||||||
|
|
||||||
|
[Sprinter computer site](https://sprinter.ru)
|
||||||
|
|
||||||
|
[Sprinter in Telegram](https://t.me/zx_sprinter)
|
||||||
|
|
||||||
|
|
||||||
|
## Original README
|
||||||
|
|
||||||
|
This is a source code of Sprinter DOS (called Estex Disk Sub System or Estex DSS) for 8-bit
|
||||||
|
computer PetersPlus Sprinter (Sp2000) that used Z80-compatible microprocessor running on 21 MHz
|
||||||
|
frequency and Altera PLD that performed all magic. To compile the code you need to use AS80.EXE
|
||||||
|
assembler for DOS (v1.31) included in this repo (referenced in A.BAT files as c:\asm\as80).
|
||||||
|
|
||||||
|
* [20000817.152][] -> DSS v1.52
|
||||||
|
* [20010208.152][] -> DSS v1.52
|
||||||
|
* [20010806.155][] -> DSS v1.55 ( [oldtree][] )
|
||||||
|
* [20021215.160][] -> DSS v1.60 RC
|
||||||
|
* [20030214.160][] -> DSS v1.60 R ( [tree][] )
|
||||||
|
* [20030423.170][] -> DSS v1.70 beta ( current )
|
||||||
|
|
||||||
|
[tree]:https://gitlab.com/sprinter-computer/dos/-/tree/v1.60R
|
||||||
|
[oldtree]:https://gitlab.com/sprinter-computer/dos/-/tree/v1.55
|
||||||
|
[20000817.152]:https://gitlab.com/sprinter-computer/dos/-/commit/06cf3fe3cd9141489941175c75f0df35623fc215
|
||||||
|
[20010208.152]:https://gitlab.com/sprinter-computer/dos/-/commit/d0d5a70d405effc3664e1d31f1b8854a8daaef50
|
||||||
|
[20010806.155]:https://gitlab.com/sprinter-computer/dos/-/commit/20586b76791ac1d9c2d0797911f8057419a916a2
|
||||||
|
[20021215.160]:https://gitlab.com/sprinter-computer/dos/-/commit/438f52ce179efb8d1fda2cb177818a7b201f6412
|
||||||
|
[20030214.160]:https://gitlab.com/sprinter-computer/dos/-/commit/f541c51c29289f22784c288df06c22299743235b
|
||||||
|
[20030423.170]:https://gitlab.com/sprinter-computer/dos/-/commit/0f7350186a6002d1774b20f516e1d7bdc5ab95b1
|
||||||
|
|
||||||
|
Tagged source code of the kernel v1.60R: https://gitlab.com/sprinter-computer/dos/-/tree/v1.60R
|
||||||
|
|
||||||
|
Binary release of v1.60R you can find in [release][] subdirectory of this repo.
|
||||||
|
|
||||||
|
[release]:https://gitlab.com/sprinter-computer/dos/-/tree/master/release
|
||||||
|
|
||||||
|
Estex DSS v1.60 R was last officially released binary distribution of Sprinter DOS
|
||||||
|
(released by Peters Plus Ltd in February 2003), but the source code was publicly released
|
||||||
|
to community only in 2009 (we believe it was done under PUBLIC DOMAIN terms).
|
||||||
|
Note: there is a community supported continuation of DSS v1.6X branch, disassembled by enthusiasts
|
||||||
|
before this public release happened, so for real work with modern reincarnations of Sprinter computer
|
||||||
|
you need to use other versions of the DOS. Purpose of this particular repo is just to store officially
|
||||||
|
released sources AS IS in browsable manner for historical and educational purposes.
|
||||||
|
Feel free to fork it if you want to do anything with it.
|
||||||
|
|
||||||
|
For more info see Sprinter Unofficial http://sprinter.nedopc.org
|
||||||
|
|
||||||
24
DOS/a.bat
Normal file
24
DOS/a.bat
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
@echo ==============================================================================
|
||||||
|
@type read.me
|
||||||
|
@built.exe
|
||||||
|
@echo Assembling . . .
|
||||||
|
@echo Assembling Drivers . . .
|
||||||
|
@c:\asm\as80 -i -x3 -l -n drv-main.asm
|
||||||
|
@if errorlevel=3 goto error
|
||||||
|
@echo Drivers OK
|
||||||
|
@echo Assembling Kernel . . .
|
||||||
|
@c:\asm\as80 -i -x3 -l -n dos-main.asm
|
||||||
|
@if errorlevel=3 goto error
|
||||||
|
@goto good
|
||||||
|
:error
|
||||||
|
@echo -----------------------------------------------------------------------
|
||||||
|
@echo │ ERROR ERROR │
|
||||||
|
@echo -----------------------------------------------------------------------
|
||||||
|
@goto quit
|
||||||
|
:good
|
||||||
|
@del system.dss
|
||||||
|
@ren dos-main.bin system.dss
|
||||||
|
@copy /b system.dss+drv-main.bin
|
||||||
|
@echo Имя файла Размер Занято ┌── Изменен ──┐ Загружен Атрибуты
|
||||||
|
@dir system.dss /v | find "system.dss"
|
||||||
|
:quit
|
||||||
5
DOS/bios.inc
Normal file
5
DOS/bios.inc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
; -------------------------------------
|
||||||
|
; BIOS Definitions
|
||||||
|
; -------------------------------------
|
||||||
|
SYSPAGE EQU #FE
|
||||||
16
DOS/build.inc
Normal file
16
DOS/build.inc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
; -------------------------------------
|
||||||
|
; DOS Build Definitions
|
||||||
|
; -------------------------------------
|
||||||
|
|
||||||
|
REL_COUNT EQU 11
|
||||||
|
|
||||||
|
REL_YEAR EQU 2024
|
||||||
|
REL_MONTH EQU 05
|
||||||
|
REL_DAY EQU 21
|
||||||
|
|
||||||
|
REL_HOUR EQU 10
|
||||||
|
REL_MINUTE EQU 30
|
||||||
|
REL_SECOND EQU 00
|
||||||
|
|
||||||
|
REL_DAYCOUNT EQU 113
|
||||||
|
|
||||||
150
DOS/cerror.asm
Normal file
150
DOS/cerror.asm
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
|
||||||
|
; -------------------------------------
|
||||||
|
; Error handler
|
||||||
|
; -------------------------------------
|
||||||
|
|
||||||
|
CERR_VECT
|
||||||
|
CERR_BNK DW 0
|
||||||
|
CERR_ADR DW ERRSTUB
|
||||||
|
|
||||||
|
|
||||||
|
SET_CERROR_VECTOR:
|
||||||
|
LD (CERR_BNK),DE
|
||||||
|
LD (CERR_ADR),HL
|
||||||
|
LD (CERR_STK),IX
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
GET_CERROR_VECTOR:
|
||||||
|
LD DE,(CERR_BNK)
|
||||||
|
LD HL,(CERR_ADR)
|
||||||
|
LD IX,(CERR_STK)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;
|
||||||
|
; CALL CERR_BNK:CERR_ADR
|
||||||
|
;
|
||||||
|
|
||||||
|
CERROR:
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
|
||||||
|
LD HL,0
|
||||||
|
ADD HL,SP
|
||||||
|
EX DE,HL
|
||||||
|
|
||||||
|
LD C,PAGE3
|
||||||
|
IN B,(C)
|
||||||
|
|
||||||
|
LD HL,(CERR_BNK)
|
||||||
|
OUT (C),L
|
||||||
|
|
||||||
|
LD SP,(ERRSTACK)
|
||||||
|
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
LD HL,(CERR_ADR)
|
||||||
|
LD (_CALL01+1),HL
|
||||||
|
_CALL01:
|
||||||
|
CALL #0000
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
OUT (C),B
|
||||||
|
LD SP,HL
|
||||||
|
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
RET
|
||||||
|
|
||||||
|
F_RETRY EQU 0
|
||||||
|
F_IGNORE EQU 1
|
||||||
|
F_FAIL EQU 2
|
||||||
|
|
||||||
|
ERRSTUB:
|
||||||
|
PUSH AF
|
||||||
|
LD HL,ER_ABORT
|
||||||
|
LD C,PCHARS
|
||||||
|
RST #10
|
||||||
|
POP AF
|
||||||
|
LD HL,ER_RETRY
|
||||||
|
BIT F_RETRY,A ; RETRY
|
||||||
|
CALL NZ,ADD_EMSG
|
||||||
|
LD HL,ER_IGNORE
|
||||||
|
BIT F_IGNORE,A ; IGNORE
|
||||||
|
CALL NZ,ADD_EMSG
|
||||||
|
LD HL,ER_FAIL
|
||||||
|
BIT F_FAIL,A ; FAIL
|
||||||
|
CALL NZ,ADD_EMSG
|
||||||
|
LD A,'?'
|
||||||
|
LD C,PUTCHAR
|
||||||
|
RST #10
|
||||||
|
KEYAGA:
|
||||||
|
PUSH AF
|
||||||
|
LD C,WAITKEY
|
||||||
|
RST #10
|
||||||
|
CALL UPPER
|
||||||
|
CP 'A'
|
||||||
|
JR Z,CM_ABORT
|
||||||
|
CP 'R'
|
||||||
|
JR Z,CM_RETRY
|
||||||
|
CP 'I'
|
||||||
|
JR Z,CM_IGNORE
|
||||||
|
CP 'F'
|
||||||
|
JR Z,CM_FAIL
|
||||||
|
POP AF
|
||||||
|
JR KEYAGA
|
||||||
|
|
||||||
|
CM_FAIL:
|
||||||
|
POP AF
|
||||||
|
BIT F_FAIL,A
|
||||||
|
JR Z,KEYAGA
|
||||||
|
LD A,3 ;FAIL
|
||||||
|
RET
|
||||||
|
|
||||||
|
CM_ABORT:
|
||||||
|
POP AF
|
||||||
|
BIT F_ABORT,A
|
||||||
|
JR Z,KEYAGA
|
||||||
|
LD A,2 ;ABORT
|
||||||
|
RET
|
||||||
|
|
||||||
|
CM_RETRY:
|
||||||
|
POP AF
|
||||||
|
BIT F_RETRY,A
|
||||||
|
JR Z,KEYAGA
|
||||||
|
LD A,1 ;RETRY
|
||||||
|
RET
|
||||||
|
|
||||||
|
CM_IGNORE:
|
||||||
|
POP AF
|
||||||
|
BIT F_IGNORE,A
|
||||||
|
JR Z,KEYAGA
|
||||||
|
LD A,0 ;IGNORE
|
||||||
|
RET
|
||||||
|
|
||||||
|
ADD_EMSG:
|
||||||
|
PUSH AF
|
||||||
|
LD A,","
|
||||||
|
LD C,PUTCHAR
|
||||||
|
RST #10
|
||||||
|
LD A," "
|
||||||
|
LD C,PUTCHAR
|
||||||
|
RST #10
|
||||||
|
LD C,PCHARS
|
||||||
|
RST #10
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
|
||||||
|
ER_ABORT:
|
||||||
|
DB 13,10,"Abort",0
|
||||||
|
ER_RETRY:
|
||||||
|
DB "Retry",0
|
||||||
|
ER_IGNORE:
|
||||||
|
DB "Ignore",0
|
||||||
|
ER_FAIL:
|
||||||
|
DB "Fail",0
|
||||||
23
DOS/changes.log
Normal file
23
DOS/changes.log
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;Изменения после версии 1.60
|
||||||
|
10.02.2003 - Добавлена визуализация курсора в функции ECHOKEY.
|
||||||
|
06.02.2003 - Исправлена ошибка в разборе имени файла начинающегося с точки.
|
||||||
|
29.01.2003 - Исправлена ошибка в PUT_D_T, не обновлялась дата в файлах, в которые не производилась запись.
|
||||||
|
;Изменения после версии 1.60RC
|
||||||
|
05.12.2002 - Реализована fn. APPINFO 47h, информация о приложении.
|
||||||
|
26.11.2002 - Исправлена ошибка в CHDIR, не выполнялся запрос "." из ROOT
|
||||||
|
19.11.2002 - Добавлена корректировка атрибута файла при его создании.
|
||||||
|
19.11.2002 - Добавлено маскирование аттрибута VOLUME LABEL.
|
||||||
|
19.11.2002 - Исправлена ошибка с атрибутом system.
|
||||||
|
17.11.2002 - Реализовано system environment, fn. 46h
|
||||||
|
07.11.2002 - Добавлен запрет/разрешение прерываний в функции WINCOPY и WINREST
|
||||||
|
07.11.2002 - Исправлена ошибка в функции SCROLL (A=0)
|
||||||
|
;Изменения после версии 1.55
|
||||||
|
06.08.2001 - Добавлена поддержка Secondary IDE
|
||||||
|
06.08.2001 - Исправлена ошибка с подразделами второго винчестера
|
||||||
|
11.07.2001 - Поддержка принтера для Sp2000
|
||||||
|
30.07.2001 - Исправлено описание входных параметров функции удаления файла(0Eh);
|
||||||
|
;Изменения после версии 1.54
|
||||||
|
18.07.2001 - Добавлено описание работы с графическим экраном;
|
||||||
|
18.07.2001 - Добавлено описание параметра функции получения режима экрана(51h);
|
||||||
|
15.03.2001 - Добавлено описание функции работы с командной строкой(45h);
|
||||||
|
;Изменения после версии 1.00
|
||||||
267
DOS/disk_x.asm
Normal file
267
DOS/disk_x.asm
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
|
||||||
|
; DISK DRIVER SPECIFICATION
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 00h (INITIALIZATION)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE LETTER
|
||||||
|
; IX - ENVIRONMENT
|
||||||
|
; RETURN: A - AMOUNT DRIVE SUPPORT
|
||||||
|
; HL - LENGHT DRIVER
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 01h (OPEN)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
;
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 02h (CLOSE)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; RETURN: A -
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 03h (MEDIA CHECK)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; RETURN: A - 00h - OLD DISK, 0FFh - NEW DISK
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 04h (GET BPB)
|
||||||
|
;
|
||||||
|
; INPUT: HL - ADDRESS
|
||||||
|
; A - DRIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 05h (INPUT)
|
||||||
|
;
|
||||||
|
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||||||
|
; HL - MEMORY ADDRESS
|
||||||
|
; B - SECTORS COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 06h (OUTPUT)
|
||||||
|
;
|
||||||
|
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||||||
|
; HL - MEMORY ADDRESS
|
||||||
|
; B - SECTORS COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 07h (REMOVABLE)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; RETURN: A = 0 - REMOVABLE
|
||||||
|
; A = 1 - NONREMOVABLE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 08h (GENERIC IOCTL)
|
||||||
|
;
|
||||||
|
; INPUT: A - DRIVE
|
||||||
|
; B - SUBCOMMAND
|
||||||
|
; DE - MAGIC NUMBER (55AAh)
|
||||||
|
; SUBCOMMAND
|
||||||
|
;----------------------
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
;---------------------------------------------
|
||||||
|
;
|
||||||
|
; ERRORS:
|
||||||
|
; 0 - NO ERRORS
|
||||||
|
; 1 - BAD COMMAND
|
||||||
|
; 2 - BAD DRIVE NUMBER
|
||||||
|
; 3 - UNKNOW FORMAT
|
||||||
|
; 4 - NOT READY
|
||||||
|
; 5 - SEEK ERROR
|
||||||
|
; 6 - SECTOR NOT FOUND
|
||||||
|
; 7 - CRC ERROR
|
||||||
|
; 8 - WRITE PROTECT
|
||||||
|
; 9 - READ ERROR
|
||||||
|
; 10 - WRITE ERROR
|
||||||
|
; 11 - FAILURE
|
||||||
|
; 12 - BUSY (DEVICE OPENED)
|
||||||
|
; 13 - RESERVED
|
||||||
|
|
||||||
|
;INTDISK PUSH HL
|
||||||
|
; PUSH BC
|
||||||
|
; LD HL,DEVICE
|
||||||
|
; INC A
|
||||||
|
;INTD001 DEC A
|
||||||
|
; JP Z,YEP
|
||||||
|
; LD C,(HL)
|
||||||
|
; INC C
|
||||||
|
; INC HL
|
||||||
|
; INC HL
|
||||||
|
; INC HL
|
||||||
|
; JP NZ,INTD001
|
||||||
|
; POP BC
|
||||||
|
; POP HL
|
||||||
|
; LD A,2
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;YEP LD A,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD C,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD H,(HL)
|
||||||
|
; LD L,C
|
||||||
|
; POP BC
|
||||||
|
; EX (SP),HL
|
||||||
|
; RET
|
||||||
|
|
||||||
|
|
||||||
|
INTDISK:
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
LD C,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,C
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD HL,DEVICE
|
||||||
|
ADD HL,BC
|
||||||
|
LD A,(HL)
|
||||||
|
INC A
|
||||||
|
JR Z,NODEV
|
||||||
|
DEC A
|
||||||
|
INC HL
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
LD H,(HL)
|
||||||
|
LD L,C
|
||||||
|
POP BC
|
||||||
|
EX (SP),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
NODEV:
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
LD A,2
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
PDEVICE:
|
||||||
|
DW DEVICE
|
||||||
|
|
||||||
|
DEVICE:
|
||||||
|
DEFS 26*3,0xFF
|
||||||
|
;DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
||||||
|
;DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
||||||
|
;DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
|
||||||
|
DB 0xFF
|
||||||
|
|
||||||
|
FLOPPY EQU 0x0001
|
||||||
|
FIXED EQU 0x0002
|
||||||
|
CDROM EQU 0x0004
|
||||||
|
NETWORK EQU 0x0008
|
||||||
|
|
||||||
|
;DISKS DB 27 ;LENGHT DISK INFO
|
||||||
|
; DW FLOPPY ;DISK TYPE
|
||||||
|
; DB 2,"A:" ;DISK NAME
|
||||||
|
; DB 11,"NO NAME "
|
||||||
|
; DB 8,"FAT12 "
|
||||||
|
;
|
||||||
|
; DB #00 ;PHISICAL DRIVE NUMBER
|
||||||
|
;
|
||||||
|
; DB 27 ;LENGHT DISK INFO
|
||||||
|
; DW FLOPPY ;DISK TYPE
|
||||||
|
; DB 2,"B:" ;DISK NAME
|
||||||
|
; DB 11,"NO NAME "
|
||||||
|
; DB 8,"FAT12 "
|
||||||
|
;
|
||||||
|
; DB #01 ;PHISICAL DRIVE NUMBER
|
||||||
|
;
|
||||||
|
; DB 27 ;LENGHT DISK INFO
|
||||||
|
; DW FIXED ;DISK TYPE
|
||||||
|
; DB 2,"C:" ;DISK NAME
|
||||||
|
; DB 11,"NO NAME "
|
||||||
|
; DB 8,"FAT16 "
|
||||||
|
;
|
||||||
|
; DB #80 ;PHISICAL DRIVE NUMBER
|
||||||
|
;
|
||||||
|
; DB #00 ;END OF TABLE
|
||||||
|
|
||||||
|
INITDVC:
|
||||||
|
XOR A
|
||||||
|
LD (LDRIVE),A
|
||||||
|
LD HL,DEVICE
|
||||||
|
LD (PDEVICE),HL
|
||||||
|
LD C,A
|
||||||
|
CALL FDDRIVE
|
||||||
|
LD DE,FDDRIVE
|
||||||
|
CALL MAKEDVC
|
||||||
|
XOR A
|
||||||
|
LD C,A
|
||||||
|
CALL HDDRIVE
|
||||||
|
LD DE,HDDRIVE
|
||||||
|
CALL MAKEDVC
|
||||||
|
XOR A
|
||||||
|
LD C,A
|
||||||
|
CALL RMDRIVE
|
||||||
|
LD DE,RMDRIVE
|
||||||
|
CALL MAKEDVC
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MAKEDVC:
|
||||||
|
LD C,A
|
||||||
|
LD HL,LDRIVE
|
||||||
|
ADD A,(HL)
|
||||||
|
LD (HL),A
|
||||||
|
LD A,C
|
||||||
|
LD C,0
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
LD HL,(PDEVICE)
|
||||||
|
MAKEDV1:
|
||||||
|
LD (HL),C
|
||||||
|
INC HL
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
INC C
|
||||||
|
DEC A
|
||||||
|
JR NZ,MAKEDV1
|
||||||
|
LD (PDEVICE),HL
|
||||||
|
DEC A
|
||||||
|
LD (HL),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; TODO Unknown new function
|
||||||
|
NEW_FN1
|
||||||
|
DI
|
||||||
|
CALL INITDVC
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
BOOTDSK
|
||||||
|
LD A,(BOOTDRV)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
SETBOOT
|
||||||
|
LD B,A
|
||||||
|
LD C,0x0
|
||||||
|
NXTDV
|
||||||
|
PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD BC,0x8
|
||||||
|
LD DE,0x55aa
|
||||||
|
RST A0018
|
||||||
|
POP BC
|
||||||
|
JR C,NO_SUPP
|
||||||
|
EX AF,AF'
|
||||||
|
CP B
|
||||||
|
JR NZ,NO_SUPP
|
||||||
|
LD A,C
|
||||||
|
LD (BOOTDRV),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
NO_SUPP
|
||||||
|
INC C
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
CP C
|
||||||
|
JR NZ,NXTDV
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
412
DOS/dos-main.asm
Normal file
412
DOS/dos-main.asm
Normal file
@ -0,0 +1,412 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS-MAIN AUTHOR: Denis Parinov
|
||||||
|
;//CREATE: A LONG TIME AGO :)
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R08 15-04-2003 DNS RENAMED FN. OPEN AND CLOSE
|
||||||
|
;R07 31-03-2003 DNS NEW DEPLOYING ROUTINE
|
||||||
|
;R06 31-03-2003 DNS RELAYOUTING MEMORY
|
||||||
|
;R05 27-03-2003 DNS CHANGE DRV. INIT. METHOD
|
||||||
|
;R04 27-03-2003 DNS DRIVERS MOVE TO SPECIAL PAGE
|
||||||
|
;R03 14-03-2003 DNS CODE OPTIMIZATION
|
||||||
|
;R02 19-11-2002 DNS ADD ENVIRONMENT INITIALIZATION
|
||||||
|
;R01 14-11-2002 DNS CUT AND MOVE BPB-STRUCT
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
DEVICE NOSLOT64K
|
||||||
|
SPRINTER EQU 2000
|
||||||
|
|
||||||
|
VERS EQU 01 ; Version Number (XX.)
|
||||||
|
MODF EQU 62 ; Modification (.xx)
|
||||||
|
SUBMOD EQU 100
|
||||||
|
|
||||||
|
DAY EQU 01
|
||||||
|
MONTH EQU 01
|
||||||
|
YEAR EQU 2005
|
||||||
|
|
||||||
|
INCLUDE "build.inc"
|
||||||
|
|
||||||
|
PAGEDRV EQU #00
|
||||||
|
|
||||||
|
DIRPAGE EQU 0
|
||||||
|
FATPAGE EQU 1
|
||||||
|
TXTPAGE EQU 2
|
||||||
|
ENVPAGE EQU 2
|
||||||
|
DRVPAGE EQU 3
|
||||||
|
|
||||||
|
TXTADDR EQU 0xC000
|
||||||
|
ENVADDR EQU 0xE400
|
||||||
|
|
||||||
|
DIR EQU 0xC000
|
||||||
|
FAT EQU 0xC000
|
||||||
|
|
||||||
|
putvers macro
|
||||||
|
db "0"+VERS
|
||||||
|
db "."
|
||||||
|
db MODF/10+"0"
|
||||||
|
db MODF-(MODF/10)*10+"0"
|
||||||
|
endm
|
||||||
|
|
||||||
|
ORG_ ORG 0x0000
|
||||||
|
ROM__
|
||||||
|
A0000
|
||||||
|
JP LEAVE ;CLOSE TASK
|
||||||
|
SOUND_K
|
||||||
|
DS 5,0xFF
|
||||||
|
|
||||||
|
A0008
|
||||||
|
PUSH AF ;INT BIOS
|
||||||
|
LD A,0x00
|
||||||
|
OUT (0x7C),A
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
DB 0xFF
|
||||||
|
|
||||||
|
A0010
|
||||||
|
JP RST_10 ;INT DOS
|
||||||
|
DS 5,0xFF
|
||||||
|
|
||||||
|
A0018
|
||||||
|
JP INTDISK ;
|
||||||
|
DS 5,0xFF
|
||||||
|
|
||||||
|
A0020
|
||||||
|
JP NOPS ;
|
||||||
|
DS 5,0xFF
|
||||||
|
|
||||||
|
A0028
|
||||||
|
JP NOPS ;
|
||||||
|
DS 5,0xFF
|
||||||
|
|
||||||
|
A0030
|
||||||
|
JP INTMOUS ;INT MOUSE
|
||||||
|
DS 5,0xFF
|
||||||
|
|
||||||
|
A0038
|
||||||
|
JP RST_38 ;INTERRUPT
|
||||||
|
|
||||||
|
;WARNING! DON'T CHANGE LENGHT OF MASK INTERUPT!
|
||||||
|
;FOR CORRECTED WORKING "Non-Mask Interupt"
|
||||||
|
|
||||||
|
RST_38 ;MAIN INTERUPT
|
||||||
|
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
|
||||||
|
CALL P38
|
||||||
|
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
|
||||||
|
db 0xff
|
||||||
|
|
||||||
|
NMI_RET
|
||||||
|
RETN
|
||||||
|
|
||||||
|
NMI_ISR ; NMI ISR
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
JP NMI_RET
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
NOPS
|
||||||
|
LD A,ERR_INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
P38
|
||||||
|
LD A, (ECHO_PREP+1)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
P38_LB1 EQU $+1
|
||||||
|
LD A, 0x1
|
||||||
|
DEC A
|
||||||
|
CALL Z,ECHO_PREP_0
|
||||||
|
LD (P38_LB1),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;Move to #0080
|
||||||
|
; DS 5+8 ;ALIGN
|
||||||
|
;------=====------
|
||||||
|
;ENTER
|
||||||
|
; IN A,(C) ;0
|
||||||
|
; OUT (C),B ;2
|
||||||
|
;
|
||||||
|
; POP BC ;4
|
||||||
|
; RET ;5
|
||||||
|
;------=====------
|
||||||
|
|
||||||
|
;R01
|
||||||
|
; Area for boot sector [512Bytes]
|
||||||
|
BOOT DB #00,#00,#00 ; +00 JMP
|
||||||
|
ID_NAME
|
||||||
|
DB "DSS_"
|
||||||
|
putvers
|
||||||
|
|
||||||
|
; Block Parameters BIOS
|
||||||
|
|
||||||
|
B_P_S DW 0x0200 ; +0B BYTE PER SECTOR
|
||||||
|
S_P_C DB 2 ; +0D SECTORS PER CLUSTER
|
||||||
|
RESERVE DW 1 ; +0E RESERVE SECTORS
|
||||||
|
FAT_NUM DB 2 ; +10 AMOUNT FATS
|
||||||
|
F_P_DIR DW 112 ; +11 FILES IN DIRECTORY
|
||||||
|
S_P_D DW 1440 ; +13 ALL SECTORS ON DISK
|
||||||
|
ID_FORM DB 0xF0 ; +15 ID FORMAT
|
||||||
|
S_P_F DW 2 ; +16 SIZE FAT IN SECTORS
|
||||||
|
S_P_T DW 9 ; +18 SECTOR PER TRACK
|
||||||
|
HEADS DW 2 ; +1A AMOUNT SIDES
|
||||||
|
HIDDEN DW 0x0000 ; +1C HIDDEN SECTORS
|
||||||
|
DW 0x0000
|
||||||
|
BPB_BIG_TOTAL_SECTORS
|
||||||
|
DW 0x0000,0x0000 ; +20 BIG TOTAL SECTOR
|
||||||
|
BPB_PHISICAL_DRIVE_NUMBER
|
||||||
|
DW 0x0080 ; +24 PHISICAL DRIVE NUMBER
|
||||||
|
BPB_EXT_BOOT_RECORD_SIGNATURE
|
||||||
|
DB 0x29 ; +26 EXTENDED BOOT RECORD SIGNATURE
|
||||||
|
BPB_SERIAL_NUMBER
|
||||||
|
DW 0x0000,0x0000 ; +27 VOLUME SERIAL NUMBER
|
||||||
|
BPB_LABEL
|
||||||
|
DB "NO NAME " ;+2B DISK LABEL
|
||||||
|
ID_FAT
|
||||||
|
BPB_FS_ID
|
||||||
|
DB "FAT16 " ; +36 FILE SYSTEM ID
|
||||||
|
|
||||||
|
SIZE_OF_BOOT EQU $-BOOT
|
||||||
|
|
||||||
|
DRIVE DB 0
|
||||||
|
BOOTDRV DB 0
|
||||||
|
|
||||||
|
VER_IN
|
||||||
|
IN A,(PAGE2)
|
||||||
|
PUSH AF
|
||||||
|
LD A,(BANKTBL+2)
|
||||||
|
OUT (PAGE2),A
|
||||||
|
LD DE,0x8000
|
||||||
|
PUSH DE
|
||||||
|
LD C,0xb8
|
||||||
|
RST 0x08
|
||||||
|
LD HL,0x8600
|
||||||
|
LD BC,0x1ff
|
||||||
|
LD A,0x1a
|
||||||
|
CALL SUB_ram_00f0
|
||||||
|
POP HL
|
||||||
|
LD BC,0x5ff
|
||||||
|
LD A,COM_A
|
||||||
|
CALL SUB_ram_00f0
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE2),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
SUB_ram_00f0
|
||||||
|
LD E,L
|
||||||
|
LD D,H
|
||||||
|
LD (HL),0xff
|
||||||
|
INC DE
|
||||||
|
LDIR
|
||||||
|
LD DE,0x8000
|
||||||
|
LD C,0xb6
|
||||||
|
RST 0x08
|
||||||
|
RET
|
||||||
|
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
|
||||||
|
//MAXSIZM DB 0, 0
|
||||||
|
|
||||||
|
ALIGN 256
|
||||||
|
|
||||||
|
MEMTAB DS 256 ;,0
|
||||||
|
|
||||||
|
ADRST10 ;DS 512 ;,0
|
||||||
|
;FUNCTION ADDRESS ARRAY
|
||||||
|
;--------------------------------------------------------------
|
||||||
|
;FN 0 00h
|
||||||
|
DB VER&0xFF,CHNDISK&0xFF,CURRDSK&0xFF,DISKINF&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
;FN 8 08h
|
||||||
|
DB NEW_FN1&0xFF,BOOTDSK&0xFF,CREATE&0xFF,CREAT_N&0xFF,NOPS&0xFF,NOPS&0xFF,DELETE0&0xFF,NOPS&0xFF
|
||||||
|
;FN 16 10h
|
||||||
|
DB RENAME&0xFF,OPEN&0xFF,CLOSE&0xFF,READ&0xFF,WRITE&0xFF,MOVE_FP&0xFF,ATTRIB&0xFF,GET_D_T&0xFF
|
||||||
|
;FN 24 18h
|
||||||
|
DB PUT_D_T&0xFF,F_FIRST&0xFF,F_NEXT&0xFF,MKDIR&0xFF,RMDIR&0xFF,CHDIR&0xFF,CURRDIR&0xFF,NOPS&0xFF
|
||||||
|
;FN 32 20h
|
||||||
|
DB NOPS&0xFF,SYSTIME&0xFF,SETTIME&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
;FN 40 28h
|
||||||
|
DB NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
;FN 48 30h
|
||||||
|
DB WAITKEY&0xFF,SCANKEY&0xFF,ECHOKEY0&0xFF,CTRLKEY&0xFF,NOPS&0xFF,K_CLEAR&0xFF,K_SETUP&0xFF,TESTKEY&0xFF
|
||||||
|
;FN 56 38h
|
||||||
|
DB SETWIN&0xFF,SETWIN1&0xFF,SETWIN2&0xFF,SETWIN3&0xFF,FREEMEM&0xFF,GETMEM&0xFF,RETMEM&0xFF,SETMEM&0xFF
|
||||||
|
;FN 64 40h
|
||||||
|
DB EXEC&0xFF,LEAVE&0xFF,WAIT&0xFF,GSWITCH&0xFF,DOSNAME&0xFF,EX_PATH&0xFF,ENVIRON&0xFF,APPINFO&0xFF
|
||||||
|
;FN 72 48h
|
||||||
|
DB NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
;FN 80 50h
|
||||||
|
DB SETVMOD&0xFF,GETVMOD&0xFF,LOCATE&0xFF,CURSOR&0xFF,SELPAGE&0xFF,SCROLL&0xFF,CLEAR&0xFF,RDCHAR&0xFF
|
||||||
|
;FN 88 58h
|
||||||
|
DB WRCHAR&0xFF,WINCOPY&0xFF,WINREST&0xFF,PUTCHAR&0xFF,PCHARS&0xFF,NOPS&0xFF,NOPS&0xFF,PRINT&0xFF
|
||||||
|
;FN 96 60h
|
||||||
|
DB NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
|
||||||
|
DS #88
|
||||||
|
DB NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
DB NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF,NOPS&0xFF
|
||||||
|
|
||||||
|
DB VER/256,CHNDISK/256,CURRDSK/256,DISKINF/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
DB NEW_FN1/256,BOOTDSK/256,CREATE/256,CREAT_N/256,NOPS/256,NOPS/256,DELETE0/256,NOPS/256
|
||||||
|
DB RENAME/256,OPEN/256,CLOSE/256,READ/256,WRITE/256,MOVE_FP/256,ATTRIB/256,GET_D_T/256
|
||||||
|
DB PUT_D_T/256,F_FIRST/256,F_NEXT/256,MKDIR/256,RMDIR/256,CHDIR/256,CURRDIR/256,NOPS/256
|
||||||
|
DB NOPS/256,SYSTIME/256,SETTIME/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
DB NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
DB WAITKEY/256,SCANKEY/256,ECHOKEY0/256,CTRLKEY/256,NOPS/256,K_CLEAR/256,K_SETUP/256,TESTKEY/256
|
||||||
|
DB SETWIN/256,SETWIN1/256,SETWIN2/256,SETWIN3/256,FREEMEM/256,GETMEM/256,RETMEM/256,SETMEM/256
|
||||||
|
DB EXEC/256,LEAVE/256,WAIT/256,GSWITCH/256,DOSNAME/256,EX_PATH/256,ENVIRON/256,APPINFO/256
|
||||||
|
DB NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
DB SETVMOD/256,GETVMOD/256,LOCATE/256,CURSOR/256,SELPAGE/256,SCROLL/256,CLEAR/256,RDCHAR/256
|
||||||
|
DB WRCHAR/256,WINCOPY/256,WINREST/256,PUTCHAR/256,PCHARS/256,NOPS/256,NOPS/256,PRINT/256
|
||||||
|
DB NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
DS #88
|
||||||
|
DB NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
DB NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256,NOPS/256
|
||||||
|
|
||||||
|
;[INCLUDE]
|
||||||
|
;KEYBOARD BUFFER
|
||||||
|
include "errors.inc"
|
||||||
|
include "keyinter.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BUFFER
|
||||||
|
SECBUF DS 512, 0x00
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include "video.asm"
|
||||||
|
include "fat_x.asm"
|
||||||
|
include "dos_x.asm"
|
||||||
|
include "dos_fm.asm"
|
||||||
|
include "dos5.asm"
|
||||||
|
include "execute.asm"
|
||||||
|
include "environ.asm"
|
||||||
|
include "intmouse.asm"
|
||||||
|
|
||||||
|
DTA DB " "
|
||||||
|
DB " "
|
||||||
|
DB 0x20
|
||||||
|
DW 0,0,0,0,0
|
||||||
|
DW 0
|
||||||
|
DW 0
|
||||||
|
CLUSTER DW 0
|
||||||
|
SIZE DW 0,0
|
||||||
|
ASCIIZ DB "FILENAME.EXT",#00
|
||||||
|
|
||||||
|
|
||||||
|
include "disk_x.asm"
|
||||||
|
include "ide_drv0.asm"
|
||||||
|
include "fdd_drv0.asm"
|
||||||
|
include "ram_drv0.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; TODO
|
||||||
|
; Check label names
|
||||||
|
ECHO_PREP_A1 EQU $+1
|
||||||
|
ECHO_PREP_0
|
||||||
|
LD A,0x0
|
||||||
|
CPL
|
||||||
|
LD (ECHO_PREP_A1),A
|
||||||
|
|
||||||
|
ECHO_PREP_1
|
||||||
|
LD C,0x8e
|
||||||
|
RST 0x8
|
||||||
|
LD (ECHO_DE1),DE
|
||||||
|
XOR A
|
||||||
|
LD C,0xb4
|
||||||
|
RST 0x08
|
||||||
|
LD BC,WOV_PG
|
||||||
|
LD A,(ECHO_PREP_A1)
|
||||||
|
OR A
|
||||||
|
JR Z,ECHO_PREP_2
|
||||||
|
LD B,0x1a
|
||||||
|
LD A,(KEYFLAG)
|
||||||
|
BIT 0x1,A
|
||||||
|
JR NZ,ECHO_PREP_2
|
||||||
|
LD B,COM_A
|
||||||
|
ECHO_PREP_2
|
||||||
|
XOR A
|
||||||
|
RST 0x8
|
||||||
|
LD A,0x1
|
||||||
|
LD (ECHO_PREP+1),A
|
||||||
|
LD A,0xb
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
ECHO_PREP
|
||||||
|
LD A,0x0
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
LD A,0xff
|
||||||
|
LD (ECHO_PREP_A1),A
|
||||||
|
INC A
|
||||||
|
LD (ECHO_PREP+1),A
|
||||||
|
LD A,0xb
|
||||||
|
LD (P38_LB1),A
|
||||||
|
ECHO_DE1 EQU $+1
|
||||||
|
ECHO_DE
|
||||||
|
LD DE,0x0
|
||||||
|
BIT 0x7,E
|
||||||
|
RET NZ
|
||||||
|
LD C,0xb4
|
||||||
|
XOR A
|
||||||
|
RST A0008
|
||||||
|
XOR A
|
||||||
|
LD BC,WOV_PG
|
||||||
|
RST A0008
|
||||||
|
RET
|
||||||
|
|
||||||
|
ECHO_PREP_3
|
||||||
|
CALL ECHO_PREP_1
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
INCLUDE "release.inc"
|
||||||
|
|
||||||
|
;C_OSNAME
|
||||||
|
;[END]
|
||||||
1691
DOS/dos5.asm
Normal file
1691
DOS/dos5.asm
Normal file
File diff suppressed because it is too large
Load Diff
78
DOS/dos_equ.asm
Normal file
78
DOS/dos_equ.asm
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
|
||||||
|
; -------------------------------------
|
||||||
|
; DOS Function numbers definitions
|
||||||
|
; -------------------------------------
|
||||||
|
|
||||||
|
VERSION EQU #00 ; VERSION (Version of DSS)
|
||||||
|
CHDISK EQU #01 ; CHDISK (Set the current disk)
|
||||||
|
CURDISK EQU #02 ; CURDISK (Get the current disk)
|
||||||
|
DSKINFO EQU #03 ; DSKINFO (Information about disk)
|
||||||
|
G_ENTRY EQU #04 ;
|
||||||
|
|
||||||
|
BOOTDSK EQU #09 ; BOOTDSK (Get number of boot disk)
|
||||||
|
CREATE EQU #0A ; CREATE (Create file)
|
||||||
|
CREAT_N EQU #0B ; CREATE NEW FILE
|
||||||
|
ERASE EQU #0D
|
||||||
|
DELETE EQU #0E
|
||||||
|
MOVE EQU #0F
|
||||||
|
RENAME EQU #10
|
||||||
|
OPEN EQU #11
|
||||||
|
CLOSE EQU #12
|
||||||
|
READ EQU #13
|
||||||
|
WRITE EQU #14
|
||||||
|
MOVE_FP EQU #15
|
||||||
|
ATTRIB EQU #16
|
||||||
|
GET_D_T EQU #17
|
||||||
|
PUT_D_T EQU #18
|
||||||
|
F_FIRST EQU #19
|
||||||
|
F_NEXT EQU #1A
|
||||||
|
MKDIR EQU #1B
|
||||||
|
RMDIR EQU #1C
|
||||||
|
CHDIR EQU #1D
|
||||||
|
CURDIR EQU #1E
|
||||||
|
SYSTIME EQU #21
|
||||||
|
SETTIME EQU #22
|
||||||
|
|
||||||
|
WAITKEY EQU #30
|
||||||
|
SCANKEY EQU #31
|
||||||
|
ECHOKEY EQU #32
|
||||||
|
CTRLKEY EQU #33
|
||||||
|
EDIT EQU #34
|
||||||
|
K_CLEAR EQU #35
|
||||||
|
|
||||||
|
SETWIN EQU #38
|
||||||
|
SETWIN1 EQU #39
|
||||||
|
SETWIN2 EQU #3A
|
||||||
|
SETWIN3 EQU #3B
|
||||||
|
FREEMEM EQU #3C
|
||||||
|
GETMEM EQU #3D
|
||||||
|
RETMEM EQU #3E
|
||||||
|
SETMEM EQU #3F
|
||||||
|
|
||||||
|
EXEC EQU #40
|
||||||
|
EXIT EQU #41
|
||||||
|
WAIT EQU #42
|
||||||
|
|
||||||
|
GSWITCH EQU #43
|
||||||
|
DOSNAME EQU #44
|
||||||
|
|
||||||
|
SETVMOD EQU #50
|
||||||
|
GETVMOD EQU #51
|
||||||
|
LOCATE EQU #52
|
||||||
|
CURSOR EQU #53
|
||||||
|
SELPAGE EQU #54
|
||||||
|
SCROLL EQU #55
|
||||||
|
CLEAR EQU #56
|
||||||
|
RDCHAR EQU #57
|
||||||
|
WRCHAR EQU #58
|
||||||
|
WINCOPY EQU #59
|
||||||
|
WINREST EQU #5A
|
||||||
|
PUTCHAR EQU #5B
|
||||||
|
PCHARS EQU #5C
|
||||||
|
RES_PRN EQU #5D
|
||||||
|
CTRLPRN EQU #5E
|
||||||
|
PRINT EQU #5F
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1023
DOS/dos_fm.asm
Normal file
1023
DOS/dos_fm.asm
Normal file
File diff suppressed because it is too large
Load Diff
330
DOS/dos_x.asm
Normal file
330
DOS/dos_x.asm
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
|
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
|
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||||
|
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||||
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
|
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
||||||
|
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
||||||
|
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||||
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
RGADR EQU 0x89 ;VIDEO CONTROL REGISTER
|
||||||
|
PAGE0 EQU 0x82 ;WIN 0x0000-#3FFF
|
||||||
|
PAGE1 EQU 0xA2 ;WIN #4000-#7FFF
|
||||||
|
PAGE2 EQU 0xC2 ;WIN #8000-#BFFF
|
||||||
|
PAGE3 EQU 0xE2 ;WIN #C000-0xFFFF
|
||||||
|
|
||||||
|
SYSPAGE EQU 0xFE
|
||||||
|
|
||||||
|
;Commands for restart #10
|
||||||
|
;NOPS
|
||||||
|
; LD A,ERR_INVALID_FUNCTION
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
VERSION
|
||||||
|
XOR A
|
||||||
|
LD DE,VERS*256+MODF
|
||||||
|
LD BC, SUBMOD
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHNDISK
|
||||||
|
LD C,A
|
||||||
|
PUSH BC
|
||||||
|
LD C,0x1
|
||||||
|
RST 0x18
|
||||||
|
POP BC
|
||||||
|
JR C,NDISK11
|
||||||
|
LD A,C
|
||||||
|
LD (DRIVE),A
|
||||||
|
CALL RD_BPB
|
||||||
|
RET C
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
NDISK11
|
||||||
|
CP 0x2
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
LD A,0x14
|
||||||
|
RET
|
||||||
|
|
||||||
|
CURRDSK
|
||||||
|
LD A,(DRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
DISKINF
|
||||||
|
INC A
|
||||||
|
JR Z,CURRDS ;R06
|
||||||
|
DEC A ;R06
|
||||||
|
CALL CHNDISK ;R06
|
||||||
|
RET C ;R06
|
||||||
|
|
||||||
|
CURRDS
|
||||||
|
LD HL,2
|
||||||
|
LD BC,0
|
||||||
|
|
||||||
|
FRESP
|
||||||
|
PUSH BC
|
||||||
|
CALL R_F_FAT
|
||||||
|
POP BC
|
||||||
|
CP 10
|
||||||
|
JR Z,FRESP2
|
||||||
|
XOR A
|
||||||
|
CP E
|
||||||
|
JR NZ,SKIC
|
||||||
|
CP D
|
||||||
|
JR NZ,SKIC
|
||||||
|
INC BC
|
||||||
|
SKIC
|
||||||
|
INC HL
|
||||||
|
JR FRESP
|
||||||
|
|
||||||
|
FRESP2
|
||||||
|
LD D,B
|
||||||
|
LD E,C
|
||||||
|
LD HL,(MAX_CLU)
|
||||||
|
DEC HL
|
||||||
|
LD BC,(B_P_S)
|
||||||
|
LD A,(S_P_C)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
LDRIVE DB 0x02
|
||||||
|
TDRIVE DB 0x00
|
||||||
|
TCLUST DW 0x0000
|
||||||
|
TCOUNT DW 0x0000
|
||||||
|
DB 0
|
||||||
|
RD_BPB
|
||||||
|
LD C,PAGE3
|
||||||
|
IN B,(C)
|
||||||
|
PUSH BC
|
||||||
|
EX AF,AF'
|
||||||
|
IN A,(PAGE0)
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD DE,SECBUF+0xC000 ;R08
|
||||||
|
EX AF,AF'
|
||||||
|
LD C,4
|
||||||
|
RST 0x18
|
||||||
|
POP BC
|
||||||
|
OUT (C),B
|
||||||
|
JP C,RDERR1
|
||||||
|
LD DE,#AA55
|
||||||
|
LD HL,(SECBUF+510)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JP NZ,ERR_BPB
|
||||||
|
LD HL,SECBUF
|
||||||
|
LD DE,BOOT
|
||||||
|
LD BC,SIZE_OF_BOOT
|
||||||
|
LDIR
|
||||||
|
LD A, (ID_FORM)
|
||||||
|
CP 0xF0
|
||||||
|
JP C,ERR_BPB
|
||||||
|
LD HL,0 ; calc. first sector FAT
|
||||||
|
LD DE,(RESERVE) ;Reserve sec
|
||||||
|
EX DE,HL
|
||||||
|
LD (FAT_FRM),HL ; first sector FAT
|
||||||
|
LD (FAT2_XX),HL ; first sector FAT #2
|
||||||
|
LD DE,(S_P_F)
|
||||||
|
LD A,(FAT_NUM) ; amount FATs
|
||||||
|
CP 1
|
||||||
|
JR Z,C_DATA1
|
||||||
|
DEC A
|
||||||
|
ADD HL,DE
|
||||||
|
LD (FAT2_XX),HL
|
||||||
|
|
||||||
|
C_DATA1
|
||||||
|
ADD HL,DE
|
||||||
|
DEC A
|
||||||
|
JR NZ,C_DATA1
|
||||||
|
LD (DIR_FRM),HL ; first sector DIR
|
||||||
|
LD BC,(B_P_S)
|
||||||
|
RL C
|
||||||
|
RL B
|
||||||
|
RL C
|
||||||
|
RL B
|
||||||
|
RL C
|
||||||
|
RL B
|
||||||
|
LD C,B
|
||||||
|
LD B,0 ; BC - File handels in sectors
|
||||||
|
LD A,C
|
||||||
|
LD (F_P_S),A
|
||||||
|
LD DE,(F_P_DIR)
|
||||||
|
EX DE,HL
|
||||||
|
DEC HL
|
||||||
|
XOR A
|
||||||
|
NEXTAD2
|
||||||
|
INC A
|
||||||
|
JP Z,ERR_BPB
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,NEXTAD2
|
||||||
|
EX DE,HL
|
||||||
|
LD C,A ; A - sectors in DIR
|
||||||
|
LD B,0
|
||||||
|
LD (DIR_S_S),A
|
||||||
|
ADD HL,BC ; Start DATA area
|
||||||
|
LD (DAT_FRM),HL
|
||||||
|
LD BC,(B_P_S) ; Size sector
|
||||||
|
LD HL,0
|
||||||
|
LD A,(S_P_C)
|
||||||
|
NEXTAD3
|
||||||
|
ADD HL,BC ; calc. cluster size
|
||||||
|
DEC A
|
||||||
|
JR NZ,NEXTAD3
|
||||||
|
LD (CLU_LEN),HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,#3FFF
|
||||||
|
XOR A
|
||||||
|
NEXTAD4
|
||||||
|
INC A
|
||||||
|
JP Z,ERR_BPB
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,NEXTAD4
|
||||||
|
LD (C_P_B),A ; A - Clusters per bank (16k)
|
||||||
|
|
||||||
|
LD HL,ID_FAT
|
||||||
|
LD DE,FATMSG
|
||||||
|
LD B,3
|
||||||
|
R_BPBL1
|
||||||
|
LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
JP NZ,IBMDOS_
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ R_BPBL1
|
||||||
|
FID
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP #20
|
||||||
|
JR Z,FID
|
||||||
|
CP "1"
|
||||||
|
JP NZ,ERR_BPB
|
||||||
|
LD A,(HL)
|
||||||
|
CP "6" ; FAT16
|
||||||
|
LD HL,0xFFFF
|
||||||
|
JR Z,BPB_FAT
|
||||||
|
CP "2" ; FAT12
|
||||||
|
JP NZ,ERR_BPB
|
||||||
|
LD HL,0x0FFF
|
||||||
|
BPB_FAT
|
||||||
|
LD (FAT_TYP),A
|
||||||
|
LD (ENDCLUS),HL
|
||||||
|
LD HL,0
|
||||||
|
LD BC,(S_P_T) ; Sector per track
|
||||||
|
LD A,(HEADS)
|
||||||
|
BPB_L1: ; calc. sector per cylinder
|
||||||
|
ADD HL,BC
|
||||||
|
DEC A
|
||||||
|
JR NZ,BPB_L1
|
||||||
|
LD (S_X_H),HL
|
||||||
|
LD DE,(DAT_FRM)
|
||||||
|
LD HL,(S_P_D)
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,HDDSMAL
|
||||||
|
LD HL,(BPB_BIG_TOTAL_SECTORS)
|
||||||
|
LD BC,(BPB_BIG_TOTAL_SECTORS+2)
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,HDDBIG
|
||||||
|
DEC BC
|
||||||
|
JR HDDBIG
|
||||||
|
HDDSMAL
|
||||||
|
SBC HL,DE
|
||||||
|
LD BC,0
|
||||||
|
HDDBIG
|
||||||
|
LD A,(S_P_C)
|
||||||
|
SCF
|
||||||
|
S4C01
|
||||||
|
RRA
|
||||||
|
JR C,S4C02
|
||||||
|
RR B
|
||||||
|
RR C
|
||||||
|
RR H
|
||||||
|
RR L
|
||||||
|
JR S4C01
|
||||||
|
S4C02
|
||||||
|
INC HL
|
||||||
|
LD (MAX_CLU),HL
|
||||||
|
LD HL,0
|
||||||
|
LD (FATCASH),HL
|
||||||
|
LD A,FATPAGE
|
||||||
|
CALL BANK
|
||||||
|
PUSH AF
|
||||||
|
XOR A
|
||||||
|
CALL RE_FAT
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
CALL R_CLUST
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
IBMDOS_
|
||||||
|
LD A,(ID_FORM)
|
||||||
|
CP 0xF0
|
||||||
|
JR C,ERR_BPB
|
||||||
|
CP 0xF8
|
||||||
|
LD A,"6"
|
||||||
|
LD HL,0xFFFF
|
||||||
|
JR Z,BPB_FAT
|
||||||
|
LD A,"2"
|
||||||
|
LD HL,0x0FFF
|
||||||
|
JP BPB_FAT
|
||||||
|
|
||||||
|
ERR_BPB
|
||||||
|
LD A,13
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
RDERR1
|
||||||
|
LD A,20
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
FATMSG DB "FAT"
|
||||||
|
|
||||||
|
READ_PG DB 0x00
|
||||||
|
|
||||||
|
BLOCK DB 0x00
|
||||||
|
|
||||||
|
DIR_CLU DW 0x0000
|
||||||
|
|
||||||
|
;DRIVE DB 0x01
|
||||||
|
FAT_FRM
|
||||||
|
FAT1_XX DW 0x0000 ; MSD_FAT_SEC first sector FAT
|
||||||
|
FAT2_XX DW 0x0000
|
||||||
|
DIR_FRH DW 0x0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
DIR_FRM
|
||||||
|
DIR_FRL DW 0x0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
F_P_S DB 0x00
|
||||||
|
DIR_S_S DB 0x00 ; DIR_SEC_SIZE
|
||||||
|
DAT_FRM DW 0x0000 ; MSD_DAT_SEC
|
||||||
|
CLU_LEN
|
||||||
|
B_P_C DW 0x0000 ; CLUSTER_LEN
|
||||||
|
C_P_B DB 0x00 ; A - Clusters per bank (16k)
|
||||||
|
FAT_TYP DB 0x00 ; TYPE FAT (#32 - 12bit, #36 - 16bit)
|
||||||
|
S_X_H DW 0x0000
|
||||||
|
ENDCLUS DW 0xFFFF
|
||||||
|
|
||||||
|
DIRSPEC DB #5C ; \
|
||||||
|
DS 256
|
||||||
|
|
||||||
|
|
||||||
|
;=============================================
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;[END]
|
||||||
|
|
||||||
146
DOS/drv_main.asm
Normal file
146
DOS/drv_main.asm
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
;[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"
|
||||||
|
|
||||||
|
PAGEDRV EQU #00
|
||||||
|
|
||||||
|
ORG 0x0000
|
||||||
|
|
||||||
|
A0000 JP RST_00 ;CLOSE TASK
|
||||||
|
DB #FF,#FF,#FF,#FF,#FF
|
||||||
|
A0008 PUSH AF ;INT BIOS
|
||||||
|
LD A,#00
|
||||||
|
OUT (#7C),A
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
RET
|
||||||
|
A0010 JP RST_10 ;INT DOS
|
||||||
|
DB #FF,#FF,#FF,#FF,#FF
|
||||||
|
;A0018 JP INTDISK ;INT DISK
|
||||||
|
; DB #FF,#FF,#FF,#FF,#FF
|
||||||
|
A0018 PUSH AF
|
||||||
|
PUSH BC
|
||||||
|
LD BC,PAGEDRV+PAGE0
|
||||||
|
JP ENTER
|
||||||
|
A0020 JP RST_20 ;
|
||||||
|
DB #FF,#FF,#FF,#FF,#FF
|
||||||
|
A0028 JP RST_28 ;
|
||||||
|
DB #FF,#FF,#FF,#FF,#FF
|
||||||
|
A0030 JP RST_30 ;INT MOUSE
|
||||||
|
DB #FF,#FF,#FF,#FF,#FF
|
||||||
|
A0038 JP RST_38 ;INTERRUPT
|
||||||
|
|
||||||
|
;WARNING! DON'T CHANGE LENGHT OF MASK INTERUPT!
|
||||||
|
;FOR CORRECTED WORKING "Non-Mask Interupt"
|
||||||
|
|
||||||
|
RST_38 ;MAIN INTERUPT
|
||||||
|
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
|
||||||
|
|
||||||
|
RST_00
|
||||||
|
RST_20
|
||||||
|
RST_28
|
||||||
|
RST_30
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
NMI RETN
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
A0066 JP NMI
|
||||||
|
|
||||||
|
;!!!!!!!!!!!!!!!!!!
|
||||||
|
ADRST10 EQU #00 ;!!!
|
||||||
|
;!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
;Move to #007E
|
||||||
|
DS 8 ;ALIGN
|
||||||
|
;------=====------
|
||||||
|
LEAVE PUSH BC
|
||||||
|
RETBANK LD BC,#0000+PAGE0
|
||||||
|
OUT (C),B
|
||||||
|
;Entry point from DSS main page
|
||||||
|
LD (RETBANK+2),A
|
||||||
|
POP BC
|
||||||
|
POP AF
|
||||||
|
ADCALL CALL DISPATCH
|
||||||
|
JR LEAVE
|
||||||
|
|
||||||
|
LD B,#00 ;2
|
||||||
|
OUT (C),A ;9
|
||||||
|
;---
|
||||||
|
POP BC ;10
|
||||||
|
RET ;11
|
||||||
|
;------=====------
|
||||||
|
|
||||||
|
ENTER
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
DISPATCH
|
||||||
|
CALL INITDVC
|
||||||
|
LD HL,INTDISK
|
||||||
|
LD (ADCALL+1),HL
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
KEYSCAN
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
LDRIVE DB #00
|
||||||
|
|
||||||
|
INCLUDE "disk_x.asm"
|
||||||
|
INCLUDE "ide_drv0.asm"
|
||||||
|
INCLUDE "fdd_drv0.asm"
|
||||||
|
INCLUDE "ram_drv0.asm"
|
||||||
|
|
||||||
|
DB 0
|
||||||
|
;[END]
|
||||||
104
DOS/dss.inc
Normal file
104
DOS/dss.inc
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
|
||||||
|
DSS_VERSION EQU #00
|
||||||
|
DSS_CHDISK EQU #01
|
||||||
|
DSS_CURDISK EQU #02
|
||||||
|
DSS_DSKINFO EQU #03
|
||||||
|
;DSS_G_ENTRY EQU #04
|
||||||
|
; EQU #05
|
||||||
|
; EQU #06
|
||||||
|
; EQU #07
|
||||||
|
; EQU #08
|
||||||
|
DSS_BOOTDSK EQU #09
|
||||||
|
;File io
|
||||||
|
DSS_CREATE EQU #0A
|
||||||
|
DSS_CREAT_N EQU #0B
|
||||||
|
; EQU #0C
|
||||||
|
;DSS_ERASE EQU #0D
|
||||||
|
DSS_DELETE EQU #0E
|
||||||
|
;DSS_MOVE EQU #0F
|
||||||
|
DSS_RENAME EQU #10
|
||||||
|
DSS_OPEN EQU #11
|
||||||
|
DSS_CLOSE EQU #12
|
||||||
|
DSS_READ EQU #13
|
||||||
|
DSS_WRITE EQU #14
|
||||||
|
DSS_MOVE_FP EQU #15
|
||||||
|
DSS_ATTRIB EQU #16
|
||||||
|
DSS_GET_D_T EQU #17
|
||||||
|
DSS_PUT_D_T EQU #18
|
||||||
|
DSS_F_FIRST EQU #19
|
||||||
|
DSS_F_NEXT EQU #1A
|
||||||
|
DSS_MKDIR EQU #1B
|
||||||
|
DSS_RMDIR EQU #1C
|
||||||
|
DSS_CHDIR EQU #1D
|
||||||
|
DSS_CURDIR EQU #1E
|
||||||
|
; EQU #1F
|
||||||
|
; EQU #20
|
||||||
|
DSS_SYSTIME EQU #21
|
||||||
|
DSS_SETTIME EQU #22
|
||||||
|
; EQU #23
|
||||||
|
; EQU #24
|
||||||
|
; EQU #25
|
||||||
|
; EQU #26
|
||||||
|
; EQU #27
|
||||||
|
; EQU #28
|
||||||
|
; EQU #29
|
||||||
|
; EQU #2A
|
||||||
|
; EQU #2B
|
||||||
|
; EQU #2C
|
||||||
|
; EQU #2D
|
||||||
|
; EQU #2E
|
||||||
|
; EQU #2F
|
||||||
|
;Keyboard
|
||||||
|
DSS_WAITKEY EQU #30
|
||||||
|
DSS_SCANKEY EQU #31
|
||||||
|
DSS_ECHOKEY EQU #32
|
||||||
|
DSS_CTRLKEY EQU #33
|
||||||
|
;DSS_EDIT EQU #34
|
||||||
|
DSS_K_CLEAR EQU #35
|
||||||
|
DSS_K_SETUP EQU #36
|
||||||
|
DSS_TESTKEY EQU #37
|
||||||
|
;Memory
|
||||||
|
DSS_SETWIN EQU #38
|
||||||
|
DSS_SETWIN1 EQU #39
|
||||||
|
DSS_SETWIN2 EQU #3A
|
||||||
|
DSS_SETWIN3 EQU #3B
|
||||||
|
DSS_INFOMEM EQU #3C
|
||||||
|
DSS_GETMEM EQU #3D
|
||||||
|
DSS_FREEMEM EQU #3E
|
||||||
|
DSS_SETMEM EQU #3F
|
||||||
|
;Execution
|
||||||
|
DSS_EXEC EQU #40
|
||||||
|
DSS_EXIT EQU #41
|
||||||
|
DSS_WAIT EQU #42
|
||||||
|
|
||||||
|
DSS_GSWITCH EQU #43
|
||||||
|
DSS_DOSNAME EQU #44
|
||||||
|
DSS_EX_PATH EQU #45
|
||||||
|
DSS_ENVIRON EQU #46
|
||||||
|
DSS_APPINFO EQU #47
|
||||||
|
; EQU #48
|
||||||
|
; EQU #49
|
||||||
|
; EQU #4A
|
||||||
|
; EQU #4B
|
||||||
|
; EQU #4C
|
||||||
|
; EQU #4D
|
||||||
|
; EQU #4E
|
||||||
|
; EQU #4F
|
||||||
|
|
||||||
|
DSS_SETVMOD EQU #50
|
||||||
|
DSS_GETVMOD EQU #51
|
||||||
|
DSS_LOCATE EQU #52
|
||||||
|
DSS_CURSOR EQU #53
|
||||||
|
DSS_SELPAGE EQU #54
|
||||||
|
DSS_SCROLL EQU #55
|
||||||
|
DSS_CLEAR EQU #56
|
||||||
|
DSS_RDCHAR EQU #57
|
||||||
|
DSS_WRCHAR EQU #58
|
||||||
|
DSS_WINCOPY EQU #59
|
||||||
|
DSS_WINREST EQU #5A
|
||||||
|
DSS_PUTCHAR EQU #5B
|
||||||
|
DSS_PCHARS EQU #5C
|
||||||
|
;DSS_RES_PRN EQU #5D
|
||||||
|
;DSS_CTRLPRN EQU #5E
|
||||||
|
DSS_PRINT EQU #5F
|
||||||
|
;
|
||||||
62
DOS/dss_map.txt
Normal file
62
DOS/dss_map.txt
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
0000-0038h RESTARTS
|
||||||
|
|
||||||
|
003B-006BH 38h Interrupt
|
||||||
|
|
||||||
|
0066-0068h NMI
|
||||||
|
|
||||||
|
0069-0072h RST10 routine
|
||||||
|
|
||||||
|
0073-007Fh Align space
|
||||||
|
|
||||||
|
0080-0085h CALL interpage gate
|
||||||
|
|
||||||
|
0086-00C3h BPB struct
|
||||||
|
|
||||||
|
00C4-00FAh DSS INIT routine
|
||||||
|
|
||||||
|
00FB-00FFH SPACE
|
||||||
|
|
||||||
|
0100-01FFH MEMORY TABLE (OWNER)
|
||||||
|
|
||||||
|
0200-03FFH FUNCTIONS ADDRESSES
|
||||||
|
|
||||||
|
0400-043FH KEYBOARD BUFFER
|
||||||
|
0440-0BD1H KEYBOARD DRIVER
|
||||||
|
|
||||||
|
0BD2-0EF5H SCREEN DRIVER
|
||||||
|
|
||||||
|
0EF6-1100H FAT ROUTINES
|
||||||
|
|
||||||
|
1101-1342H DISK IO ROUTINES
|
||||||
|
|
||||||
|
1343-1443H CURRENT DIR NAME BUFFER
|
||||||
|
|
||||||
|
1444-16BDH HANDLES AND FILE IO ROUTINES
|
||||||
|
|
||||||
|
16BE-25C7H FILE AND DIR ROUTINES (DOS5)
|
||||||
|
|
||||||
|
25C8-27ACH EXECUTE ROUTINES
|
||||||
|
|
||||||
|
27AD-2882H MEMORY ROUTINES
|
||||||
|
|
||||||
|
2883-2CAEH EXEC
|
||||||
|
|
||||||
|
?2CAF-2EAEH EXEBUFFER (GLUK?)
|
||||||
|
|
||||||
|
2EAF-2FAEH PROCESS STACK BUFFER
|
||||||
|
|
||||||
|
2FAF-30CBH ENVIRONMENT ROUTINES
|
||||||
|
|
||||||
|
30CC-35E0H MOUSE DRIVER
|
||||||
|
35E1-36E0H MOUSE IMAGE BUFFER
|
||||||
|
|
||||||
|
36E1-370DH DTA BUFFER
|
||||||
|
|
||||||
|
370D-37FFH SPACE
|
||||||
|
|
||||||
|
3800-39FFH BUFFER & SECTOR BUFFER
|
||||||
|
|
||||||
|
|
||||||
|
3832-3833H ENDCODE
|
||||||
|
|
||||||
|
3833-3FFFH FREE-SPACE
|
||||||
251
DOS/environ.asm
Normal file
251
DOS/environ.asm
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: ENVIRON
|
||||||
|
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
; LD HL,MYVAR
|
||||||
|
; CALL SETENV
|
||||||
|
; LD HL,MYVAR2
|
||||||
|
; LD DE,MYBUF
|
||||||
|
; CALL GETENV
|
||||||
|
|
||||||
|
|
||||||
|
ENVIRON
|
||||||
|
INC B
|
||||||
|
ENVI_L1
|
||||||
|
JR Z,INITENV ;B=FF
|
||||||
|
ENVI_L2
|
||||||
|
DEC B
|
||||||
|
ENVI_L3
|
||||||
|
JR Z,READENV ;B=0
|
||||||
|
DEC B
|
||||||
|
JR Z,GETENV ;B=1
|
||||||
|
DEC B
|
||||||
|
JR Z,SETENV ;B=2
|
||||||
|
LD A,ERR_INVALID_FUNCTION ; TODO: Call to NOP?
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
INITENV
|
||||||
|
LD A,ENVPAGE
|
||||||
|
CALL BANK
|
||||||
|
PUSH AF
|
||||||
|
LD DE,ENVIRONMENT
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LD HL,DEFAULT_ENV
|
||||||
|
LD BC,DEF_ENV_SIZE
|
||||||
|
LDIR
|
||||||
|
LD (DE),A
|
||||||
|
EX DE,HL
|
||||||
|
LD DE,ENVIRONMENT
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD (ENVSIZE),HL
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
READENV PUSH HL
|
||||||
|
LD A,ENVPAGE
|
||||||
|
CALL BANK
|
||||||
|
LD H,A
|
||||||
|
LD C,PAGE3
|
||||||
|
IN L,(C)
|
||||||
|
EXX
|
||||||
|
LD HL,ENVIRONMENT
|
||||||
|
INC HL
|
||||||
|
POP DE
|
||||||
|
LD BC,(ENVSIZE)
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
RD_ENV1
|
||||||
|
OUT (C),L
|
||||||
|
EXX
|
||||||
|
LD A,(HL)
|
||||||
|
EXX
|
||||||
|
OUT (C),H
|
||||||
|
EXX
|
||||||
|
LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC BC
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
EXX
|
||||||
|
JR NZ,RD_ENV1
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
GETENV
|
||||||
|
PUSH DE
|
||||||
|
CALL ENV_EX
|
||||||
|
|
||||||
|
LD A,ENVPAGE
|
||||||
|
CALL BANK
|
||||||
|
EX AF,AF'
|
||||||
|
|
||||||
|
CALL F_ENV
|
||||||
|
POP DE
|
||||||
|
LD A,0
|
||||||
|
LD (DE),A
|
||||||
|
JR NC,GE_1
|
||||||
|
GE_0 LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,GE_0
|
||||||
|
DEC DE ;R01
|
||||||
|
LD A,#FF
|
||||||
|
|
||||||
|
GE_1 EX AF,AF'
|
||||||
|
OUT (PAGE3),A
|
||||||
|
EX AF,AF'
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
SETENV
|
||||||
|
CALL ENV_EX
|
||||||
|
;
|
||||||
|
LD A,ENVPAGE
|
||||||
|
CALL BANK
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
CALL F_ENV
|
||||||
|
JR NC,PENV
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
JR Z,PENV
|
||||||
|
LDIR
|
||||||
|
; DEC DE
|
||||||
|
PENV
|
||||||
|
LD A,(SECBUF)
|
||||||
|
OR A
|
||||||
|
JR Z,CLR_ENV
|
||||||
|
LD HL,EXEBUFF
|
||||||
|
|
||||||
|
F_EVN2
|
||||||
|
LD A,(HL)
|
||||||
|
LDI
|
||||||
|
CP "="
|
||||||
|
JR NZ,F_EVN2
|
||||||
|
LD HL,SECBUF
|
||||||
|
F_EVN3
|
||||||
|
LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,F_EVN3
|
||||||
|
|
||||||
|
CLR_ENV
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD HL,ENVIRONMENT
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,DE
|
||||||
|
LD (ENVSIZE),HL
|
||||||
|
;
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; RET:
|
||||||
|
; DE - VAR VALUE
|
||||||
|
; HL - VAR ADDRESS
|
||||||
|
; BC - ENVIRONMENT SIZE
|
||||||
|
|
||||||
|
F_ENV
|
||||||
|
LD HL,ENVIRONMENT
|
||||||
|
LD BC,(ENVSIZE)
|
||||||
|
PUSH HL
|
||||||
|
F_EVN0
|
||||||
|
POP DE
|
||||||
|
LD DE,ENVNAME
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
PUSH HL
|
||||||
|
F_EVN1 LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,END_OF_ENV
|
||||||
|
LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC BC
|
||||||
|
JR NZ,F_EVN0
|
||||||
|
CP "="
|
||||||
|
JR NZ,F_EVN1
|
||||||
|
SCF
|
||||||
|
END_OF_ENV
|
||||||
|
POP DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
ENV_EX
|
||||||
|
LD B,0xff
|
||||||
|
LD DE,ENVNAME
|
||||||
|
ENV_E0
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD (SECBUF),A
|
||||||
|
ENV_E1
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP "="
|
||||||
|
JR Z,EQUAL_SG
|
||||||
|
OR A
|
||||||
|
JR Z,ENV_E3
|
||||||
|
CALL UPPER
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ ENV_E1
|
||||||
|
JR ENV_E4
|
||||||
|
|
||||||
|
ENV_E3 LD A,"="
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
EQUAL_SG
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD DE,SECBUF
|
||||||
|
LD (DE),A
|
||||||
|
LD C,#FF
|
||||||
|
ENV_E2
|
||||||
|
LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
DJNZ ENV_E2
|
||||||
|
ENV_E4
|
||||||
|
LD A,B
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
ENVNAME EQU EXEBUFF ;DS 32
|
||||||
|
ENVVALUE EQU #3800 ; BUFFER ;DS 128
|
||||||
|
|
||||||
|
ENVSIZE DW 1 ;E_END-ENVIRONMENT ;160
|
||||||
|
|
||||||
|
ENVIRONMENT EQU ENVADDR
|
||||||
|
|
||||||
|
DEFAULT_ENV
|
||||||
|
DB 0 ; "",0
|
||||||
|
DEF_ENV_SIZE EQU $-DEFAULT_ENV
|
||||||
|
|
||||||
|
;[END]
|
||||||
40
DOS/errors.inc
Normal file
40
DOS/errors.inc
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
; =====================================
|
||||||
|
; Error codes
|
||||||
|
; =====================================
|
||||||
|
ERR_NO_ERROR EQU 0x00 ; (00) - нет ошибок
|
||||||
|
ERR_INVALID_FUNCTION EQU 0x01 ; (01) - неверный номер функции
|
||||||
|
ERR_INVALID_DRIVE EQU 0x02 ; (02) - неправильный номер устройства
|
||||||
|
ERR_FILE_NOT_FOUND EQU 0x03 ; (03) - файл не обнаружен
|
||||||
|
ERR_PATH_NOT_FOUND EQU 0x04 ; (04) - неверный путь
|
||||||
|
ERR_INVALID_HANDLE EQU 0x05 ; (05) - несуществующий файловый манипулятор
|
||||||
|
ERR_NO_HANDLES EQU 0x06 ; (06) - нет свободного файлового манипулятора
|
||||||
|
ERR_FILE_EXISTS EQU 0x07 ; (07) - файл существует
|
||||||
|
ERR_READONLY EQU 0x08 ; (08) - файл только для чтения
|
||||||
|
ERR_ROOT_OVERFLOW EQU 0x09 ; (09) - переполнение ROOT ; (корневого каталога)
|
||||||
|
ERR_DISK_FULL EQU 0x0A ; (10) - нет свободного места на диске
|
||||||
|
ERR_DIR_NOT_EMPTY EQU 0x0B ; (11) - каталог не пуст
|
||||||
|
ERR_CURRENT_DIR EQU 0x0C ; (12) - попытка удалить текущий каталог
|
||||||
|
ERR_UNKNOWN_FORMAT EQU 0x0D ; (13) - неизвестный формат
|
||||||
|
ERR_INVALID_ACCESS EQU 0x0E ; (14) - невозможная операция
|
||||||
|
ERR_DIR_EXISTS EQU 0x0F ; (15) - каталог уже есть
|
||||||
|
ERR_INVALID_NAME EQU 0x10 ; (16) - неверное имя
|
||||||
|
ERR_INVALID_EXE EQU 0x11 ; (17) - неправильный EXE-файл
|
||||||
|
ERR_UNKNOWN_EXE EQU 0x12 ; (18) - не поддерживаемая версия EXE-файла
|
||||||
|
ERR_ACCESS_DENIED EQU 0x13 ; (19) - ресурс не доступен
|
||||||
|
;
|
||||||
|
ERR_NOT_READY EQU 0x14 ; (20) - нет готовности
|
||||||
|
ERR_SEEK_ERROR EQU 0x15 ; (21) - ошибка позиционирования
|
||||||
|
ERR_SECTOR_NOT_FOUND EQU 0x16 ; (22) - сектор не найден
|
||||||
|
ERR_CRC_ERROR EQU 0x17 ; (23) - ошибка CRC
|
||||||
|
ERR_WRITE_PROTECT EQU 0x18 ; (24) - защита записи
|
||||||
|
ERR_READ_ERROR EQU 0x19 ; (25) - ошибка чтения
|
||||||
|
ERR_WRITE_ERROR EQU 0x1A ; (26) - ошибка записи
|
||||||
|
ERR_GENERAL_FAILURE EQU 0x1B ; (27) - общая ошибка
|
||||||
|
ERR_RESERVED_28 EQU 0x1C ; (28) - зарезервирован
|
||||||
|
ERR_RESERVED_29 EQU 0x1D ; (29) - зарезервирован
|
||||||
|
;
|
||||||
|
ERR_NOT_ENOUGH_MEMORY EQU 0x1E ; (30) - недостаточно памяти
|
||||||
|
ERR_INVALID_MEMORY_HND EQU 0x1F ; (31) - несуществующий блок памяти
|
||||||
|
ERR_RESERVED_32 EQU 0x20 ; (32) - зарезервирова
|
||||||
|
;
|
||||||
|
ERR_INVALID_VIDEO_MODE EQU 0x30 ; (48) - зарезервирова
|
||||||
1208
DOS/execute.asm
Normal file
1208
DOS/execute.asm
Normal file
File diff suppressed because it is too large
Load Diff
482
DOS/fat_x.asm
Normal file
482
DOS/fat_x.asm
Normal file
@ -0,0 +1,482 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: FAT_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R01 10-02-1999 DNS UPGRADE FAT CASH
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
R_CLUST
|
||||||
|
LD HL,#0001
|
||||||
|
LD (G_CLUST+1),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
G_CLUST
|
||||||
|
LD HL,#0001
|
||||||
|
G_CLUS1
|
||||||
|
INC HL
|
||||||
|
CALL R_F_FAT
|
||||||
|
CP 10
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,G_CLUS1
|
||||||
|
LD (G_CLUST+1),HL
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL - CLUSTER
|
||||||
|
|
||||||
|
INC_FAT
|
||||||
|
PUSH HL
|
||||||
|
CALL G_CLUST
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
PUSH HL
|
||||||
|
PUSH HL
|
||||||
|
EX DE,HL
|
||||||
|
INC_FA2
|
||||||
|
CALL R_F_FAT
|
||||||
|
EX DE,HL
|
||||||
|
JR NC,INC_FA2
|
||||||
|
EX DE,HL
|
||||||
|
POP DE
|
||||||
|
CALL W_T_FAT
|
||||||
|
POP HL
|
||||||
|
LD DE,(ENDCLUS)
|
||||||
|
CALL W_T_FAT
|
||||||
|
CALL WR_FAT
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;R01
|
||||||
|
|
||||||
|
; HL - CLUSTER
|
||||||
|
; DE - (CLUSTER)
|
||||||
|
|
||||||
|
R_F_FAT
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(MAX_CLU)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD A,10
|
||||||
|
RET C
|
||||||
|
EXX
|
||||||
|
LD A,FATPAGE
|
||||||
|
CALL BANK
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
PUSH AF
|
||||||
|
LD A,(FAT_TYP)
|
||||||
|
CP "2"
|
||||||
|
JR Z,R_F_F12
|
||||||
|
R_F_F16
|
||||||
|
LD A,H
|
||||||
|
LD B,A
|
||||||
|
AND #0F
|
||||||
|
LD H,A
|
||||||
|
LD A,B
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||||
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
|
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||||
|
CP C
|
||||||
|
CALL NZ,RE_FAT ; A <> C - READ NEW BLOCK FAT
|
||||||
|
LD DE,FAT
|
||||||
|
ADD HL,DE
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD HL,#FFEF
|
||||||
|
XOR A
|
||||||
|
SBC HL,DE
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
;R01; HL - CLUSTER
|
||||||
|
;R01; DE - (CLUSTER)
|
||||||
|
;R01
|
||||||
|
;R01R_F_FAT EX DE,HL
|
||||||
|
;R01 LD HL,(MAX_CLU)
|
||||||
|
;R01 AND A
|
||||||
|
;R01 SBC HL,DE
|
||||||
|
;R01 EX DE,HL
|
||||||
|
;R01 LD A,10
|
||||||
|
;R01 RET C
|
||||||
|
;R01 PUSH HL
|
||||||
|
;R01 LD A,(FAT_TYP)
|
||||||
|
;R01 CP "2"
|
||||||
|
;R01 JP Z,R_F_F12
|
||||||
|
;R01R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
|
||||||
|
;R01 XOR A
|
||||||
|
;R01R_F_00H INC A ; HL - CLUSTER
|
||||||
|
;R01 SBC HL,DE
|
||||||
|
;R01 JP NC,R_F_00H
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
|
;R01 DEC A
|
||||||
|
;R01 LD BC,(FATCASH) ; A - ELEMENT OF CASH
|
||||||
|
;R01 CP C
|
||||||
|
;R01 CALL NZ,RE_FAT
|
||||||
|
;R01 LD DE,FAT
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 LD E,(HL)
|
||||||
|
;R01 INC HL
|
||||||
|
;R01 LD D,(HL)
|
||||||
|
;R01 LD HL,#FFEF
|
||||||
|
;R01 AND A
|
||||||
|
;R01 SBC HL,DE
|
||||||
|
;R01 POP HL
|
||||||
|
;R01 LD A,0
|
||||||
|
;R01 RET
|
||||||
|
;R01
|
||||||
|
;R01R_F_F12 LD D,H
|
||||||
|
;R01 LD E,L
|
||||||
|
;R01 ADD HL,HL
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 RR H
|
||||||
|
;R01 RR L
|
||||||
|
;R01 PUSH AF
|
||||||
|
;R01 EX DE,HL
|
||||||
|
;R01 LD HL,(B_P_S)
|
||||||
|
;R01 LD B,H
|
||||||
|
;R01 LD C,L
|
||||||
|
;R01 ADD HL,HL
|
||||||
|
;R01 ADD HL,BC
|
||||||
|
;R01 EX DE,HL
|
||||||
|
;R01 XOR A ; DE - SIZE SECTOR * 3
|
||||||
|
;R01R_F_00 INC A ; HL - FAT OFFSET
|
||||||
|
;R01 SBC HL,DE
|
||||||
|
;R01 JP NC,R_F_00
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 DEC A
|
||||||
|
|
||||||
|
R_F_F12
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,DE
|
||||||
|
RR H
|
||||||
|
RR L ;CLUSTER * 1.5
|
||||||
|
PUSH AF
|
||||||
|
LD A,H
|
||||||
|
LD B,A
|
||||||
|
AND #1F
|
||||||
|
LD H,A
|
||||||
|
LD A,B
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #07
|
||||||
|
LD BC,(FATCASH)
|
||||||
|
CP C
|
||||||
|
CALL NZ,RE_FAT
|
||||||
|
LD DE,FAT
|
||||||
|
ADD HL,DE
|
||||||
|
POP AF
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
JR C,R_F_F01
|
||||||
|
LD A,D
|
||||||
|
AND #0F
|
||||||
|
LD D,A
|
||||||
|
JR R_F_F02
|
||||||
|
|
||||||
|
R_F_F01 LD A,E
|
||||||
|
AND #F0
|
||||||
|
LD E,A
|
||||||
|
RR D
|
||||||
|
RR E
|
||||||
|
RR D
|
||||||
|
RR E
|
||||||
|
RR D
|
||||||
|
RR E
|
||||||
|
RR D
|
||||||
|
RR E
|
||||||
|
R_F_F02
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD HL,#0FEF
|
||||||
|
XOR A
|
||||||
|
SBC HL,DE
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL - CLUSTER
|
||||||
|
; DE - (CLUSTER)
|
||||||
|
|
||||||
|
W_T_FAT
|
||||||
|
PUSH DE
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(MAX_CLU)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
POP DE
|
||||||
|
LD A,10
|
||||||
|
RET C
|
||||||
|
EXX
|
||||||
|
LD A,FATPAGE
|
||||||
|
CALL BANK
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
PUSH AF
|
||||||
|
LD A,1
|
||||||
|
LD (FATCASH+1),A
|
||||||
|
LD A,(FAT_TYP)
|
||||||
|
CP "2"
|
||||||
|
JR Z,W_T_F12
|
||||||
|
W_T_F16 PUSH DE
|
||||||
|
LD A,H
|
||||||
|
LD B,A
|
||||||
|
AND #0F
|
||||||
|
LD H,A
|
||||||
|
LD A,B
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
||||||
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
|
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||||
|
CP C
|
||||||
|
CALL NZ,RE_FAT ; A <> C - READ NEW BLOCK FAT
|
||||||
|
LD DE,FAT
|
||||||
|
ADD HL,DE
|
||||||
|
POP DE
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
POP AF
|
||||||
|
POP HL
|
||||||
|
OUT (PAGE3),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
W_T_F12 PUSH DE
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,DE
|
||||||
|
RR H
|
||||||
|
RR L ;CLUSTER * 1.5
|
||||||
|
PUSH AF
|
||||||
|
LD A,H
|
||||||
|
LD B,A
|
||||||
|
AND #1F
|
||||||
|
LD H,A
|
||||||
|
LD A,B
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #07
|
||||||
|
LD BC,(FATCASH)
|
||||||
|
CP C
|
||||||
|
CALL NZ,RE_FAT
|
||||||
|
LD DE,FAT
|
||||||
|
ADD HL,DE
|
||||||
|
POP AF
|
||||||
|
POP DE
|
||||||
|
JR C,W_T_F01
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
AND #F0
|
||||||
|
OR D
|
||||||
|
LD (HL),A
|
||||||
|
POP AF
|
||||||
|
POP HL
|
||||||
|
OUT (PAGE3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
W_T_F01 SLA E
|
||||||
|
RL D
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
LD A,(HL)
|
||||||
|
AND #0F
|
||||||
|
OR E
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
POP AF
|
||||||
|
POP HL
|
||||||
|
OUT (PAGE3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;R01
|
||||||
|
; A - NEW FAT BLOCK
|
||||||
|
|
||||||
|
RE_FAT
|
||||||
|
PUSH HL
|
||||||
|
PUSH AF
|
||||||
|
LD A,(FATCASH+1)
|
||||||
|
OR A
|
||||||
|
CALL NZ,WR_FAT_
|
||||||
|
POP AF
|
||||||
|
LD L,A
|
||||||
|
LD H,0
|
||||||
|
LD (FATCASH),HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
|
||||||
|
LD DE,(FAT_FRM)
|
||||||
|
ADD HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD IX,0
|
||||||
|
ADD IX,DE
|
||||||
|
LD HL,0 ;HL:IX - SECTOR FAT FOR READING
|
||||||
|
LD DE,FAT ; DE - FAT ADDRESS
|
||||||
|
LD A,(DRIVE)
|
||||||
|
LD B,16 ;16 * 512 = 8192 (CASH SIZE)
|
||||||
|
LD C,5
|
||||||
|
RST #18
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
WR_FAT EXX
|
||||||
|
LD A,FATPAGE
|
||||||
|
CALL BANK
|
||||||
|
EXX
|
||||||
|
PUSH AF
|
||||||
|
CALL WR_FAT_
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
WR_FAT_
|
||||||
|
LD HL,(FATCASH)
|
||||||
|
LD H,0
|
||||||
|
LD (FATCASH),HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
|
||||||
|
|
||||||
|
PUSH HL
|
||||||
|
LD B,H
|
||||||
|
LD C,L ;BC - BLOCK OF FAT
|
||||||
|
LD DE,16
|
||||||
|
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
||||||
|
|
||||||
|
LD DE,(S_P_F)
|
||||||
|
LD A,16
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR C,WALLFAT
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,16
|
||||||
|
SBC HL,DE
|
||||||
|
JR C,FATERR
|
||||||
|
LD A,L
|
||||||
|
WALLFAT
|
||||||
|
LD H,B
|
||||||
|
LD L,C
|
||||||
|
LD DE,(FAT_FRM)
|
||||||
|
ADD HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD IX,0
|
||||||
|
ADD IX,DE
|
||||||
|
LD HL,0 ;HL:IX - SECTOR OF FAT FOR SAVE
|
||||||
|
LD DE,FAT
|
||||||
|
LD B,A
|
||||||
|
LD C,6
|
||||||
|
LD A,(DRIVE)
|
||||||
|
PUSH BC
|
||||||
|
RST #18
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
LD DE,(FAT2_XX)
|
||||||
|
ADD HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD IX,0
|
||||||
|
ADD IX,DE
|
||||||
|
LD DE,FAT
|
||||||
|
LD HL,0
|
||||||
|
LD A,(DRIVE)
|
||||||
|
LD C,6
|
||||||
|
RST #18
|
||||||
|
RET
|
||||||
|
;R01
|
||||||
|
|
||||||
|
;R01WR_FAT LD HL,(FATCASH)
|
||||||
|
;R01 LD H,0
|
||||||
|
;R01 LD (FATCASH),HL
|
||||||
|
;R01 LD E,L
|
||||||
|
;R01 LD D,H
|
||||||
|
;R01 ADD HL,HL
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 PUSH HL
|
||||||
|
;R01 LD B,H
|
||||||
|
;R01 LD C,L
|
||||||
|
;R01 INC HL
|
||||||
|
;R01 INC HL
|
||||||
|
;R01 INC HL
|
||||||
|
;R01 LD DE,(S_P_F)
|
||||||
|
;R01 LD A,3
|
||||||
|
;R01 AND A
|
||||||
|
;R01 SBC HL,DE
|
||||||
|
;R01 JP C,WR_FAT1
|
||||||
|
;R01 EX DE,HL
|
||||||
|
;R01 LD HL,3
|
||||||
|
;R01 AND A
|
||||||
|
;R01 SBC HL,DE
|
||||||
|
;R01 JP C,FATERR
|
||||||
|
;R01 LD A,L
|
||||||
|
;R01WR_FAT1 LD H,B
|
||||||
|
;R01 LD L,C
|
||||||
|
;R01 LD DE,(FAT_FRM)
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 EX DE,HL
|
||||||
|
;R01 LD IX,0
|
||||||
|
;R01 ADD IX,DE
|
||||||
|
;R01 LD DE,FAT
|
||||||
|
;R01 LD HL,0
|
||||||
|
;R01 LD B,A
|
||||||
|
;R01 LD C,6
|
||||||
|
;R01 LD A,(DRIVE)
|
||||||
|
;R01 PUSH BC
|
||||||
|
;R01 RST #18
|
||||||
|
;R01 POP BC
|
||||||
|
;R01 POP HL
|
||||||
|
;R01 LD DE,(FAT2_XX)
|
||||||
|
;R01 ADD HL,DE
|
||||||
|
;R01 EX DE,HL
|
||||||
|
;R01 LD IX,0
|
||||||
|
;R01 ADD IX,DE
|
||||||
|
;R01 LD DE,FAT
|
||||||
|
;R01 LD HL,0
|
||||||
|
;R01 LD A,(DRIVE)
|
||||||
|
;R01 LD C,6
|
||||||
|
;R01 RST #18
|
||||||
|
;R01 RET
|
||||||
|
|
||||||
|
FATERR POP HL
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
FATCASH DW #0000
|
||||||
|
MAX_CLU DW #0FF0
|
||||||
|
|
||||||
|
;//MODULE: FAT_X
|
||||||
|
;[END]
|
||||||
|
|
||||||
|
|
||||||
366
DOS/fdd_drv0.asm
Normal file
366
DOS/fdd_drv0.asm
Normal file
@ -0,0 +1,366 @@
|
|||||||
|
|
||||||
|
; Disk Driver Specification ver. 2.00
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Initialization
|
||||||
|
;
|
||||||
|
;Function : Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input : C = 00h
|
||||||
|
; IX - Environment
|
||||||
|
;Output : A = Amount drive support
|
||||||
|
; HL = Size driver
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Open
|
||||||
|
;
|
||||||
|
;Function : Open disk
|
||||||
|
;
|
||||||
|
;Input : C = 01h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Close
|
||||||
|
;
|
||||||
|
;Function : Close disk
|
||||||
|
;
|
||||||
|
;Input : C = 02h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Media check
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 03h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h disk no changed
|
||||||
|
; A = 0FFh disk changed
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Get BPB
|
||||||
|
;
|
||||||
|
;Function : Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input : C = 04h
|
||||||
|
; DE - Address
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Input
|
||||||
|
;
|
||||||
|
;Function : Input from disk
|
||||||
|
;
|
||||||
|
;Input : C = 05h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Output
|
||||||
|
;
|
||||||
|
;Function : Output to disk
|
||||||
|
;
|
||||||
|
;Input : C = 06h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Removable
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 07h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h Removable
|
||||||
|
; A = FFh Nonremovable
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function : Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input : C = 08h
|
||||||
|
; B - Subcommand
|
||||||
|
; DE = 55AAh Magic Number
|
||||||
|
; Subcommand
|
||||||
|
;----------------------
|
||||||
|
; 00h - Get Device Parameters
|
||||||
|
; 01h - Read track
|
||||||
|
; 02h - Test track
|
||||||
|
; 80h - Set Device Parameters
|
||||||
|
; 81h - Write track
|
||||||
|
; 82h - Format track
|
||||||
|
;Output :
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (00h) - NO ERRORS
|
||||||
|
; 1 (01h) - BAD COMMAND
|
||||||
|
; 2 (02h) - BAD DRIVE NUMBER
|
||||||
|
; 3 (03h) - UNKNOW FORMAT
|
||||||
|
; 4 (04h) - NOT READY
|
||||||
|
; 5 (05h) - SEEK ERROR
|
||||||
|
; 6 (06h) - SECTOR NOT FOUND
|
||||||
|
; 7 (07h) - CRC ERROR
|
||||||
|
; 8 (08h) - WRITE PROTECT
|
||||||
|
; 9 (09h) - READ ERROR
|
||||||
|
; 10 (0Ah) - WRITE ERROR
|
||||||
|
; 11 (0Bh) - FAILURE
|
||||||
|
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (0Dh) - RESERVED
|
||||||
|
|
||||||
|
R_COM EQU #0F ;Command/Status
|
||||||
|
R_TRK EQU #3F ;Track
|
||||||
|
R_SEC EQU #5F ;Sector
|
||||||
|
R_DAT EQU #7F ;Data
|
||||||
|
R_DSK EQU #FF ;Drive Control
|
||||||
|
|
||||||
|
COM_B EQU #1B
|
||||||
|
|
||||||
|
FDDRIVE
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JR Z,INIT ;#00
|
||||||
|
DEC C
|
||||||
|
JR Z,RESE ;#01
|
||||||
|
DEC C
|
||||||
|
JR Z,STAT ;#02
|
||||||
|
DEC C
|
||||||
|
JR Z,CHEK ;#03
|
||||||
|
DEC C
|
||||||
|
JR Z,GBPB ;#04
|
||||||
|
DEC C
|
||||||
|
JR Z,READD ;#05
|
||||||
|
DEC C
|
||||||
|
JR Z,WRITED ;#06
|
||||||
|
DEC C
|
||||||
|
JP Z,REMOV_F ;#07
|
||||||
|
DEC C
|
||||||
|
JR Z,IOCTL_F ;#08
|
||||||
|
LD A,1 ; TODO: NOOP?
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;Commands for restart #18
|
||||||
|
INIT
|
||||||
|
LD A,2
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RESE
|
||||||
|
LD C,#51
|
||||||
|
RST #08
|
||||||
|
RET
|
||||||
|
|
||||||
|
STAT
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHEK
|
||||||
|
LD A,#FF
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;DE - ADDRESS
|
||||||
|
|
||||||
|
GBPB
|
||||||
|
LD IX,0
|
||||||
|
LD HL,0
|
||||||
|
PUSH DE
|
||||||
|
PUSH AF
|
||||||
|
LD BC,#0155
|
||||||
|
RST #08
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD BC,#0018
|
||||||
|
ADD HL,BC
|
||||||
|
LD E,(HL)
|
||||||
|
PUSH DE
|
||||||
|
LD A,D
|
||||||
|
LD C,#58
|
||||||
|
RST #08
|
||||||
|
LD A,H
|
||||||
|
POP HL
|
||||||
|
PUSH HL
|
||||||
|
LD H,A
|
||||||
|
POP AF
|
||||||
|
LD C,#59
|
||||||
|
RST #08
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;READTR
|
||||||
|
; XOR A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
READD
|
||||||
|
LD C,#55
|
||||||
|
RST #08
|
||||||
|
RET
|
||||||
|
|
||||||
|
WRITED
|
||||||
|
LD C,#56
|
||||||
|
RST #08
|
||||||
|
RET
|
||||||
|
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
|
||||||
|
|
||||||
|
IOCTL_F
|
||||||
|
BIT 7,B
|
||||||
|
JR NZ,O_CTL_F
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,FGETPRM
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
O_CTL_F
|
||||||
|
RES 7,B
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,FSETPRM
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
|
; A - EXTENDED INFORMATION
|
||||||
|
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
|
; D5 - "1" RESERVED
|
||||||
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; D7 - "1" RESERVED
|
||||||
|
|
||||||
|
FGETPRM EX DE,HL
|
||||||
|
LD BC,#55AA
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD L,A
|
||||||
|
LD A,11
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
LD A,L
|
||||||
|
AND #0F
|
||||||
|
PUSH AF
|
||||||
|
LD C,#58
|
||||||
|
RST #08
|
||||||
|
JR C,NONEF
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD A,H
|
||||||
|
LD H,0
|
||||||
|
MULL1
|
||||||
|
ADD HL,HL
|
||||||
|
DEC A
|
||||||
|
JR NZ,MULL1
|
||||||
|
; HL - SECTOR PER CYLLINDER
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
EX AF,AF'
|
||||||
|
XOR A
|
||||||
|
LD L,A
|
||||||
|
LD H,A
|
||||||
|
|
||||||
|
MULL2
|
||||||
|
EX AF,AF'
|
||||||
|
ADD HL,BC
|
||||||
|
ADC A,0
|
||||||
|
DEC DE
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,MULL2
|
||||||
|
EX AF,AF'
|
||||||
|
LD E,A
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,B
|
||||||
|
LD C,L
|
||||||
|
LD B,0
|
||||||
|
LD L,H
|
||||||
|
LD H,B
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
NONEF
|
||||||
|
POP AF
|
||||||
|
LD A,2
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - EXTENDED INFORMATION
|
||||||
|
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
|
; D5 - "1" RESERVED
|
||||||
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; D7 - "1" RESERVED
|
||||||
|
|
||||||
|
FSETPRM
|
||||||
|
PUSH AF
|
||||||
|
EXX
|
||||||
|
EX DE,HL
|
||||||
|
LD H,L
|
||||||
|
LD L,C
|
||||||
|
POP AF
|
||||||
|
AND #0F
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD C,#58
|
||||||
|
RST #08
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
JR C,NONEF
|
||||||
|
POP AF
|
||||||
|
LD C,#59
|
||||||
|
RST #08
|
||||||
|
RET C
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
REMOV_F
|
||||||
|
LD A,1
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;==============================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
7
DOS/hardware.inc
Normal file
7
DOS/hardware.inc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
;Memory ports
|
||||||
|
|
||||||
|
PAGE0 EQU #82
|
||||||
|
PAGE1 EQU #A2
|
||||||
|
PAGE2 EQU #C2
|
||||||
|
PAGE3 EQU #E2
|
||||||
696
DOS/ide_drv0.asm
Normal file
696
DOS/ide_drv0.asm
Normal file
@ -0,0 +1,696 @@
|
|||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R02 06-08-2001 DNS Secondary IDE
|
||||||
|
;R01 06-08-2001 DNS Fixed BUG with partitions on Second hard disk
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Disk Driver Specification ver. 2.20
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Initialization
|
||||||
|
;
|
||||||
|
;Function : Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input : C = 00h
|
||||||
|
; IX - Environment
|
||||||
|
;Output : A = Amount drive support
|
||||||
|
; HL = Size driver
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Open
|
||||||
|
;
|
||||||
|
;Function : Open disk
|
||||||
|
;
|
||||||
|
;Input : C = 01h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Close
|
||||||
|
;
|
||||||
|
;Function : Close disk
|
||||||
|
;
|
||||||
|
;Input : C = 02h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Media check
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 03h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h disk no changed
|
||||||
|
; A = 0FFh disk changed
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Get BPB
|
||||||
|
;
|
||||||
|
;Function : Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input : C = 04h
|
||||||
|
; DE - Address
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Input
|
||||||
|
;
|
||||||
|
;Function : Input from disk
|
||||||
|
;
|
||||||
|
;Input : C = 05h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Output
|
||||||
|
;
|
||||||
|
;Function : Output to disk
|
||||||
|
;
|
||||||
|
;Input : C = 06h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Removable
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 07h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h Removable
|
||||||
|
; A = FFh Nonremovable
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function : Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input : C = 08h
|
||||||
|
; B - Subcommand
|
||||||
|
; DE = 55AAh Magic Number
|
||||||
|
; Subcommand
|
||||||
|
;----------------------
|
||||||
|
; 00h - Get Device Parameters
|
||||||
|
; 01h - Read track
|
||||||
|
; 02h - Test track
|
||||||
|
; 80h - Set Device Parameters
|
||||||
|
; 81h - Write track
|
||||||
|
; 82h - Format track
|
||||||
|
;Output :
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Read Long
|
||||||
|
;
|
||||||
|
;Function : Reading sectors from disk
|
||||||
|
;
|
||||||
|
;Input : C = 0Ah
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
; A'- Page
|
||||||
|
;Output : A'- Next Page
|
||||||
|
; HL:IX - Next Logical Block (sector)
|
||||||
|
; DE - Next Address
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Write Long
|
||||||
|
;
|
||||||
|
;Function : Writing sectors to disk
|
||||||
|
;
|
||||||
|
;Input : C = 0Bh
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
; A'- Page
|
||||||
|
;Output : A'- Next Page
|
||||||
|
; HL:IX - Next Logical Block (sector)
|
||||||
|
; DE - Next Address
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (00h) - NO ERRORS
|
||||||
|
; 1 (01h) - BAD COMMAND
|
||||||
|
; 2 (02h) - BAD DRIVE NUMBER
|
||||||
|
; 3 (03h) - UNKNOW FORMAT
|
||||||
|
; 4 (04h) - NOT READY
|
||||||
|
; 5 (05h) - SEEK ERROR
|
||||||
|
; 6 (06h) - SECTOR NOT FOUND
|
||||||
|
; 7 (07h) - CRC ERROR
|
||||||
|
; 8 (08h) - WRITE PROTECT
|
||||||
|
; 9 (09h) - READ ERROR
|
||||||
|
; 10 (0Ah) - WRITE ERROR
|
||||||
|
; 11 (0Bh) - FAILURE
|
||||||
|
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (0Dh) - RESERVED
|
||||||
|
|
||||||
|
LD_DSK EQU 16
|
||||||
|
|
||||||
|
IDE0 EQU #0C1C0
|
||||||
|
IDE1 EQU #0C1C8
|
||||||
|
PART EQU #C000
|
||||||
|
|
||||||
|
HDDRIVE
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JR Z,INIT_H ;#00
|
||||||
|
DEC C
|
||||||
|
JP Z,RESE_H ;#01
|
||||||
|
DEC C
|
||||||
|
JP Z,STAT_H ;#02
|
||||||
|
DEC C
|
||||||
|
JP Z,CHEK_H ;#03
|
||||||
|
DEC C
|
||||||
|
JP Z,GBPB_H ;#04
|
||||||
|
DEC C
|
||||||
|
JP Z,READH ;#05
|
||||||
|
DEC C
|
||||||
|
JP Z,WRITEH ;#06
|
||||||
|
DEC C
|
||||||
|
JP Z,REMOV_H ;#07
|
||||||
|
DEC C
|
||||||
|
JP Z,IOCTL_H ;#08
|
||||||
|
DEC C
|
||||||
|
JR Z,RESR_H ;#09
|
||||||
|
DEC C
|
||||||
|
JP Z,LREADH ;#0A
|
||||||
|
DEC C
|
||||||
|
JP Z,LWRITEH ;#0Bh
|
||||||
|
|
||||||
|
RESR_H ; TODO: UNK?
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;Commands for restart #18
|
||||||
|
INIT_H
|
||||||
|
PUSH IY
|
||||||
|
LD HL,LOGDRV
|
||||||
|
LD (OFFSECT),HL
|
||||||
|
LD IX,DEVICE_CFG
|
||||||
|
LD C,#5F
|
||||||
|
RST #08
|
||||||
|
XOR A
|
||||||
|
LD B,(IX+2) ;HDD
|
||||||
|
CP B
|
||||||
|
JR Z,NO_HARDS
|
||||||
|
LD B,0x04 ; TODO: 1op
|
||||||
|
LD C,0x80
|
||||||
|
|
||||||
|
NX_DVCI
|
||||||
|
PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD (DRV),A
|
||||||
|
CALL PARTIT
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
DJNZ NX_DVCI
|
||||||
|
|
||||||
|
NO_HARDS
|
||||||
|
POP IY
|
||||||
|
LD HL,(OFFSECT)
|
||||||
|
LD DE,LOGDRV
|
||||||
|
XOR A
|
||||||
|
SBC HL,DE
|
||||||
|
RET Z
|
||||||
|
LD DE,LD_DSK
|
||||||
|
|
||||||
|
DRVCLC
|
||||||
|
INC A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,DRVCLC
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
LOGDRV DB 0 ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
SOFF DW 0,0 ;+01 LONG SECTOR OFFSET
|
||||||
|
NSECT DW 0,0 ;+05 LONG SIZE IN SECTORS
|
||||||
|
DS 183,0 ;+09 FREE
|
||||||
|
|
||||||
|
DEVICE_CFG EQU #4000
|
||||||
|
|
||||||
|
|
||||||
|
;+00 ;SECTORS PER TRACK
|
||||||
|
;+01 ;TRACKS PER CYLLINDER
|
||||||
|
;+02 ;RESERVED
|
||||||
|
;+03 ;HDD/DRIVE/LBA
|
||||||
|
;+04 ;SECTOR PER CYLINDER LOW
|
||||||
|
;+05 ;SECTOR PER CYLINDER HIGH
|
||||||
|
;+06 ;RESERVED
|
||||||
|
;+07 ;RESERVED
|
||||||
|
|
||||||
|
DRVHD_H EQU 0
|
||||||
|
SC_PT_H EQU 1
|
||||||
|
HEADS_H EQU 2
|
||||||
|
CYL_L_H EQU 3
|
||||||
|
CYL_H_H EQU 4
|
||||||
|
SPCLL_H EQU 5
|
||||||
|
SPCLH_H EQU 6
|
||||||
|
|
||||||
|
|
||||||
|
;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00
|
||||||
|
; DB #FF ;SECTORS PER TRACK ;01
|
||||||
|
; DB #FF ;HEADS ;02
|
||||||
|
; DB #FF ;CYLINDERS LOW ;03
|
||||||
|
; DB #FF ;CYLINDERS HIGH ;04
|
||||||
|
; DB #FF ;SECTOR PER CYLINDER LOW ;05
|
||||||
|
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
||||||
|
; DB #FF ;RESERVED ;07
|
||||||
|
|
||||||
|
;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00
|
||||||
|
; DB #FF ;SECTORS PER TRACK ;01
|
||||||
|
; DB #FF ;HEADS ;02
|
||||||
|
; DB #FF ;CYLINDERS LOW ;03
|
||||||
|
; DB #FF ;CYLINDERS HIGH ;04
|
||||||
|
; DB #FF ;SECTOR PER CYLINDER LOW ;05
|
||||||
|
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
||||||
|
; DB #FF ;RESERVED ;07
|
||||||
|
|
||||||
|
|
||||||
|
SELHDD
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
LD L,A
|
||||||
|
LD H,0x0
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,LOGDRV
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(HL) ; LOGDRV
|
||||||
|
INC HL
|
||||||
|
LD C,(HL) ; =>SOFF+0
|
||||||
|
INC HL
|
||||||
|
LD B,(HL) ; =>SOFF+1
|
||||||
|
INC HL
|
||||||
|
LD E,(HL) ; =>SOFF+2
|
||||||
|
INC HL
|
||||||
|
LD D,(HL) ; =>SOFF+3
|
||||||
|
POP HL
|
||||||
|
ADD IX,BC
|
||||||
|
ADC HL,DE
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; 00 - GET DEVICE PARAMETERS
|
||||||
|
; 01 - READ TRACK
|
||||||
|
; 02 - TEST TRACK
|
||||||
|
; 80 - SET DEVICE PARAMETERS
|
||||||
|
; 81 - WRITE TRACK
|
||||||
|
; 82 - FORMAT TRACK
|
||||||
|
|
||||||
|
IOCTL_H
|
||||||
|
BIT 7,B
|
||||||
|
JR NZ,O_CTL_H
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,HGETPRM
|
||||||
|
DEC B
|
||||||
|
JR Z,HRDTRAC
|
||||||
|
DEC B
|
||||||
|
JR Z,HCHTRAC
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
O_CTL_H
|
||||||
|
RES 7,B
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,HSETPRM
|
||||||
|
DEC B
|
||||||
|
JR Z,HWRTRAC
|
||||||
|
DEC B
|
||||||
|
JR Z,HFRTRAC
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HRDTRAC
|
||||||
|
LD A,11
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HCHTRAC
|
||||||
|
LD B,L
|
||||||
|
JP CHECKH
|
||||||
|
|
||||||
|
HSETPRM
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
HWRTRAC
|
||||||
|
LD A,11
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
HFRTRAC
|
||||||
|
LD A,11
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL:DE - SECTORS ON LOGICAL DISK
|
||||||
|
; HL' - CYLINDERS ON PHISICAL DISK
|
||||||
|
; DE' - HEADS ON PHISICAL DISK
|
||||||
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
|
; A - DRIVE/HEAD REGISTER PHISICAL DISK
|
||||||
|
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
|
; D5 - "1" RESERVED
|
||||||
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
|
; D7 - "1" RESERVED
|
||||||
|
|
||||||
|
HGETPRM
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,#55AA
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD L,A
|
||||||
|
LD A,11
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
PUSH IY
|
||||||
|
LD H,0
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD IY,LOGDRV
|
||||||
|
ADD IY,BC
|
||||||
|
LD E,(IY+5) ; Number of sectors 0
|
||||||
|
LD D,(IY+6) ; Number of sectors 1
|
||||||
|
LD L,(IY+7) ; Number of sectors 2
|
||||||
|
LD H,(IY+8) ; Number of sectors 3
|
||||||
|
|
||||||
|
LD A,(IY+0) ; drv
|
||||||
|
LD C,A
|
||||||
|
LD IY,IDE0
|
||||||
|
AND #0F
|
||||||
|
JR Z,GELH1
|
||||||
|
LD IY,IDE1
|
||||||
|
GELH1
|
||||||
|
IN A,(PAGE3)
|
||||||
|
PUSH AF
|
||||||
|
LD A,SYSPAGE
|
||||||
|
OUT (PAGE3),A
|
||||||
|
|
||||||
|
LD A,(IY+DRVHD_H) ;HDD/DRV
|
||||||
|
EXX
|
||||||
|
LD L,(IY+CYL_L_H) ;CYLINDER LOW
|
||||||
|
LD H,(IY+CYL_H_H) ;CYLINDER HIGH
|
||||||
|
LD E,(IY+HEADS_H) ;HEADS
|
||||||
|
LD D,0
|
||||||
|
LD B,D
|
||||||
|
LD C,(IY+SC_PT_H) ;SECTORS
|
||||||
|
EXX
|
||||||
|
EX AF,AF'
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD A,C
|
||||||
|
EX AF,AF'
|
||||||
|
POP IY
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
REMOV_H
|
||||||
|
LD A,1
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RESE_H
|
||||||
|
LD L,A
|
||||||
|
LD H,0x0
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,LOGDRV
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(HL)
|
||||||
|
RET
|
||||||
|
|
||||||
|
STAT_H
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHEK_H
|
||||||
|
LD A,#FF
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
|
||||||
|
GBPB_H
|
||||||
|
LD HL,0x0
|
||||||
|
LD IX,0x0
|
||||||
|
CALL SELHDD
|
||||||
|
LD BC,0x155
|
||||||
|
JP A0008
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A'- PAGE
|
||||||
|
|
||||||
|
;READ SECTOR
|
||||||
|
LREADH
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,0x52
|
||||||
|
JP A0008
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
; A'- PAGE
|
||||||
|
|
||||||
|
;WRITE SECTOR
|
||||||
|
LWRITEH
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,0x53
|
||||||
|
JP A0008
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
|
||||||
|
;WRITE SECTOR
|
||||||
|
WRITEH
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,0x56
|
||||||
|
JP A0008
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
|
||||||
|
;READ SECTOR
|
||||||
|
READH
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,0x55
|
||||||
|
JP A0008
|
||||||
|
|
||||||
|
;HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNTER
|
||||||
|
|
||||||
|
;CHECK SECTOR
|
||||||
|
CHECKH
|
||||||
|
CALL SELHDD
|
||||||
|
LD C,0x54
|
||||||
|
JP A0008
|
||||||
|
|
||||||
|
;-----------------
|
||||||
|
EASYDOS
|
||||||
|
MEDIDOS
|
||||||
|
HIGHDOS
|
||||||
|
LD E,(IY+08)
|
||||||
|
LD D,(IY+09)
|
||||||
|
LD L,(IY+10)
|
||||||
|
LD H,(IY+11)
|
||||||
|
LD IX,(CURSECL)
|
||||||
|
ADD IX,DE
|
||||||
|
LD DE,(CURSECH)
|
||||||
|
ADC HL,DE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD IX,(OFFSECT)
|
||||||
|
LD (IX+1),E ;BPB SECTOR
|
||||||
|
LD (IX+2),D
|
||||||
|
LD (IX+3),L
|
||||||
|
LD (IX+4),H
|
||||||
|
; LD DE,(CURSECL)
|
||||||
|
; LD HL,(CURSECH)
|
||||||
|
; LD (IX+1),E ;START DISK
|
||||||
|
; LD (IX+2),D
|
||||||
|
; LD (IX+3),L
|
||||||
|
; LD (IX+4),H
|
||||||
|
LD E,(IY+12)
|
||||||
|
LD D,(IY+13)
|
||||||
|
LD L,(IY+14)
|
||||||
|
LD H,(IY+15)
|
||||||
|
LD (IX+5),E ;SIZE DISK
|
||||||
|
LD (IX+6),D
|
||||||
|
LD (IX+7),L
|
||||||
|
LD (IX+8),H
|
||||||
|
LD A,(DRV)
|
||||||
|
LD (IX+0),A
|
||||||
|
LD DE,LD_DSK ; DSKITEM
|
||||||
|
ADD IX,DE
|
||||||
|
LD (OFFSECT),IX
|
||||||
|
NXTPART
|
||||||
|
LD DE,#10
|
||||||
|
ADD IY,DE
|
||||||
|
POP BC
|
||||||
|
DJNZ DOSAGA
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
PARTIT IN A,(PAGE3)
|
||||||
|
PUSH AF
|
||||||
|
LD A,#FF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
CALL PARTIT1
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
PARTIT1
|
||||||
|
LD IX,0
|
||||||
|
LD DE,0
|
||||||
|
LD (EXTDOSL),DE ;R01
|
||||||
|
LD (EXTDOSH),IX ;R01
|
||||||
|
PARTIT2
|
||||||
|
LD (CURSECL),DE
|
||||||
|
LD (CURSECH),IX
|
||||||
|
CALL LOADSEC
|
||||||
|
RET C
|
||||||
|
LD HL,(PART+510)
|
||||||
|
LD DE,#AA55
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,NODEFIN
|
||||||
|
LD IY,PART+#01BE
|
||||||
|
LD B,4
|
||||||
|
DOSAGA
|
||||||
|
PUSH BC
|
||||||
|
LD A,(IY+4)
|
||||||
|
CP 5
|
||||||
|
JR NZ,NOEXTDS
|
||||||
|
|
||||||
|
SUBLEV
|
||||||
|
PUSH IY
|
||||||
|
LD DE,(CURSECL)
|
||||||
|
LD IX,(CURSECH)
|
||||||
|
PUSH DE
|
||||||
|
PUSH IX
|
||||||
|
CALL EXTDOS
|
||||||
|
POP IX
|
||||||
|
POP DE
|
||||||
|
LD (CURSECL),DE
|
||||||
|
LD (CURSECH),IX
|
||||||
|
CALL LOADSEC
|
||||||
|
POP IY
|
||||||
|
JR NXTPART
|
||||||
|
|
||||||
|
NOEXTDS
|
||||||
|
CP 0xf
|
||||||
|
JR Z,SUBLEV
|
||||||
|
CP 0xe
|
||||||
|
JP Z,HIGHDOS
|
||||||
|
CP 0x6
|
||||||
|
JP Z,HIGHDOS
|
||||||
|
CP 0x4
|
||||||
|
JP Z,HIGHDOS
|
||||||
|
CP 0x1
|
||||||
|
JP Z,HIGHDOS
|
||||||
|
CP 0xb
|
||||||
|
JR Z,SUBLEV
|
||||||
|
CP 0x7
|
||||||
|
JR Z,SUBLEV
|
||||||
|
CP 0x82
|
||||||
|
JR Z,SUBLEV
|
||||||
|
CP 0x83
|
||||||
|
JR Z,SUBLEV
|
||||||
|
CP 0xeb
|
||||||
|
JR Z,SUBLEV
|
||||||
|
POP BC
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
NODEFIN
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
EXTDOS
|
||||||
|
LD HL,(EXTDOSL)
|
||||||
|
LD DE,(EXTDOSH)
|
||||||
|
LD A,L
|
||||||
|
OR H
|
||||||
|
OR E
|
||||||
|
OR D
|
||||||
|
LD E,(IY+08)
|
||||||
|
LD D,(IY+09)
|
||||||
|
LD L,(IY+10)
|
||||||
|
LD H,(IY+11)
|
||||||
|
JR NZ,EXTDOS2
|
||||||
|
LD (EXTDOSL),DE
|
||||||
|
LD (EXTDOSH),HL
|
||||||
|
LD IX,(EXTDOSH)
|
||||||
|
JP PARTIT2
|
||||||
|
|
||||||
|
EXTDOS2
|
||||||
|
LD IX,(EXTDOSL)
|
||||||
|
ADD IX,DE
|
||||||
|
PUSH IX
|
||||||
|
LD DE,(EXTDOSH)
|
||||||
|
ADC HL,DE
|
||||||
|
PUSH HL
|
||||||
|
POP IX
|
||||||
|
POP DE
|
||||||
|
JP PARTIT2
|
||||||
|
|
||||||
|
LOADSEC
|
||||||
|
PUSH IY
|
||||||
|
LD IX,(CURSECL)
|
||||||
|
LD HL,(CURSECH)
|
||||||
|
LD DE,PART
|
||||||
|
LD BC,#0155
|
||||||
|
LD A,(DRV)
|
||||||
|
RST #08
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
|
||||||
|
DRV DB #00 ;PHISICAL DRIVE NUMBER
|
||||||
|
|
||||||
|
CURSECL DW #0000 ;CURRENT SECTOR LOADED
|
||||||
|
CURSECH DW #0000
|
||||||
|
|
||||||
|
EXTDOSL DW #0000 ;CURRENT PARTITION TABLE
|
||||||
|
EXTDOSH DW #0000
|
||||||
|
|
||||||
|
OFFSECT DW LOGDRV ;POINTER ON CURRENT DISK RECORD
|
||||||
|
|
||||||
|
;=======================================================
|
||||||
930
DOS/intmouse.asm
Normal file
930
DOS/intmouse.asm
Normal file
@ -0,0 +1,930 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: INTMOUSE
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
|
||||||
|
CMOUSE EQU #1B
|
||||||
|
DMOUSE EQU #1A
|
||||||
|
Y_PORT EQU #89
|
||||||
|
VPAGE EQU #C9
|
||||||
|
|
||||||
|
; MOUSE SOFTWARE SPECIFICATION
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 00h (INITIALIZATION)
|
||||||
|
;
|
||||||
|
; RETURN: NC - MOUSE PRESENT
|
||||||
|
; C - MOUSE ABSENT
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 01h (SHOW MOUSE CURSOR)
|
||||||
|
;
|
||||||
|
; RETURN: NC - DONE
|
||||||
|
; C - MOUSE ON SCREEN
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 02h (HIDE MOUSE CURSOR)
|
||||||
|
;
|
||||||
|
; RETURN: NC - DONE
|
||||||
|
; C - NONE MOUSE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 03h (READ MOUSE STATE)
|
||||||
|
;
|
||||||
|
; RETURN: HL - X COORD
|
||||||
|
; DE - Y COORD
|
||||||
|
; A - BUTTONS D2-D0 (MIDDLE,RIGHT,LEFT)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 04h (GOTO MOUSE CURSOR)
|
||||||
|
;
|
||||||
|
; INPUT: HL - X COORD
|
||||||
|
; DE - Y COORD
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 05h (RESERVED)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 06h (RESERVED)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 07h (SET VERT. BOUNDS)
|
||||||
|
;
|
||||||
|
; INPUT: HL - Y MIN
|
||||||
|
; DE - Y MAX
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 08h (SET HORZ. BOUNDS)
|
||||||
|
;
|
||||||
|
; INPUT: HL - X MIN
|
||||||
|
; DE - X MAX
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 09h (LOAD CURSOR)
|
||||||
|
;
|
||||||
|
; INPUT: IX - CURSOR IMAGE
|
||||||
|
; H - HEIGHT CURSOR
|
||||||
|
; L - WIDTH CURSOR
|
||||||
|
; D - Y HOT SPOT
|
||||||
|
; E - X HOT SPOT
|
||||||
|
; B = 0
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 0Ah (SET CURSOR IN TEXT MODES)
|
||||||
|
;
|
||||||
|
; INPUT: H - AND SIMBOL MASK
|
||||||
|
; L - XOR SIMBOL MASK
|
||||||
|
; D - AND ATTRIBUT MASK
|
||||||
|
; E - XOR ATTRIBUT MASK
|
||||||
|
; B = 0
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 0Bh (RETURN CURSOR)
|
||||||
|
;
|
||||||
|
; INPUT: IX - CURSOR IMAGE BUFFER
|
||||||
|
; OUTPUT: H - HEIGHT CURSOR
|
||||||
|
; L - WIDTH CURSOR
|
||||||
|
; D - Y HOT SPOT
|
||||||
|
; E - X HOT SPOT
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 0Ch (RESERVED)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 0Dh (RESERVED)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 0Eh (GET SENSETIVE)
|
||||||
|
; OUTPUT: H - VERTICAL SENSETIVE
|
||||||
|
; L - HORIZONTAL SENSETIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 0Fh (SET SENSETIVE)
|
||||||
|
; INPUT: H - VERTICAL SENSETIVE
|
||||||
|
; L - HORIZONTAL SENSETIVE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 80h (MOUSE HARDWARE INTERRUPT)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 81h (CHANGE VIDEO MODE)
|
||||||
|
; INPUT: A - MODE
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 82h (RESERVED)
|
||||||
|
;---------------------------------------------
|
||||||
|
; COMMAND 83h (MOUSE REFRESH)
|
||||||
|
;---------------------------------------------
|
||||||
|
; ERRORS: 0 - NO ERROR
|
||||||
|
; 1 - COMMAND NOT PRESENT
|
||||||
|
; 2 - DEVICE ABSENT
|
||||||
|
; 3 - CURSOR ON (UZHE)
|
||||||
|
; 4 - CURSOR OFF (UZHE)
|
||||||
|
; 5 - CURSOR IMAGE VERY BIG
|
||||||
|
|
||||||
|
INTMOUS
|
||||||
|
BIT 7,C
|
||||||
|
JR NZ,EMOUSE
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JR Z,MS_INIT
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_SHOW
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_HIDD
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_READ
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_GOTO
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_RESR ; TODO: JR?
|
||||||
|
DEC C
|
||||||
|
JR Z,MS_RESR
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_VERT
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_HORZ
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_CURS
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_MASK
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_BCUR
|
||||||
|
DEC C
|
||||||
|
JR Z,MS_RESR
|
||||||
|
DEC C
|
||||||
|
JR Z,MS_RESR
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_GSEN
|
||||||
|
DEC C
|
||||||
|
JP Z,MS_SENT
|
||||||
|
|
||||||
|
MS_RESR
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
EMOUSE
|
||||||
|
RES 7,C
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,M_INT
|
||||||
|
DEC C
|
||||||
|
JP Z,M_MODE
|
||||||
|
DEC C
|
||||||
|
JR Z,M_RESR
|
||||||
|
DEC C
|
||||||
|
JP Z,M_REFR
|
||||||
|
M_RESR
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_INIT
|
||||||
|
DI
|
||||||
|
LD A,85
|
||||||
|
OUT (#10),A
|
||||||
|
LD A,45
|
||||||
|
OUT (#10),A
|
||||||
|
LD A,0
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,1
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,0
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,3
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,#41
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,4
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,#47
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,5
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
LD A,#E0
|
||||||
|
OUT (CMOUSE),A
|
||||||
|
EI
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_SHOW
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
EX AF,AF'
|
||||||
|
PUSH AF
|
||||||
|
LD HL,(PIX_X)
|
||||||
|
LD DE,(PIX_Y)
|
||||||
|
DI
|
||||||
|
CALL MOUSE
|
||||||
|
LD A,1
|
||||||
|
LD (REFRESH+1),A
|
||||||
|
EI
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_HIDD
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
EX AF,AF'
|
||||||
|
PUSH AF
|
||||||
|
DI
|
||||||
|
XOR A
|
||||||
|
LD (REFRESH+1),A
|
||||||
|
CALL RESTORE
|
||||||
|
EI
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_READ
|
||||||
|
LD HL,(PIX_X)
|
||||||
|
LD DE,(PIX_Y)
|
||||||
|
LD A,(MB)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_GOTO
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD (PIX_X),HL
|
||||||
|
LD (PIX_Y),DE
|
||||||
|
EX AF,AF'
|
||||||
|
PUSH AF
|
||||||
|
DI
|
||||||
|
CALL REFRESH
|
||||||
|
EI
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_CURS
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
LD A,L
|
||||||
|
LD (M_XSIZE),A
|
||||||
|
LD A,H
|
||||||
|
LD (M_YSIZE),A
|
||||||
|
LD C,E
|
||||||
|
LD B,0
|
||||||
|
LD (XHOT_SP),BC
|
||||||
|
LD C,D
|
||||||
|
LD (YHOT_SP),BC
|
||||||
|
EXX
|
||||||
|
LD A,(M_XSIZE)
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD A,(M_YSIZE)
|
||||||
|
LD L,B
|
||||||
|
LD H,B
|
||||||
|
|
||||||
|
MSCURS1
|
||||||
|
ADD HL,BC
|
||||||
|
DEC A
|
||||||
|
JR NZ,MSCURS1
|
||||||
|
PUSH HL
|
||||||
|
LD BC,MAXSIZM+1
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
CCF
|
||||||
|
EXX
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
LD A,5
|
||||||
|
JR C,NOLOADM
|
||||||
|
LD DE,M_IMAGE
|
||||||
|
DI
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
NOLOADM
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_BCUR
|
||||||
|
PUSH IX
|
||||||
|
EXX
|
||||||
|
LD A,(M_XSIZE)
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD A,(M_YSIZE)
|
||||||
|
LD L,B
|
||||||
|
LD H,B
|
||||||
|
|
||||||
|
MSBCUR1
|
||||||
|
ADD HL,BC
|
||||||
|
DEC A
|
||||||
|
JR NZ,MSBCUR1
|
||||||
|
PUSH HL
|
||||||
|
LD BC,MAXSIZM+1
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
CCF
|
||||||
|
EXX
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
LD A,5
|
||||||
|
JR C,NOSAVEM
|
||||||
|
LD DE,M_IMAGE
|
||||||
|
EX DE,HL
|
||||||
|
DI
|
||||||
|
LDIR
|
||||||
|
LD HL,(M_XSIZE)
|
||||||
|
LD BC,(XHOT_SP)
|
||||||
|
LD E,C
|
||||||
|
LD BC,(YHOT_SP)
|
||||||
|
LD D,C
|
||||||
|
XOR A
|
||||||
|
LD C,A
|
||||||
|
LD B,A
|
||||||
|
|
||||||
|
NOSAVEM
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_HORZ
|
||||||
|
LD (MIN_X),HL
|
||||||
|
LD (MAX_X),DE
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_VERT
|
||||||
|
LD (MIN_Y),HL
|
||||||
|
LD (MAX_Y),DE
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_MASK
|
||||||
|
LD (ANDXORS),HL
|
||||||
|
LD (ANDXORA),DE
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; H - VERTICAL SENSETIVE
|
||||||
|
; L - HORIZONTAL SENSETIVE
|
||||||
|
|
||||||
|
MS_SENT
|
||||||
|
LD (SENSEXY),HL
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MS_GSEN
|
||||||
|
LD HL,(SENSEXY)
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MOUSET
|
||||||
|
LD (REST_XT+1),HL
|
||||||
|
LD (REST_YT+1),DE
|
||||||
|
;Y
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
LD D,E
|
||||||
|
;X
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
LD E,L
|
||||||
|
|
||||||
|
IN A,(Y_PORT)
|
||||||
|
LD XH,A
|
||||||
|
IN A,(PAGE1)
|
||||||
|
LD XL,A
|
||||||
|
;
|
||||||
|
DI
|
||||||
|
;
|
||||||
|
LD A,#54
|
||||||
|
OUT (PAGE1),A
|
||||||
|
;
|
||||||
|
LD A,D
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A ;Y * 4
|
||||||
|
LD L,A
|
||||||
|
LD H,#43 ;+ #4300
|
||||||
|
;
|
||||||
|
IN A,(VPAGE)
|
||||||
|
RRCA
|
||||||
|
AND #80
|
||||||
|
OR #01
|
||||||
|
ADD A,E
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
INC L
|
||||||
|
LD A,(HL) ;SIMBOL
|
||||||
|
LD BC,(ANDXORS)
|
||||||
|
AND B
|
||||||
|
XOR C
|
||||||
|
LD (HL),A
|
||||||
|
INC L
|
||||||
|
LD A,(HL) ;ATTRIBUT
|
||||||
|
LD BC,(ANDXORA)
|
||||||
|
AND B
|
||||||
|
XOR C
|
||||||
|
LD (HL),A
|
||||||
|
;
|
||||||
|
LD A,XL
|
||||||
|
OUT (PAGE1),A
|
||||||
|
LD A,XH
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RESTORT
|
||||||
|
REST_XT
|
||||||
|
LD HL,#0000
|
||||||
|
REST_YT
|
||||||
|
LD DE,#0000
|
||||||
|
;Y
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
LD D,E
|
||||||
|
;X
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
LD E,L
|
||||||
|
|
||||||
|
IN A,(Y_PORT)
|
||||||
|
LD XH,A
|
||||||
|
IN A,(PAGE1)
|
||||||
|
LD XL,A
|
||||||
|
;
|
||||||
|
DI
|
||||||
|
;
|
||||||
|
LD A,#50
|
||||||
|
OUT (PAGE1),A
|
||||||
|
;
|
||||||
|
LD A,D
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A ;Y * 4
|
||||||
|
LD L,A
|
||||||
|
LD H,#43 ;+ #4300
|
||||||
|
;
|
||||||
|
IN A,(VPAGE)
|
||||||
|
RRCA
|
||||||
|
AND #80
|
||||||
|
OR #01
|
||||||
|
ADD A,E
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
INC L
|
||||||
|
LD A,(HL) ;SIMBOL
|
||||||
|
LD (HL),A
|
||||||
|
INC L
|
||||||
|
LD A,(HL) ;ATTRIBUT
|
||||||
|
LD (HL),A
|
||||||
|
;
|
||||||
|
LD A,XL
|
||||||
|
OUT (PAGE1),A
|
||||||
|
LD A,XH
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RESTORE
|
||||||
|
LD A,#00
|
||||||
|
BIT 7,A
|
||||||
|
JR Z,RESTORT
|
||||||
|
RESTORG
|
||||||
|
IN A,(PAGE3)
|
||||||
|
LD B,A
|
||||||
|
IN A,(Y_PORT)
|
||||||
|
LD C,A
|
||||||
|
PUSH BC
|
||||||
|
LD A,#50
|
||||||
|
OUT (PAGE3),A
|
||||||
|
REST_X LD HL,0
|
||||||
|
REST_Y LD DE,0
|
||||||
|
LD A,E
|
||||||
|
EX AF,AF'
|
||||||
|
REST_V LD A,#00
|
||||||
|
AND 1
|
||||||
|
LD DE,#C000 ;PAGE 0
|
||||||
|
JR Z,AA2
|
||||||
|
LD DE,#C000+320 ;PAGE 1
|
||||||
|
AA2 ADD HL,DE
|
||||||
|
REST_A LD A,0
|
||||||
|
LD XH,A
|
||||||
|
EX AF,AF'
|
||||||
|
REST_H
|
||||||
|
RS002 LD BC,10
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
EX AF,AF'
|
||||||
|
; PUSH HL
|
||||||
|
LD (PUSH_HL+1),HL
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
LDIR
|
||||||
|
PUSH_HL LD HL,#0000
|
||||||
|
; POP HL
|
||||||
|
EX AF,AF'
|
||||||
|
INC A
|
||||||
|
JR Z,RS003
|
||||||
|
DEC XH
|
||||||
|
JR NZ,RS002
|
||||||
|
RS003 POP BC
|
||||||
|
LD A,B
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD A,C
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;HL/DE - X/Y
|
||||||
|
|
||||||
|
MOUSE
|
||||||
|
LD A,(MODE)
|
||||||
|
LD (RESTORE+1),A
|
||||||
|
BIT 7,A
|
||||||
|
JP Z,MOUSET
|
||||||
|
MOUSEG
|
||||||
|
CP #82 ;640x256x16
|
||||||
|
JR NZ,NOFX
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
NOFX
|
||||||
|
LD IX,M_IMAGE
|
||||||
|
LD A,(M_XSIZE)
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD (REALXS),BC
|
||||||
|
LD (REST_H+1),BC
|
||||||
|
LD C,B
|
||||||
|
LD (SKIPXF),BC
|
||||||
|
LD A,(M_YSIZE)
|
||||||
|
LD (REST_A+1),A
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD (REALYS),BC
|
||||||
|
LD BC,(YHOT_SP)
|
||||||
|
LD A,E
|
||||||
|
SUB C
|
||||||
|
LD E,A
|
||||||
|
JR NC,GOODY
|
||||||
|
NEG
|
||||||
|
LD E,A
|
||||||
|
LD A,(M_XSIZE)
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD A,(M_YSIZE)
|
||||||
|
SUB E
|
||||||
|
SKIPMY
|
||||||
|
ADD IX,BC
|
||||||
|
DEC E
|
||||||
|
JR NZ,SKIPMY
|
||||||
|
LD C,A
|
||||||
|
LD (REALYS),BC
|
||||||
|
GOODY
|
||||||
|
LD BC,(XHOT_SP)
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,GOODX
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD HL,0
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD (SKIPXF),HL
|
||||||
|
LD A,(M_XSIZE)
|
||||||
|
SUB L
|
||||||
|
LD L,A
|
||||||
|
LD (REALXS),HL
|
||||||
|
LD HL,0
|
||||||
|
GOODX
|
||||||
|
LD (REST_X+1),HL
|
||||||
|
LD (REST_Y+1),DE
|
||||||
|
|
||||||
|
PUSH HL
|
||||||
|
IN A,(PAGE3)
|
||||||
|
LD H,A
|
||||||
|
IN A,(Y_PORT)
|
||||||
|
LD L,A
|
||||||
|
EX (SP),HL
|
||||||
|
LD A,#5C
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD A,E
|
||||||
|
EX AF,AF'
|
||||||
|
IN A,(VPAGE)
|
||||||
|
LD (REST_V+1),A
|
||||||
|
AND 1
|
||||||
|
LD DE,#C000 ;PAGE 0
|
||||||
|
JR Z,AA1
|
||||||
|
LD DE,#C000+320 ;PAGE 1
|
||||||
|
AA1 ADD HL,DE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
EX DE,HL ;HL - BITMAP
|
||||||
|
LD BC,(REALYS)
|
||||||
|
LD XH,C
|
||||||
|
EX AF,AF'
|
||||||
|
MS002 LD BC,(SKIPXF)
|
||||||
|
ADD HL,BC
|
||||||
|
LD BC,(REALXS)
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
EX AF,AF'
|
||||||
|
;USH DE
|
||||||
|
LD (PUSH_DE+1),DE
|
||||||
|
LDIR
|
||||||
|
PUSH_DE LD DE,#0000
|
||||||
|
; POP DE
|
||||||
|
EX AF,AF'
|
||||||
|
INC A
|
||||||
|
JR Z,MS003
|
||||||
|
DEC XH
|
||||||
|
JR NZ,MS002
|
||||||
|
MS003 POP BC
|
||||||
|
LD A,B
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD A,C
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
READ_M
|
||||||
|
LD A,(M_VAR_Y)
|
||||||
|
LD E,A
|
||||||
|
LD BC, 0xFFDF
|
||||||
|
IN A,(C)
|
||||||
|
LD (M_VAR_Y), A
|
||||||
|
LD (M_VAR_Y2), A
|
||||||
|
SUB E
|
||||||
|
NEG
|
||||||
|
LD D,A
|
||||||
|
LD A,(M_VAR_X)
|
||||||
|
LD E,A
|
||||||
|
LD B,0xfb
|
||||||
|
IN A,(C)
|
||||||
|
LD (M_VAR_X),A
|
||||||
|
LD (M_VAR_Y2),A
|
||||||
|
SUB E
|
||||||
|
LD E,A
|
||||||
|
LD B,0xfa
|
||||||
|
IN A,(C)
|
||||||
|
CPL
|
||||||
|
AND 0x7
|
||||||
|
LD (MB),A
|
||||||
|
LD A,(M_VAR_Y2)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CALL SENSE
|
||||||
|
LD (MX),DE
|
||||||
|
XOR A
|
||||||
|
LD (M_VAR_Y2),A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
M_VAR_Y2 DB 0x00
|
||||||
|
|
||||||
|
MCORECT
|
||||||
|
LD HL,(PIX_X)
|
||||||
|
LD DE,(MX)
|
||||||
|
LD D,0
|
||||||
|
BIT 7,E
|
||||||
|
JR NZ,DECX
|
||||||
|
ADD HL,DE
|
||||||
|
LD (PIX_X),HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(MAX_X)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,YCOO
|
||||||
|
LD HL,(MAX_X)
|
||||||
|
LD (PIX_X),HL
|
||||||
|
JR YCOO
|
||||||
|
|
||||||
|
DECX
|
||||||
|
LD A,E
|
||||||
|
NEG
|
||||||
|
LD E,A
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD (PIX_X),HL
|
||||||
|
JR C,YCOO2
|
||||||
|
LD DE,(MIN_X)
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,YCOO
|
||||||
|
YCOO2
|
||||||
|
LD HL,(MIN_X)
|
||||||
|
LD (PIX_X),HL
|
||||||
|
|
||||||
|
YCOO
|
||||||
|
LD HL,(PIX_Y)
|
||||||
|
LD DE,(MY)
|
||||||
|
LD D,0
|
||||||
|
BIT 7,E
|
||||||
|
JR NZ,DECY
|
||||||
|
ADD HL,DE
|
||||||
|
LD (PIX_Y),HL
|
||||||
|
EX DE,HL
|
||||||
|
|
||||||
|
LD HL,(MAX_Y)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
RET NC
|
||||||
|
LD HL,(MAX_Y)
|
||||||
|
LD (PIX_Y),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
DECY
|
||||||
|
LD A,E
|
||||||
|
NEG
|
||||||
|
LD E,A
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD (PIX_Y),HL
|
||||||
|
JR C,XCOO
|
||||||
|
LD DE,(MIN_Y)
|
||||||
|
SBC HL,DE
|
||||||
|
RET NC
|
||||||
|
XCOO
|
||||||
|
LD HL,(MIN_Y)
|
||||||
|
LD (PIX_Y),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
SENSE
|
||||||
|
LD HL,(SENSEXY)
|
||||||
|
LD A,L
|
||||||
|
OR L
|
||||||
|
RET Z
|
||||||
|
DEC A
|
||||||
|
RET Z
|
||||||
|
LD A,E
|
||||||
|
BIT 7,A
|
||||||
|
LD B,#FF
|
||||||
|
JR Z,SEN1
|
||||||
|
LD B,#7F
|
||||||
|
NEG
|
||||||
|
SEN1 INC B
|
||||||
|
SUB L
|
||||||
|
JR NC,SEN1
|
||||||
|
BIT 7,B
|
||||||
|
JR Z,SEN2
|
||||||
|
LD A,B
|
||||||
|
RES 7,A
|
||||||
|
NEG
|
||||||
|
LD B,A
|
||||||
|
SEN2 LD E,B
|
||||||
|
LD A,D
|
||||||
|
BIT 7,A
|
||||||
|
LD B,#FF
|
||||||
|
JR Z,SEN3
|
||||||
|
LD B,#7F
|
||||||
|
NEG
|
||||||
|
SEN3 INC B
|
||||||
|
SUB H
|
||||||
|
JR NC,SEN3
|
||||||
|
BIT 7,B
|
||||||
|
JR Z,SEN4
|
||||||
|
LD A,B
|
||||||
|
RES 7,A
|
||||||
|
NEG
|
||||||
|
LD B,A
|
||||||
|
SEN4 LD D,B
|
||||||
|
RET
|
||||||
|
|
||||||
|
M_MODE
|
||||||
|
LD (MODE),A
|
||||||
|
OR A
|
||||||
|
JR Z,UNKMODE
|
||||||
|
CP 1
|
||||||
|
JR Z,UNKMODE
|
||||||
|
CP 2
|
||||||
|
JR Z,S320256
|
||||||
|
CP 3
|
||||||
|
JR Z,S640256
|
||||||
|
BIT 7,A
|
||||||
|
JR Z,UNKMODE
|
||||||
|
CP 0x81
|
||||||
|
JR Z,S320256
|
||||||
|
CP 0x82
|
||||||
|
JR Z,S640256
|
||||||
|
|
||||||
|
UNKMODE
|
||||||
|
XOR A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
S320256
|
||||||
|
LD DE,319
|
||||||
|
SET_HV
|
||||||
|
LD HL,0x0
|
||||||
|
CALL MS_HORZ
|
||||||
|
LD DE,0xff
|
||||||
|
JP MS_VERT
|
||||||
|
|
||||||
|
S640256
|
||||||
|
LD DE,639
|
||||||
|
JR SET_HV
|
||||||
|
|
||||||
|
|
||||||
|
;Mouse Interrupt
|
||||||
|
M_INT IN A,(PAGE3)
|
||||||
|
LD B,A
|
||||||
|
IN A,(Y_PORT)
|
||||||
|
LD C,A
|
||||||
|
PUSH BC
|
||||||
|
CALL REFRESH ;Refresh mouse
|
||||||
|
CALL CONTROL
|
||||||
|
POP BC
|
||||||
|
LD A,B
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD A,C
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
M_REFR CALL CONTROL
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CONTROL CALL READ_M
|
||||||
|
RET NC
|
||||||
|
CALL MCORECT
|
||||||
|
LD A,#00
|
||||||
|
LD (REDY+1),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
REFRESH
|
||||||
|
LD A,#00
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
|
||||||
|
REDY
|
||||||
|
LD A,#00
|
||||||
|
CALL RESTORE
|
||||||
|
LD HL,(PIX_X)
|
||||||
|
LD DE,(PIX_Y)
|
||||||
|
CALL MOUSE
|
||||||
|
LD A,#FF
|
||||||
|
LD (REDY+1),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MODE DB #03
|
||||||
|
|
||||||
|
PIX_X DW 160
|
||||||
|
PIX_Y DW 128
|
||||||
|
|
||||||
|
MX DB #00
|
||||||
|
MY DB #00
|
||||||
|
MB DB #00
|
||||||
|
MB_OLD DB #00
|
||||||
|
|
||||||
|
M_VAR_X DB 0
|
||||||
|
M_VAR_Y DB 0
|
||||||
|
|
||||||
|
MIN_X DW 0
|
||||||
|
MAX_X DW 319
|
||||||
|
MIN_Y DW 0
|
||||||
|
MAX_Y DW 255
|
||||||
|
SENSEXY
|
||||||
|
SENSE_X DB 0
|
||||||
|
SENSE_Y DB 0
|
||||||
|
|
||||||
|
XHOT_SP DW 0
|
||||||
|
YHOT_SP DW 0
|
||||||
|
|
||||||
|
ANDXORS DW #FF00
|
||||||
|
ANDXORA DW #FF77
|
||||||
|
|
||||||
|
M_XSIZE DB 10
|
||||||
|
M_YSIZE DB 14
|
||||||
|
SKIPXF DW 0
|
||||||
|
REALXS DW 0
|
||||||
|
REALYS DW 0
|
||||||
|
|
||||||
|
X EQU #00
|
||||||
|
W EQU #FE
|
||||||
|
N EQU #FF
|
||||||
|
|
||||||
|
M_IMAGE
|
||||||
|
MS_BMP DB X,X,N,N,N,N,N,N,N,N
|
||||||
|
DB X,W,X,N,N,N,N,N,N,N
|
||||||
|
DB X,W,W,X,N,N,N,N,N,N
|
||||||
|
DB X,W,W,W,X,N,N,N,N,N
|
||||||
|
DB X,W,W,W,W,X,N,N,N,N
|
||||||
|
DB X,W,W,W,W,W,X,N,N,N
|
||||||
|
DB X,W,W,W,W,W,W,X,N,N
|
||||||
|
DB X,W,W,W,W,X,X,X,X,N
|
||||||
|
DB X,W,W,X,W,X,N,N,N,N
|
||||||
|
DB X,W,X,X,W,W,X,N,N,N
|
||||||
|
DB X,X,N,N,X,W,X,N,N,N
|
||||||
|
DB X,N,N,N,X,W,W,X,N,N
|
||||||
|
DB N,N,N,N,N,X,X,N,N,N
|
||||||
|
DB N,N,N,N,N,N,N,N,N,N
|
||||||
|
DS 116
|
||||||
|
MAXSIZM EQU $-M_IMAGE
|
||||||
|
|
||||||
|
;//MODULE: INTMOUSE
|
||||||
|
;[END]
|
||||||
|
|
||||||
891
DOS/keyinter.asm
Normal file
891
DOS/keyinter.asm
Normal file
@ -0,0 +1,891 @@
|
|||||||
|
|
||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: KEYINTER
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;------------------------------------------------
|
||||||
|
;R01 10-02-2003 DNS Add cursor visualisation
|
||||||
|
;
|
||||||
|
; DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
SBUF
|
||||||
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
EBUF
|
||||||
|
|
||||||
|
HEAD DB #00
|
||||||
|
HOST DB #00
|
||||||
|
|
||||||
|
K_LOCK EQU $-KEYFLAG
|
||||||
|
KEYFLAG DB #02 ;D0-Key Pressed
|
||||||
|
K_SHIFT EQU $-KEYFLAG
|
||||||
|
KEYCTRL DB #00
|
||||||
|
KEYFLG EQU $-KEYFLAG
|
||||||
|
DB #00
|
||||||
|
DB #03
|
||||||
|
UNICODE DW 0
|
||||||
|
|
||||||
|
LANG_L EQU 7
|
||||||
|
PAUSE_L EQU 6
|
||||||
|
RES5_L EQU 5
|
||||||
|
RES4_L EQU 4
|
||||||
|
NUM_L EQU 3
|
||||||
|
SCRL_L EQU 2
|
||||||
|
INS_L EQU 1
|
||||||
|
CAPS_L EQU 0
|
||||||
|
L_SHIFT EQU 7
|
||||||
|
R_SHIFT EQU 6
|
||||||
|
X_CTRL EQU 5
|
||||||
|
X_ALT EQU 4
|
||||||
|
L_CTRL EQU 3
|
||||||
|
L_ALT EQU 2
|
||||||
|
R_CTRL EQU 1
|
||||||
|
R_ALT EQU 0
|
||||||
|
|
||||||
|
FLAG_E0 EQU 7
|
||||||
|
FLAG_F0 EQU 6
|
||||||
|
FLAG_E1 EQU 5
|
||||||
|
FLAG_04 EQU 4
|
||||||
|
FLAG_03 EQU 3
|
||||||
|
FLAG_02 EQU 2
|
||||||
|
FLAG_01 EQU 1
|
||||||
|
FLAG_00 EQU 0
|
||||||
|
|
||||||
|
;SOUND_K EQU $-KEYFLAG
|
||||||
|
FLAG_S7 EQU 7
|
||||||
|
FLAG_S6 EQU 6
|
||||||
|
FLAG_S5 EQU 5
|
||||||
|
FLAG_S4 EQU 4
|
||||||
|
FLAG_S3 EQU 3
|
||||||
|
FLAG_S2 EQU 2
|
||||||
|
SF_ALT EQU 1
|
||||||
|
SF_BUFF EQU 0
|
||||||
|
|
||||||
|
; D15 - LShift
|
||||||
|
; D14 - RShift
|
||||||
|
; D13 - CTRL
|
||||||
|
; D12 - ALT
|
||||||
|
; D11 - LCTRL
|
||||||
|
; D10 - LALT
|
||||||
|
; D9 - RCTRL
|
||||||
|
; D8 - RALT
|
||||||
|
; D7 - Language Lock
|
||||||
|
; D6 - Reserved
|
||||||
|
; D5 - Reserved
|
||||||
|
; D4 - Reserved
|
||||||
|
; D3 - Num Lock
|
||||||
|
; D2 - Scroll Lock
|
||||||
|
; D1 - Insert Lock
|
||||||
|
; D0 - Caps Lock
|
||||||
|
|
||||||
|
; D15 - Keystroke
|
||||||
|
; D14
|
||||||
|
; D13 \
|
||||||
|
; D12 \
|
||||||
|
; D11 -- Position code (0...5Ah)
|
||||||
|
; D10 /
|
||||||
|
; D9 /
|
||||||
|
; D8
|
||||||
|
; D7..D0 - ASCII codeKEYFLAG
|
||||||
|
|
||||||
|
|
||||||
|
WAITKEY
|
||||||
|
LD HL,HOST
|
||||||
|
LD A,(HEAD)
|
||||||
|
CP (HL)
|
||||||
|
JR Z,WAITKEY
|
||||||
|
CALL GETSYM
|
||||||
|
LD A,E
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
SCANKEY
|
||||||
|
LD HL,HOST
|
||||||
|
LD A,(HEAD)
|
||||||
|
CP (HL)
|
||||||
|
RET Z
|
||||||
|
CALL GETSYM
|
||||||
|
LD A,E
|
||||||
|
RET
|
||||||
|
|
||||||
|
; TODO FixIt!
|
||||||
|
ECHOKEY0
|
||||||
|
CALL ECHO_PREP_3
|
||||||
|
|
||||||
|
ECHOKEY
|
||||||
|
CALL SCANKEY
|
||||||
|
JR Z,ECHOKEY
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
PUSH AF
|
||||||
|
CALL ECHO_PREP
|
||||||
|
POP AF
|
||||||
|
OR A
|
||||||
|
CALL NZ,PUTCHAR
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
LD A,E
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CTRLKEY LD HL,HOST
|
||||||
|
LD A,(HEAD)
|
||||||
|
CP (HL)
|
||||||
|
LD BC,(KEYFLAG)
|
||||||
|
LD A,#00
|
||||||
|
RET Z
|
||||||
|
DEC A
|
||||||
|
RET
|
||||||
|
|
||||||
|
TESTKEY LD HL,HOST
|
||||||
|
LD A,(HEAD)
|
||||||
|
CP (HL)
|
||||||
|
RET Z
|
||||||
|
LD L,(HL)
|
||||||
|
LD H,4 ; SBUF/256
|
||||||
|
LD E,(HL)
|
||||||
|
INC L
|
||||||
|
LD D,(HL)
|
||||||
|
INC L
|
||||||
|
LD B,(HL)
|
||||||
|
INC L
|
||||||
|
LD C,(HL)
|
||||||
|
LD A,E
|
||||||
|
RET
|
||||||
|
|
||||||
|
K_CLEAR
|
||||||
|
LD A,(HOST)
|
||||||
|
LD (HEAD),A
|
||||||
|
LD A,#2F
|
||||||
|
CP B
|
||||||
|
JR C,K_C2
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
K_C2
|
||||||
|
LD A,#35
|
||||||
|
CP B
|
||||||
|
JR NC,K_C3
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
K_C3
|
||||||
|
LD C,B
|
||||||
|
RST #10
|
||||||
|
RET
|
||||||
|
|
||||||
|
PUTSYM
|
||||||
|
LD HL,HEAD
|
||||||
|
LD A,(HOST)
|
||||||
|
SUB 4
|
||||||
|
AND #3F
|
||||||
|
CP (HL)
|
||||||
|
JR Z,FULL_BF
|
||||||
|
LD A,(HL)
|
||||||
|
INC (HL)
|
||||||
|
INC (HL)
|
||||||
|
INC (HL)
|
||||||
|
INC (HL)
|
||||||
|
RES 6,(HL)
|
||||||
|
LD L,A
|
||||||
|
LD H,4 ; SBUF/256
|
||||||
|
LD (HL),E
|
||||||
|
INC L
|
||||||
|
LD (HL),D
|
||||||
|
INC L
|
||||||
|
LD (HL),B
|
||||||
|
INC L
|
||||||
|
LD (HL),C
|
||||||
|
RET
|
||||||
|
|
||||||
|
GETSYM
|
||||||
|
LD HL,HOST
|
||||||
|
LD A,(HEAD)
|
||||||
|
CP (HL)
|
||||||
|
RET Z
|
||||||
|
LD A,(HL)
|
||||||
|
INC (HL)
|
||||||
|
INC (HL)
|
||||||
|
INC (HL)
|
||||||
|
INC (HL)
|
||||||
|
RES 6,(HL)
|
||||||
|
LD L,A
|
||||||
|
LD H,4 ; SBUF/256
|
||||||
|
LD E,(HL)
|
||||||
|
INC L
|
||||||
|
LD D,(HL)
|
||||||
|
INC L
|
||||||
|
LD B,(HL)
|
||||||
|
INC L
|
||||||
|
LD C,(HL)
|
||||||
|
RET
|
||||||
|
|
||||||
|
FULL_BF EX AF,AF'
|
||||||
|
BIT SF_BUFF,(IX+SOUND_K)
|
||||||
|
JR Z,FBF
|
||||||
|
EXX
|
||||||
|
LD DE,230
|
||||||
|
LD HL,50
|
||||||
|
CALL BEEP
|
||||||
|
EXX
|
||||||
|
FBF EX AF,AF'
|
||||||
|
RET
|
||||||
|
|
||||||
|
E0_KEY SET FLAG_E0,(IX+KEYFLG)
|
||||||
|
JR RESCAN
|
||||||
|
|
||||||
|
F0_KEY SET FLAG_F0,(IX+KEYFLG)
|
||||||
|
JR RESCAN
|
||||||
|
|
||||||
|
E1_KEY SET FLAG_E1,(IX+KEYFLG)
|
||||||
|
JR RESCAN
|
||||||
|
|
||||||
|
KEYSCAN LD IX,KEYFLAG
|
||||||
|
|
||||||
|
RESCAN IN A,(COM_A)
|
||||||
|
BIT 0,A
|
||||||
|
RET Z
|
||||||
|
IN A,(DAT_A)
|
||||||
|
CP #F0
|
||||||
|
JR Z,F0_KEY
|
||||||
|
CP #E0
|
||||||
|
JR Z,E0_KEY
|
||||||
|
CP #E1
|
||||||
|
JR Z,E1_KEY
|
||||||
|
BIT FLAG_F0,(IX+KEYFLG)
|
||||||
|
JR NZ,UN_KEY
|
||||||
|
LD L,A
|
||||||
|
CALL XLAT
|
||||||
|
CALL SHIFTS
|
||||||
|
RES FLAG_E0,(IX+KEYFLG)
|
||||||
|
RES FLAG_E1,(IX+KEYFLG)
|
||||||
|
RET Z ;IT'S SHIFT KEY
|
||||||
|
|
||||||
|
CALL INPCODE ;L - AT POS. CODE
|
||||||
|
;
|
||||||
|
PUTCODE
|
||||||
|
LD HL,#1C00 ;Caps Lock
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,CAPS_X
|
||||||
|
LD HL,#B800 ;Ctrl + Space
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,RUS_X
|
||||||
|
LD HL,#5000 ;Insert
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,INS_X
|
||||||
|
LD HL,#4900 ;Num Lock
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,NUM_X
|
||||||
|
LD HL,#C900 ;Pause Lock
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,PAUSE_X
|
||||||
|
LD HL,#4800 ;Scroll Lock
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,SCL_X
|
||||||
|
LD HL,#CF00 ;Ctrl + Alt + Del
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
CALL Z,RST_X
|
||||||
|
LD BC,(KEYFLAG)
|
||||||
|
JP PUTSYM
|
||||||
|
|
||||||
|
UN_KEY
|
||||||
|
RES FLAG_F0,(IX+KEYFLG)
|
||||||
|
LD L,A
|
||||||
|
CALL XLAT
|
||||||
|
CALL UNSHIFT
|
||||||
|
RES FLAG_E0,(IX+KEYFLG)
|
||||||
|
LD H,0
|
||||||
|
LD (UNICODE),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
CAPS_X LD A,(IX+K_LOCK)
|
||||||
|
XOR #01
|
||||||
|
LD (IX+K_LOCK),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RUS_X BIT X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET Z
|
||||||
|
LD A,(IX+K_LOCK)
|
||||||
|
XOR #80
|
||||||
|
LD (IX+K_LOCK),A
|
||||||
|
BIT SF_ALT,(IX+SOUND_K)
|
||||||
|
RET Z
|
||||||
|
EXX
|
||||||
|
LD DE,190
|
||||||
|
LD HL,20
|
||||||
|
CALL BEEP
|
||||||
|
EXX
|
||||||
|
RET
|
||||||
|
|
||||||
|
INS_X
|
||||||
|
LD A,(IX+K_LOCK)
|
||||||
|
XOR 0x2
|
||||||
|
LD (IX+K_LOCK),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
NUM_X
|
||||||
|
LD A,(IX+K_LOCK)
|
||||||
|
XOR 0x8
|
||||||
|
LD (IX+K_LOCK),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
PAUSE_X
|
||||||
|
BIT X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET Z
|
||||||
|
LD A,(IX+K_LOCK)
|
||||||
|
XOR 0x40
|
||||||
|
LD (IX+K_LOCK),A
|
||||||
|
BIT PAUSE_L,(IX+K_LOCK)
|
||||||
|
RET Z
|
||||||
|
EI
|
||||||
|
|
||||||
|
PAUSE_
|
||||||
|
HALT
|
||||||
|
BIT PAUSE_L,(IX+K_LOCK)
|
||||||
|
JR NZ,PAUSE_
|
||||||
|
DI
|
||||||
|
RET
|
||||||
|
|
||||||
|
SCL_X
|
||||||
|
LD A,(IX+K_LOCK)
|
||||||
|
XOR 0x04
|
||||||
|
LD (IX+K_LOCK),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RST_X
|
||||||
|
LD C,0x30
|
||||||
|
LD A,(IX+K_SHIFT)
|
||||||
|
AND C
|
||||||
|
CP C
|
||||||
|
RET NZ
|
||||||
|
XOR A
|
||||||
|
LD BC,0x1FD
|
||||||
|
RST 0x8
|
||||||
|
RET
|
||||||
|
|
||||||
|
UNSHIFT
|
||||||
|
LD A,L
|
||||||
|
CP #37 ; L ALT
|
||||||
|
JR NZ,USH1
|
||||||
|
RES L_ALT,(IX+K_SHIFT)
|
||||||
|
BIT R_ALT,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
RES X_ALT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
|
||||||
|
USH1
|
||||||
|
CP #39 ;R ALT
|
||||||
|
JR NZ,USH2
|
||||||
|
RES R_ALT,(IX+K_SHIFT)
|
||||||
|
BIT L_ALT,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
RES X_ALT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
USH2
|
||||||
|
CP #36 ;L CTRL
|
||||||
|
JR NZ,USH3
|
||||||
|
RES L_CTRL,(IX+K_SHIFT)
|
||||||
|
BIT R_CTRL,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
RES X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
USH3 CP #3A ;R CTRL
|
||||||
|
JR NZ,USH4
|
||||||
|
RES R_CTRL,(IX+K_SHIFT)
|
||||||
|
BIT L_CTRL,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
RES X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
USH4
|
||||||
|
CP #29 ;L SHIFT
|
||||||
|
JR NZ,USH5
|
||||||
|
RES L_SHIFT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
USH5
|
||||||
|
CP #34 ;R SHIFT
|
||||||
|
RET NZ
|
||||||
|
RES R_SHIFT,(IX+K_SHIFT)
|
||||||
|
USH6
|
||||||
|
RET
|
||||||
|
|
||||||
|
SHIFTS LD A,L
|
||||||
|
CP #37 ;L ALT
|
||||||
|
JR NZ,NSH1
|
||||||
|
SET L_ALT,(IX+K_SHIFT)
|
||||||
|
SET X_ALT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
NSH1 CP #39 ;R ALT
|
||||||
|
JR NZ,NSH2
|
||||||
|
SET R_ALT,(IX+K_SHIFT)
|
||||||
|
SET X_ALT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
NSH2 CP #36 ;L CTRL
|
||||||
|
JR NZ,NSH3
|
||||||
|
SET L_CTRL,(IX+K_SHIFT)
|
||||||
|
SET X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
NSH3
|
||||||
|
CP #3A ;R CTRL
|
||||||
|
JR NZ,NSH4
|
||||||
|
SET R_CTRL,(IX+K_SHIFT)
|
||||||
|
SET X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
NSH4
|
||||||
|
CP #29 ;L SHIFT
|
||||||
|
JR NZ,NSH5
|
||||||
|
SET L_SHIFT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
NSH5
|
||||||
|
CP 0x34 ;R SHIFT
|
||||||
|
RET NZ
|
||||||
|
SET R_SHIFT,(IX+K_SHIFT)
|
||||||
|
RET
|
||||||
|
|
||||||
|
; TODO: Strange part for keyboard inter =================
|
||||||
|
VER
|
||||||
|
DI
|
||||||
|
PUSH AF
|
||||||
|
CALL KINIT
|
||||||
|
CALL PRINT_INIT
|
||||||
|
LD C,0
|
||||||
|
RST #30
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,#81
|
||||||
|
RST #30
|
||||||
|
CALL INITDVC
|
||||||
|
EI
|
||||||
|
; Set new address fn. VERSION
|
||||||
|
LD DE,VERSION
|
||||||
|
LD HL,ADRST10
|
||||||
|
LD (HL),E
|
||||||
|
INC H
|
||||||
|
LD (HL),D
|
||||||
|
; Allocate memory
|
||||||
|
LD BC,0x3c2
|
||||||
|
RST 0x08
|
||||||
|
LD HL,BANKTBL
|
||||||
|
LD C,A
|
||||||
|
LD B,0x2
|
||||||
|
|
||||||
|
VERINIT
|
||||||
|
PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
LD A,C
|
||||||
|
LD C,0xc4
|
||||||
|
RST 0x08
|
||||||
|
POP HL
|
||||||
|
POP BC
|
||||||
|
JR C,VER_L2
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
DEC B
|
||||||
|
JP M,VER_L2
|
||||||
|
JR VERINIT
|
||||||
|
VER_L2
|
||||||
|
CALL VER_IN
|
||||||
|
LD B,0xff
|
||||||
|
CALL ENVIRON
|
||||||
|
LD A,0x1
|
||||||
|
CALL BANK
|
||||||
|
EX AF,AF'
|
||||||
|
LD HL,0xe000
|
||||||
|
PUSH HL
|
||||||
|
LD DE,0xe001
|
||||||
|
LD BC,0x262
|
||||||
|
XOR A
|
||||||
|
LD (HL),A
|
||||||
|
LDIR
|
||||||
|
LD BC,0x3d
|
||||||
|
POP HL
|
||||||
|
LD E,0xa
|
||||||
|
DEC A
|
||||||
|
VER_L3
|
||||||
|
LD (HL),A
|
||||||
|
ADD HL,BC
|
||||||
|
DEC E
|
||||||
|
JR NZ,VER_L3
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (0x00e2),A
|
||||||
|
POP AF
|
||||||
|
CALL SETBOOT
|
||||||
|
PUSH AF
|
||||||
|
CALL CHNDISK
|
||||||
|
POP AF
|
||||||
|
ADD A,0x41
|
||||||
|
LD (BOOT_LBL_DRV),A
|
||||||
|
LD HL,BOOT_LBL
|
||||||
|
LD B,0x2
|
||||||
|
CALL ENVIRON
|
||||||
|
JP VERSION
|
||||||
|
|
||||||
|
BOOT_LBL
|
||||||
|
DB 'BOOTDSK='
|
||||||
|
BOOT_LBL_DRV
|
||||||
|
DB 'A:'
|
||||||
|
DS 199, 0x00
|
||||||
|
|
||||||
|
; End of strange part ================
|
||||||
|
|
||||||
|
; ALIGN 256
|
||||||
|
; DEFS $/256+1*256-$,0
|
||||||
|
|
||||||
|
; 0 1 2 3 4 5 6 7 8 9 A B C D E
|
||||||
|
; F
|
||||||
|
XLAT_T
|
||||||
|
DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
|
||||||
|
DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10
|
||||||
|
DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20
|
||||||
|
DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30
|
||||||
|
DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40
|
||||||
|
DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60
|
||||||
|
DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70
|
||||||
|
DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80
|
||||||
|
|
||||||
|
XLAT BIT FLAG_E0,(IX+KEYFLG)
|
||||||
|
JR Z,W_O_E0
|
||||||
|
CP #11 ;Right ALT
|
||||||
|
LD L,#39
|
||||||
|
RET Z
|
||||||
|
CP #14 ;Right CTRL
|
||||||
|
LD L,#3A
|
||||||
|
RET Z
|
||||||
|
CP #5A ;enter
|
||||||
|
LD L,#4E
|
||||||
|
RET Z
|
||||||
|
CP #4A ; /
|
||||||
|
LD L,#4A
|
||||||
|
RET Z
|
||||||
|
CP #7C ; * - Print Screen
|
||||||
|
LD L,#47
|
||||||
|
RET Z
|
||||||
|
LD L,A
|
||||||
|
W_O_E0 LD H,XLAT_T/256
|
||||||
|
LD L,(HL)
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
;INPCODE BIT 1,(IX+1) ;00110000
|
||||||
|
; JR NZ,FN_KEY ;LRCAcaRP
|
||||||
|
|
||||||
|
INPCODE LD D,L
|
||||||
|
LD E,0
|
||||||
|
BIT LANG_L,(IX+K_LOCK)
|
||||||
|
JP NZ,RUSCODE
|
||||||
|
LD A,(IX+K_SHIFT)
|
||||||
|
AND #C0
|
||||||
|
JR NZ,SHIFT_L
|
||||||
|
SET 7,D
|
||||||
|
BIT X_ALT,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
BIT X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
LD D,L
|
||||||
|
BIT CAPS_L,(IX+K_LOCK)
|
||||||
|
LD BC,CAPSTAB
|
||||||
|
JR NZ,CONVER
|
||||||
|
LD BC,NORMTAB
|
||||||
|
CONVER LD H,0
|
||||||
|
ADD HL,BC
|
||||||
|
LD E,(HL)
|
||||||
|
RET
|
||||||
|
|
||||||
|
SHIFT_L LD BC,SHIFTAB
|
||||||
|
BIT CAPS_L,(IX+K_LOCK)
|
||||||
|
JR Z,CONVER5
|
||||||
|
LD BC,SHF2TAB
|
||||||
|
CONVER5 LD H,0
|
||||||
|
ADD HL,BC
|
||||||
|
LD E,(HL)
|
||||||
|
SET 7,D
|
||||||
|
RET
|
||||||
|
|
||||||
|
RUSCODE LD A,(IX+K_SHIFT)
|
||||||
|
AND #C0
|
||||||
|
JR NZ,SHIFT_R
|
||||||
|
SET 7,D
|
||||||
|
BIT X_ALT,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
BIT X_CTRL,(IX+K_SHIFT)
|
||||||
|
RET NZ
|
||||||
|
LD D,L
|
||||||
|
BIT CAPS_L,(IX+K_LOCK)
|
||||||
|
LD BC,CAPSRUS
|
||||||
|
JR NZ,CONVER2
|
||||||
|
LD BC,NORMRUS
|
||||||
|
CONVER2
|
||||||
|
LD H,0
|
||||||
|
ADD HL,BC
|
||||||
|
LD E,(HL)
|
||||||
|
RET
|
||||||
|
|
||||||
|
SHIFT_R LD BC,SHIFRUS
|
||||||
|
BIT CAPS_L,(IX+K_LOCK)
|
||||||
|
JR Z,CONVER4
|
||||||
|
LD BC,SHF2RUS
|
||||||
|
CONVER4
|
||||||
|
LD H,0
|
||||||
|
ADD HL,BC
|
||||||
|
LD E,(HL)
|
||||||
|
SET 7,D
|
||||||
|
RET
|
||||||
|
|
||||||
|
K_SETUP
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,KEYMAP
|
||||||
|
DEC B
|
||||||
|
JR Z,K_SND_R
|
||||||
|
DEC B
|
||||||
|
JR Z,K_SND_W
|
||||||
|
LD A,#0E
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
K_SND_R LD A,(SOUND_K)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
K_SND_W LD (SOUND_K),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
KEYMAP LD BC,ENDNORM-NORMTAB
|
||||||
|
BIT 7,A
|
||||||
|
JR NZ,READMAP
|
||||||
|
LD DE,NORMTAB
|
||||||
|
OR A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,SHIFTAB
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,CAPSTAB
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,SHF2TAB
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,NORMRUS
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,SHIFRUS
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,CAPSRUS
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
LD DE,SHF2RUS
|
||||||
|
DEC A
|
||||||
|
JR Z,LTAB
|
||||||
|
XOR A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
LTAB
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
READMAP
|
||||||
|
RES 7,A
|
||||||
|
LD DE,NORMTAB
|
||||||
|
OR A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,SHIFTAB
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,CAPSTAB
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,SHF2TAB
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,NORMRUS
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,SHIFRUS
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,CAPSRUS
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
LD DE,SHF2RUS
|
||||||
|
DEC A
|
||||||
|
JR Z,RTAB
|
||||||
|
XOR A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
RTAB
|
||||||
|
EX DE,HL
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; `
|
||||||
|
; 0
|
||||||
|
; Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Back
|
||||||
|
; 1 2 3 4 5 6 7 8 9 A B C D E
|
||||||
|
; Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
|
||||||
|
; F 10 11 12 13 14 15 16 17 18 19 1A 1B
|
||||||
|
; Cps,"A","S","D","F","G","H","J","K","L",";","'",Enter
|
||||||
|
; 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28
|
||||||
|
; LSh,"Z","X","C","V","B","N","M",",",".","/",RSh,#5C
|
||||||
|
; 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35
|
||||||
|
; LCl,LAt,SPC,Rat,RCl,F01,F02,F03,F04,F05,F06,F07,F08
|
||||||
|
; 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42
|
||||||
|
; F09,F10,F11,F12,prn,scr,num,"/","*","-","+",ent,Del
|
||||||
|
; 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
|
||||||
|
; Ins,End,Dwn,PgD,Lft,"5",Rgh,Hom,Upp,PgU
|
||||||
|
; 50 51 52 53 54 55 56 57 58 59
|
||||||
|
;
|
||||||
|
;================================
|
||||||
|
Esc EQU #1B
|
||||||
|
Bcs EQU #08
|
||||||
|
Tab EQU #09
|
||||||
|
Cps EQU #00
|
||||||
|
Spc EQU #20
|
||||||
|
Ent EQU #0D
|
||||||
|
|
||||||
|
;Standart ASCII tables
|
||||||
|
NORMTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||||
|
DB Tab,"q","w","e","r","t","y","u","i","o","p","[","]"
|
||||||
|
DB Cps,"a","s","d","f","g","h","j","k","l",";","'",Ent
|
||||||
|
DB #00,"z","x","c","v","b","n","m",#2C,".","/",#00,#5C
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
ENDNORM
|
||||||
|
|
||||||
|
SHIFTAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
|
||||||
|
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","{","}"
|
||||||
|
DB Cps,"A","S","D","F","G","H","J","K","L",":",#22,Ent
|
||||||
|
DB #00,"Z","X","C","V","B","N","M","<",">","?",#00,"|"
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
CAPSTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||||
|
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
|
||||||
|
DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent
|
||||||
|
DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
SHF2TAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
|
||||||
|
DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}"
|
||||||
|
DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent
|
||||||
|
DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|"
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
;Standart Russian tables
|
||||||
|
NORMRUS DB #F1,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||||
|
DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
|
||||||
|
DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
|
||||||
|
DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,".",#00,#5C
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
SHIFRUS DB #F0,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
|
||||||
|
DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
|
||||||
|
DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
|
||||||
|
DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,#2C,#00,"|"
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
CAPSRUS DB #F0,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||||
|
DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
|
||||||
|
DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
|
||||||
|
DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,".",#00,#5C
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
|
||||||
|
DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
|
||||||
|
DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
|
||||||
|
DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,#2C,#00,"|"
|
||||||
|
DB #00,#00,Spc,#00,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||||
|
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
;================================
|
||||||
|
|
||||||
|
BEEP LD A,#10
|
||||||
|
OUT (#FE),A
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
BPP DEC BC
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
JR NZ,BPP
|
||||||
|
LD A,#00
|
||||||
|
OUT (#FE),A
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
BPP2 DEC BC
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
JR NZ,BPP2
|
||||||
|
DEC HL
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,BEEP
|
||||||
|
RET
|
||||||
|
|
||||||
|
COM_A EQU #19
|
||||||
|
DAT_A EQU #18
|
||||||
|
|
||||||
|
KINIT
|
||||||
|
LD A,0x30
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x18
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x01
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x00
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x03
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0xC1
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x04
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x07
|
||||||
|
OUT (COM_A),A
|
||||||
|
LD A,0x05
|
||||||
|
OUT (COM_A),A
|
||||||
|
IF SPRINTER=97
|
||||||
|
LD A,0x60
|
||||||
|
ELSE
|
||||||
|
LD A,0x62
|
||||||
|
ENDIF
|
||||||
|
OUT (COM_A),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;//MODULE: KEYINTER
|
||||||
|
;[END]
|
||||||
|
|
||||||
12
DOS/known.bug
Normal file
12
DOS/known.bug
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
+ function WINCOPY & WINREST не запрещают прерывания перед вызовом BIOS (используется вывод стеком!).
|
||||||
|
|
||||||
|
- при выводе на консоль длинного текста, экран не скролируется. Проверять на достижение 80 позиции!
|
||||||
|
|
||||||
|
+ ошибка в функции SCROLL A=0.
|
||||||
|
|
||||||
|
+ ошибка при просмотре каталога в функциях установки атрибутов пропускаются системные файлы. п/п SEARCH MASK=#23
|
||||||
|
|
||||||
|
- игнорирование ошибок при записи системных областей FAT/DIR, невозможность отработать ошибку write-protect, так как она теряется при попытке записать измененный каталог на диск. Но возникает ошибка file not found так как сразо после создания система открывает файл.
|
||||||
|
|
||||||
|
- ошибка разбора допустимого имени файла, если оно состоит из "." так как подрузомевается пробелы точка пробелы.
|
||||||
|
|
||||||
443
DOS/ram_drv0.asm
Normal file
443
DOS/ram_drv0.asm
Normal file
@ -0,0 +1,443 @@
|
|||||||
|
|
||||||
|
; Disk Driver Specification ver. 2.20
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Initialization
|
||||||
|
;
|
||||||
|
;Function : Initialization device(s)
|
||||||
|
;
|
||||||
|
;Input : C = 00h
|
||||||
|
; IX - Environment
|
||||||
|
;Output : A = Amount drive support
|
||||||
|
; HL = Size driver
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Open
|
||||||
|
;
|
||||||
|
;Function : Open disk
|
||||||
|
;
|
||||||
|
;Input : C = 01h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Close
|
||||||
|
;
|
||||||
|
;Function : Close disk
|
||||||
|
;
|
||||||
|
;Input : C = 02h
|
||||||
|
; A - Drive
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Media check
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 03h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h disk no changed
|
||||||
|
; A = 0FFh disk changed
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Get BPB
|
||||||
|
;
|
||||||
|
;Function : Get Block Parameters BIOS
|
||||||
|
;
|
||||||
|
;Input : C = 04h
|
||||||
|
; DE - Address
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Input
|
||||||
|
;
|
||||||
|
;Function : Input from disk
|
||||||
|
;
|
||||||
|
;Input : C = 05h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Output
|
||||||
|
;
|
||||||
|
;Function : Output to disk
|
||||||
|
;
|
||||||
|
;Input : C = 06h
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
;Output : None
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Removable
|
||||||
|
;
|
||||||
|
;Function : Checking change line
|
||||||
|
;
|
||||||
|
;Input : C = 07h
|
||||||
|
; A - Drive
|
||||||
|
;Output : A = 00h Removable
|
||||||
|
; A = FFh Nonremovable
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Generic IOCTL
|
||||||
|
;
|
||||||
|
;Function : Generic Input Output Control
|
||||||
|
;
|
||||||
|
;Input : C = 08h
|
||||||
|
; B - Subcommand
|
||||||
|
; DE = 55AAh Magic Number
|
||||||
|
; Subcommand
|
||||||
|
;----------------------
|
||||||
|
; 00h - Get Device Parameters
|
||||||
|
; 01h - Read track
|
||||||
|
; 02h - Test track
|
||||||
|
; 80h - Set Device Parameters
|
||||||
|
; 81h - Write track
|
||||||
|
; 82h - Format track
|
||||||
|
;Output :
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Read Long
|
||||||
|
;
|
||||||
|
;Function : Reading sectors from disk
|
||||||
|
;
|
||||||
|
;Input : C = 0Ah
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
; A'- Page
|
||||||
|
;Output : A'- Next Page
|
||||||
|
; HL:IX - Next Logical Block (sector)
|
||||||
|
; DE - Next Address
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;[]===========================================================[]
|
||||||
|
;Procedure : Write Long
|
||||||
|
;
|
||||||
|
;Function : Writing sectors to disk
|
||||||
|
;
|
||||||
|
;Input : C = 0Bh
|
||||||
|
; HL:IX - Logical Block (sector)
|
||||||
|
; DE - Address
|
||||||
|
; B - Sector count
|
||||||
|
; A'- Page
|
||||||
|
;Output : A'- Next Page
|
||||||
|
; HL:IX - Next Logical Block (sector)
|
||||||
|
; DE - Next Address
|
||||||
|
;
|
||||||
|
;[]===========================================================[]
|
||||||
|
;
|
||||||
|
; Errors:
|
||||||
|
; 0 (00h) - NO ERRORS
|
||||||
|
; 1 (01h) - BAD COMMAND
|
||||||
|
; 2 (02h) - BAD DRIVE NUMBER
|
||||||
|
; 3 (03h) - UNKNOW FORMAT
|
||||||
|
; 4 (04h) - NOT READY
|
||||||
|
; 5 (05h) - SEEK ERROR
|
||||||
|
; 6 (06h) - SECTOR NOT FOUND
|
||||||
|
; 7 (07h) - CRC ERROR
|
||||||
|
; 8 (08h) - WRITE PROTECT
|
||||||
|
; 9 (09h) - READ ERROR
|
||||||
|
; 10 (0Ah) - WRITE ERROR
|
||||||
|
; 11 (0Bh) - FAILURE
|
||||||
|
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||||
|
; 13 (0Dh) - RESERVED
|
||||||
|
|
||||||
|
RMDRIVE
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,INIT_RD
|
||||||
|
DEC C
|
||||||
|
JR Z,RESE_RD
|
||||||
|
DEC C
|
||||||
|
JR Z,STAT_RD
|
||||||
|
DEC C
|
||||||
|
JR Z,CHEK_RD
|
||||||
|
DEC C
|
||||||
|
JR Z,GBPB_RD
|
||||||
|
DEC C
|
||||||
|
JR Z,READR
|
||||||
|
DEC C
|
||||||
|
JR Z,WRITER
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
RESE_RD
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
STAT_RD
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHEK_RD
|
||||||
|
LD A,#FF
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;DE - ADDRESS
|
||||||
|
|
||||||
|
GBPB_RD
|
||||||
|
LD IX,0
|
||||||
|
LD HL,0
|
||||||
|
LD B,#01
|
||||||
|
;JP READR
|
||||||
|
|
||||||
|
;READ SECTORS
|
||||||
|
; HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
|
||||||
|
READR
|
||||||
|
PUSH BC
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
CALL RAMADDR
|
||||||
|
POP BC
|
||||||
|
LD IX,512
|
||||||
|
RAMRLOP
|
||||||
|
PUSH BC
|
||||||
|
PUSH IX
|
||||||
|
CALL LRDSEC
|
||||||
|
POP IX
|
||||||
|
POP BC
|
||||||
|
DJNZ RAMRLOP
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
POP BC
|
||||||
|
XOR A
|
||||||
|
CP B
|
||||||
|
LD C,B
|
||||||
|
LD B,A
|
||||||
|
JR Z,DYEP256
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
DYEP256 INC B
|
||||||
|
ADD IX,BC
|
||||||
|
LD B,C
|
||||||
|
ADC HL,BC
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
;WRITE SECTORS
|
||||||
|
; HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
|
||||||
|
WRITER PUSH BC
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
CALL RAMADDR
|
||||||
|
POP BC
|
||||||
|
LD IX,512
|
||||||
|
RAMWLOP
|
||||||
|
PUSH BC
|
||||||
|
PUSH IX
|
||||||
|
CALL WRDSEC
|
||||||
|
POP IX
|
||||||
|
POP BC
|
||||||
|
DJNZ RAMWLOP
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
POP BC
|
||||||
|
XOR A
|
||||||
|
CP B
|
||||||
|
LD C,B
|
||||||
|
LD B,A
|
||||||
|
JR Z,WYEP256
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
WYEP256 INC B
|
||||||
|
ADD IX,BC
|
||||||
|
LD B,C
|
||||||
|
ADC HL,BC
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
INIT_RD
|
||||||
|
LD A,0x20
|
||||||
|
LD (S_P_P),A
|
||||||
|
LD DE,RAMDTBL
|
||||||
|
LD BC,0xce
|
||||||
|
|
||||||
|
INIT_R0
|
||||||
|
PUSH BC
|
||||||
|
LD A,B
|
||||||
|
RST #08
|
||||||
|
OR A
|
||||||
|
JR Z,NORAMD
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
|
||||||
|
NORAMD
|
||||||
|
POP BC
|
||||||
|
INC B
|
||||||
|
LD A,#10
|
||||||
|
CP B
|
||||||
|
JR NZ,INIT_R0
|
||||||
|
LD HL,RAMDTBL
|
||||||
|
EX DE,HL
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD A,L
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
RAMDTBL DB #FF,#FF,#FF,#FF
|
||||||
|
DB #FF,#FF,#FF,#FF
|
||||||
|
DB #FF,#FF,#FF,#FF
|
||||||
|
DB #FF,#FF,#FF,#FF
|
||||||
|
|
||||||
|
; SECTOR / S_P_P = START PAGE
|
||||||
|
; INPUT : HL:IX -SECTOR
|
||||||
|
; OUTPUT: A':HL - ADDRESS
|
||||||
|
|
||||||
|
RAMADDR
|
||||||
|
LD BC,RAMDTBL
|
||||||
|
ADD A,C
|
||||||
|
LD C,A
|
||||||
|
LD A,0
|
||||||
|
ADC A,B
|
||||||
|
LD B,A
|
||||||
|
LD A,(BC)
|
||||||
|
EX AF,AF'
|
||||||
|
LD B,XH
|
||||||
|
LD C,XL
|
||||||
|
LD A,(S_P_P) ; (S_P_P) ;SECTORS PER P
|
||||||
|
;AGE
|
||||||
|
DIVR0
|
||||||
|
RRCA
|
||||||
|
JR C,DIVR1
|
||||||
|
RR H
|
||||||
|
RR L
|
||||||
|
RR B
|
||||||
|
RR C
|
||||||
|
JR DIVR0
|
||||||
|
DIVR1
|
||||||
|
LD B,C
|
||||||
|
LD C,#C4 ;GET FIRST PAGE
|
||||||
|
EX AF,AF'
|
||||||
|
RST #08
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(S_P_P)
|
||||||
|
LD C,A
|
||||||
|
DEC C
|
||||||
|
LD A,XL
|
||||||
|
AND C
|
||||||
|
INC A
|
||||||
|
LD HL,#C000
|
||||||
|
LD BC,512
|
||||||
|
SBC HL,BC
|
||||||
|
ADDLP
|
||||||
|
ADD HL,BC
|
||||||
|
DEC A
|
||||||
|
JR NZ,ADDLP
|
||||||
|
RET
|
||||||
|
|
||||||
|
S_P_P DB #00
|
||||||
|
|
||||||
|
; A':HL - ADDRESS SOURCE
|
||||||
|
; DE - ADDRESS DESTINATION
|
||||||
|
|
||||||
|
LRDSEC LD A,D
|
||||||
|
CP #A0
|
||||||
|
LD C,PAGE3
|
||||||
|
SET 6,H
|
||||||
|
JR C,RMDL02
|
||||||
|
LD C,PAGE1
|
||||||
|
RES 7,H
|
||||||
|
RMDL02
|
||||||
|
IN A,(C)
|
||||||
|
EX AF,AF'
|
||||||
|
DI
|
||||||
|
OUT (C),A
|
||||||
|
LD B,XH
|
||||||
|
LD XH,C
|
||||||
|
LD C,XL
|
||||||
|
LDIR
|
||||||
|
EX AF,AF'
|
||||||
|
LD C,XH
|
||||||
|
OUT (C),A
|
||||||
|
LD A,H
|
||||||
|
AND #7F
|
||||||
|
EI
|
||||||
|
RET NZ
|
||||||
|
LD C,PAGE3 ;GET NEXT PAGE
|
||||||
|
IN B,(C)
|
||||||
|
LD A,SYSPAGE
|
||||||
|
OUT (C),A
|
||||||
|
EX AF,AF'
|
||||||
|
LD XH,#C2
|
||||||
|
LD XL,A
|
||||||
|
LD A,(IX)
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (C),B
|
||||||
|
LD H,#C0
|
||||||
|
RET
|
||||||
|
|
||||||
|
; A':HL - ADDRESS SOURCE
|
||||||
|
; DE - ADDRESS DESTINATION
|
||||||
|
|
||||||
|
WRDSEC LD A,D
|
||||||
|
CP #A0
|
||||||
|
LD C,PAGE3
|
||||||
|
SET 6,H
|
||||||
|
JR C,WMDL02
|
||||||
|
LD C,PAGE1
|
||||||
|
RES 7,H
|
||||||
|
WMDL02 IN A,(C)
|
||||||
|
EX AF,AF'
|
||||||
|
DI
|
||||||
|
OUT (C),A
|
||||||
|
LD B,XH
|
||||||
|
LD XH,C
|
||||||
|
LD C,XL
|
||||||
|
EX DE,HL
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
EX AF,AF'
|
||||||
|
LD C,XH
|
||||||
|
OUT (C),A
|
||||||
|
LD A,H
|
||||||
|
AND #7F
|
||||||
|
EI
|
||||||
|
RET NZ
|
||||||
|
LD C,PAGE3 ;GET NEXT PAGE
|
||||||
|
IN B,(C)
|
||||||
|
LD A,SYSPAGE
|
||||||
|
OUT (C),A
|
||||||
|
EX AF,AF'
|
||||||
|
LD XH,#C2
|
||||||
|
LD XL,A
|
||||||
|
LD A,(IX)
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (C),B
|
||||||
|
LD H,#C0
|
||||||
|
RET
|
||||||
|
|
||||||
|
ENDDRVR
|
||||||
|
|
||||||
39
DOS/release.inc
Normal file
39
DOS/release.inc
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
;Release Types
|
||||||
|
|
||||||
|
RELEASE EQU 0
|
||||||
|
RC EQU 1
|
||||||
|
BETA EQU 2
|
||||||
|
DP EQU 3
|
||||||
|
|
||||||
|
OSTYPE EQU BETA
|
||||||
|
REVISION EQU 0
|
||||||
|
|
||||||
|
C_OSNAME macro
|
||||||
|
db "ESTEX",0
|
||||||
|
endm
|
||||||
|
|
||||||
|
|
||||||
|
C_OSRELEASE macro
|
||||||
|
db "Estex DSS",0
|
||||||
|
endm
|
||||||
|
|
||||||
|
; if OSTYPE=DP
|
||||||
|
; db "-DP",#30+REVISION,0
|
||||||
|
; endif
|
||||||
|
|
||||||
|
; if OSTYPE=BETA
|
||||||
|
; db "-BETA",#30+REVISION,0
|
||||||
|
; endif
|
||||||
|
|
||||||
|
; if OSTYPE=RC
|
||||||
|
; db "-RC",#30+REVISION,0
|
||||||
|
; endif
|
||||||
|
|
||||||
|
; if OSTYPE=RELEASE
|
||||||
|
; db "-RELEASE",0
|
||||||
|
; endif
|
||||||
|
|
||||||
|
; if OSTYPE != RELEASE & OSTYPE != RC & OSTYPE != BETA & OSTYPE != DP
|
||||||
|
; db "-UNKNOWN",0
|
||||||
|
; endif
|
||||||
687
DOS/video.asm
Normal file
687
DOS/video.asm
Normal file
@ -0,0 +1,687 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: VIDEO
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0)
|
||||||
|
;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
; CLEAR TEXT WINDOW
|
||||||
|
;=====================
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
; H - HEIGHT
|
||||||
|
; L - WIDTH
|
||||||
|
; B - COLOR
|
||||||
|
; A - ATTR
|
||||||
|
|
||||||
|
CLEAR LD C,#8D
|
||||||
|
RST #08
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
; PRINT NULL-TERMINATED CHARS STRING
|
||||||
|
;======================================
|
||||||
|
; HL - STRING POINTER
|
||||||
|
|
||||||
|
PCHARS
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CALL PUTCHAR
|
||||||
|
JR PCHARS
|
||||||
|
|
||||||
|
; PRINT CHAR
|
||||||
|
;==============
|
||||||
|
; A - CHAR
|
||||||
|
|
||||||
|
PUTCHAR
|
||||||
|
LD B,A
|
||||||
|
LD C,0x8e
|
||||||
|
RST 0x08
|
||||||
|
LD A,B
|
||||||
|
CP 0xd
|
||||||
|
JR Z,CR_
|
||||||
|
CP 0xa
|
||||||
|
JR Z,LF_
|
||||||
|
CP 0x9
|
||||||
|
JR Z,TB_
|
||||||
|
CP 0x8
|
||||||
|
JR Z,BK_
|
||||||
|
PUSH HL
|
||||||
|
LD BC,0x182
|
||||||
|
RST 0x08
|
||||||
|
PUSH AF
|
||||||
|
LD A,E
|
||||||
|
CP 0x4f
|
||||||
|
JP NZ,NLFF
|
||||||
|
LD A,D
|
||||||
|
CP 0x1f
|
||||||
|
JP NZ,NLFF
|
||||||
|
LD E,0x0
|
||||||
|
LD C,0x84
|
||||||
|
RST 0x08
|
||||||
|
CALL LFF
|
||||||
|
NLFF
|
||||||
|
POP AF
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
BK_
|
||||||
|
LD C,0x8e ;GET CURSOR
|
||||||
|
RST 0x08
|
||||||
|
XOR A
|
||||||
|
CP E
|
||||||
|
JP Z,LOCATE
|
||||||
|
DEC E
|
||||||
|
JP LOCATE
|
||||||
|
|
||||||
|
TB_
|
||||||
|
LD C,0x8e
|
||||||
|
RST 0x08
|
||||||
|
LD A,E
|
||||||
|
ADD A,0x8
|
||||||
|
AND 0x78
|
||||||
|
LD E,A
|
||||||
|
JP LOCATE
|
||||||
|
|
||||||
|
CR_
|
||||||
|
LD C,0x8e
|
||||||
|
RST 0x08
|
||||||
|
LD E,0x0
|
||||||
|
JP LOCATE
|
||||||
|
|
||||||
|
LF_
|
||||||
|
LD C,0x8e
|
||||||
|
RST 0x08
|
||||||
|
LD A,D
|
||||||
|
CP 0x1f
|
||||||
|
JR NC,LFF
|
||||||
|
INC D
|
||||||
|
CALL LOCATE
|
||||||
|
JR CR_
|
||||||
|
|
||||||
|
LFF
|
||||||
|
PUSH HL
|
||||||
|
LD BC,0x18a
|
||||||
|
LD DE,0x20
|
||||||
|
EI
|
||||||
|
HALT
|
||||||
|
DI
|
||||||
|
RST 0x08
|
||||||
|
LD DE,0x1f00
|
||||||
|
PUSH DE
|
||||||
|
CALL LOCATE
|
||||||
|
LD A,0x20
|
||||||
|
LD BC,0x5082
|
||||||
|
RST 0x08
|
||||||
|
EI
|
||||||
|
POP DE
|
||||||
|
CALL LOCATE
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; SET CURRENT CURSOR POSITION
|
||||||
|
;===============================
|
||||||
|
; D = Y
|
||||||
|
; E = X
|
||||||
|
|
||||||
|
LOCATE
|
||||||
|
LD C,#84
|
||||||
|
RST #08
|
||||||
|
RET
|
||||||
|
|
||||||
|
; GET CURRENT CURSOR POSITION
|
||||||
|
;===============================
|
||||||
|
;
|
||||||
|
|
||||||
|
CURSOR
|
||||||
|
LD C,#8E
|
||||||
|
RST #08
|
||||||
|
RET
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
|
||||||
|
; READ CHAR & ATTR FROM THE SCREEN
|
||||||
|
;=============================
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
|
||||||
|
RDCHAR
|
||||||
|
XOR A
|
||||||
|
LD C,#B4
|
||||||
|
RST #08
|
||||||
|
LD A,L
|
||||||
|
LD B,H
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; A - CHAR
|
||||||
|
; B - ATTR
|
||||||
|
|
||||||
|
; WRITE CHAR & ATTR TO THE SCREEN
|
||||||
|
;===================================
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
; A - CHAR
|
||||||
|
; B - ATTR
|
||||||
|
|
||||||
|
WRCHAR LD C,A
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
LD C,#B4
|
||||||
|
XOR A
|
||||||
|
RST #08
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD C,#B5
|
||||||
|
XOR A
|
||||||
|
RST #08
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; COPY WINDOW FROM THE SCREEN
|
||||||
|
;===============================
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
; H - HEIGHT
|
||||||
|
; L - WIDTH
|
||||||
|
; IX - ADDRESS
|
||||||
|
; B - PAGE, IF IX > 0C000H
|
||||||
|
|
||||||
|
WINCOPY
|
||||||
|
LD A,R ;R02
|
||||||
|
PUSH AF ;R02
|
||||||
|
XOR A
|
||||||
|
DI ;R02
|
||||||
|
LD C,#B2
|
||||||
|
RST #08
|
||||||
|
POP AF ;R02
|
||||||
|
SCF ;R02
|
||||||
|
CCF ;R02
|
||||||
|
RET PO ;R02
|
||||||
|
EI ;R02
|
||||||
|
RET
|
||||||
|
|
||||||
|
; RESTORE WINDOW TO THE SCREEN
|
||||||
|
;================================
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
; H - HEIGHT
|
||||||
|
; L - WIDTH
|
||||||
|
; IX - ADDRESS
|
||||||
|
; B - PAGE, IF IX > 0C000H
|
||||||
|
|
||||||
|
WINREST
|
||||||
|
LD A,R ;R02
|
||||||
|
PUSH AF ;R02
|
||||||
|
XOR A
|
||||||
|
DI ;R02
|
||||||
|
LD C,#B3
|
||||||
|
RST #08
|
||||||
|
POP AF ;R02
|
||||||
|
SCF ;R02
|
||||||
|
CCF ;R02
|
||||||
|
RET PO ;R02
|
||||||
|
EI ;R02
|
||||||
|
RET
|
||||||
|
|
||||||
|
; SCROLL WINDOWS
|
||||||
|
;==================
|
||||||
|
; D - Y
|
||||||
|
; E - X
|
||||||
|
; H - HEIGHT
|
||||||
|
; L - WIDTH
|
||||||
|
; B - SCROLL DIRECTION
|
||||||
|
; B = 1 - SCROLL UP
|
||||||
|
; B = 2 - SCROLL DOWN
|
||||||
|
; A = 0 - CLEAR LINE
|
||||||
|
SCROLL
|
||||||
|
DJNZ SCR_DW
|
||||||
|
LD B,A
|
||||||
|
LD C,H
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
INC D
|
||||||
|
DEC H
|
||||||
|
XOR A
|
||||||
|
LD C,0xb7
|
||||||
|
DI
|
||||||
|
RST 0x8
|
||||||
|
EI
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
XOR A
|
||||||
|
CP B
|
||||||
|
RET NZ
|
||||||
|
LD A,D
|
||||||
|
ADD A,H
|
||||||
|
DEC A
|
||||||
|
LD D,A
|
||||||
|
|
||||||
|
SCR1
|
||||||
|
PUSH DE
|
||||||
|
CALL LOCATE
|
||||||
|
LD A,0x20
|
||||||
|
LD B,L
|
||||||
|
LD C,0x82
|
||||||
|
RST 0x8
|
||||||
|
POP DE
|
||||||
|
CALL LOCATE
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
SCR_DW
|
||||||
|
DJNZ SCR_ERR
|
||||||
|
LD B,A
|
||||||
|
LD C,L
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
INC XH
|
||||||
|
DEC H
|
||||||
|
XOR A
|
||||||
|
LD C,0xb7
|
||||||
|
DI
|
||||||
|
RST 0x8
|
||||||
|
EI
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
XOR A
|
||||||
|
CP B
|
||||||
|
JR Z,SCR1
|
||||||
|
RET
|
||||||
|
|
||||||
|
SCR_ERR
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; SELECT SCREEN PAGE
|
||||||
|
;======================
|
||||||
|
; B - SCREEN PAGE
|
||||||
|
|
||||||
|
SELPAGE
|
||||||
|
PUSH BC
|
||||||
|
LD A,(VMODE)
|
||||||
|
BIT 7,A
|
||||||
|
JR NZ,SEL2
|
||||||
|
LD C,A
|
||||||
|
CALL TEXT_M
|
||||||
|
SEL2 POP BC
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (#C9),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; GET CURRENT VIDEO MODE
|
||||||
|
;==========================
|
||||||
|
;
|
||||||
|
GETVMOD
|
||||||
|
IN A,(#C9)
|
||||||
|
LD B,A
|
||||||
|
LD A,(VMODE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; A - MODE
|
||||||
|
; B - PAGE
|
||||||
|
|
||||||
|
; SET CURRENT VIDEO MODE
|
||||||
|
;==========================
|
||||||
|
; A - MODE
|
||||||
|
; B - PAGE
|
||||||
|
|
||||||
|
SETVMOD
|
||||||
|
BIT 7,A
|
||||||
|
LD C,A
|
||||||
|
JR NZ,GRAPH
|
||||||
|
|
||||||
|
TEXT_M
|
||||||
|
LD IX,BACKTXT
|
||||||
|
PUSH IX
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD (VVMODE),A
|
||||||
|
EX AF,AF'
|
||||||
|
INC A
|
||||||
|
DEC A
|
||||||
|
JR Z,NOMODE
|
||||||
|
DEC A
|
||||||
|
JR Z,NOMODE
|
||||||
|
DEC A
|
||||||
|
JR Z,T_40_32
|
||||||
|
DEC A
|
||||||
|
JR Z,T_80_32
|
||||||
|
NOMODE
|
||||||
|
POP IX
|
||||||
|
LD A,#30
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
GRAPH
|
||||||
|
CALL SAVETXT
|
||||||
|
AND #7F
|
||||||
|
JP Z,G320_16
|
||||||
|
DEC A
|
||||||
|
JP Z,G320_56
|
||||||
|
DEC A
|
||||||
|
JP Z,G640_16
|
||||||
|
DEC A
|
||||||
|
JP Z,G640_56
|
||||||
|
LD A,#30
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
T_40_32
|
||||||
|
PUSH BC
|
||||||
|
LD HL,TAB2
|
||||||
|
LD A,B
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
OR B
|
||||||
|
AND #11
|
||||||
|
XOR #10
|
||||||
|
LD E,A
|
||||||
|
CALL SETMODE
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD (VMODE),A
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (#C9),A
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,#81
|
||||||
|
RST #30
|
||||||
|
LD A,#C0
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
T_80_32
|
||||||
|
PUSH BC
|
||||||
|
LD HL,TAB1
|
||||||
|
LD A,B
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
OR B
|
||||||
|
AND #11
|
||||||
|
XOR #10
|
||||||
|
LD E,A
|
||||||
|
CALL SETMODE
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD (VMODE),A
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (#C9),A
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,#81
|
||||||
|
RST #30
|
||||||
|
LD A,#C0
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
G320_16
|
||||||
|
LD A,#30
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
G320_56
|
||||||
|
PUSH BC
|
||||||
|
LD HL,TAB4
|
||||||
|
LD E,#11
|
||||||
|
CALL SETMODE
|
||||||
|
LD HL,TAB8
|
||||||
|
LD E,#00
|
||||||
|
CALL SETMODE
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD (VMODE),A
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (#C9),A
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,#81
|
||||||
|
RST #30
|
||||||
|
LD A,#C0
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
G640_16 PUSH BC
|
||||||
|
LD HL,TAB3
|
||||||
|
LD E,#11
|
||||||
|
CALL SETMODE
|
||||||
|
LD HL,TAB7
|
||||||
|
LD E,#00
|
||||||
|
CALL SETMODE
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD (VMODE),A
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (#C9),A
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,#81
|
||||||
|
RST #30
|
||||||
|
LD A,#C0
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
G640_56 LD A,#30
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
VMODE DB #03
|
||||||
|
|
||||||
|
;02h - TEXT 40 x 32 (16 colors)
|
||||||
|
;03h - TEXT 80 x 32 (16 colors)
|
||||||
|
;80h - GRAF 320 x 256 (16 colors)
|
||||||
|
;81h - GRAF 320 x 256 (256 colors)
|
||||||
|
;82h - GRAF 640 x 256 (16 colors)
|
||||||
|
;83h - GRAF 640 x 256 (256 colors) UNUSED
|
||||||
|
|
||||||
|
SETMODE
|
||||||
|
PUSH DE
|
||||||
|
LD DE,0xFEE0
|
||||||
|
LD BC,0x0020
|
||||||
|
CALL MOVBIOS
|
||||||
|
POP DE
|
||||||
|
LD IX,0xFEE0
|
||||||
|
LD C,0xB0
|
||||||
|
RST 0x08
|
||||||
|
LD A,0xC0
|
||||||
|
OUT (Y_PORT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
MOVBIOS LD A,R
|
||||||
|
IN A,(PAGE3)
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,#FE
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LDIR
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (PAGE3),A
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
;IX+0 ;HORIZONTAL
|
||||||
|
;IX+1 ;VERTICAL
|
||||||
|
;IX+2 ;X - COORD
|
||||||
|
;IX+3 ;Y - COORD
|
||||||
|
;IX+4 ;MODE
|
||||||
|
;IX+5 ;EXT MODE
|
||||||
|
;IX+6 ;VIDEO RAM X OFFSET (SIGNPLACES)
|
||||||
|
;IX+7 ;VIDEO RAM Y OFFSET (SIGNPLACES)
|
||||||
|
|
||||||
|
;80x32
|
||||||
|
TAB1 DB #28,#20,#00,#00,#1B,#00,#00,#00
|
||||||
|
;40x32
|
||||||
|
TAB2 DB #28,#20,#00,#00,#3B,#00,#00,#00
|
||||||
|
;640x256 PAGE 0
|
||||||
|
TAB3 DB #28,#20,#00,#00,#00,#00,#00,#00
|
||||||
|
;320x256 PAGE 0
|
||||||
|
TAB4 DB #28,#20,#00,#00,#20,#00,#00,#00
|
||||||
|
;640x256 PAGE 1
|
||||||
|
TAB7 DB #28,#20,#00,#00,#40,#00,#28,#00
|
||||||
|
;320x256 PAGE 1
|
||||||
|
TAB8 DB #28,#20,#00,#00,#60,#00,#28,#00
|
||||||
|
|
||||||
|
SAVETXT
|
||||||
|
PUSH AF
|
||||||
|
LD A,(VMODE)
|
||||||
|
BIT 0x7,A
|
||||||
|
JR NZ,NOSAVET
|
||||||
|
SUB 0x2
|
||||||
|
JR C,NOSAVET
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
PUSH AF
|
||||||
|
LD C,0x8e
|
||||||
|
RST 0x08
|
||||||
|
|
||||||
|
LD (TCURS),DE
|
||||||
|
POP AF
|
||||||
|
LD IX,0xc000
|
||||||
|
LD DE,0x0
|
||||||
|
LD HL,0x2050
|
||||||
|
OR A
|
||||||
|
JR NZ,SVTEXT1
|
||||||
|
LD L,0x28
|
||||||
|
SVTEXT1
|
||||||
|
LD (SVHL1),HL
|
||||||
|
LD A,(BANKTBL+TXTPAGE) ;(BANKTBL_2)
|
||||||
|
LD B,A
|
||||||
|
XOR A
|
||||||
|
LD C,0xb2
|
||||||
|
DI
|
||||||
|
RST 0x08
|
||||||
|
EI
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
NOSAVET
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
BACKTXT
|
||||||
|
PUSH AF
|
||||||
|
VVMODE EQU $+1
|
||||||
|
LD A,0x0
|
||||||
|
RLCA
|
||||||
|
JR NC,NOBACKT
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
LD IX,0xc000
|
||||||
|
LD DE,0x0
|
||||||
|
SVHL1 EQU $+1
|
||||||
|
LD HL,0x2050
|
||||||
|
LD A,(BANKTBL+TXTPAGE)
|
||||||
|
LD B,A
|
||||||
|
XOR A
|
||||||
|
LD C,0xb3
|
||||||
|
DI
|
||||||
|
RST 0x8
|
||||||
|
EI
|
||||||
|
TCURS EQU $+1
|
||||||
|
LD DE,0x0
|
||||||
|
LD C,0x84
|
||||||
|
RST 0x8
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
NOBACKT
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; SEND A SYMBOL TO THE PRINTER
|
||||||
|
;==============================
|
||||||
|
; A - SYMBOL
|
||||||
|
;
|
||||||
|
LPT_A EQU #1B
|
||||||
|
LPT_B EQU #1C
|
||||||
|
|
||||||
|
PRINT
|
||||||
|
LD B,A
|
||||||
|
LD A,R
|
||||||
|
LD A,B
|
||||||
|
DI
|
||||||
|
PUSH AF
|
||||||
|
XOR A
|
||||||
|
OUT (LPT_A),A
|
||||||
|
LD A,#10
|
||||||
|
OUT (LPT_A),A
|
||||||
|
XOR A
|
||||||
|
OUT (LPT_A),A
|
||||||
|
IN A,(LPT_A)
|
||||||
|
LD C,A
|
||||||
|
; IN (1Bh): bit 5 - busy, Bit 3 - Ack
|
||||||
|
; IN (19h): bit 5 - Paper Enable, Bit 3 - Select
|
||||||
|
|
||||||
|
BIT 5,A
|
||||||
|
JR NZ,LPTBUSY
|
||||||
|
AND 0xd8
|
||||||
|
JR Z,LPTBUSY
|
||||||
|
LD A,B
|
||||||
|
OUT (LPT_B),A
|
||||||
|
POP AF
|
||||||
|
SCF
|
||||||
|
CCF
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
LPTBUSY
|
||||||
|
POP AF
|
||||||
|
LD A,C
|
||||||
|
SCF
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
; B - SYMBOL
|
||||||
|
; CF = 1 - PRINTER BUSY
|
||||||
|
|
||||||
|
PRINT_INIT
|
||||||
|
DI
|
||||||
|
LD A,#CF ; port 1F только чеpез LD BC,1F: Out (BC),reg !!!
|
||||||
|
LD BC,#001F
|
||||||
|
OUT (C),A
|
||||||
|
LD A,#63
|
||||||
|
OUT (C),A
|
||||||
|
LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1)
|
||||||
|
OUT (#1E),A
|
||||||
|
LD A,#0F ; Init printer port for Out
|
||||||
|
OUT (#1D),A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
;//MODULE: VIDEO
|
||||||
|
;[END]
|
||||||
Loading…
Reference in New Issue
Block a user