mirror of
https://github.com/romychs/SprinterFirmware.git
synced 2025-04-16 00:55:16 +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