From 5c9ca9b613be968d24460ae01613b57bfe0c8c8e Mon Sep 17 00:00:00 2001 From: "blueway.Softworks" <45116648+bluewaysw@users.noreply.github.com> Date: Sat, 25 Jun 2022 23:02:38 +0200 Subject: [PATCH 001/125] Update README.md Starting the repo to hold the MEGA65 version of GEOS for 8 bit computers. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bf368de4..b95b3efe 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -# GEOS Source Code +# GEOS Source Code (enhanced to support MEGA65 capabilities) by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*. +[MEGA65](https://www.mega65.org/) version initiated by "Falk Rehwagen". + ## Description [GEOS](https://en.wikipedia.org/wiki/GEOS_(8-bit_operating_system)) is a **graphical user interface for 6502-based computers**. In the 1980s, it was commercially available for the **Commodore 64**, 128 and Plus/4 as well as the Apple II. From 38471f42c745cf537ca13f80c3d6c131020b0064 Mon Sep 17 00:00:00 2001 From: "blueway.Softworks" <45116648+bluewaysw@users.noreply.github.com> Date: Sat, 25 Jun 2022 23:03:10 +0200 Subject: [PATCH 002/125] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b95b3efe..2dda473d 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*. -[MEGA65](https://www.mega65.org/) version initiated by "Falk Rehwagen". +[MEGA65](https://www.mega65.org/) version initiated and maintained by "Falk Rehwagen". ## Description From d4e75ff728ded0f4add0bcb5ff8fe3eae42758d9 Mon Sep 17 00:00:00 2001 From: "blueway.Softworks" <45116648+bluewaysw@users.noreply.github.com> Date: Sat, 25 Jun 2022 23:14:22 +0200 Subject: [PATCH 003/125] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2dda473d..b6700cb8 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*. -[MEGA65](https://www.mega65.org/) version initiated and maintained by "Falk Rehwagen". +[MEGA65](https://www.mega65.org/) version initiated and maintained by *Falk Rehwagen*. ## Description From 0eff27de5294d32aee5e7e2313cfa91389e294d7 Mon Sep 17 00:00:00 2001 From: "blueway.Softworks" <45116648+bluewaysw@users.noreply.github.com> Date: Sat, 25 Jun 2022 23:36:56 +0200 Subject: [PATCH 004/125] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b6700cb8..d781faf0 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*. -[MEGA65](https://www.mega65.org/) version initiated and maintained by *Falk Rehwagen*. +[MEGA65](https://www.mega65.org/) version initiated and maintained by *Falk Rehwagen*. (Source code release is in preparation and will become available here) ## Description From 9bf60732bc297c1db3077ee4c78247dde0daaad0 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 19 Aug 2017 18:23:33 +0200 Subject: [PATCH 005/125] Fixed side handling to match fixed on FPGA side. --- drv/drvf011.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drv/drvf011.s b/drv/drvf011.s index 80a567a6..1c47b77f 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -776,9 +776,9 @@ _SetOperation: CMP #$14 ; c set if >= 20 LDA #$00 ROL - EOR #1 + ;EOR #1 STA $D086 ; side - EOR #1 + ;EOR #1 BEQ @1 LDA #$14 @1: From 80610cca657b37ce7d8cce04651367d70fb3b0e3 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 2 Jul 2017 10:53:14 +0200 Subject: [PATCH 006/125] Initial version that builds from source code an is CONFIG 64 HD compatible. --- Makefile | 35 +- _newconf/__MACOSX/._newconf | Bin 0 -> 180 bytes .../__MACOSX/newconf/._configure.cvt.head | Bin 0 -> 180 bytes .../__MACOSX/newconf/._configure.cvt.record.2 | Bin 0 -> 180 bytes .../__MACOSX/newconf/._configure.cvt.record.3 | Bin 0 -> 180 bytes .../__MACOSX/newconf/._configure.cvt.record.4 | Bin 0 -> 180 bytes .../__MACOSX/newconf/._configure.cvt.record.5 | Bin 0 -> 180 bytes .../__MACOSX/newconf/._configure.cvt.record.6 | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._inc | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0,prg | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.asm | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.asm.modified | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.bin | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.find | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.info | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.labels | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.lst | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.o | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r0.prg | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r1.asm | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r1.bin | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r1.info | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r1.labels | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r2.asm | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r2.info | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r6.asm | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._r6.info | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/._tmp | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/inc/._c64kernal.inc | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/inc/._geossym.inc | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/inc/._labels.inc | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/inc/._r0.inc | Bin 0 -> 180 bytes _newconf/__MACOSX/newconf/tmp/._configure,prg | Bin 0 -> 180 bytes .../__MACOSX/newconf/tmp/._configure,prg.head | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.0 | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.1 | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.2 | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.3 | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.4 | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.5 | Bin 0 -> 180 bytes .../newconf/tmp/._configure,prg.record.6 | Bin 0 -> 180 bytes _newconf/newconf.zip | Bin 0 -> 208527 bytes _newconf/newconf/_r6.info | 26 + _newconf/newconf/configure.cvt.head | Bin 0 -> 508 bytes _newconf/newconf/configure.cvt.record.2 | Bin 0 -> 3340 bytes _newconf/newconf/configure.cvt.record.3 | Bin 0 -> 3420 bytes _newconf/newconf/configure.cvt.record.4 | Bin 0 -> 3081 bytes _newconf/newconf/configure.cvt.record.5 | Bin 0 -> 1793 bytes _newconf/newconf/configure.cvt.record.6 | Bin 0 -> 1835 bytes _newconf/newconf/inc/c64kernal.inc | 40 + _newconf/newconf/inc/geossym.inc | 314 +++ _newconf/newconf/inc/labels.inc | 496 ++++ _newconf/newconf/inc/r0.inc | 9 + _newconf/newconf/r0,prg | Bin 0 -> 4012 bytes _newconf/newconf/r0.asm | 1794 +++++++++++++ _newconf/newconf/r0.asm.modified | 2271 ++++++++++++++++ _newconf/newconf/r0.bin | Bin 0 -> 4012 bytes _newconf/newconf/r0.find | 10 + _newconf/newconf/r0.info | 41 + _newconf/newconf/r0.labels | 685 +++++ _newconf/newconf/r0.lst | 2370 +++++++++++++++++ _newconf/newconf/r0.o | Bin 0 -> 35375 bytes _newconf/newconf/r0.prg | Bin 0 -> 3873 bytes _newconf/newconf/r1.asm | 1600 +++++++++++ _newconf/newconf/r1.bin | Bin 0 -> 3369 bytes _newconf/newconf/r1.info | 36 + _newconf/newconf/r1.labels | 677 +++++ _newconf/newconf/r2.asm | 2081 +++++++++++++++ _newconf/newconf/r2.info | 25 + _newconf/newconf/r4.asm | 2268 ++++++++++++++++ _newconf/newconf/r4.info | 59 + _newconf/newconf/r4.labels | 59 + _newconf/newconf/r5.asm | 1590 +++++++++++ _newconf/newconf/r5.info | 59 + _newconf/newconf/r5.labels | 33 + _newconf/newconf/r6.asm | 1523 +++++++++++ _newconf/newconf/r6.info | 59 + _newconf/newconf/r6.labels | 33 + _newconf/newconf/tmp/configure,prg | Bin 0 -> 22662 bytes _newconf/newconf/tmp/configure,prg.head | Bin 0 -> 508 bytes _newconf/newconf/tmp/configure,prg.record.0 | Bin 0 -> 4012 bytes _newconf/newconf/tmp/configure,prg.record.1 | Bin 0 -> 3369 bytes _newconf/newconf/tmp/configure,prg.record.2 | Bin 0 -> 3340 bytes _newconf/newconf/tmp/configure,prg.record.3 | Bin 0 -> 3420 bytes _newconf/newconf/tmp/configure,prg.record.4 | Bin 0 -> 3081 bytes _newconf/newconf/tmp/configure,prg.record.5 | Bin 0 -> 1793 bytes _newconf/newconf/tmp/configure,prg.record.6 | Bin 0 -> 1835 bytes configure/configure.cfg | 83 + configure/configure.grc | 11 + configure/r0.s | 1821 +++++++++++++ configure/r1.s | 1633 ++++++++++++ configure/r2.s | 2 + configure/r3.s | 2 + configure/r4.s | 2 + configure/r5.s | 2 + configure/r6.s | 2 + drv/drv1541.s | 10 +- drv/drv1571.s | 36 +- drv/drv1571ram.cfg | 8 + drv/drv1571ram.s | 1131 ++++++++ drv/drv1581-21hd.cfg | 11 + drv/drv1581-21hd.s | 1859 +++++++++++++ drv/drv1581ram.cfg | 8 + drv/drv1581ram.s | 1063 ++++++++ inc/geosmac.inc | 5 + 105 files changed, 25860 insertions(+), 22 deletions(-) create mode 100644 _newconf/__MACOSX/._newconf create mode 100644 _newconf/__MACOSX/newconf/._configure.cvt.head create mode 100644 _newconf/__MACOSX/newconf/._configure.cvt.record.2 create mode 100644 _newconf/__MACOSX/newconf/._configure.cvt.record.3 create mode 100644 _newconf/__MACOSX/newconf/._configure.cvt.record.4 create mode 100644 _newconf/__MACOSX/newconf/._configure.cvt.record.5 create mode 100644 _newconf/__MACOSX/newconf/._configure.cvt.record.6 create mode 100644 _newconf/__MACOSX/newconf/._inc create mode 100644 _newconf/__MACOSX/newconf/._r0,prg create mode 100644 _newconf/__MACOSX/newconf/._r0.asm create mode 100644 _newconf/__MACOSX/newconf/._r0.asm.modified create mode 100644 _newconf/__MACOSX/newconf/._r0.bin create mode 100644 _newconf/__MACOSX/newconf/._r0.find create mode 100644 _newconf/__MACOSX/newconf/._r0.info create mode 100644 _newconf/__MACOSX/newconf/._r0.labels create mode 100644 _newconf/__MACOSX/newconf/._r0.lst create mode 100644 _newconf/__MACOSX/newconf/._r0.o create mode 100644 _newconf/__MACOSX/newconf/._r0.prg create mode 100644 _newconf/__MACOSX/newconf/._r1.asm create mode 100644 _newconf/__MACOSX/newconf/._r1.bin create mode 100644 _newconf/__MACOSX/newconf/._r1.info create mode 100644 _newconf/__MACOSX/newconf/._r1.labels create mode 100644 _newconf/__MACOSX/newconf/._r2.asm create mode 100644 _newconf/__MACOSX/newconf/._r2.info create mode 100644 _newconf/__MACOSX/newconf/._r6.asm create mode 100644 _newconf/__MACOSX/newconf/._r6.info create mode 100644 _newconf/__MACOSX/newconf/._tmp create mode 100644 _newconf/__MACOSX/newconf/inc/._c64kernal.inc create mode 100644 _newconf/__MACOSX/newconf/inc/._geossym.inc create mode 100644 _newconf/__MACOSX/newconf/inc/._labels.inc create mode 100644 _newconf/__MACOSX/newconf/inc/._r0.inc create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.head create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.0 create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.1 create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.2 create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.3 create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.4 create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.5 create mode 100644 _newconf/__MACOSX/newconf/tmp/._configure,prg.record.6 create mode 100644 _newconf/newconf.zip create mode 100644 _newconf/newconf/_r6.info create mode 100644 _newconf/newconf/configure.cvt.head create mode 100644 _newconf/newconf/configure.cvt.record.2 create mode 100644 _newconf/newconf/configure.cvt.record.3 create mode 100644 _newconf/newconf/configure.cvt.record.4 create mode 100644 _newconf/newconf/configure.cvt.record.5 create mode 100644 _newconf/newconf/configure.cvt.record.6 create mode 100644 _newconf/newconf/inc/c64kernal.inc create mode 100644 _newconf/newconf/inc/geossym.inc create mode 100644 _newconf/newconf/inc/labels.inc create mode 100644 _newconf/newconf/inc/r0.inc create mode 100644 _newconf/newconf/r0,prg create mode 100644 _newconf/newconf/r0.asm create mode 100644 _newconf/newconf/r0.asm.modified create mode 100644 _newconf/newconf/r0.bin create mode 100644 _newconf/newconf/r0.find create mode 100644 _newconf/newconf/r0.info create mode 100644 _newconf/newconf/r0.labels create mode 100644 _newconf/newconf/r0.lst create mode 100644 _newconf/newconf/r0.o create mode 100644 _newconf/newconf/r0.prg create mode 100644 _newconf/newconf/r1.asm create mode 100644 _newconf/newconf/r1.bin create mode 100644 _newconf/newconf/r1.info create mode 100644 _newconf/newconf/r1.labels create mode 100644 _newconf/newconf/r2.asm create mode 100644 _newconf/newconf/r2.info create mode 100644 _newconf/newconf/r4.asm create mode 100644 _newconf/newconf/r4.info create mode 100644 _newconf/newconf/r4.labels create mode 100644 _newconf/newconf/r5.asm create mode 100644 _newconf/newconf/r5.info create mode 100644 _newconf/newconf/r5.labels create mode 100644 _newconf/newconf/r6.asm create mode 100644 _newconf/newconf/r6.info create mode 100644 _newconf/newconf/r6.labels create mode 100644 _newconf/newconf/tmp/configure,prg create mode 100644 _newconf/newconf/tmp/configure,prg.head create mode 100644 _newconf/newconf/tmp/configure,prg.record.0 create mode 100644 _newconf/newconf/tmp/configure,prg.record.1 create mode 100644 _newconf/newconf/tmp/configure,prg.record.2 create mode 100644 _newconf/newconf/tmp/configure,prg.record.3 create mode 100644 _newconf/newconf/tmp/configure,prg.record.4 create mode 100644 _newconf/newconf/tmp/configure,prg.record.5 create mode 100644 _newconf/newconf/tmp/configure,prg.record.6 create mode 100644 configure/configure.cfg create mode 100644 configure/configure.grc create mode 100644 configure/r0.s create mode 100644 configure/r1.s create mode 100644 configure/r2.s create mode 100644 configure/r3.s create mode 100644 configure/r4.s create mode 100644 configure/r5.s create mode 100644 configure/r6.s create mode 100644 drv/drv1571ram.cfg create mode 100644 drv/drv1571ram.s create mode 100644 drv/drv1581-21hd.cfg create mode 100644 drv/drv1581-21hd.s create mode 100644 drv/drv1581ram.cfg create mode 100644 drv/drv1581ram.s diff --git a/Makefile b/Makefile index cbdc7514..b160b31c 100755 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ INPUT ?= joydrv AS = ca65 LD = ld65 +GRC = grc65 C1541 = c1541 PUCRUNCH = pucrunch EXOMIZER = exomizer @@ -234,6 +235,9 @@ DRIVER_SOURCES= \ drv/drv1541.bin \ drv/drv1571.bin \ drv/drv1581.bin \ + drv/drv1581-21hd.bin \ + drv/drv1571ram.bin \ + drv/drv1581ram.bin \ input/joydrv.bin \ input/amigamse.bin \ input/lightpen.bin \ @@ -276,6 +280,9 @@ ALL_BINS= \ $(BUILD_DIR)/drv/drv1541.bin \ $(BUILD_DIR)/drv/drv1571.bin \ $(BUILD_DIR)/drv/drv1581.bin \ + $(BUILD_DIR)/drv/drv1581-21hd.bin \ + $(BUILD_DIR)/drv/drv1571ram.bin \ + $(BUILD_DIR)/drv/drv1581ram.bin \ $(BUILD_DIR)/input/joydrv.bin \ $(BUILD_DIR)/input/amigamse.bin \ $(BUILD_DIR)/input/lightpen.bin \ @@ -322,20 +329,33 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg echo \*\*\* Created fresh $@.; \ fi; -$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg +$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/config.cvt @if [ -e $(D81_TEMPLATE) ]; then \ cp $(D81_TEMPLATE) $@; \ - echo delete geos $(GEOS_OUT) geoboot | $(C1541) $@ >/dev/null; \ + echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; - +$(BUILD_DIR)/configure/configure.o: + @mkdir -p `dirname $@` + $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure.grc + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ + +$(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ + $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ + $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o + $(LD) -C configure/configure.cfg -o $@ $(BUILD_DIR)/configure/configure.o -m $(BUILD_DIR)/configure.map $(BUILD_DIR)/configure/r0.o \ + $(BUILD_DIR)/configure/r2.o $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o \ + $(BUILD_DIR)/configure/r5.o $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ @@ -399,6 +419,15 @@ $(BUILD_DIR)/drv/drv1571.bin: $(BUILD_DIR)/drv/drv1571.o drv/drv1571.cfg $(DEPS) $(BUILD_DIR)/drv/drv1581.bin: $(BUILD_DIR)/drv/drv1581.o drv/drv1581.cfg $(DEPS) $(LD) -C drv/drv1581.cfg $(BUILD_DIR)/drv/drv1581.o -o $@ +$(BUILD_DIR)/drv/drv1581-21hd.bin: $(BUILD_DIR)/drv/drv1581-21hd.o drv/drv1581-21hd.cfg $(DEPS) + $(LD) -C drv/drv1581-21hd.cfg $(BUILD_DIR)/drv/drv1581-21hd.o -o $@ + +$(BUILD_DIR)/drv/drv1571ram.bin: $(BUILD_DIR)/drv/drv1571ram.o drv/drv1571ram.cfg $(DEPS) + $(LD) -C drv/drv1571ram.cfg $(BUILD_DIR)/drv/drv1571ram.o -o $@ + +$(BUILD_DIR)/drv/drv1581ram.bin: $(BUILD_DIR)/drv/drv1581ram.o drv/drv1581ram.cfg $(DEPS) + $(LD) -C drv/drv1581ram.cfg $(BUILD_DIR)/drv/drv1581ram.o -o $@ + $(BUILD_DIR)/drv/drvf011.bin: $(BUILD_DIR)/drv/drvf011.o drv/drvf011.cfg $(DEPS) $(LD) -C drv/drvf011.cfg $(BUILD_DIR)/drv/drvf011.o -o $@ diff --git a/_newconf/__MACOSX/._newconf b/_newconf/__MACOSX/._newconf new file mode 100644 index 0000000000000000000000000000000000000000..60c466c504c4bda262cc579173d75dacbee243d4 GIT binary patch literal 180 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S zBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aT5@O_*;OO2;dkJ5(HHS(lG;wWze)S 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

2y_Vb<3}1?+cKmA%o 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%0DT`b|;yLtGb{!zjcI*1#2+I!%=t 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 BY$E^w literal 0 HcmV?d00001 diff --git a/_newconf/newconf/configure.cvt.record.2 b/_newconf/newconf/configure.cvt.record.2 new file mode 100644 index 0000000000000000000000000000000000000000..9374a012ceaf9f9102726300f868349e476eb771 GIT binary patch literal 3340 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 literal 0 HcmV?d00001 diff --git a/_newconf/newconf/configure.cvt.record.5 b/_newconf/newconf/configure.cvt.record.5 new file mode 100644 index 0000000000000000000000000000000000000000..5496fffe7eb8c439e1cdbe91b9c0f5f1abd717d0 GIT binary patch literal 1793 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 literal 0 HcmV?d00001 diff --git a/_newconf/newconf/inc/c64kernal.inc b/_newconf/newconf/inc/c64kernal.inc new file mode 100644 index 00000000..8c487e7b --- /dev/null +++ b/_newconf/newconf/inc/c64kernal.inc @@ -0,0 +1,40 @@ + +CINT = $FF81 +IOINIT = $FF84 +RAMTAS = $FF87 +RESTOR = $FF8A +VECTOR = $FF8D +SETMSG = $FF90 +SECOND = $FF93 +TKSA = $FF96 +MEMTOP = $FF99 +MEMBOT = $FF9C +SCNKEY = $FF9F +SETTMO = $FFA2 +ACPTR = $FFA5 +CIOUT = $FFA8 +UNTLK = $FFAB +UNLSN = $FFAE +LISTEN = $FFB1 +TALK = $FFB4 +READST = $FFB7 +SETLFS = $FFBA +SETNAM = $FFBD +OPEN = $FFC0 +CLOSE = $FFC3 +CHKIN = $FFC6 +CKOUT = $FFC9 +CLRCH = $FFCC +BASIN = $FFCF +BSOUT = $FFD2 +LOAD = $FFD5 +SAVE = $FFD8 +SETTIM = $FFDB +RDTIM = $FFDE +STOP = $FFE1 +GETIN = $FFE4 +CLALL = $FFE7 +UDTIM = $FFEA +SCREEN = $FFED +IOBASE = $FFF3 + diff --git a/_newconf/newconf/inc/geossym.inc b/_newconf/newconf/inc/geossym.inc new file mode 100644 index 00000000..23806c27 --- /dev/null +++ b/_newconf/newconf/inc/geossym.inc @@ -0,0 +1,314 @@ + +;GEOS variable memory locations sorted by address +;reassembled by Maciej 'YTM/Elysium' Witkowiak +;4-2-99 + +;zpage = $0000 +; + +CPU_DDR = $00 +CPU_DATA = $01 +; +;r0 = $02 +r0L = $02 +r0H = $03 +;r1 = $04 +r1L = $04 +r1H = $05 +;r2 = $06 +r2L = $06 +r2H = $07 +;r3 = $08 +r3L = $08 +r3H = $09 +;r4 = $0a +r4L = $0a +r4H = $0b +;r5 = $0c +r5L = $0c +r5H = $0d +;r6 = $0e +r6L = $0e +r6H = $0f +;r7 = $10 +r7L = $10 +r7H = $11 +;r8 = $12 +r8L = $12 +r8H = $13 +;r9 = $14 +r9L = $14 +r9H = $15 +;r10 = $16 +r10L = $16 +r10H = $17 +;r11 = $18 +r11L = $18 +r11H = $19 +;r12 = $1a +r12L = $1a +r12H = $1b +;r13 = $1c +r13L = $1c +r13H = $1d +;r14 = $1e +r14L = $1e +r14H = $1f +;r15 = $20 +r15L = $20 +r15H = $21 +; +;a0 = $fb +a0L = $fb +a0H = $fc +;a1 = $fd +a1L = $fd +a1H = $fe +;a2 = $70 +a2L = $70 +a2H = $71 +;a3 = $72 +a3L = $72 +a3H = $73 +;a4 = $74 +a4L = $74 +a4H = $75 +;a5 = $76 +a5L = $76 +a5H = $77 +;a6 = $78 +a6L = $78 +a6H = $79 +;a7 = $7a +a7L = $7a +a7H = $7b +;a8 = $7c +a8L = $7c +a8H = $7d +;a9 = $7e +a9L = $7e +a9H = $7f + +; + +curPattern = $22 +string = $24 +baselineOffset = $26 +curSetWidth = $27 +curHeight = $29 +curIndexTable = $2a +cardDataPntr = $2c +currentMode = $2e +dispBufferOn = $2f +mouseOn = $30 +msePicPtr = $31 +windowTop = $33 +windowBottom = $34 +leftMargin = $35 +rightMargin = $37 +pressFlag = $39 +mouseXPos = $3a +mouseYPos = $3c +returnAddress = $3d +graphMode = $3f +TURBO_DD00 = $8e ; from 1541 turbo +TURBO_DD00_CPY = $8f ; from 1541 turbo +STATUS = $90 +curDevice = $ba +; +irqvec = $0314 +bkvec = $0316 +nmivec = $0318 +; +APP_RAM = $0400 +BACK_SCR_BASE = $6000 +PRINTBASE = $7900 +;OS_VARS = $8000 +; +diskBlkBuf = $8000 +fileHeader = $8100 +curDirHead = $8200 +fileTrScTab = $8300 +dirEntryBuf = $8400 +DrACurDkNm = $841e +DrBCurDkNm = $8430 +dataFileName = $8442 +dataDiskName = $8453 +PrntFilename = $8465 +PrntDiskName = $8476 +curDrive = $8489 +diskOpenFlg = $848a +isGEOS = $848b +interleave = $848c +NUMDRV = $848d +driveType = $848e +;_driveType = driveType-8 +turboFlags = $8492 +;_turboFlags = turboFlags-8 +curRecord = $8496 +usedRecords = $8497 +fileWritten = $8498 +fileSize = $8499 +appMain = $849b +intTopVector = $849d +intBotVector = $849f +mouseVector = $84a1 +keyVector = $84a3 +inputVector = $84a5 +mouseFaultVec = $84a7 +otherPressVec = $84a9 +StringFaultVec = $84ab +alarmTmtVector = $84ad +BRKVector = $84af +RecoverVector = $84b1 +selectionFlash = $84b3 +alphaFlag = $84b4 +iconSelFlg = $84b5 +faultData = $84b6 +menuNumber = $84b7 +mouseTop = $84b8 +mouseBottom = $84b9 +mouseLeft = $84ba +mouseRight = $84bc +stringX = $84be +stringY = $84c0 +mousePicData = $84c1 +maxMouseSpeed = $8501 +minMouseSpeed = $8502 +mouseAccel = $8503 +keyData = $8504 +mouseData = $8505 +inputData = $8506 +mouseSpeed = $8507 +random = $850a +saveFontTab = $850c +dblClickCount = $8515 +year = $8516 +month = $8517 +day = $8518 +hour = $8519 +minutes = $851a +seconds = $851b +alarmSetFlag = $851c +sysDBData = $851d +screencolors = $851e +dlgBoxRamBuf = $851f ; to $8697 +; +;$8698 - $8877 - various system data (keyboard queue, VLIR t&s, DBox, Menu, timers) +; +savedmoby2 = $88bb +scr80polar = $88bc +scr80colors = $88bd +vdcClrMode = $88be +driveData = $88bf +ramExpSize = $88c3 +sysRAMFlg = $88c4 +firstBoot = $88c5 +curType = $88c6 +ramBase = $88c7 +inputDevName = $88cb +memBase = $88cf ;??? +DrCCurDkNm = $88dc +DrDCurDkNm = $88ee +dir2Head = $8900 +; +;SPRITE_PICS = $8a00 +spr0pic = $8a00 +spr1pic = $8a40 +spr2pic = $8a80 +spr3pic = $8ac0 +spr4pic = $8b00 +spr5pic = $8b40 +spr6pic = $8b80 +spr7pic = $8bc0 +COLOR_MATRIX = $8c00 +; +obj0Pointer = $8ff8 +obj1Pointer = $8ff9 +obj2Pointer = $8ffa +obj3Pointer = $8ffb +obj4Pointer = $8ffc +obj5Pointer = $8ffd +obj6Pointer = $8ffe +obj7Pointer = $8fff +; +;DISK_BASE = $9000 +SCREEN_BASE = $a000 +OS_ROM = $c000 +;OS_JUMPTAB = $c100 +RAMC_BASE = $de00 +;RAMC_WINDOW = $df00 +EXP_BASE = $df00 +;MOUSE_BASE_128 = $fd00 +;MOUSE_JMP_128 = $fd00 +;END_MOUSE_128 = $fe80 +MOUSE_BASE = $fe80 +;MOUSE_JMP = $fe80 +config = $ff00 +;END_MOUSE = $fffa +NMI_VECTOR = $fffa +RESET_VECTOR = $fffc +IRQ_VECTOR = $fffe +; +vicbase = $d000 +sidbase = $d400 +mmu = $d500 +;VDC = $d600 +ctab = $d800 +cia1base = $dc00 +cia2base = $dd00 +; +;mob0xpos = $d000 +mob0ypos = $d001 +mob1xpos = $d002 +mob1ypos = $d003 +mob2xpos = $d004 +mob2ypos = $d005 +mob3xpos = $d006 +mob3ypos = $d007 +mob4xpos = $d008 +mob4ypos = $d009 +mob5xpos = $d00a +mob5ypos = $d00b +mob6xpos = $d00c +mob6ypos = $d00d +mob7xpos = $d00e +mob7ypos = $d00f +msbxpos = $d010 +grcntrl1 = $d011 +rasreg = $d012 +lpxpos = $d013 +lpypos = $d014 +mobenble = $d015 +grcntrl2 = $d016 +grmemptr = $d018 +grirq = $d019 +grirqen = $d01a +moby2 = $d017 +mobprior = $d01b +mobmcm = $d01c +mobx2 = $d01d +mobmobcol = $d01e +mobbakcol = $d01f +extclr = $d020 +bakclr0 = $d021 +bakclr1 = $d022 +bakclr2 = $d023 +bakclr3 = $d024 +mcmclr0 = $d025 +mcmclr1 = $d026 +mob0clr = $d027 +mob1clr = $d028 +mob2clr = $d029 +mob3clr = $d02a +mob4clr = $d02b +mob5clr = $d02c +mob6clr = $d02d +mob7clr = $d02e +keyreg = $d02f +clkreg = $d030 + +; +vdcreg = $d600 +vdcdata = $d601 +; diff --git a/_newconf/newconf/inc/labels.inc b/_newconf/newconf/inc/labels.inc new file mode 100644 index 00000000..dc8507e2 --- /dev/null +++ b/_newconf/newconf/inc/labels.inc @@ -0,0 +1,496 @@ +CPU_DDR = $00 +CPU_DATA = $01 +r0L = $02 +r0H = $03 +r1L = $04 +r1H = $05 +r2L = $06 +r2H = $07 +r3L = $08 +r3H = $09 +r4L = $0A +r4H = $0B +r5L = $0C +r5H = $0D +r6L = $0E +r6H = $0F +r7L = $10 +r7H = $11 +r8L = $12 +r8H = $13 +r9L = $14 +r9H = $15 +r10L = $16 +r10H = $17 +r11L = $18 +r11H = $19 +r12L = $1A +r12H = $1B +r13L = $1C +r13H = $1D +r14L = $1E +r14H = $1F +r15L = $20 +r15H = $21 +curPattern = $22 +string = $24 +baselineOffset = $26 +curSetWidth = $27 +curHeight = $29 +curIndexTable = $2A +cardDataPntr = $2C +currentMode = $2E +dispBufferOn = $2F +mouseOn = $30 +msePicPtr = $31 +windowTop = $33 +windowBottom = $34 +leftMargin = $35 +rightMargin = $37 +pressFlag = $39 +mouseXPos = $3A +mouseYPos = $3C +returnAddress = $3D +graphMode = $3F +a2L = $70 +a2H = $71 +a3L = $72 +a3H = $73 +a4L = $74 +a4H = $75 +a5L = $76 +a5H = $77 +a6L = $78 +a6H = $79 +a7L = $7A +a7H = $7B +a8L = $7C +a8H = $7D +a9L = $7E +a9H = $7F +TURBO_DD00 = $8E ; from 1541 turbo +TURBO_DD00_CPY = $8F ; from 1541 turbo +STATUS = $90 +curDevice = $BA +a0L = $FB +a0H = $FC +a1L = $FD +a1H = $FE +irqvec = $0314 +bkvec = $0316 +nmivec = $0318 +APP_RAM = $0400 + +BACK_SCR_BASE = $6000 +L6216 = $6216 +PRINTBASE = $7900 +diskBlkBuf = $8000 +fileHeader = $8100 +curDirHead = $8200 +fileTrScTab = $8300 +dirEntryBuf = $8400 +DrACurDkNm = $841E +DrBCurDkNm = $8430 +dataFileName = $8442 +dataDiskName = $8453 +PrntFilename = $8465 +PrntDiskName = $8476 +curDrive = $8489 +diskOpenFlg = $848A +isGEOS = $848B +interleave = $848C +NUMDRV = $848D +driveType = $848E +turboFlags = $8492 +curRecord = $8496 +usedRecords = $8497 +fileWritten = $8498 +fileSize = $8499 +appMain = $849B +intTopVector = $849D +intBotVector = $849F +mouseVector = $84A1 +keyVector = $84A3 +inputVector = $84A5 +mouseFaultVec = $84A7 +otherPressVec = $84A9 +StringFaultVec = $84AB +alarmTmtVector = $84AD +BRKVector = $84AF +RecoverVector = $84B1 +selectionFlash = $84B3 +alphaFlag = $84B4 +iconSelFlg = $84B5 +faultData = $84B6 +menuNumber = $84B7 +mouseTop = $84B8 +mouseBottom = $84B9 +mouseLeft = $84BA +mouseRight = $84BC +stringX = $84BE +stringY = $84C0 +mousePicData = $84C1 +maxMouseSpeed = $8501 +minMouseSpeed = $8502 +mouseAccel = $8503 +keyData = $8504 +mouseData = $8505 +inputData = $8506 +mouseSpeed = $8507 +random = $850A +saveFontTab = $850C +dblClickCount = $8515 +year = $8516 +month = $8517 +day = $8518 +hour = $8519 +minutes = $851A +seconds = $851B +alarmSetFlag = $851C +sysDBData = $851D +screencolors = $851E +dlgBoxRamBuf = $851F ; to $8697 +savedmoby2 = $88BB +scr80polar = $88BC +scr80colors = $88BD +vdcClrMode = $88BE +driveData = $88BF +ramExpSize = $88C3 +sysRAMFlg = $88C4 +firstBoot = $88C5 +curType = $88C6 +ramBase = $88C7 +inputDevName = $88CB +memBase = $88CF ; ??? +DrCCurDkNm = $88DC +DrDCurDkNm = $88EE +dir2Head = $8900 +spr0pic = $8A00 +spr1pic = $8A40 +spr2pic = $8A80 +spr3pic = $8AC0 +spr4pic = $8B00 +spr5pic = $8B40 +spr6pic = $8B80 +spr7pic = $8BC0 +COLOR_MATRIX = $8C00 +obj0Pointer = $8FF8 +obj1Pointer = $8FF9 +obj2Pointer = $8FFA +obj3Pointer = $8FFB +obj4Pointer = $8FFC +obj5Pointer = $8FFD +obj6Pointer = $8FFE +obj7Pointer = $8FFF +_InitForIO = $9000 +_DoneWithIO = $9002 +_ExitTurbo = $9004 +_PurgeTurbo = $9006 +_EnterTurbo = $9008 +_ChangeDiskDevice= $900A +_NewDisk = $900C +_ReadBlock = $900E +_WriteBlock = $9010 +_VerWriteBlock = $9012 +_OpenDisk = $9014 +_GetBlock = $9016 +_PutBlock = $9018 +_GetDirHead = $901A +_PutDirHead = $901C +_GetFreeDirBlk = $901E +_CalcBlksFree = $9020 +_FreeBlock = $9022 +_SetNextFree = $9024 +_FindBAMBit = $9026 +_NxtBlkAlloc = $9028 +_BlkAlloc = $902A +_ChkDkGEOS = $902C +_SetGEOSDisk = $902E +Get1stDirEntry = $9030 +GetNxtDirEntry = $9033 +GetBorder = $9036 +AddDirBlock = $9039 +ReadBuff = $903C +WriteBuff = $903F +AllocateBlock = $9048 +ReadLink = $904B +SCREEN_BASE = $A000 +OS_ROM = $C000 +bootName = $C006 +version = $C00F +nationality = $C010 +sysFlgCopy = $C012 +c128Flag = $C013 +dateCopy = $C018 +InterruptMain = $C100 +InitProcesses = $C103 +RestartProcess = $C106 +EnableProcess = $C109 +BlockProcess = $C10C +UnBlockProcess = $C10F +FreezeProcess = $C112 +UnFreezeProcess = $C115 +HorizontalLine = $C118 +InvertLine = $C11B +RecoverLine = $C11E +VerticalLine = $C121 +Rectangle = $C124 +FrameRectangle = $C127 +InvertRectangle = $C12A +RecoverRectangle= $C12D +DrawLine = $C130 +DrawPoint = $C133 +GraphicsString = $C136 +SetPattern = $C139 +GetScanLine = $C13C +TestPoint = $C13F +BitmapUp = $C142 +PutChar = $C145 +PutString = $C148 +UseSystemFont = $C14B +StartMouseMode = $C14E +DoMenu = $C151 +RecoverMenu = $C154 +RecoverAllMenus = $C157 +DoIcons = $C15A +DShiftLeft = $C15D +BBMult = $C160 +BMult = $C163 +DMult = $C166 +Ddiv = $C169 +DSdiv = $C16C +Dabs = $C16F +Dnegate = $C172 +Ddec = $C175 +ClearRam = $C178 +FillRam = $C17B +MoveData = $C17E +InitRam = $C181 +PutDecimal = $C184 +GetRandom = $C187 +MouseUp = $C18A +MouseOff = $C18D +DoPreviousMenu = $C190 +ReDoMenu = $C193 +GetSerialNumber = $C196 +Sleep = $C199 +ClearMouseMode = $C19C +i_Rectangle = $C19F +i_FrameRectangle= $C1A2 +i_RecoverRectangle= $C1A5 +i_GraphicsString= $C1A8 +i_BitmapUp = $C1AB +i_PutString = $C1AE +GetRealSize = $C1B1 +i_FillRam = $C1B4 +i_MoveData = $C1B7 +GetString = $C1BA +GotoFirstMenu = $C1BD +InitTextPrompt = $C1C0 +MainLoop = $C1C3 +DrawSprite = $C1C6 +GetCharWidth = $C1C9 +LoadCharSet = $C1CC +PosSprite = $C1CF +EnablSprite = $C1D2 +DisablSprite = $C1D5 +CallRoutine = $C1D8 +CalcBlksFree = $C1DB +ChkDkGEOS = $C1DE +NewDisk = $C1E1 +GetBlock = $C1E4 +PutBlock = $C1E7 +SetGEOSDisk = $C1EA +SaveFile = $C1ED +SetGDirEntry = $C1F0 +BldGDirEntry = $C1F3 +GetFreeDirBlk = $C1F6 +WriteFile = $C1F9 +BlkAlloc = $C1FC +ReadFile = $C1FF +SmallPutChar = $C202 +FollowChain = $C205 +GetFile = $C208 +FindFile = $C20B +CRC = $C20E +LdFile = $C211 +EnterTurbo = $C214 +LdDeskAcc = $C217 +ReadBlock = $C21A +LdApplic = $C21D +WriteBlock = $C220 +VerWriteBlock = $C223 +FreeFile = $C226 +GetFHdrInfo = $C229 +EnterDeskTop = $C22C +StartAppl = $C22F +ExitTurbo = $C232 +PurgeTurbo = $C235 +DeleteFile = $C238 +FindFTypes = $C23B +RstrAppl = $C23E +ToBASIC = $C241 +FastDelFile = $C244 +GetDirHead = $C247 +PutDirHead = $C24A +NxtBlkAlloc = $C24D +ImprintRectangle= $C250 +i_ImprintRectangle= $C253 +DoDlgBox = $C256 +RenameFile = $C259 +InitForIO = $C25C +DoneWithIO = $C25F +DShiftRight = $C262 +CopyString = $C265 +CopyFString = $C268 +CmpString = $C26B +CmpFString = $C26E +FirstInit = $C271 +OpenRecordFile = $C274 +CloseRecordFile = $C277 +NextRecord = $C27A +PreviousRecord = $C27D +PointRecord = $C280 +DeleteRecord = $C283 +InsertRecord = $C286 +AppendRecord = $C289 +ReadRecord = $C28C +WriteRecord = $C28F +SetNextFree = $C292 +UpdateRecordFile= $C295 +GetPtrCurDkNm = $C298 +PromptOn = $C29B +PromptOff = $C29E +OpenDisk = $C2A1 +DoInlineReturn = $C2A4 +GetNextChar = $C2A7 +BitmapClip = $C2AA +FindBAMBit = $C2AD +SetDevice = $C2B0 +IsMseInRegion = $C2B3 +ReadByte = $C2B6 +FreeBlock = $C2B9 +ChangeDiskDevice= $C2BC +RstrFrmDialogue = $C2BF +Panic = $C2C2 +BitOtherClip = $C2C5 +StashRAM = $C2C8 +FetchRAM = $C2CB +SwapRAM = $C2CE +VerifyRAM = $C2D1 +DoRAMOp = $C2D4 +TempHideMouse = $C2D7 +SetMousePicture = $C2DA +SetNewMode = $C2DD +NormalizeX = $C2E0 +MoveBData = $C2E3 +SwapBData = $C2E6 +VerifyBData = $C2E9 +DoBOp = $C2EC +AccessCache = $C2EF +HideOnlyMouse = $C2F2 +SetColorMode = $C2F5 +ColorCard = $C2F8 +ColorRectangle = $C2FB +vicbase = $D000 +mob0ypos = $D001 +mob1xpos = $D002 +mob1ypos = $D003 +mob2xpos = $D004 +mob2ypos = $D005 +mob3xpos = $D006 +mob3ypos = $D007 +mob4xpos = $D008 +mob4ypos = $D009 +mob5xpos = $D00A +mob5ypos = $D00B +mob6xpos = $D00C +mob6ypos = $D00D +mob7xpos = $D00E +mob7ypos = $D00F +msbxpos = $D010 +grcntrl1 = $D011 +rasreg = $D012 +lpxpos = $D013 +lpypos = $D014 +mobenble = $D015 +grcntrl2 = $D016 +moby2 = $D017 +grmemptr = $D018 +grirq = $D019 +grirqen = $D01A +mobprior = $D01B +mobmcm = $D01C +mobx2 = $D01D +mobmobcol = $D01E +mobbakcol = $D01F +extclr = $D020 +bakclr0 = $D021 +bakclr1 = $D022 +bakclr2 = $D023 +bakclr3 = $D024 +mcmclr0 = $D025 +mcmclr1 = $D026 +mob0clr = $D027 +mob1clr = $D028 +mob2clr = $D029 +mob3clr = $D02A +mob4clr = $D02B +mob5clr = $D02C +mob6clr = $D02D +mob7clr = $D02E +keyreg = $D02F +clkreg = $D030 +sidbase = $D400 +mmu = $D500 +vdcreg = $D600 +vdcdata = $D601 +ctab = $D800 +cia1base = $DC00 +cia2base = $DD00 +RAMC_BASE = $DE00 +EXP_BASE = $DF00 +MOUSE_BASE = $FE80 +config = $FF00 +CINT = $FF81 +IOINIT = $FF84 +RAMTAS = $FF87 +RESTOR = $FF8A +VECTOR = $FF8D +SETMSG = $FF90 +SECOND = $FF93 +TKSA = $FF96 +MEMTOP = $FF99 +MEMBOT = $FF9C +SCNKEY = $FF9F +SETTMO = $FFA2 +ACPTR = $FFA5 +CIOUT = $FFA8 +UNTLK = $FFAB +UNLSN = $FFAE +LISTEN = $FFB1 +TALK = $FFB4 +READST = $FFB7 +SETLFS = $FFBA +SETNAM = $FFBD +OPEN = $FFC0 +CLOSE = $FFC3 +CHKIN = $FFC6 +CKOUT = $FFC9 +CLRCH = $FFCC +BASIN = $FFCF +BSOUT = $FFD2 +LOAD = $FFD5 +SAVE = $FFD8 +SETTIM = $FFDB +RDTIM = $FFDE +STOP = $FFE1 +GETIN = $FFE4 +CLALL = $FFE7 +UDTIM = $FFEA +SCREEN = $FFED +IOBASE = $FFF3 +NMI_VECTOR = $FFFA +RESET_VECTOR = $FFFC +IRQ_VECTOR = $FFFE + diff --git a/_newconf/newconf/inc/r0.inc b/_newconf/newconf/inc/r0.inc new file mode 100644 index 00000000..fb1d87b8 --- /dev/null +++ b/_newconf/newconf/inc/r0.inc @@ -0,0 +1,9 @@ +L043E =$43e; unused +L0616 =$616; unused +L0672 =$672; ? +L0739 =$739; ? +L073E =$73e; ? +L0911 =$911; ? +L0E19 =$e19; unused +L0FA0 =$fa0; ? +L0FB3 =$fb3; ? diff --git a/_newconf/newconf/r0,prg b/_newconf/newconf/r0,prg new file mode 100644 index 0000000000000000000000000000000000000000..a09b98d6758877835fa26fb75336d225586f0636 GIT binary patch literal 4012 zcmd^Ce{9@V9rxKj+jsflOVXx+P4syiBB5EEb}Ji$b;;6dS(S;XXak8#7-&iY+K-08 zC}JZ&&Xp6*>6HmckU&<%Re4=pC1X;1l&P0Xo8I-u^!|fNh3lk|p?0)hN7oWq&F9@+ zlBV4x5P#z2?DyXH_fLN<2)M|PW$(D13z*dYuH0CYZrbh*#vR!hPwk02VT1fuCx@nm zjt)bRX~=Qns)dowmOJSUzL6QA^k<7f89nVgeYCHcHcHfC@y5*?Zb zgAPG%Z_IER6`r2Xt(a8EX_@SmO*&&qG-ipe5SPiAOv9GEU!D^Gl#zYyZJE8FWxknZ zA@i?qWMuXZy?>u*dfWSQ0(olvT7k2wVRhbX8B6k}GMvkln7iOBu0$UOCb=s-#O|aa z(wm_*Ru!GHVl=Q6OC>L7hG6y16;P`6*=KfkfBXAAorI95HmqGQj0xU^!q!q^>GZ5s zNh?7W0(ID0MXRh@@&(Yw0F?k0$@3W+I1`FVHe}!sU-F`IgXVRSe?`qTL6QG4`+ zZO7gt*TbG-kZ#pe4L<^}iL;g^BwCceVnCto z#u0RX%{ci%H03GmE*gw_N@_>cl2hGLD@+qGSFl7{VX3s&QpiiwCKubIu+>~3o~yVZ zJoSSAe2u)2fxhs}m@w|&SK_;7qzyso8XscDqJ$WiP&HE5E%G=m2tb5Po}_{R=Zo;h z71rFd^7#Q(1`5@H5fo7O{c%;2ZU8i_v#!f_iEvYs< zVyQ{dl9FmnO-h!SRLurG7h=(*k`o!y+){wl?CZGe#}&4KlvK=x&<(MBAd1y`>x{ON z+mxa|yYMKUIJ36d2J0Jnz~S;Pe-ngA?T1uIk=pYr>O^Y4tmaynLJq0zftqW@>ayBS zv|JxREn2Q0kMC)@0X&kL=`|X;kWWCcVq%R!L!*1*qc;!|BA)1L zRJ>^~VK3dZZ}C4tTS!#|j6hCXioD2M)0`6*)Cz>wC4|=75c>Sj(mrtHN#w+7-x6+L z5f^#I`@~Rmfn`4^`j;sBmnix_hGGB|14|SGOB4eiK>Zi=Lu40e44+p)mp zorb4TTs}QxPZEH#If1=5EBQJ<&`SsB{J$mTB89sev1&5x*gV=rlR-60{EY}TAnky! zV|mmbM@4|qNp@{cOp3Yk#Gg$|YDgm&C7uO!-Ju43JT((BB}oZY@Ep9`J7zZ=EjAk` zDo?EA^-La)qFTeKR=H56$LvV+63TEK$)Ev;WHS?c`6g1@B={y;+AMGa*3Hb?cp0N9 zh`eN_uJP1P-XOli8$_vYAyzYc1^j(+>sLB^_+lXO>sLo&<+%Z0b|t2{GLvD5Z5HEz z@{l^ijX6APC+1+t%^~S-XVw7fkfF|6%y7#{%CGJTZ?6GBl`>K@anO zn^c%MtIjG(C9JX(KaiXrJt;c7bV{6vVNOJhG?|Q~qQ<3&0XW&7p*j?Nh7WYQFO#ol zOmZ;5%bUC&(183ra0QYKMx#bHO%hkhs|C6#6T`QU#?k@D#{6>?lr~ zVbBpkdQri}`Jff_eF=2X6`uqW{hB4VXEQ(i<5=)Z$OtV?%Up5zby4}+Zx(ch_9eY}KPnE? z0NtuMj|Ep8pfrSVs^5cQ8VvO%s{gA(>(fG5hzr~->RQs+i|!-z z$$g?t58xL2ds3|HZnngPI47NCZ2;#7krs=*QnqdsKu%9kySb7Q<}PO|w~kzGMKqg>l)nKKx-epjeSJT&L! zI6lenl#B_9&yapB9i8M=>Pdx. + jsr L1081 ; 0444 20 81 10 .. + jsr L0FA0 ; 0447 20 A0 0F .. + lda ramExpSize ; 044A AD C3 88 ... + bne L0470 ; 044D D0 21 .! + lda NUMDRV ; 044F AD 8D 84 ... + cmp #$02 ; 0452 C9 02 .. + bcc L0470 ; 0454 90 1A .. + lda driveType ; 0456 AD 8E 84 ... + cmp $848F ; 0459 CD 8F 84 ... + bne L0462 ; 045C D0 04 .. + cmp #$03 ; 045E C9 03 .. + bne L0470 ; 0460 D0 0E .. +L0462: jsr L0739 ; 0462 20 39 07 9. + jsr PurgeTurbo ; 0465 20 35 C2 5. + jsr L0739 ; 0468 20 39 07 9. + lda #$01 ; 046B A9 01 .. + sta NUMDRV ; 046D 8D 8D 84 ... +L0470: jsr i_MoveData ; 0470 20 B7 C1 .. + bvc L0496 ; 0473 50 21 P! + brk ; 0475 00 . + bvc L0478 ; 0476 50 00 P. +L0478: !byte $04 ; 0478 04 . +L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. +; ---------------------------------------------------------------------------- +L047C: bit c128Flag ; 047C 2C 13 C0 ,.. + bmi L048E ; 047F 30 0D 0. + !byte $AD ; 0481 AD . + !byte $0F ; 0482 0F . +L0483: cpy #$C9 ; 0483 C0 C9 .. + !byte $14 ; 0485 14 . + bcs L048E ; 0486 B0 06 .. + jsr L04CC ; 0488 20 CC 04 .. + jsr L048F ; 048B 20 8F 04 .. +L048E: rts ; 048E 60 ` +; ---------------------------------------------------------------------------- +L048F: lda #$C3 ; 048F A9 C3 .. + sta r0H ; 0491 85 03 .. + lda #$10 ; 0493 A9 10 .. + !byte $85 ; 0495 85 . +L0496: !byte $02 ; 0496 02 . + ldy #$00 ; 0497 A0 00 .. + sty r1L ; 0499 84 04 .. + jsr L04A2 ; 049B 20 A2 04 .. + lda #$05 ; 049E A9 05 .. + sta r1L ; 04A0 85 04 .. +L04A2: ldx r1L ; 04A2 A6 04 .. +L04A4: lda (r0L),y ; 04A4 B1 02 .. + cmp L04C2,x ; 04A6 DD C2 04 ... + beq L04B3 ; 04A9 F0 08 .. + cpx r1L ; 04AB E4 04 .. + bne L04A2 ; 04AD D0 F3 .. + iny ; 04AF C8 . + bne L04A2 ; 04B0 D0 F0 .. + rts ; 04B2 60 ` +; ---------------------------------------------------------------------------- +L04B3: iny ; 04B3 C8 . + bne L04B7 ; 04B4 D0 01 .. + rts ; 04B6 60 ` +; ---------------------------------------------------------------------------- +L04B7: inx ; 04B7 E8 . + lda L04C2,x ; 04B8 BD C2 04 ... + bne L04A4 ; 04BB D0 E7 .. + lda #$34 ; 04BD A9 34 .4 + sta (r0L),y ; 04BF 91 02 .. + rts ; 04C1 60 ` +; ---------------------------------------------------------------------------- +L04C2: lda $815C ; 04C2 AD 5C 81 .\. + cmp #$00 ; 04C5 C9 00 .. + jsr L3156 ; 04C7 20 56 31 V1 + !byte $2E ; 04CA 2E . + brk ; 04CB 00 . +L04CC: lda version ; 04CC AD 0F C0 ... + cmp #$13 ; 04CF C9 13 .. + bne L04EB ; 04D1 D0 18 .. + lda $C2B2 ; 04D3 AD B2 C2 ... + sta r0H ; 04D6 85 03 .. + lda $C2B1 ; 04D8 AD B1 C2 ... + sta r0L ; 04DB 85 02 .. + ldy #$00 ; 04DD A0 00 .. + lda (r0L),y ; 04DF B1 02 .. + cmp #$EA ; 04E1 C9 EA .. + beq L04EB ; 04E3 F0 06 .. + ldy #$03 ; 04E5 A0 03 .. + lda #$3D ; 04E7 A9 3D .= + sta (r0L),y ; 04E9 91 02 .. +L04EB: rts ; 04EB 60 ` +; ---------------------------------------------------------------------------- +L04EC: jsr L0522 ; 04EC 20 22 05 ". + txa ; 04EF 8A . + bne L050E ; 04F0 D0 1C .. + lda #$01 ; 04F2 A9 01 .. + jsr PointRecord ; 04F4 20 80 C2 .. + lda #$13 ; 04F7 A9 13 .. + sta r7H ; 04F9 85 11 .. + lda #$B1 ; 04FB A9 B1 .. + sta r7L ; 04FD 85 10 .. + lda #$FF ; 04FF A9 FF .. + sta r2L ; 0501 85 06 .. + sta r2H ; 0503 85 07 .. + jsr ReadRecord ; 0505 20 8C C2 .. + txa ; 0508 8A . + bne L050E ; 0509 D0 03 .. + jmp L1466 ; 050B 4C 66 14 Lf. +; ---------------------------------------------------------------------------- +L050E: jmp EnterDeskTop ; 050E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + !text "Configure V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur + ; 0519 65 20 20 20 56 32 2E 31 e V2.1 + !byte $00 ; 0521 00 . +; ---------------------------------------------------------------------------- +L0522: ldx #$00 ; 0522 A2 00 .. + lda L06AC ; 0524 AD AC 06 ... + bne L0557 ; 0527 D0 2E .. + lda #$20 ; 0529 A9 20 . + sta r6H ; 052B 85 0F .. + lda #$D9 ; 052D A9 D9 .. + sta r6L ; 052F 85 0E .. + lda #$0E ; 0531 A9 0E .. + sta r7L ; 0533 85 10 .. + lda #$01 ; 0535 A9 01 .. + sta r7H ; 0537 85 11 .. + lda #$05 ; 0539 A9 05 .. + sta r10H ; 053B 85 17 .. + lda #$11 ; 053D A9 11 .. + sta r10L ; 053F 85 16 .. + jsr FindFTypes ; 0541 20 3B C2 ;. + txa ; 0544 8A . + bne L0557 ; 0545 D0 10 .. + lda #$20 ; 0547 A9 20 . + sta r0H ; 0549 85 03 .. + lda #$D9 ; 054B A9 D9 .. + sta r0L ; 054D 85 02 .. + jsr OpenRecordFile ; 054F 20 74 C2 t. + lda #$FF ; 0552 A9 FF .. + sta L06AC ; 0554 8D AC 06 ... +L0557: rts ; 0557 60 ` +; ---------------------------------------------------------------------------- +L0558: jsr ExitTurbo ; 0558 20 32 C2 2. + lda ramExpSize ; 055B AD C3 88 ... + beq L0563 ; 055E F0 03 .. + lda L040A ; 0560 AD 0A 04 ... +L0563: and #$A0 ; 0563 29 A0 ). + sta sysRAMFlg ; 0565 8D C4 88 ... + sta sysFlgCopy ; 0568 8D 12 C0 ... + lda $2105 ; 056B AD 05 21 ..! + cmp #$02 ; 056E C9 02 .. + bcs L057B ; 0570 B0 09 .. + jsr L0E64 ; 0572 20 64 0E d. + cmp #$FF ; 0575 C9 FF .. + bne L057B ; 0577 D0 02 .. + lda #$01 ; 0579 A9 01 .. +L057B: sta $2106 ; 057B 8D 06 21 ..! + lda curDrive ; 057E AD 89 84 ... + eor #$01 ; 0581 49 01 I. + jsr SetDevice ; 0583 20 B0 C2 .. + jsr L0E64 ; 0586 20 64 0E d. + cmp #$FF ; 0589 C9 FF .. + bne L058F ; 058B D0 02 .. + lda #$00 ; 058D A9 00 .. +L058F: sta $2107 ; 058F 8D 07 21 ..! + lda ramExpSize ; 0592 AD C3 88 ... + beq L05A3 ; 0595 F0 0C .. + lda #$0A ; 0597 A9 0A .. + jsr SetDevice ; 0599 20 B0 C2 .. + jsr L0E64 ; 059C 20 64 0E d. + cmp #$FF ; 059F C9 FF .. + bne L05A5 ; 05A1 D0 02 .. +L05A3: lda #$00 ; 05A3 A9 00 .. +L05A5: sta $2108 ; 05A5 8D 08 21 ..! + lda $2104 ; 05A8 AD 04 21 ..! + jsr SetDevice ; 05AB 20 B0 C2 .. + jsr L06B2 ; 05AE 20 B2 06 .. + jsr L064A ; 05B1 20 4A 06 J. + txa ; 05B4 8A . + bne L05F7 ; 05B5 D0 40 .@ + jsr PurgeTurbo ; 05B7 20 35 C2 5. + ldy #$03 ; 05BA A0 03 .. + lda #$00 ; 05BC A9 00 .. + sta NUMDRV ; 05BE 8D 8D 84 ... +L05C1: sta driveType,y ; 05C1 99 8E 84 ... + sta turboFlags,y ; 05C4 99 92 84 ... + sta driveData,y ; 05C7 99 BF 88 ... + sta ramBase,y ; 05CA 99 C7 88 ... + dey ; 05CD 88 . + bpl L05C1 ; 05CE 10 F1 .. + jsr L05F8 ; 05D0 20 F8 05 .. + lda $2106 ; 05D3 AD 06 21 ..! + jsr L0769 ; 05D6 20 69 07 i. + lda $2107 ; 05D9 AD 07 21 ..! + beq L05E7 ; 05DC F0 09 .. + jsr L0739 ; 05DE 20 39 07 9. + lda $2107 ; 05E1 AD 07 21 ..! + jsr L0769 ; 05E4 20 69 07 i. +L05E7: lda $2108 ; 05E7 AD 08 21 ..! + beq L05F7 ; 05EA F0 0B .. + lda #$0A ; 05EC A9 0A .. + jsr L073E ; 05EE 20 3E 07 >. + lda $2108 ; 05F1 AD 08 21 ..! + jsr L0769 ; 05F4 20 69 07 i. +L05F7: rts ; 05F7 60 ` +; ---------------------------------------------------------------------------- +L05F8: lda ramExpSize ; 05F8 AD C3 88 ... + beq L0615 ; 05FB F0 18 .. + lda #$08 ; 05FD A9 08 .. + sta $212B ; 05FF 8D 2B 21 .+! + lda $2106 ; 0602 AD 06 21 ..! + sta $212F ; 0605 8D 2F 21 ./! +L0608: jsr L09C8 ; 0608 20 C8 09 .. + inc $212B ; 060B EE 2B 21 .+! + lda $212B ; 060E AD 2B 21 .+! + cmp #$0C ; 0611 C9 0C .. + bne L0608 ; 0613 D0 F3 .. +L0615: rts ; 0615 60 ` +; ---------------------------------------------------------------------------- +L0616: ldy curDrive ; 0616 AC 89 84 ... + lda $8486,y ; 0619 B9 86 84 ... + beq L0649 ; 061C F0 2B .+ + tay ; 061E A8 . + jsr L0A76 ; 061F 20 76 0A v. + lda L06AD,y ; 0622 B9 AD 06 ... + bne L0649 ; 0625 D0 22 ." + lda #$FF ; 0627 A9 FF .. + sta L06AD,y ; 0629 99 AD 06 ... + lda L0A64,y ; 062C B9 64 0A .d. + sta r1L ; 062F 85 04 .. + lda L0A69,y ; 0631 B9 69 0A .i. + sta r1H ; 0634 85 05 .. + lda #$90 ; 0636 A9 90 .. + sta r0H ; 0638 85 03 .. + lda #$00 ; 063A A9 00 .. + sta r0L ; 063C 85 02 .. + lda #$0D ; 063E A9 0D .. + sta r2H ; 0640 85 07 .. + lda #$80 ; 0642 A9 80 .. + sta r2L ; 0644 85 06 .. + jsr MoveData ; 0646 20 7E C1 ~. +L0649: rts ; 0649 60 ` +; ---------------------------------------------------------------------------- +L064A: lda $2106 ; 064A AD 06 21 ..! + jsr L0672 ; 064D 20 72 06 r. + bne L0671 ; 0650 D0 1F .. + lda $2107 ; 0652 AD 07 21 ..! + jsr L0672 ; 0655 20 72 06 r. + bne L0671 ; 0658 D0 17 .. + lda $2108 ; 065A AD 08 21 ..! + jsr L0672 ; 065D 20 72 06 r. + bne L0671 ; 0660 D0 0F .. + ldx #$00 ; 0662 A2 00 .. + lda L06AC ; 0664 AD AC 06 ... + beq L0671 ; 0667 F0 08 .. + jsr CloseRecordFile ; 0669 20 77 C2 w. + lda #$00 ; 066C A9 00 .. + sta L06AC ; 066E 8D AC 06 ... +L0671: rts ; 0671 60 ` +; ---------------------------------------------------------------------------- +L0672: ldx #$00 ; 0672 A2 00 .. + tay ; 0674 A8 . + beq L06AA ; 0675 F0 33 .3 + jsr L0A76 ; 0677 20 76 0A v. + lda L06AD,y ; 067A B9 AD 06 ... + bne L06AA ; 067D D0 2B .+ + tya ; 067F 98 . + pha ; 0680 48 H + jsr L0522 ; 0681 20 22 05 ". + pla ; 0684 68 h + tay ; 0685 A8 . + txa ; 0686 8A . + bne L06AA ; 0687 D0 21 .! + lda #$FF ; 0689 A9 FF .. + sta L06AD,y ; 068B 99 AD 06 ... + lda L0A64,y ; 068E B9 64 0A .d. + sta r7L ; 0691 85 10 .. + lda L0A69,y ; 0693 B9 69 0A .i. + sta r7H ; 0696 85 11 .. + tya ; 0698 98 . + clc ; 0699 18 . + adc #$02 ; 069A 69 02 i. + jsr PointRecord ; 069C 20 80 C2 .. + lda #$0D ; 069F A9 0D .. + sta r2H ; 06A1 85 07 .. + lda #$80 ; 06A3 A9 80 .. + sta r2L ; 06A5 85 06 .. + jsr ReadRecord ; 06A7 20 8C C2 .. +L06AA: txa ; 06AA 8A . + rts ; 06AB 60 ` +; ---------------------------------------------------------------------------- +L06AC: brk ; 06AC 00 . +L06AD: brk ; 06AD 00 . + brk ; 06AE 00 . + brk ; 06AF 00 . + brk ; 06B0 00 . + brk ; 06B1 00 . +L06B2: lda #$01 ; 06B2 A9 01 .. + sta r0L ; 06B4 85 02 .. + lda $2104 ; 06B6 AD 04 21 ..! + eor #$01 ; 06B9 49 01 I. + tay ; 06BB A8 . + lda $03FE,y ; 06BC B9 FE 03 ... + ldx $2107 ; 06BF AE 07 21 ..! + jsr L06EB ; 06C2 20 EB 06 .. + sta $2107 ; 06C5 8D 07 21 ..! + ldy $2104 ; 06C8 AC 04 21 ..! + lda $03FE,y ; 06CB B9 FE 03 ... + and #$7F ; 06CE 29 7F ). + ldx $2106 ; 06D0 AE 06 21 ..! + jsr L06EB ; 06D3 20 EB 06 .. + sta $2106 ; 06D6 8D 06 21 ..! + lda ramExpSize ; 06D9 AD C3 88 ... + beq L06E7 ; 06DC F0 09 .. + lda L0408 ; 06DE AD 08 04 ... + ldx $2108 ; 06E1 AE 08 21 ..! + jsr L06EB ; 06E4 20 EB 06 .. +L06E7: sta $2108 ; 06E7 8D 08 21 ..! + rts ; 06EA 60 ` +; ---------------------------------------------------------------------------- +L06EB: stx r2L ; 06EB 86 06 .. + sta r2H ; 06ED 85 07 .. + jsr L09AD ; 06EF 20 AD 09 .. + clc ; 06F2 18 . + adc r0L ; 06F3 65 02 e. + cmp ramExpSize ; 06F5 CD C3 88 ... + bcc L0704 ; 06F8 90 0A .. + beq L0704 ; 06FA F0 08 .. + lda r2H ; 06FC A5 07 .. + and #$3F ; 06FE 29 3F )? + sta r2H ; 0700 85 07 .. + lda r0L ; 0702 A5 02 .. +L0704: sta r0H ; 0704 85 03 .. + lda r2H ; 0706 A5 07 .. + bpl L0711 ; 0708 10 07 .. + lda r0H ; 070A A5 03 .. + sta r0L ; 070C 85 02 .. + lda r2H ; 070E A5 07 .. + rts ; 0710 60 ` +; ---------------------------------------------------------------------------- +L0711: and #$0F ; 0711 29 0F ). + cmp #$01 ; 0713 C9 01 .. + bne L0721 ; 0715 D0 0A .. + lda r2L ; 0717 A5 06 .. + cmp #$02 ; 0719 C9 02 .. + bne L0721 ; 071B D0 04 .. + lda #$01 ; 071D A9 01 .. + sta r2L ; 071F 85 06 .. +L0721: lda r2H ; 0721 A5 07 .. + and #$40 ; 0723 29 40 )@ + beq L0736 ; 0725 F0 0F .. + lda r2H ; 0727 A5 07 .. + and #$0F ; 0729 29 0F ). + cmp r2L ; 072B C5 06 .. + bne L0736 ; 072D D0 07 .. + lda r0H ; 072F A5 03 .. + sta r0L ; 0731 85 02 .. + lda r2H ; 0733 A5 07 .. + rts ; 0735 60 ` +; ---------------------------------------------------------------------------- +L0736: lda r2L ; 0736 A5 06 .. + rts ; 0738 60 ` +; ---------------------------------------------------------------------------- +L0739: lda curDrive ; 0739 AD 89 84 ... + eor #$01 ; 073C 49 01 I. +L073E: jsr SetDevice ; 073E 20 B0 C2 .. + txa ; 0741 8A . + bne L0768 ; 0742 D0 24 .$ + lda ramExpSize ; 0744 AD C3 88 ... + bne L075F ; 0747 D0 16 .. + lda $212F ; 0749 AD 2F 21 ./! + pha ; 074C 48 H + ldy curDrive ; 074D AC 89 84 ... + lda $8486,y ; 0750 B9 86 84 ... + beq L075B ; 0753 F0 06 .. + sta $212F ; 0755 8D 2F 21 ./! + jsr L09C8 ; 0758 20 C8 09 .. +L075B: pla ; 075B 68 h + sta $212F ; 075C 8D 2F 21 ./! +L075F: ldy curDrive ; 075F AC 89 84 ... + lda $8486,y ; 0762 B9 86 84 ... + sta curType ; 0765 8D C6 88 ... +L0768: rts ; 0768 60 ` +; ---------------------------------------------------------------------------- +L0769: pha ; 0769 48 H + lda #$00 ; 076A A9 00 .. + sta $212C ; 076C 8D 2C 21 .,! + lda curDrive ; 076F AD 89 84 ... + sta $212B ; 0772 8D 2B 21 .+! + pla ; 0775 68 h + beq L07B6 ; 0776 F0 3E .> + cmp #$01 ; 0778 C9 01 .. + bne L077F ; 077A D0 03 .. + jmp L07B7 ; 077C 4C B7 07 L.. +; ---------------------------------------------------------------------------- +L077F: cmp #$02 ; 077F C9 02 .. + bne L0786 ; 0781 D0 03 .. + jmp L07DF ; 0783 4C DF 07 L.. +; ---------------------------------------------------------------------------- +L0786: cmp #$03 ; 0786 C9 03 .. + bne L078D ; 0788 D0 03 .. + jmp L07EF ; 078A 4C EF 07 L.. +; ---------------------------------------------------------------------------- +L078D: cmp #$41 ; 078D C9 41 .A + bne L0797 ; 078F D0 06 .. + jsr L07B7 ; 0791 20 B7 07 .. + jmp L07FF ; 0794 4C FF 07 L.. +; ---------------------------------------------------------------------------- +L0797: cmp #$43 ; 0797 C9 43 .C + bne L07A1 ; 0799 D0 06 .. + jsr L07EF ; 079B 20 EF 07 .. + jmp L0820 ; 079E 4C 20 08 L . +; ---------------------------------------------------------------------------- +L07A1: cmp #$81 ; 07A1 C9 81 .. + bne L07A8 ; 07A3 D0 03 .. + jmp L0841 ; 07A5 4C 41 08 LA. +; ---------------------------------------------------------------------------- +L07A8: cmp #$82 ; 07A8 C9 82 .. + bne L07AF ; 07AA D0 03 .. + jmp L0873 ; 07AC 4C 73 08 Ls. +; ---------------------------------------------------------------------------- +L07AF: cmp #$83 ; 07AF C9 83 .. + bne L07B6 ; 07B1 D0 03 .. + jmp L08A5 ; 07B3 4C A5 08 L.. +; ---------------------------------------------------------------------------- +L07B6: rts ; 07B6 60 ` +; ---------------------------------------------------------------------------- +L07B7: lda $212C ; 07B7 AD 2C 21 .,! + cmp #$01 ; 07BA C9 01 .. + beq L07DE ; 07BC F0 20 . + cmp #$41 ; 07BE C9 41 .A + bne L07D6 ; 07C0 D0 14 .. + ldy $212B ; 07C2 AC 2B 21 .+! + lda #$01 ; 07C5 A9 01 .. + sta $8486,y ; 07C7 99 86 84 ... + sta $03FE,y ; 07CA 99 FE 03 ... + lda #$00 ; 07CD A9 00 .. + sta driveData,y ; 07CF 99 BF 88 ... + dec $180C ; 07D2 CE 0C 18 ... + rts ; 07D5 60 ` +; ---------------------------------------------------------------------------- +L07D6: lda #$01 ; 07D6 A9 01 .. + sta $212F ; 07D8 8D 2F 21 ./! + jmp L08D7 ; 07DB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07DE: rts ; 07DE 60 ` +; ---------------------------------------------------------------------------- +L07DF: lda $212C ; 07DF AD 2C 21 .,! + cmp #$02 ; 07E2 C9 02 .. + beq L07EE ; 07E4 F0 08 .. + lda #$02 ; 07E6 A9 02 .. + sta $212F ; 07E8 8D 2F 21 ./! + jmp L08D7 ; 07EB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07EE: rts ; 07EE 60 ` +; ---------------------------------------------------------------------------- +L07EF: lda $212C ; 07EF AD 2C 21 .,! + cmp #$03 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$03 ; 07F6 A9 03 .. + sta $212F ; 07F8 8D 2F 21 ./! + jmp L08D7 ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07FE: rts ; 07FE 60 ` +; ---------------------------------------------------------------------------- +L07FF: lda $212C ; 07FF AD 2C 21 .,! + cmp #$41 ; 0802 C9 41 .A + beq L081F ; 0804 F0 19 .. + lda #$41 ; 0806 A9 41 .A + jsr L0911 ; 0808 20 11 09 .. + ldy $212B ; 080B AC 2B 21 .+! + sta driveData,y ; 080E 99 BF 88 ... + lda #$41 ; 0811 A9 41 .A + sta $8486,y ; 0813 99 86 84 ... + sta $03FE,y ; 0816 99 FE 03 ... + jsr NewDisk ; 0819 20 E1 C1 .. + dec $180C ; 081C CE 0C 18 ... +L081F: rts ; 081F 60 ` +; ---------------------------------------------------------------------------- +L0820: lda $212C ; 0820 AD 2C 21 .,! + cmp #$43 ; 0823 C9 43 .C + beq L0840 ; 0825 F0 19 .. + lda #$43 ; 0827 A9 43 .C + jsr L0911 ; 0829 20 11 09 .. + ldy $212B ; 082C AC 2B 21 .+! + sta driveData,y ; 082F 99 BF 88 ... + lda #$43 ; 0832 A9 43 .C + sta $8486,y ; 0834 99 86 84 ... + sta $03FE,y ; 0837 99 FE 03 ... + jsr NewDisk ; 083A 20 E1 C1 .. + dec $180C ; 083D CE 0C 18 ... +L0840: rts ; 0840 60 ` +; ---------------------------------------------------------------------------- +L0841: lda $212C ; 0841 AD 2C 21 .,! + cmp #$81 ; 0844 C9 81 .. + beq L0872 ; 0846 F0 2A .* + lda #$81 ; 0848 A9 81 .. + sta $212F ; 084A 8D 2F 21 ./! + jsr L09C8 ; 084D 20 C8 09 .. + inc NUMDRV ; 0850 EE 8D 84 ... + lda #$81 ; 0853 A9 81 .. + jsr L0911 ; 0855 20 11 09 .. + ldy $212B ; 0858 AC 2B 21 .+! + sta driveData,y ; 085B 99 BF 88 ... + lda #$81 ; 085E A9 81 .. + sta $8486,y ; 0860 99 86 84 ... + sta $03FE,y ; 0863 99 FE 03 ... + lda $212B ; 0866 AD 2B 21 .+! + jsr L073E ; 0869 20 3E 07 >. + jsr L0A8A ; 086C 20 8A 0A .. + dec $180C ; 086F CE 0C 18 ... +L0872: rts ; 0872 60 ` +; ---------------------------------------------------------------------------- +L0873: lda $212C ; 0873 AD 2C 21 .,! + cmp #$82 ; 0876 C9 82 .. + beq L08A4 ; 0878 F0 2A .* + lda #$82 ; 087A A9 82 .. + sta $212F ; 087C 8D 2F 21 ./! + jsr L09C8 ; 087F 20 C8 09 .. + inc NUMDRV ; 0882 EE 8D 84 ... + lda #$82 ; 0885 A9 82 .. + jsr L0911 ; 0887 20 11 09 .. + ldy $212B ; 088A AC 2B 21 .+! + sta driveData,y ; 088D 99 BF 88 ... + lda #$82 ; 0890 A9 82 .. + sta $8486,y ; 0892 99 86 84 ... + sta $03FE,y ; 0895 99 FE 03 ... + lda $212B ; 0898 AD 2B 21 .+! + jsr L073E ; 089B 20 3E 07 >. + jsr L0A8A ; 089E 20 8A 0A .. + dec $180C ; 08A1 CE 0C 18 ... +L08A4: rts ; 08A4 60 ` +; ---------------------------------------------------------------------------- +L08A5: lda $212C ; 08A5 AD 2C 21 .,! + cmp #$83 ; 08A8 C9 83 .. + beq L08D6 ; 08AA F0 2A .* + lda #$83 ; 08AC A9 83 .. + sta $212F ; 08AE 8D 2F 21 ./! + jsr L09C8 ; 08B1 20 C8 09 .. + inc NUMDRV ; 08B4 EE 8D 84 ... + lda #$83 ; 08B7 A9 83 .. + jsr L0911 ; 08B9 20 11 09 .. + ldy $212B ; 08BC AC 2B 21 .+! + sta driveData,y ; 08BF 99 BF 88 ... + lda #$83 ; 08C2 A9 83 .. + sta $8486,y ; 08C4 99 86 84 ... + sta $03FE,y ; 08C7 99 FE 03 ... + lda $212B ; 08CA AD 2B 21 .+! + jsr L073E ; 08CD 20 3E 07 >. + jsr L0A8A ; 08D0 20 8A 0A .. + dec $180C ; 08D3 CE 0C 18 ... +L08D6: rts ; 08D6 60 ` +; ---------------------------------------------------------------------------- +L08D7: jsr L09C8 ; 08D7 20 C8 09 .. + lda $212B ; 08DA AD 2B 21 .+! + jsr L073E ; 08DD 20 3E 07 >. + lda firstBoot ; 08E0 AD C5 88 ... + cmp #$FF ; 08E3 C9 FF .. + beq L08F6 ; 08E5 F0 0F .. + ldy $212B ; 08E7 AC 2B 21 .+! + lda $212F ; 08EA AD 2F 21 ./! + sta $8486,y ; 08ED 99 86 84 ... + inc NUMDRV ; 08F0 EE 8D 84 ... + clv ; 08F3 B8 . + bvc L08FF ; 08F4 50 09 P. +L08F6: jsr L1E05 ; 08F6 20 05 1E .. + lda $212B ; 08F9 AD 2B 21 .+! + jsr L073E ; 08FC 20 3E 07 >. +L08FF: dec $180C ; 08FF CE 0C 18 ... + ldy $212B ; 0902 AC 2B 21 .+! + lda $8486,y ; 0905 B9 86 84 ... + sta $03FE,y ; 0908 99 FE 03 ... + lda #$00 ; 090B A9 00 .. + sta driveData,y ; 090D 99 BF 88 ... + rts ; 0910 60 ` +; ---------------------------------------------------------------------------- +L0911: pha ; 0911 48 H + jsr L0977 ; 0912 20 77 09 w. + pla ; 0915 68 h + sta r0L ; 0916 85 02 .. + lda $212C ; 0918 AD 2C 21 .,! + and #$C0 ; 091B 29 C0 ). + bne L092A ; 091D D0 0B .. + lda r0L ; 091F A5 02 .. + jsr L09AD ; 0921 20 AD 09 .. + cmp #$01 ; 0924 C9 01 .. + beq L0933 ; 0926 F0 0B .. + bne L0945 ; 0928 D0 1B .. +L092A: ldy $212B ; 092A AC 2B 21 .+! + lda driveData,y ; 092D B9 BF 88 ... + ldx #$00 ; 0930 A2 00 .. + rts ; 0932 60 ` +; ---------------------------------------------------------------------------- +L0933: ldy ramExpSize ; 0933 AC C3 88 ... +L0936: dey ; 0936 88 . + bmi L0942 ; 0937 30 09 0. + lda $2130,y ; 0939 B9 30 21 .0! + bne L0936 ; 093C D0 F8 .. + tya ; 093E 98 . + ldx #$00 ; 093F A2 00 .. + rts ; 0941 60 ` +; ---------------------------------------------------------------------------- +L0942: ldx #$FF ; 0942 A2 FF .. + rts ; 0944 60 ` +; ---------------------------------------------------------------------------- +L0945: sta r0L ; 0945 85 02 .. + ldy #$00 ; 0947 A0 00 .. +L0949: lda r0L ; 0949 A5 02 .. + sta r0H ; 094B 85 03 .. +L094D: sty r1L ; 094D 84 04 .. + cpy ramExpSize ; 094F CC C3 88 ... + bcs L0974 ; 0952 B0 20 . + lda $2130,y ; 0954 B9 30 21 .0! + iny ; 0957 C8 . + cmp #$00 ; 0958 C9 00 .. + bne L094D ; 095A D0 F1 .. +L095C: dec r0H ; 095C C6 03 .. + beq L096F ; 095E F0 0F .. + cpy ramExpSize ; 0960 CC C3 88 ... + bcs L0974 ; 0963 B0 0F .. + lda $2130,y ; 0965 B9 30 21 .0! + iny ; 0968 C8 . + cmp #$00 ; 0969 C9 00 .. + bne L0949 ; 096B D0 DC .. + beq L095C ; 096D F0 ED .. +L096F: lda r1L ; 096F A5 04 .. + ldx #$00 ; 0971 A2 00 .. + rts ; 0973 60 ` +; ---------------------------------------------------------------------------- +L0974: ldx #$FF ; 0974 A2 FF .. + rts ; 0976 60 ` +; ---------------------------------------------------------------------------- +L0977: ldy #$1F ; 0977 A0 1F .. + lda #$00 ; 0979 A9 00 .. +L097B: sta $2130,y ; 097B 99 30 21 .0! + dey ; 097E 88 . + bpl L097B ; 097F 10 FA .. + lda #$FF ; 0981 A9 FF .. + sta $2130 ; 0983 8D 30 21 .0! + lda #$08 ; 0986 A9 08 .. + sta r0L ; 0988 85 02 .. +L098A: ldy r0L ; 098A A4 02 .. + lda $8486,y ; 098C B9 86 84 ... + jsr L09AD ; 098F 20 AD 09 .. + tax ; 0992 AA . + beq L09A4 ; 0993 F0 0F .. + ldy r0L ; 0995 A4 02 .. + lda driveData,y ; 0997 B9 BF 88 ... + tay ; 099A A8 . +L099B: lda #$FF ; 099B A9 FF .. + sta $2130,y ; 099D 99 30 21 .0! + iny ; 09A0 C8 . + dex ; 09A1 CA . + bne L099B ; 09A2 D0 F7 .. +L09A4: inc r0L ; 09A4 E6 02 .. + lda r0L ; 09A6 A5 02 .. + cmp #$0C ; 09A8 C9 0C .. + bcc L098A ; 09AA 90 DE .. + rts ; 09AC 60 ` +; ---------------------------------------------------------------------------- +L09AD: sta r0H ; 09AD 85 03 .. + and #$C0 ; 09AF 29 C0 ). + beq L09C2 ; 09B1 F0 0F .. + lda r0H ; 09B3 A5 03 .. + cmp #$83 ; 09B5 C9 83 .. + bne L09BC ; 09B7 D0 03 .. + clc ; 09B9 18 . + adc #$01 ; 09BA 69 01 i. +L09BC: and #$0F ; 09BC 29 0F ). + tay ; 09BE A8 . + lda L09C3,y ; 09BF B9 C3 09 ... +L09C2: rts ; 09C2 60 ` +; ---------------------------------------------------------------------------- +L09C3: !byte $03 ; 09C3 03 . + !byte $03 ; 09C4 03 . + asl CPU_DATA ; 09C5 06 01 .. + !byte $0D ; 09C7 0D . +L09C8: lda ramExpSize ; 09C8 AD C3 88 ... + bne L09F0 ; 09CB D0 23 .# + lda sysRAMFlg ; 09CD AD C4 88 ... + and #$BF ; 09D0 29 BF ). + sta sysRAMFlg ; 09D2 8D C4 88 ... + sta sysFlgCopy ; 09D5 8D 12 C0 ... + sta L040A ; 09D8 8D 0A 04 ... + ldy $212F ; 09DB AC 2F 21 ./! + lda $212B ; 09DE AD 2B 21 .+! + jsr L0A3D ; 09E1 20 3D 0A =. + lda #$90 ; 09E4 A9 90 .. + sta r1H ; 09E6 85 05 .. + lda #$00 ; 09E8 A9 00 .. + sta r1L ; 09EA 85 04 .. + jsr MoveData ; 09EC 20 7E C1 ~. + rts ; 09EF 60 ` +; ---------------------------------------------------------------------------- +L09F0: lda sysRAMFlg ; 09F0 AD C4 88 ... + ora #$40 ; 09F3 09 40 .@ + sta sysRAMFlg ; 09F5 8D C4 88 ... + sta sysFlgCopy ; 09F8 8D 12 C0 ... + sta L040A ; 09FB 8D 0A 04 ... + ldy driveType ; 09FE AC 8E 84 ... + beq L0A0B ; 0A01 F0 08 .. + lda #$08 ; 0A03 A9 08 .. + jsr L0A3D ; 0A05 20 3D 0A =. + jsr StashRAM ; 0A08 20 C8 C2 .. +L0A0B: ldy $848F ; 0A0B AC 8F 84 ... + beq L0A18 ; 0A0E F0 08 .. + lda #$09 ; 0A10 A9 09 .. + !byte $20 ; 0A12 20 +L0A13: and $200A,x ; 0A13 3D 0A 20 =. + iny ; 0A16 C8 . + !byte $C2 ; 0A17 C2 . +L0A18: ldy $8490 ; 0A18 AC 90 84 ... + beq L0A25 ; 0A1B F0 08 .. + lda #$0A ; 0A1D A9 0A .. + jsr L0A3D ; 0A1F 20 3D 0A =. + jsr StashRAM ; 0A22 20 C8 C2 .. +L0A25: ldy $212F ; 0A25 AC 2F 21 ./! + lda $212B ; 0A28 AD 2B 21 .+! + jsr L0A3D ; 0A2B 20 3D 0A =. + jsr StashRAM ; 0A2E 20 C8 C2 .. + lda #$90 ; 0A31 A9 90 .. + sta r1H ; 0A33 85 05 .. + lda #$00 ; 0A35 A9 00 .. + sta r1L ; 0A37 85 04 .. + jsr MoveData ; 0A39 20 7E C1 ~. + rts ; 0A3C 60 ` +; ---------------------------------------------------------------------------- +L0A3D: pha ; 0A3D 48 H + jsr L0A76 ; 0A3E 20 76 0A v. + lda L0A64,y ; 0A41 B9 64 0A .d. + sta r0L ; 0A44 85 02 .. + lda L0A69,y ; 0A46 B9 69 0A .i. + sta r0H ; 0A49 85 03 .. + pla ; 0A4B 68 h + tay ; 0A4C A8 . + lda L0A66,y ; 0A4D B9 66 0A .f. + sta r1L ; 0A50 85 04 .. + lda L0A6A,y ; 0A52 B9 6A 0A .j. + sta r1H ; 0A55 85 05 .. + lda #$0D ; 0A57 A9 0D .. + sta r2H ; 0A59 85 07 .. + lda #$80 ; 0A5B A9 80 .. + sta r2L ; 0A5D 85 06 .. + lda #$00 ; 0A5F A9 00 .. + sta r3L ; 0A61 85 08 .. + rts ; 0A63 60 ` +; ---------------------------------------------------------------------------- +L0A64: !byte $80 ; 0A64 80 . + brk ; 0A65 00 . +L0A66: !byte $80 ; 0A66 80 . + brk ; 0A67 00 . + !byte $80 ; 0A68 80 . +L0A69: !byte $3C ; 0A69 3C < +L0A6A: lsr ; 0A6A 4A J + !byte $57 ; 0A6B 57 W + adc a3L ; 0A6C 65 72 er + brk ; 0A6E 00 . + !byte $80 ; 0A6F 80 . + brk ; 0A70 00 . + !byte $80 ; 0A71 80 . + !byte $83 ; 0A72 83 . + bcc L0A13 ; 0A73 90 9E .. + !byte $AB ; 0A75 AB . +L0A76: tya ; 0A76 98 . + bpl L0A85 ; 0A77 10 0C .. + cmp #$83 ; 0A79 C9 83 .. + beq L0A81 ; 0A7B F0 04 .. + ldy #$03 ; 0A7D A0 03 .. + bne L0A89 ; 0A7F D0 08 .. +L0A81: ldy #$04 ; 0A81 A0 04 .. + bne L0A89 ; 0A83 D0 04 .. +L0A85: and #$0F ; 0A85 29 0F ). + tay ; 0A87 A8 . + dey ; 0A88 88 . +L0A89: rts ; 0A89 60 ` +; ---------------------------------------------------------------------------- +L0A8A: ldy $212B ; 0A8A AC 2B 21 .+! + lda $8486,y ; 0A8D B9 86 84 ... + and #$0F ; 0A90 29 0F ). + cmp #$03 ; 0A92 C9 03 .. + bcc L0A99 ; 0A94 90 03 .. + jmp L0C8E ; 0A96 4C 8E 0C L.. +; ---------------------------------------------------------------------------- +L0A99: ldy #$00 ; 0A99 A0 00 .. + tya ; 0A9B 98 . +L0A9C: sta curDirHead,y ; 0A9C 99 00 82 ... + iny ; 0A9F C8 . + bne L0A9C ; 0AA0 D0 FA .. + lda #$34 ; 0AA2 A9 34 .4 + sta L0BBB ; 0AA4 8D BB 0B ... + lda #$00 ; 0AA7 A9 00 .. + sta L0B28 ; 0AA9 8D 28 0B .(. + ldy curDrive ; 0AAC AC 89 84 ... + lda $8486,y ; 0AAF B9 86 84 ... + and #$0F ; 0AB2 29 0F ). + ldy #$BD ; 0AB4 A0 BD .. + cmp #$01 ; 0AB6 C9 01 .. + beq L0AC6 ; 0AB8 F0 0C .. + ldy #$00 ; 0ABA A0 00 .. + lda #$37 ; 0ABC A9 37 .7 + sta L0BBB ; 0ABE 8D BB 0B ... + lda #$80 ; 0AC1 A9 80 .. + sta L0B28 ; 0AC3 8D 28 0B .(. +L0AC6: dey ; 0AC6 88 . + lda L0B25,y ; 0AC7 B9 25 0B .%. + sta curDirHead,y ; 0ACA 99 00 82 ... + tya ; 0ACD 98 . + bne L0AC6 ; 0ACE D0 F6 .. + ldy curDrive ; 0AD0 AC 89 84 ... + lda $8486,y ; 0AD3 B9 86 84 ... + and #$0F ; 0AD6 29 0F ). + cmp #$01 ; 0AD8 C9 01 .. + beq L0AF1 ; 0ADA F0 15 .. + ldy #$00 ; 0ADC A0 00 .. + tya ; 0ADE 98 . +L0ADF: sta dir2Head,y ; 0ADF 99 00 89 ... + iny ; 0AE2 C8 . + bne L0ADF ; 0AE3 D0 FA .. + ldy #$69 ; 0AE5 A0 69 .i +L0AE7: dey ; 0AE7 88 . + lda L0C25,y ; 0AE8 B9 25 0C .%. + sta dir2Head,y ; 0AEB 99 00 89 ... + tya ; 0AEE 98 . + bne L0AE7 ; 0AEF D0 F6 .. +L0AF1: jsr PutDirHead ; 0AF1 20 4A C2 J. + jsr L0B1B ; 0AF4 20 1B 0B .. + lda #$FF ; 0AF7 A9 FF .. + sta $8001 ; 0AF9 8D 01 80 ... + lda #$80 ; 0AFC A9 80 .. + sta r4H ; 0AFE 85 0B .. + lda #$00 ; 0B00 A9 00 .. + sta r4L ; 0B02 85 0A .. + lda #$12 ; 0B04 A9 12 .. + sta r1L ; 0B06 85 04 .. + lda #$01 ; 0B08 A9 01 .. + sta r1H ; 0B0A 85 05 .. + jsr PutBlock ; 0B0C 20 E7 C1 .. + inc r1L ; 0B0F E6 04 .. + lda #$08 ; 0B11 A9 08 .. + sta r1H ; 0B13 85 05 .. + jsr PutBlock ; 0B15 20 E7 C1 .. + lda #$00 ; 0B18 A9 00 .. + rts ; 0B1A 60 ` +; ---------------------------------------------------------------------------- +L0B1B: ldy #$00 ; 0B1B A0 00 .. + tya ; 0B1D 98 . +L0B1E: sta diskBlkBuf,y ; 0B1E 99 00 80 ... + dey ; 0B21 88 . + bne L0B1E ; 0B22 D0 FA .. + rts ; 0B24 60 ` +; ---------------------------------------------------------------------------- +L0B25: !byte $12,$01,$41 ; 0B25 12 01 41 ..A +L0B28: !byte $00,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B28 00 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B30 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B38 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B40 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B48 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B50 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B58 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B60 1F 15 FF FF 1F 15 FF FF ........ + !byte $1F,$15,$FF,$FF,$1F,$11,$FC,$FF ; 0B68 1F 15 FF FF 1F 11 FC FF ........ + !byte $07,$12,$FF,$FE,$07,$13,$FF,$FF ; 0B70 07 12 FF FE 07 13 FF FF ........ + !byte $07,$13,$FF,$FF,$07,$13,$FF,$FF ; 0B78 07 13 FF FF 07 13 FF FF ........ + !byte $07,$13,$FF,$FF,$07,$13,$FF,$FF ; 0B80 07 13 FF FF 07 13 FF FF ........ + !byte $07,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B88 07 12 FF FF 03 12 FF FF ........ + !byte $03,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B90 03 12 FF FF 03 12 FF FF ........ + !byte $03,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B98 03 12 FF FF 03 12 FF FF ........ + !byte $03,$11,$FF,$FF,$01,$11,$FF,$FF ; 0BA0 03 11 FF FF 01 11 FF FF ........ + !byte $01,$11,$FF,$FF,$01,$11,$FF,$FF ; 0BA8 01 11 FF FF 01 11 FF FF ........ + !byte $01,$11,$FF,$FF ; 0BB0 01 11 FF FF .... +; ---------------------------------------------------------------------------- + !byte $01 ; 0BB4 01 . + !text "RAM 15" ; 0BB5 52 41 4D 20 31 35 RAM 15 +L0BBB: !text "71" ; 0BBB 37 31 71 + !byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 ; 0BBD A0 A0 A0 A0 A0 A0 A0 A0 ........ + !byte $A0,$A0 ; 0BC5 A0 A0 .. + !text "RD" ; 0BC7 52 44 RD + !byte $A0 ; 0BC9 A0 . + !text "2A" ; 0BCA 32 41 2A + !byte $A0,$A0,$A0,$A0,$13,$08 ; 0BCC A0 A0 A0 A0 13 08 ...... + !text "GEOS format V1.0" ; 0BD2 47 45 4F 53 20 66 6F 72 GEOS for + ; 0BDA 6D 61 74 20 56 31 2E 30 mat V1.0 + !byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BE2 00 00 00 00 00 00 00 00 ........ + !byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BEA 00 00 00 00 00 00 00 00 ........ + !byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BF2 00 00 00 00 00 00 00 00 ........ + !byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BFA 00 00 00 00 00 00 00 00 ........ + !byte $15,$15,$15,$15,$15,$15,$15,$15 ; 0C02 15 15 15 15 15 15 15 15 ........ + !byte $15,$15,$15,$15,$15,$15,$15,$15 ; 0C0A 15 15 15 15 15 15 15 15 ........ + !byte $15,$00,$13,$13,$13,$13,$13,$13 ; 0C12 15 00 13 13 13 13 13 13 ........ + !byte $12,$12,$12,$12,$12,$12,$11,$11 ; 0C1A 12 12 12 12 12 12 11 11 ........ + !byte $11,$11,$11 ; 0C22 11 11 11 ... +L0C25: !byte $FF,$FF,$1F,$FF,$FF,$1F,$FF,$FF ; 0C25 FF FF 1F FF FF 1F FF FF ........ + !byte $1F,$FF,$FF,$1F,$FF,$FF,$1F,$FF ; 0C2D 1F FF FF 1F FF FF 1F FF ........ + !byte $FF,$1F,$FF,$FF,$1F,$FF,$FF,$1F ; 0C35 FF 1F FF FF 1F FF FF 1F ........ + !byte $FF,$FF,$1F,$FF,$FF,$1F,$FF,$FF ; 0C3D FF FF 1F FF FF 1F FF FF ........ + !byte $1F,$FF,$FF,$1F,$FF,$FF,$1F,$FF ; 0C45 1F FF FF 1F FF FF 1F FF ........ + !byte $FF,$1F,$FF,$FF,$1F,$FF,$FF,$1F ; 0C4D FF 1F FF FF 1F FF FF 1F ........ + !byte $FF,$FF,$1F,$00,$00,$00,$FF,$FF ; 0C55 FF FF 1F 00 00 00 FF FF ........ + !byte $07,$FF,$FF,$07,$FF,$FF,$07,$FF ; 0C5D 07 FF FF 07 FF FF 07 FF ........ + !byte $FF,$07,$FF,$FF,$07,$FF,$FF,$07 ; 0C65 FF 07 FF FF 07 FF FF 07 ........ + !byte $FF,$FF,$03,$FF,$FF,$03,$FF,$FF ; 0C6D FF FF 03 FF FF 03 FF FF ........ + !byte $03,$FF,$FF,$03,$FF,$FF,$03,$FF ; 0C75 03 FF FF 03 FF FF 03 FF ........ + !byte $FF,$03,$FF,$FF,$01,$FF,$FF,$01 ; 0C7D FF 03 FF FF 01 FF FF 01 ........ + !byte $FF,$FF,$01,$FF,$FF,$01,$FF,$FF ; 0C85 FF FF 01 FF FF 01 FF FF ........ + !byte $01 ; 0C8D 01 . +; ---------------------------------------------------------------------------- +L0C8E: ldy #$00 ; 0C8E A0 00 .. + tya ; 0C90 98 . +L0C91: sta curDirHead,y ; 0C91 99 00 82 ... + iny ; 0C94 C8 . + bne L0C91 ; 0C95 D0 FA .. + lda #$28 ; 0C97 A9 28 .( + sta curDirHead ; 0C99 8D 00 82 ... + lda #$03 ; 0C9C A9 03 .. + sta $8201 ; 0C9E 8D 01 82 ... + lda #$44 ; 0CA1 A9 44 .D + sta $8202 ; 0CA3 8D 02 82 ... + ldy #$2D ; 0CA6 A0 2D .- +L0CA8: lda L0D36,y ; 0CA8 B9 36 0D .6. + sta $8290,y ; 0CAB 99 90 82 ... + dey ; 0CAE 88 . + bpl L0CA8 ; 0CAF 10 F7 .. + lda #$28 ; 0CB1 A9 28 .( + sta r1L ; 0CB3 85 04 .. + lda #$00 ; 0CB5 A9 00 .. + sta r1H ; 0CB7 85 05 .. + lda #$82 ; 0CB9 A9 82 .. + sta r4H ; 0CBB 85 0B .. + lda #$00 ; 0CBD A9 00 .. + sta r4L ; 0CBF 85 0A .. + jsr PutBlock ; 0CC1 20 E7 C1 .. + ldy #$00 ; 0CC4 A0 00 .. +L0CC6: lda L0D64,y ; 0CC6 B9 64 0D .d. + sta dir2Head,y ; 0CC9 99 00 89 ... + iny ; 0CCC C8 . + bne L0CC6 ; 0CCD D0 F7 .. + lda #$28 ; 0CCF A9 28 .( + sta r1L ; 0CD1 85 04 .. + lda #$01 ; 0CD3 A9 01 .. + sta r1H ; 0CD5 85 05 .. + lda #$89 ; 0CD7 A9 89 .. + sta r4H ; 0CD9 85 0B .. + lda #$00 ; 0CDB A9 00 .. + sta r4L ; 0CDD 85 0A .. + jsr PutBlock ; 0CDF 20 E7 C1 .. + lda #$FF ; 0CE2 A9 FF .. + sta $8901 ; 0CE4 8D 01 89 ... + lda #$00 ; 0CE7 A9 00 .. + sta dir2Head ; 0CE9 8D 00 89 ... + lda #$28 ; 0CEC A9 28 .( + sta $89FA ; 0CEE 8D FA 89 ... + lda #$FF ; 0CF1 A9 FF .. + sta $89FB ; 0CF3 8D FB 89 ... + lda #$FF ; 0CF6 A9 FF .. + sta $89FD ; 0CF8 8D FD 89 ... + lda #$28 ; 0CFB A9 28 .( + sta r1L ; 0CFD 85 04 .. + lda #$02 ; 0CFF A9 02 .. + sta r1H ; 0D01 85 05 .. + lda #$89 ; 0D03 A9 89 .. + sta r4H ; 0D05 85 0B .. + lda #$00 ; 0D07 A9 00 .. + sta r4L ; 0D09 85 0A .. + jsr PutBlock ; 0D0B 20 E7 C1 .. + jsr GetDirHead ; 0D0E 20 47 C2 G. + jsr L0B1B ; 0D11 20 1B 0B .. + lda #$FF ; 0D14 A9 FF .. + sta $8001 ; 0D16 8D 01 80 ... + lda #$80 ; 0D19 A9 80 .. + sta r4H ; 0D1B 85 0B .. + lda #$00 ; 0D1D A9 00 .. + sta r4L ; 0D1F 85 0A .. + lda #$28 ; 0D21 A9 28 .( + sta r1L ; 0D23 85 04 .. + lda #$03 ; 0D25 A9 03 .. + sta r1H ; 0D27 85 05 .. + jsr PutBlock ; 0D29 20 E7 C1 .. + lda #$13 ; 0D2C A9 13 .. + sta r1H ; 0D2E 85 05 .. + jsr PutBlock ; 0D30 20 E7 C1 .. + lda #$00 ; 0D33 A9 00 .. + rts ; 0D35 60 ` +; ---------------------------------------------------------------------------- +L0D36: !text "RAM 1581" ; 0D36 52 41 4D 20 31 35 38 31 RAM 1581 + !byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 ; 0D3E A0 A0 A0 A0 A0 A0 A0 A0 ........ + !byte $A0,$A0 ; 0D46 A0 A0 .. + !text "RD" ; 0D48 52 44 RD + !byte $A0 ; 0D4A A0 . + !text "3D" ; 0D4B 33 44 3D + !byte $A0,$A0,$00,$00 ; 0D4D A0 A0 00 00 .... + !text "(" ; 0D51 28 ( + !byte $13 ; 0D52 13 . + !text "GEOS format V1.0" ; 0D53 47 45 4F 53 20 66 6F 72 GEOS for + ; 0D5B 6D 61 74 20 56 31 2E 30 mat V1.0 + !byte $00 ; 0D63 00 . +L0D64: !text "(" ; 0D64 28 ( + !byte $02 ; 0D65 02 . + !text "D" ; 0D66 44 D + !byte $BB ; 0D67 BB . + !text "EA" ; 0D68 45 41 EA + !byte $C0,$00,$00,$00,$00,$00,$00,$00 ; 0D6A C0 00 00 00 00 00 00 00 ........ + !byte $00,$00 ; 0D72 00 00 .. + !text "(" ; 0D74 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D75 FF FF FF FF FF ..... + !text "(" ; 0D7A 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D7B FF FF FF FF FF ..... + !text "(" ; 0D80 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D81 FF FF FF FF FF ..... + !text "(" ; 0D86 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D87 FF FF FF FF FF ..... + !text "(" ; 0D8C 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D8D FF FF FF FF FF ..... + !text "(" ; 0D92 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D93 FF FF FF FF FF ..... + !text "(" ; 0D98 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D99 FF FF FF FF FF ..... + !text "(" ; 0D9E 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0D9F FF FF FF FF FF ..... + !text "(" ; 0DA4 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DA5 FF FF FF FF FF ..... + !text "(" ; 0DAA 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DAB FF FF FF FF FF ..... + !text "(" ; 0DB0 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DB1 FF FF FF FF FF ..... + !text "(" ; 0DB6 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DB7 FF FF FF FF FF ..... + !text "(" ; 0DBC 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DBD FF FF FF FF FF ..... + !text "(" ; 0DC2 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DC3 FF FF FF FF FF ..... + !text "(" ; 0DC8 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DC9 FF FF FF FF FF ..... + !text "(" ; 0DCE 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DCF FF FF FF FF FF ..... + !text "(" ; 0DD4 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DD5 FF FF FF FF FF ..... + !text "(" ; 0DDA 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DDB FF FF FF FF FF ..... + !text "(" ; 0DE0 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DE1 FF FF FF FF FF ..... + !text "(" ; 0DE6 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DE7 FF FF FF FF FF ..... + !text "(" ; 0DEC 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DED FF FF FF FF FF ..... + !text "(" ; 0DF2 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DF3 FF FF FF FF FF ..... + !text "(" ; 0DF8 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DF9 FF FF FF FF FF ..... + !text "(" ; 0DFE 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0DFF FF FF FF FF FF ..... + !text "(" ; 0E04 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E05 FF FF FF FF FF ..... + !text "(" ; 0E0A 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E0B FF FF FF FF FF ..... + !text "(" ; 0E10 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E11 FF FF FF FF FF ..... + !text "(" ; 0E16 28 ( + !byte $FF,$FF ; 0E17 FF FF FF FF FF ..... +L0E19: !byte $FF,$FF,$FF + !text "(" ; 0E1C 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E1D FF FF FF FF FF ..... + !text "(" ; 0E22 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E23 FF FF FF FF FF ..... + !text "(" ; 0E28 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E29 FF FF FF FF FF ..... + !text "(" ; 0E2E 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E2F FF FF FF FF FF ..... + !text "(" ; 0E34 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E35 FF FF FF FF FF ..... + !text "(" ; 0E3A 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E3B FF FF FF FF FF ..... + !text "(" ; 0E40 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E41 FF FF FF FF FF ..... + !text "(" ; 0E46 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E47 FF FF FF FF FF ..... + !text "(" ; 0E4C 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E4D FF FF FF FF FF ..... + !text "(" ; 0E52 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E53 FF FF FF FF FF ..... + !text "(" ; 0E58 28 ( + !byte $FF,$FF,$FF,$FF,$FF ; 0E59 FF FF FF FF FF ..... + !text "#" ; 0E5E 23 # + !byte $F0,$FF,$F7,$FF,$FF ; 0E5F F0 FF F7 FF FF ..... +; ---------------------------------------------------------------------------- +L0E64: lda #$E5 ; 0E64 A9 E5 .. + sta r0H ; 0E66 85 03 .. + lda #$80 ; 0E68 A9 80 .. + sta r0L ; 0E6A 85 02 .. + jsr L0EA0 ; 0E6C 20 A0 0E .. + cpx #$00 ; 0E6F E0 00 .. + bne L0E82 ; 0E71 D0 0F .. + cmp #$00 ; 0E73 C9 00 .. + bne L0E82 ; 0E75 D0 0B .. + lda #$A6 ; 0E77 A9 A6 .. + sta r0H ; 0E79 85 03 .. + lda #$C0 ; 0E7B A9 C0 .. + sta r0L ; 0E7D 85 02 .. + jsr L0EA0 ; 0E7F 20 A0 0E .. +L0E82: cpx #$00 ; 0E82 E0 00 .. + bne L0E9D ; 0E84 D0 17 .. + tax ; 0E86 AA . + lda #$01 ; 0E87 A9 01 .. + cpx #$41 ; 0E89 E0 41 .A + beq L0E9F ; 0E8B F0 12 .. + lda #$02 ; 0E8D A9 02 .. + cpx #$71 ; 0E8F E0 71 .q + beq L0E9F ; 0E91 F0 0C .. + lda #$03 ; 0E93 A9 03 .. + ldx #$81 ; 0E95 A2 81 .. + bne L0E9F ; 0E97 D0 06 .. + lda #$FF ; 0E99 A9 FF .. + bne L0E9F ; 0E9B D0 02 .. +L0E9D: lda #$00 ; 0E9D A9 00 .. +L0E9F: rts ; 0E9F 60 ` +; ---------------------------------------------------------------------------- +L0EA0: jsr L0EF5 ; 0EA0 20 F5 0E .. + lda #$01 ; 0EA3 A9 01 .. + sta r2H ; 0EA5 85 07 .. + lda #$00 ; 0EA7 A9 00 .. + sta r2L ; 0EA9 85 06 .. +L0EAB: jsr L0F05 ; 0EAB 20 05 0F .. + cpx #$00 ; 0EAE E0 00 .. + bne L0EF4 ; 0EB0 D0 42 .B + cmp #$31 ; 0EB2 C9 31 .1 + bne L0EE4 ; 0EB4 D0 2E .. + jsr L0F05 ; 0EB6 20 05 0F .. + cmp #$35 ; 0EB9 C9 35 .5 + bne L0EE4 ; 0EBB D0 27 .' + jsr L0F05 ; 0EBD 20 05 0F .. + sta r1L ; 0EC0 85 04 .. + and #$70 ; 0EC2 29 70 )p + cmp #$30 ; 0EC4 C9 30 .0 + bne L0EE4 ; 0EC6 D0 1C .. + lda r1L ; 0EC8 A5 04 .. + asl ; 0ECA 0A . + asl ; 0ECB 0A . + asl ; 0ECC 0A . + asl ; 0ECD 0A . + sta r1L ; 0ECE 85 04 .. + jsr L0F05 ; 0ED0 20 05 0F .. + sta r1H ; 0ED3 85 05 .. + and #$70 ; 0ED5 29 70 )p + cmp #$30 ; 0ED7 C9 30 .0 + bne L0EE4 ; 0ED9 D0 09 .. + lda r1H ; 0EDB A5 05 .. + and #$0F ; 0EDD 29 0F ). + ora r1L ; 0EDF 05 04 .. + ldx #$00 ; 0EE1 A2 00 .. + rts ; 0EE3 60 ` +; ---------------------------------------------------------------------------- +L0EE4: lda r2L ; 0EE4 A5 06 .. + bne L0EEA ; 0EE6 D0 02 .. + dec r2H ; 0EE8 C6 07 .. +L0EEA: dec r2L ; 0EEA C6 06 .. + lda r2L ; 0EEC A5 06 .. + ora r2H ; 0EEE 05 07 .. + bne L0EAB ; 0EF0 D0 B9 .. + ldx #$00 ; 0EF2 A2 00 .. +L0EF4: rts ; 0EF4 60 ` +; ---------------------------------------------------------------------------- +L0EF5: lda r0H ; 0EF5 A5 03 .. + sta L0F72 ; 0EF7 8D 72 0F .r. + lda r0L ; 0EFA A5 02 .. + sta L0F71 ; 0EFC 8D 71 0F .q. + lda #$20 ; 0EFF A9 20 . + sta $2109 ; 0F01 8D 09 21 ..! + rts ; 0F04 60 ` +; ---------------------------------------------------------------------------- +L0F05: ldy $2109 ; 0F05 AC 09 21 ..! + cpy #$20 ; 0F08 C0 20 . + bcs L0F15 ; 0F0A B0 09 .. + lda $210A,y ; 0F0C B9 0A 21 ..! + inc $2109 ; 0F0F EE 09 21 ..! + ldx #$00 ; 0F12 A2 00 .. + rts ; 0F14 60 ` +; ---------------------------------------------------------------------------- +L0F15: jsr InitForIO ; 0F15 20 5C C2 \. + lda #$0F ; 0F18 A9 0F .. + sta r0H ; 0F1A 85 03 .. + lda #$6E ; 0F1C A9 6E .n + sta r0L ; 0F1E 85 02 .. + jsr L0F74 ; 0F20 20 74 0F t. + beq L0F29 ; 0F23 F0 04 .. + jsr DoneWithIO ; 0F25 20 5F C2 _. + rts ; 0F28 60 ` +; ---------------------------------------------------------------------------- +L0F29: jsr UNLSN ; 0F29 20 AE FF .. + lda curDrive ; 0F2C AD 89 84 ... + jsr TALK ; 0F2F 20 B4 FF .. + lda #$FF ; 0F32 A9 FF .. + jsr TKSA ; 0F34 20 96 FF .. + ldy #$00 ; 0F37 A0 00 .. +L0F39: jsr ACPTR ; 0F39 20 A5 FF .. + sta $210A,y ; 0F3C 99 0A 21 ..! + iny ; 0F3F C8 . + cpy #$20 ; 0F40 C0 20 . + bcc L0F39 ; 0F42 90 F5 .. + jsr UNTLK ; 0F44 20 AB FF .. + lda curDrive ; 0F47 AD 89 84 ... + jsr LISTEN ; 0F4A 20 B1 FF .. + lda #$EF ; 0F4D A9 EF .. + jsr SECOND ; 0F4F 20 93 FF .. + jsr UNLSN ; 0F52 20 AE FF .. + jsr DoneWithIO ; 0F55 20 5F C2 _. + lda #$00 ; 0F58 A9 00 .. + sta $2109 ; 0F5A 8D 09 21 ..! + clc ; 0F5D 18 . + lda #$20 ; 0F5E A9 20 . + adc L0F71 ; 0F60 6D 71 0F mq. + sta L0F71 ; 0F63 8D 71 0F .q. + bcc L0F6B ; 0F66 90 03 .. + inc L0F72 ; 0F68 EE 72 0F .r. +L0F6B: clv ; 0F6B B8 . + bvc L0F05 ; 0F6C 50 97 P. + eor $522D ; 0F6E 4D 2D 52 M-R +L0F71: brk ; 0F71 00 . +L0F72: brk ; 0F72 00 . + !byte $20 ; 0F73 20 +L0F74: lda #$00 ; 0F74 A9 00 .. + sta STATUS ; 0F76 85 90 .. + lda curDrive ; 0F78 AD 89 84 ... + jsr LISTEN ; 0F7B 20 B1 FF .. + bit STATUS ; 0F7E 24 90 $. + bmi L0F9A ; 0F80 30 18 0. + lda #$FF ; 0F82 A9 FF .. + jsr SECOND ; 0F84 20 93 FF .. + bit STATUS ; 0F87 24 90 $. + bmi L0F9A ; 0F89 30 0F 0. + ldy #$00 ; 0F8B A0 00 .. +L0F8D: lda (r0L),y ; 0F8D B1 02 .. + jsr CIOUT ; 0F8F 20 A8 FF .. + iny ; 0F92 C8 . + cpy #$06 ; 0F93 C0 06 .. + bcc L0F8D ; 0F95 90 F6 .. + ldx #$00 ; 0F97 A2 00 .. + rts ; 0F99 60 ` +; ---------------------------------------------------------------------------- +L0F9A: jsr UNLSN ; 0F9A 20 AE FF .. + ldx #$0D ; 0F9D A2 0D .. + rts ; 0F9F 60 ` +; ---------------------------------------------------------------------------- +L0FA0: lda #$00 ; 0FA0 A9 00 .. + sta NUMDRV ; 0FA2 8D 8D 84 ... + ldy #$01 ; 0FA5 A0 01 .. +L0FA7: lda driveType,y ; 0FA7 B9 8E 84 ... + beq L0FAF ; 0FAA F0 03 .. + inc NUMDRV ; 0FAC EE 8D 84 ... +L0FAF: dey ; 0FAF 88 . + bpl L0FA7 ; 0FB0 10 F5 .. + rts ; 0FB2 60 ` +; ---------------------------------------------------------------------------- +L0FB3: jsr InitForIO ; 0FB3 20 5C C2 \. + lda #$40 ; 0FB6 A9 00 .. + sta ramExpSize ; 0FB8 8D C3 88 ... + ;lda #$02 ; 0FBB A9 02 .. + sta $2102 ; 0FBD 8D 02 21 ..! + ;rts +; lda EXP_BASE ; 0FC0 AD 00 DF ... +; and #$10 ; 0FC3 29 10 ). +; beq L0FCC ; 0FC5 F0 05 .. +; lda #$20 ; 0FC7 A9 20 . +; sta $2102 ; 0FC9 8D 02 21 ..! +;L0FCC: lda EXP_BASE ; 0FCC AD 00 DF ... +; and #$E0 ; 0FCF 29 E0 ). +; bne L100D ; 0FD1 D0 3A .: +; lda #$55 ; 0FD3 A9 55 .U +; sta $DF02 ; 0FD5 8D 02 DF ... +; cmp $DF02 ; 0FD8 CD 02 DF ... +; bne L100D ; 0FDB D0 30 .0 +; lda #$AA ; 0FDD A9 AA .. +; sta $DF02 ; 0FDF 8D 02 DF ... +; ldy #$00 ; 0FE2 A0 00 .. +;L0FE4: dey ; 0FE4 88 . +; bne L0FE4 ; 0FE5 D0 FD .. +; cmp $DF02 ; 0FE7 CD 02 DF ... +; bne L100D ; 0FEA D0 21 .! +; lda #$01 ; 0FEC A9 01 .. +; sta ramExpSize ; 0FEE 8D C3 88 ... +; lda #$00 ; 0FF1 A9 00 .. +; sta r3L ; 0FF3 85 08 .. +;L0FF5: jsr L1010 ; 0FF5 20 10 10 .. +; bcc L100A ; 0FF8 90 10 .. +; lda ramExpSize ; 0FFA AD C3 88 ... +; cmp $2102 ; 0FFD CD 02 21 ..! +; beq L100D ; 1000 F0 0B .. +; inc ramExpSize ; 1002 EE C3 88 ... +; inc r3L ; 1005 E6 08 .. +; clv ; 1007 B8 . +; bvc L0FF5 ; 1008 50 EB P. +;L100A: dec ramExpSize ; 100A CE C3 88 ... +L100D: jmp DoneWithIO ; 100D 4C 5F C2 L_. +; ---------------------------------------------------------------------------- + *=$1010 +L1010: lda #$20 ; 1010 A9 20 . + sta r0H ; 1012 85 03 .. + lda #$FA ; 1014 A9 FA .. + sta r0L ; 1016 85 02 .. + lda #$00 ; 1018 A9 00 .. + sta r1L ; 101A 85 04 .. + sta r1H ; 101C 85 05 .. + lda #$00 ; 101E A9 00 .. + sta r2H ; 1020 85 07 .. + lda #$08 ; 1022 A9 08 .. + sta r2L ; 1024 85 06 .. + jsr FetchRAM ; 1026 20 CB C2 .. + lda #$10 ; 1029 A9 10 .. + sta r0H ; 102B 85 03 .. + lda #$79 ; 102D A9 79 .y + sta r0L ; 102F 85 02 .. + jsr StashRAM ; 1031 20 C8 C2 .. + lda #$20 ; 1034 A9 20 . + sta r0H ; 1036 85 03 .. + lda #$EA ; 1038 A9 EA .. + sta r0L ; 103A 85 02 .. + jsr FetchRAM ; 103C 20 CB C2 .. + lda r3L ; 103F A5 08 .. + pha ; 1041 48 H + lda #$00 ; 1042 A9 00 .. + sta r3L ; 1044 85 08 .. + lda #$20 ; 1046 A9 20 . + sta r0H ; 1048 85 03 .. + lda #$F2 ; 104A A9 F2 .. + sta r0L ; 104C 85 02 .. + jsr FetchRAM ; 104E 20 CB C2 .. + pla ; 1051 68 h + sta r3L ; 1052 85 08 .. + lda #$20 ; 1054 A9 20 . + sta r0H ; 1056 85 03 .. + lda #$FA ; 1058 A9 FA .. + sta r0L ; 105A 85 02 .. + jsr StashRAM ; 105C 20 C8 C2 .. + ldy #$07 ; 105F A0 07 .. +L1061: lda L1079,y ; 1061 B9 79 10 .y. + cmp $20EA,y ; 1064 D9 EA 20 .. + bne L1077 ; 1067 D0 0E .. + ldx r3L ; 1069 A6 08 .. + beq L1072 ; 106B F0 05 .. + cmp $20F2,y ; 106D D9 F2 20 .. + beq L1077 ; 1070 F0 05 .. +L1072: dey ; 1072 88 . + bpl L1061 ; 1073 10 EC .. + sec ; 1075 38 8 + rts ; 1076 60 ` +; ---------------------------------------------------------------------------- +L1077: clc ; 1077 18 . + rts ; 1078 60 ` +; ---------------------------------------------------------------------------- +L1079: !text "RAMCheck" ; 1079 52 41 4D 43 68 65 63 6B RAMCheck +; ---------------------------------------------------------------------------- +L1081: lda sysRAMFlg ; 1081 AD C4 88 ... + and #$20 ; 1084 29 20 ) + beq L1094 ; 1086 F0 0C .. + lda $2104 ; 1088 AD 04 21 ..! + jsr L073E ; 108B 20 3E 07 >. + jsr L1095 ; 108E 20 95 10 .. + jsr L1145 ; 1091 20 45 11 E. +L1094: rts ; 1094 60 ` +; ---------------------------------------------------------------------------- +L1095: jsr L113A ; 1095 20 3A 11 :. + lda #$84 ; 1098 A9 84 .. + sta r0H ; 109A 85 03 .. + lda #$79 ; 109C A9 79 .y + sta r1H ; 109E 85 05 .. + lda #$05 ; 10A0 A9 05 .. + sta r2H ; 10A2 85 07 .. + jsr StashRAM ; 10A4 20 C8 C2 .. + bit sysRAMFlg ; 10A7 2C C4 88 ,.. + bvs L10C2 ; 10AA 70 16 p. + jsr L113A ; 10AC 20 3A 11 :. + lda #$90 ; 10AF A9 90 .. + sta r0H ; 10B1 85 03 .. + lda #$83 ; 10B3 A9 83 .. + sta r1H ; 10B5 85 05 .. + lda #$0D ; 10B7 A9 0D .. + sta r2H ; 10B9 85 07 .. + lda #$80 ; 10BB A9 80 .. + sta r2L ; 10BD 85 06 .. + jsr StashRAM ; 10BF 20 C8 C2 .. +L10C2: jsr L113A ; 10C2 20 3A 11 :. + lda #$80 ; 10C5 A9 80 .. + sta r0L ; 10C7 85 02 .. + sta r2L ; 10C9 85 06 .. + lda #$9D ; 10CB A9 9D .. + sta r0H ; 10CD 85 03 .. + lda #$B9 ; 10CF A9 B9 .. + sta r1H ; 10D1 85 05 .. + lda #$00 ; 10D3 A9 00 .. + sta r3L ; 10D5 85 08 .. + lda #$02 ; 10D7 A9 02 .. + sta r2H ; 10D9 85 07 .. + jsr StashRAM ; 10DB 20 C8 C2 .. + jsr L113A ; 10DE 20 3A 11 :. + lda #$BF ; 10E1 A9 BF .. + sta r0H ; 10E3 85 03 .. + lda #$40 ; 10E5 A9 40 .@ + sta r0L ; 10E7 85 02 .. + lda #$BB ; 10E9 A9 BB .. + sta r1H ; 10EB 85 05 .. + lda #$80 ; 10ED A9 80 .. + sta r1L ; 10EF 85 04 .. + lda #$10 ; 10F1 A9 10 .. + sta r2H ; 10F3 85 07 .. + lda #$C0 ; 10F5 A9 C0 .. + sta r2L ; 10F7 85 06 .. + jsr StashRAM ; 10F9 20 C8 C2 .. + lda #$30 ; 10FC A9 30 .0 + sta r4L ; 10FE 85 0A .. + lda #$D0 ; 1100 A9 D0 .. + sta r5H ; 1102 85 0D .. + lda #$00 ; 1104 A9 00 .. + sta r5L ; 1106 85 0C .. + lda #$80 ; 1108 A9 80 .. + sta r0H ; 110A 85 03 .. + lda #$00 ; 110C A9 00 .. + sta r0L ; 110E 85 02 .. + lda #$CC ; 1110 A9 CC .. + sta r1H ; 1112 85 05 .. + lda #$40 ; 1114 A9 40 .@ + sta r1L ; 1116 85 04 .. + lda #$01 ; 1118 A9 01 .. + sta r2H ; 111A 85 07 .. + lda #$00 ; 111C A9 00 .. + sta r2L ; 111E 85 06 .. + lda #$00 ; 1120 A9 00 .. + sta r3L ; 1122 85 08 .. +L1124: ldy #$00 ; 1124 A0 00 .. +L1126: lda (r5L),y ; 1126 B1 0C .. + sta diskBlkBuf,y ; 1128 99 00 80 ... + iny ; 112B C8 . + bne L1126 ; 112C D0 F8 .. + jsr StashRAM ; 112E 20 C8 C2 .. + inc r5H ; 1131 E6 0D .. + inc r1H ; 1133 E6 05 .. + dec r4L ; 1135 C6 0A .. + bne L1124 ; 1137 D0 EB .. + rts ; 1139 60 ` +; ---------------------------------------------------------------------------- +L113A: lda #$00 ; 113A A9 00 .. + sta r0L ; 113C 85 02 .. + sta r1L ; 113E 85 04 .. + sta r2L ; 1140 85 06 .. + sta r3L ; 1142 85 08 .. + rts ; 1144 60 ` +; ---------------------------------------------------------------------------- +L1145: jsr L113A ; 1145 20 3A 11 :. + lda #$7E ; 1148 A9 7E .~ + sta r1H ; 114A 85 05 .. + lda #$05 ; 114C A9 05 .. + sta r2H ; 114E 85 07 .. + lda #$11 ; 1150 A9 11 .. + sta r0H ; 1152 85 03 .. + lda #$5B ; 1154 A9 5B .[ + sta r0L ; 1156 85 02 .. + jmp StashRAM ; 1158 4C C8 C2 L.. +; ---------------------------------------------------------------------------- + sei ; 115B 78 x + cld ; 115C D8 . + ldx #$FF ; 115D A2 FF .. + txs ; 115F 9A . + lda #$30 ; 1160 A9 30 .0 + sta CPU_DATA ; 1162 85 01 .. + lda #$90 ; 1164 A9 90 .. + sta r0H ; 1166 85 03 .. + lda #$00 ; 1168 A9 00 .. + sta r0L ; 116A 85 02 .. + lda #$83 ; 116C A9 83 .. + sta r1H ; 116E 85 05 .. + lda #$00 ; 1170 A9 00 .. + sta r1L ; 1172 85 04 .. + lda #$0D ; 1174 A9 0D .. + sta r2H ; 1176 85 07 .. + lda #$80 ; 1178 A9 80 .. + sta r2L ; 117A 85 06 .. + jsr L6216 ; 117C 20 16 62 .b + lda #$9D ; 117F A9 9D .. + sta r0H ; 1181 85 03 .. + lda #$80 ; 1183 A9 80 .. + sta r0L ; 1185 85 02 .. + lda #$B9 ; 1187 A9 B9 .. + sta r1H ; 1189 85 05 .. + lda #$00 ; 118B A9 00 .. + sta r1L ; 118D 85 04 .. + lda #$02 ; 118F A9 02 .. + sta r2H ; 1191 85 07 .. + lda #$80 ; 1193 A9 80 .. + sta r2L ; 1195 85 06 .. + jsr L6216 ; 1197 20 16 62 .b + lda #$BF ; 119A A9 BF .. + sta r0H ; 119C 85 03 .. + lda #$40 ; 119E A9 40 .@ + sta r0L ; 11A0 85 02 .. + lda #$BB ; 11A2 A9 BB .. + sta r1H ; 11A4 85 05 .. + lda #$80 ; 11A6 A9 80 .. + sta r1L ; 11A8 85 04 .. + lda #$00 ; 11AA A9 00 .. + sta r2H ; 11AC 85 07 .. + lda #$C0 ; 11AE A9 C0 .. + sta r2L ; 11B0 85 06 .. + jsr L6216 ; 11B2 20 16 62 .b + lda #$C0 ; 11B5 A9 C0 .. + sta r0H ; 11B7 85 03 .. + lda #$80 ; 11B9 A9 80 .. + sta r0L ; 11BB 85 02 .. + lda #$BC ; 11BD A9 BC .. + sta r1H ; 11BF 85 05 .. + lda #$C0 ; 11C1 A9 C0 .. + sta r1L ; 11C3 85 04 .. + lda #$0F ; 11C5 A9 0F .. + sta r2H ; 11C7 85 07 .. + lda #$80 ; 11C9 A9 80 .. + sta r2L ; 11CB 85 06 .. + jsr L6216 ; 11CD 20 16 62 .b + lda #$30 ; 11D0 A9 30 .0 + sta r4L ; 11D2 85 0A .. + lda #$D0 ; 11D4 A9 D0 .. + sta r5H ; 11D6 85 0D .. + lda #$00 ; 11D8 A9 00 .. + sta r5L ; 11DA 85 0C .. + lda #$80 ; 11DC A9 80 .. + sta r0H ; 11DE 85 03 .. + lda #$00 ; 11E0 A9 00 .. + sta r0L ; 11E2 85 02 .. + lda #$CC ; 11E4 A9 CC .. + sta r1H ; 11E6 85 05 .. + lda #$40 ; 11E8 A9 40 .@ + sta r1L ; 11EA 85 04 .. + lda #$01 ; 11EC A9 01 .. + sta r2H ; 11EE 85 07 .. + lda #$00 ; 11F0 A9 00 .. + sta r2L ; 11F2 85 06 .. +L11F4: jsr L6216 ; 11F4 20 16 62 .b + ldy #$00 ; 11F7 A0 00 .. +L11F9: lda diskBlkBuf,y ; 11F9 B9 00 80 ... + sta (r5L),y ; 11FC 91 0C .. + iny ; 11FE C8 . + bne L11F9 ; 11FF D0 F8 .. + inc r5H ; 1201 E6 0D .. + inc r1H ; 1203 E6 05 .. + dec r4L ; 1205 C6 0A .. + bne L11F4 ; 1207 D0 EB .. + jsr i_FillRam ; 1209 20 B4 C1 .. + brk ; 120C 00 . + ora CPU_DDR ; 120D 05 00 .. + sty CPU_DDR ; 120F 84 00 .. + lda #$00 ; 1211 A9 00 .. + sta r0L ; 1213 85 02 .. + lda #$A0 ; 1215 A9 A0 .. + sta r0H ; 1217 85 03 .. + ldx #$7D ; 1219 A2 7D .} +L121B: ldy #$3F ; 121B A0 3F .? +L121D: lda #$55 ; 121D A9 55 .U + sta (r0L),y ; 121F 91 02 .. + dey ; 1221 88 . + lda #$AA ; 1222 A9 AA .. + sta (r0L),y ; 1224 91 02 .. + dey ; 1226 88 . + bpl L121D ; 1227 10 F4 .. + lda r0L ; 1229 A5 02 .. + clc ; 122B 18 . + adc #$40 ; 122C 69 40 i@ + sta r0L ; 122E 85 02 .. + bcc L1234 ; 1230 90 02 .. + inc r0H ; 1232 E6 03 .. +L1234: dex ; 1234 CA . + bne L121B ; 1235 D0 E4 .. + jsr FirstInit ; 1237 20 71 C2 q. + lda #$FF ; 123A A9 FF .. + sta firstBoot ; 123C 8D C5 88 ... + jsr MOUSE_BASE ; 123F 20 80 FE .. + lda #$88 ; 1242 A9 88 .. + sta r0H ; 1244 85 03 .. + lda #$C3 ; 1246 A9 C3 .. + sta r0L ; 1248 85 02 .. + lda #$7D ; 124A A9 7D .} + sta r1H ; 124C 85 05 .. + lda #$C3 ; 124E A9 C3 .. + sta r1L ; 1250 85 04 .. + lda #$00 ; 1252 A9 00 .. + sta r2H ; 1254 85 07 .. + lda #$02 ; 1256 A9 02 .. + sta r2L ; 1258 85 06 .. + jsr L6216 ; 125A 20 16 62 .b + lda sysFlgCopy ; 125D AD 12 C0 ... + sta sysRAMFlg ; 1260 8D C4 88 ... + lda #$85 ; 1263 A9 85 .. + sta r0H ; 1265 85 03 .. + lda #$16 ; 1267 A9 16 .. + sta r0L ; 1269 85 02 .. + lda #$7A ; 126B A9 7A .z + sta r1H ; 126D 85 05 .. + lda #$16 ; 126F A9 16 .. + sta r1L ; 1271 85 04 .. + lda #$00 ; 1273 A9 00 .. + sta r2H ; 1275 85 07 .. + lda #$03 ; 1277 A9 03 .. + sta r2L ; 1279 85 06 .. + lda #$00 ; 127B A9 00 .. + sta r3L ; 127D 85 08 .. + jsr FetchRAM ; 127F 20 CB C2 .. + lda $DC08 ; 1282 AD 08 DC ... + sta $DC08 ; 1285 8D 08 DC ... + lda #$84 ; 1288 A9 84 .. + sta r0H ; 128A 85 03 .. + lda #$8E ; 128C A9 8E .. + sta r0L ; 128E 85 02 .. + lda #$79 ; 1290 A9 79 .y + sta r1H ; 1292 85 05 .. + lda #$8E ; 1294 A9 8E .. + sta r1L ; 1296 85 04 .. + lda #$00 ; 1298 A9 00 .. + sta r2H ; 129A 85 07 .. + lda #$04 ; 129C A9 04 .. + sta r2L ; 129E 85 06 .. + jsr FetchRAM ; 12A0 20 CB C2 .. + lda #$88 ; 12A3 A9 88 .. + sta r0H ; 12A5 85 03 .. + lda #$C7 ; 12A7 A9 C7 .. + sta r0L ; 12A9 85 02 .. + lda #$7D ; 12AB A9 7D .} + sta r1H ; 12AD 85 05 .. + lda #$C7 ; 12AF A9 C7 .. + sta r1L ; 12B1 85 04 .. + lda #$00 ; 12B3 A9 00 .. + sta r2H ; 12B5 85 07 .. + lda #$04 ; 12B7 A9 04 .. + sta r2L ; 12B9 85 06 .. + jsr FetchRAM ; 12BB 20 CB C2 .. + lda #$84 ; 12BE A9 84 .. + sta r0H ; 12C0 85 03 .. + lda #$65 ; 12C2 A9 65 .e + sta r0L ; 12C4 85 02 .. + lda #$79 ; 12C6 A9 79 .y + sta r1H ; 12C8 85 05 .. + lda #$65 ; 12CA A9 65 .e + sta r1L ; 12CC 85 04 .. + lda #$00 ; 12CE A9 00 .. + sta r2H ; 12D0 85 07 .. + lda #$11 ; 12D2 A9 11 .. + sta r2L ; 12D4 85 06 .. + jsr FetchRAM ; 12D6 20 CB C2 .. + lda #$88 ; 12D9 A9 88 .. + sta r0H ; 12DB 85 03 .. + lda #$CB ; 12DD A9 CB .. + sta r0L ; 12DF 85 02 .. + lda #$7D ; 12E1 A9 7D .} + sta r1H ; 12E3 85 05 .. + lda #$CB ; 12E5 A9 CB .. + sta r1L ; 12E7 85 04 .. + lda #$00 ; 12E9 A9 00 .. + sta r2H ; 12EB 85 07 .. + lda #$11 ; 12ED A9 11 .. + sta r2L ; 12EF 85 06 .. + jsr FetchRAM ; 12F1 20 CB C2 .. + lda #$84 ; 12F4 A9 84 .. + sta r0H ; 12F6 85 03 .. + lda #$89 ; 12F8 A9 89 .. + sta r0L ; 12FA 85 02 .. + lda #$79 ; 12FC A9 79 .y + sta r1H ; 12FE 85 05 .. + lda #$89 ; 1300 A9 89 .. + sta r1L ; 1302 85 04 .. + lda #$00 ; 1304 A9 00 .. + sta r2H ; 1306 85 07 .. + lda #$01 ; 1308 A9 01 .. + sta r2L ; 130A 85 06 .. + jsr FetchRAM ; 130C 20 CB C2 .. + jsr InitForIO ; 130F 20 5C C2 \. + lda #$04 ; 1312 A9 04 .. + sta r0L ; 1314 85 02 .. +L1316: ldy #$00 ; 1316 A0 00 .. + ldx #$00 ; 1318 A2 00 .. +L131A: dey ; 131A 88 . + bne L131A ; 131B D0 FD .. + dex ; 131D CA . + bne L131A ; 131E D0 FA .. + dec r0L ; 1320 C6 02 .. + bne L1316 ; 1322 D0 F2 .. + jsr DoneWithIO ; 1324 20 5F C2 _. + lda curDrive ; 1327 AD 89 84 ... + pha ; 132A 48 H + lda #$0B ; 132B A9 0B .. + sta curDrive ; 132D 8D 89 84 ... + sta curDevice ; 1330 85 BA .. + lda #$00 ; 1332 A9 00 .. + sta NUMDRV ; 1334 8D 8D 84 ... + sta curDevice ; 1337 85 BA .. + lda #$08 ; 1339 A9 08 .. + sta interleave ; 133B 8D 8C 84 ... + jsr SetDevice ; 133E 20 B0 C2 .. + lda #$08 ; 1341 A9 08 .. + sta $2103 ; 1343 8D 03 21 ..! +L1346: ldy $2103 ; 1346 AC 03 21 ..! + lda $8486,y ; 1349 B9 86 84 ... + beq L135E ; 134C F0 10 .. + cpy #$0A ; 134E C0 0A .. + bcs L1355 ; 1350 B0 03 .. + inc NUMDRV ; 1352 EE 8D 84 ... +L1355: lda $2103 ; 1355 AD 03 21 ..! + jsr SetDevice ; 1358 20 B0 C2 .. + jsr NewDisk ; 135B 20 E1 C1 .. +L135E: inc $2103 ; 135E EE 03 21 ..! + lda $2103 ; 1361 AD 03 21 ..! + cmp #$0C ; 1364 C9 0C .. + bcc L1346 ; 1366 90 DE .. + beq L1346 ; 1368 F0 DC .. + pla ; 136A 68 h + jsr SetDevice ; 136B 20 B0 C2 .. + jmp EnterDeskTop ; 136E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + *=$1371 + jmp FetchRAM +; ldy #$91 ; 1371 A0 91 .. +; ldx CPU_DATA ; 1373 A6 01 .. +; lda #$35 ; 1375 A9 35 .5 +; sta CPU_DATA ; 1377 85 01 .. +; lda r0H ; 1379 A5 03 .. +; sta $DF03 ; 137B 8D 03 DF ... +; lda r0L ; 137E A5 02 .. +; sta $DF02 ; 1380 8D 02 DF ... +; lda r1H ; 1383 A5 05 .. +; sta $DF05 ; 1385 8D 05 DF ... +; lda r1L ; 1388 A5 04 .. +; sta $DF04 ; 138A 8D 04 DF ... +; lda #$00 ; 138D A9 00 .. +; sta $DF06 ; 138F 8D 06 DF ... +; lda r2H ; 1392 A5 07 .. +; sta $DF08 ; 1394 8D 08 DF ... +; lda r2L ; 1397 A5 06 .. +; sta $DF07 ; 1399 8D 07 DF ... +; lda #$00 ; 139C A9 00 .. +; sta $DF09 ; 139E 8D 09 DF ... +; sta $DF0A ; 13A1 8D 0A DF ... +; sty $DF01 ; 13A4 8C 01 DF ... +;L13A7: lda EXP_BASE ; 13A7 AD 00 DF ... +; and #$60 ; 13AA 29 60 )` +; beq L13A7 ; 13AC F0 F9 .. +; stx CPU_DATA ; 13AE 86 01 .. +; rts ; 13B0 60 ` +; ---------------------------------------------------------------------------- + *=$13b1 + !byte $A2 ; 13B1 A2 . diff --git a/_newconf/newconf/r0.asm.modified b/_newconf/newconf/r0.asm.modified new file mode 100644 index 00000000..1d45272e --- /dev/null +++ b/_newconf/newconf/r0.asm.modified @@ -0,0 +1,2271 @@ +; da65 V2.13.2 - (C) Copyright 2000-2009, Ullrich von Bassewitz +; Created: 2010-05-27 16:53:19 +; Input file: r0,prg +; Page: 1 + + +; .setcpu "6502" +*=$406 +; ---------------------------------------------------------------------------- +r0L = $02 +r0H = $03 +r1L = $04 +r1H = $05 + +ramExpSize = $88c3 +sysRAMFlg = $88C4 +firstBoot = $88C5 +curType = $88C6 +ramBase = $88C7 +DISK_BASE = $9000 + +FetchRAM = $C2CB +StashRAM = $C2C8 + +L1466 = $1466 +L1E05 = $1E05 +L3156 = $3156 +L3531 = $3531 +L5620 = $5620 +L6216 = $6216 +L6F66 = $6F66 + +LC17E = $C17E +LC1B4 = $C1B4 +LC1B7 = $C1B7 +LC1E1 = $C1E1 +LC1E7 = $C1E7 + +EnterDesktop = $C22C +LC232 = $C232 +LC235 = $C235 +LC23B = $C23B +LC247 = $C247 +LC24A = $C24A +LC25C = $C25C +LC25F = $C25F +LC271 = $C271 +LC274 = $C274 +LC277 = $C277 +LC280 = $C280 +LC28C = $C28C +LC2B0 = $C2B0 +LC2C8 = $C2C8 +;LC2CB = $C2CB + +LFE80 = $FE80 +LFF93 = $FF93 +LFF96 = $FF96 +LFFA5 = $FFA5 +LFFA8 = $FFA8 +LFFAB = $FFAB +LFFAE = $FFAE +LFFB1 = $FFB1 +LFFB4 = $FFB4 +; ---------------------------------------------------------------------------- +L0406: !byte $01,$03; ora ($03,x) ; 0406 01 03 .. +L0408: !byte $03 ; 0408 03 . + !byte $00 ;brk ; 0409 00 . + +L040A: !byte $00; $e0 ;cpx #$20 +; brk ; 0406 00 . +; brk ; 0407 00 . +;L0408: brk ; 0408 00 . +; brk ; 0409 00 . +;L040A: brk ; 040A 00 . + jsr L047C ; 040B 20 7C 04 |. + lda firstBoot ; 040E AD C5 88 ... + cmp #$FF ; 0411 C9 FF .. + bne L0418 ; 0413 D0 03 .. + jmp L04EC ; 0415 4C EC 04 L.. +; ---------------------------------------------------------------------------- +L0418: bit $C013 ; 0418 2C 13 C0 ,.. + bmi L0479 ; 041B 30 5C 0\ + lda $8489 ; 041D AD 89 84 ... + sta $2104 ; 0420 8D 04 21 ..! + tay ; 0423 A8 . + lda $8486,y ; 0424 B9 86 84 ... + sta $2105 ; 0427 8D 05 21 ..! + jsr L0FB3 ; 042A 20 B3 0F .. + jsr LC1B7 ; 042D 20 B7 C1 .. + brk ; 0430 00 . + bvc L0483 ; 0431 50 50 PP + and ($00,x) ; 0433 21 00 !. + !byte $04 ; 0435 04 . + lda #$01 ; 0436 A9 01 .. + sta $848D ; 0438 8D 8D 84 ... + jsr L0558 ; 043B 20 58 05 X. + lda $2104 ; 043E AD 04 21 ..! + jsr L073E ; 0441 20 3E 07 >. + jsr L1081 ; 0444 20 81 10 .. + jsr L0FA0 ; 0447 20 A0 0F .. + lda ramExpSize ; 044A AD C3 88 ... + bne L0470 ; 044D D0 21 .! + lda $848D ; 044F AD 8D 84 ... + cmp #$02 ; 0452 C9 02 .. + bcc L0470 ; 0454 90 1A .. + lda $848E ; 0456 AD 8E 84 ... + cmp $848F ; 0459 CD 8F 84 ... + bne L0462 ; 045C D0 04 .. + cmp #$03 ; 045E C9 03 .. + bne L0470 ; 0460 D0 0E .. +L0462: jsr L0739 ; 0462 20 39 07 9. + jsr LC235 ; 0465 20 35 C2 5. + jsr L0739 ; 0468 20 39 07 9. + lda #$01 ; 046B A9 01 .. + sta $848D ; 046D 8D 8D 84 ... +L0470: jsr LC1B7 ; 0470 20 B7 C1 .. + bvc L0496 ; 0473 50 21 P! + brk ; 0475 00 . + bvc L0478 ; 0476 50 00 P. +L0478: !byte $04 ; 0478 04 . +L0479: jmp EnterDesktop ;LC22C ; 0479 4C 2C C2 L,. +; ---------------------------------------------------------------------------- +L047C: bit $C013 ; 047C 2C 13 C0 ,.. + bmi L048E ; 047F 30 0D 0. + !byte $AD ; 0481 AD . + !byte $0F ; 0482 0F . +L0483: cpy #$C9 ; 0483 C0 C9 .. + !byte $14 ; 0485 14 . + bcs L048E ; 0486 B0 06 .. + jsr L04CC ; 0488 20 CC 04 .. + jsr L048F ; 048B 20 8F 04 .. +L048E: rts ; 048E 60 ` +; ---------------------------------------------------------------------------- +L048F: lda #$C3 ; 048F A9 C3 .. + sta r0H ; 0491 85 03 .. + lda #$10 ; 0493 A9 10 .. + !byte $85 ; 0495 85 . +L0496: !byte $02 ; 0496 02 . + ldy #$00 ; 0497 A0 00 .. + sty r1L ; 0499 84 04 .. + jsr L04A2 ; 049B 20 A2 04 .. + lda #$05 ; 049E A9 05 .. + sta r1L ; 04A0 85 04 .. +L04A2: ldx r1L ; 04A2 A6 04 .. +L04A4: lda ($02),y ; 04A4 B1 02 .. + cmp L04C2,x ; 04A6 DD C2 04 ... + beq L04B3 ; 04A9 F0 08 .. + cpx r1L ; 04AB E4 04 .. + bne L04A2 ; 04AD D0 F3 .. + iny ; 04AF C8 . + bne L04A2 ; 04B0 D0 F0 .. + rts ; 04B2 60 ` +; ---------------------------------------------------------------------------- +L04B3: iny ; 04B3 C8 . + bne L04B7 ; 04B4 D0 01 .. + rts ; 04B6 60 ` +; ---------------------------------------------------------------------------- +L04B7: inx ; 04B7 E8 . + lda L04C2,x ; 04B8 BD C2 04 ... + bne L04A4 ; 04BB D0 E7 .. + lda #$34 ; 04BD A9 34 .4 + sta ($02),y ; 04BF 91 02 .. + rts ; 04C1 60 ` +; ---------------------------------------------------------------------------- +L04C2: lda $815C ; 04C2 AD 5C 81 .\. + cmp #$00 ; 04C5 C9 00 .. + jsr L3156 ; 04C7 20 56 31 V1 + !byte $2E ; 04CA 2E . + brk ; 04CB 00 . +L04CC: lda $C00F ; 04CC AD 0F C0 ... + cmp #$13 ; 04CF C9 13 .. + bne L04EB ; 04D1 D0 18 .. + lda $C2B2 ; 04D3 AD B2 C2 ... + sta r0H ; 04D6 85 03 .. + lda $C2B1 ; 04D8 AD B1 C2 ... + sta r0L ; 04DB 85 02 .. + ldy #$00 ; 04DD A0 00 .. + lda ($02),y ; 04DF B1 02 .. + cmp #$EA ; 04E1 C9 EA .. + beq L04EB ; 04E3 F0 06 .. + ldy #$03 ; 04E5 A0 03 .. + lda #$3D ; 04E7 A9 3D .= + sta ($02),y ; 04E9 91 02 .. +L04EB: rts ; 04EB 60 ` +; ---------------------------------------------------------------------------- +L04EC: jsr L0522 ; 04EC 20 22 05 ". + txa ; 04EF 8A . + bne L050E ; 04F0 D0 1C .. + lda #$01 ; 04F2 A9 01 .. + jsr LC280 ; 04F4 20 80 C2 .. + lda #$13 ; 04F7 A9 13 .. + sta $11 ; 04F9 85 11 .. + lda #$B1 ; 04FB A9 B1 .. + sta $10 ; 04FD 85 10 .. + lda #$FF ; 04FF A9 FF .. + sta $06 ; 0501 85 06 .. + sta $07 ; 0503 85 07 .. + jsr LC28C ; 0505 20 8C C2 .. + txa ; 0508 8A . + bne L050E ; 0509 D0 03 .. + jmp L1466 ; 050B 4C 66 14 Lf. +; ---------------------------------------------------------------------------- +L050E: jmp EnterDesktop ;LC22C ; 050E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + !byte $43 ; 0511 43 C + !byte $6F ; 0512 6F o + ror $6966 ; 0513 6E 66 69 nfi + !byte $67 ; 0516 67 g + adc $72,x ; 0517 75 72 ur + adc $20 ; 0519 65 20 e + jsr L5620 ; 051B 20 20 56 V + !byte $32 ; 051E 32 2 + rol $0031 ; 051F 2E 31 00 .1. + +L0522: ldx #$00 ; 0522 A2 00 .. + lda L06AC ; 0524 AD AC 06 ... + bne L0557 ; 0527 D0 2E .. + lda #$20 ; 0529 A9 20 . + sta $0F ; 052B 85 0F .. + lda #$D9 ; 052D A9 D9 .. + sta $0E ; 052F 85 0E .. + lda #$0E ; 0531 A9 0E .. + sta $10 ; 0533 85 10 .. + lda #$01 ; 0535 A9 01 .. + sta $11 ; 0537 85 11 .. + lda #$05 ; 0539 A9 05 .. + sta $17 ; 053B 85 17 .. + lda #$11 ; 053D A9 11 .. + sta $16 ; 053F 85 16 .. + jsr LC23B ; 0541 20 3B C2 ;. + txa ; 0544 8A . + bne L0557 ; 0545 D0 10 .. + lda #$20 ; 0547 A9 20 . + sta r0H ; 0549 85 03 .. + lda #$D9 ; 054B A9 D9 .. + sta r0L ; 054D 85 02 .. + jsr LC274 ; 054F 20 74 C2 t. + lda #$FF ; 0552 A9 FF .. + sta L06AC ; 0554 8D AC 06 ... +L0557: rts ; 0557 60 ` +; ---------------------------------------------------------------------------- +L0558: jsr LC232 ; 0558 20 32 C2 2. + lda ramExpSize ; 055B AD C3 88 ... + beq L0563 ; 055E F0 03 .. + lda L040A ; 0560 AD 0A 04 ... +L0563: and #$A0 ; 0563 29 A0 ). + sta sysRAMFlg ; 0565 8D C4 88 ... + sta $C012 ; 0568 8D 12 C0 ... + lda $2105 ; 056B AD 05 21 ..! + cmp #$02 ; 056E C9 02 .. + bcs L057B ; 0570 B0 09 .. + jsr L0E64 ; 0572 20 64 0E d. + cmp #$FF ; 0575 C9 FF .. + bne L057B ; 0577 D0 02 .. + lda #$01 ; 0579 A9 01 .. +L057B: sta $2106 ; 057B 8D 06 21 ..! + lda $8489 ; 057E AD 89 84 ... + eor #$01 ; 0581 49 01 I. + jsr LC2B0 ; 0583 20 B0 C2 .. + jsr L0E64 ; 0586 20 64 0E d. + cmp #$FF ; 0589 C9 FF .. + bne L058F ; 058B D0 02 .. + lda #$00 ; 058D A9 00 .. +L058F: sta $2107 ; 058F 8D 07 21 ..! + lda ramExpSize ; 0592 AD C3 88 ... + beq L05A3 ; 0595 F0 0C .. + lda #$0A ; 0597 A9 0A .. + jsr LC2B0 ; 0599 20 B0 C2 .. + jsr L0E64 ; 059C 20 64 0E d. + cmp #$FF ; 059F C9 FF .. + bne L05A5 ; 05A1 D0 02 .. +L05A3: lda #$00 ; 05A3 A9 00 .. +L05A5: sta $2108 ; 05A5 8D 08 21 ..! + lda $2104 ; 05A8 AD 04 21 ..! + jsr LC2B0 ; 05AB 20 B0 C2 .. + jsr L06B2 ; 05AE 20 B2 06 .. + jsr L064A ; 05B1 20 4A 06 J. + txa ; 05B4 8A . + bne L05F7 ; 05B5 D0 40 .@ + jsr LC235 ; 05B7 20 35 C2 5. + ldy #$03 ; 05BA A0 03 .. + lda #$00 ; 05BC A9 00 .. + sta $848D ; 05BE 8D 8D 84 ... +L05C1: sta $848E,y ; 05C1 99 8E 84 ... + sta $8492,y ; 05C4 99 92 84 ... + sta $88BF,y ; 05C7 99 BF 88 ... + sta ramBase,y ; 05CA 99 C7 88 ... + dey ; 05CD 88 . + bpl L05C1 ; 05CE 10 F1 .. + jsr L05F8 ; 05D0 20 F8 05 .. + lda $2106 ; 05D3 AD 06 21 ..! + jsr L0769 ; 05D6 20 69 07 i. + lda $2107 ; 05D9 AD 07 21 ..! + beq L05E7 ; 05DC F0 09 .. + jsr L0739 ; 05DE 20 39 07 9. + lda $2107 ; 05E1 AD 07 21 ..! + jsr L0769 ; 05E4 20 69 07 i. +L05E7: lda $2108 ; 05E7 AD 08 21 ..! + beq L05F7 ; 05EA F0 0B .. + lda #$0A ; 05EC A9 0A .. + jsr L073E ; 05EE 20 3E 07 >. + lda $2108 ; 05F1 AD 08 21 ..! + jsr L0769 ; 05F4 20 69 07 i. +L05F7: rts ; 05F7 60 ` +; ---------------------------------------------------------------------------- +L05F8: lda ramExpSize ; 05F8 AD C3 88 ... + beq L0615 ; 05FB F0 18 .. + lda #$08 ; 05FD A9 08 .. + sta $212B ; 05FF 8D 2B 21 .+! + lda $2106 ; 0602 AD 06 21 ..! + sta $212F ; 0605 8D 2F 21 ./! +L0608: jsr L09C8 ; 0608 20 C8 09 .. + inc $212B ; 060B EE 2B 21 .+! + lda $212B ; 060E AD 2B 21 .+! + cmp #$0C ; 0611 C9 0C .. + bne L0608 ; 0613 D0 F3 .. +L0615: rts ; 0615 60 ` +; ---------------------------------------------------------------------------- + ldy $8489 ; 0616 AC 89 84 ... + lda $8486,y ; 0619 B9 86 84 ... + beq L0649 ; 061C F0 2B .+ + tay ; 061E A8 . + jsr L0A76 ; 061F 20 76 0A v. + lda L06AD,y ; 0622 B9 AD 06 ... + bne L0649 ; 0625 D0 22 ." + lda #$FF ; 0627 A9 FF .. + sta L06AD,y ; 0629 99 AD 06 ... + lda L0A64,y ; 062C B9 64 0A .d. + sta r1L ; 062F 85 04 .. + lda L0A69,y ; 0631 B9 69 0A .i. + sta r1H ; 0634 85 05 .. + lda #$90 ; 0636 A9 90 .. + sta r0H ; 0638 85 03 .. + lda #$00 ; 063A A9 00 .. + sta r0L ; 063C 85 02 .. + lda #$0D ; 063E A9 0D .. + sta $07 ; 0640 85 07 .. + lda #$80 ; 0642 A9 80 .. + sta $06 ; 0644 85 06 .. + jsr LC17E ; 0646 20 7E C1 ~. +L0649: rts ; 0649 60 ` +; ---------------------------------------------------------------------------- +L064A: lda $2106 ; 064A AD 06 21 ..! + jsr L0672 ; 064D 20 72 06 r. + bne L0671 ; 0650 D0 1F .. + lda $2107 ; 0652 AD 07 21 ..! + jsr L0672 ; 0655 20 72 06 r. + bne L0671 ; 0658 D0 17 .. + lda $2108 ; 065A AD 08 21 ..! + jsr L0672 ; 065D 20 72 06 r. + bne L0671 ; 0660 D0 0F .. + ldx #$00 ; 0662 A2 00 .. + lda L06AC ; 0664 AD AC 06 ... + beq L0671 ; 0667 F0 08 .. + jsr LC277 ; 0669 20 77 C2 w. + lda #$00 ; 066C A9 00 .. + sta L06AC ; 066E 8D AC 06 ... +L0671: rts ; 0671 60 ` +; ---------------------------------------------------------------------------- +L0672: ldx #$00 ; 0672 A2 00 .. + tay ; 0674 A8 . + beq L06AA ; 0675 F0 33 .3 + jsr L0A76 ; 0677 20 76 0A v. + lda L06AD,y ; 067A B9 AD 06 ... + bne L06AA ; 067D D0 2B .+ + tya ; 067F 98 . + pha ; 0680 48 H + jsr L0522 ; 0681 20 22 05 ". + pla ; 0684 68 h + tay ; 0685 A8 . + txa ; 0686 8A . + bne L06AA ; 0687 D0 21 .! + lda #$FF ; 0689 A9 FF .. + sta L06AD,y ; 068B 99 AD 06 ... + lda L0A64,y ; 068E B9 64 0A .d. + sta $10 ; 0691 85 10 .. + lda L0A69,y ; 0693 B9 69 0A .i. + sta $11 ; 0696 85 11 .. + tya ; 0698 98 . + clc ; 0699 18 . + adc #$02 ; 069A 69 02 i. + jsr LC280 ; 069C 20 80 C2 .. + lda #$0D ; 069F A9 0D .. + sta $07 ; 06A1 85 07 .. + lda #$80 ; 06A3 A9 80 .. + sta $06 ; 06A5 85 06 .. + jsr LC28C ; 06A7 20 8C C2 .. +L06AA: txa ; 06AA 8A . + rts ; 06AB 60 ` +; ---------------------------------------------------------------------------- +L06AC: brk ; 06AC 00 . +L06AD: brk ; 06AD 00 . + brk ; 06AE 00 . + brk ; 06AF 00 . + brk ; 06B0 00 . + brk ; 06B1 00 . +L06B2: lda #$01 ; 06B2 A9 01 .. + sta r0L ; 06B4 85 02 .. + lda $2104 ; 06B6 AD 04 21 ..! + eor #$01 ; 06B9 49 01 I. + tay ; 06BB A8 . + lda $03FE,y ; 06BC B9 FE 03 ... + ldx $2107 ; 06BF AE 07 21 ..! + jsr L06EB ; 06C2 20 EB 06 .. + sta $2107 ; 06C5 8D 07 21 ..! + ldy $2104 ; 06C8 AC 04 21 ..! + lda $03FE,y ; 06CB B9 FE 03 ... + and #$7F ; 06CE 29 7F ). + ldx $2106 ; 06D0 AE 06 21 ..! + jsr L06EB ; 06D3 20 EB 06 .. + sta $2106 ; 06D6 8D 06 21 ..! + lda ramExpSize ; 06D9 AD C3 88 ... + beq L06E7 ; 06DC F0 09 .. + lda L0408 ; 06DE AD 08 04 ... + ldx $2108 ; 06E1 AE 08 21 ..! + jsr L06EB ; 06E4 20 EB 06 .. +L06E7: sta $2108 ; 06E7 8D 08 21 ..! + rts ; 06EA 60 ` +; ---------------------------------------------------------------------------- +L06EB: stx $06 ; 06EB 86 06 .. + sta $07 ; 06ED 85 07 .. + jsr L09AD ; 06EF 20 AD 09 .. + clc ; 06F2 18 . + adc r0L ; 06F3 65 02 e. + cmp ramExpSize ; 06F5 CD C3 88 ... + bcc L0704 ; 06F8 90 0A .. + beq L0704 ; 06FA F0 08 .. + lda $07 ; 06FC A5 07 .. + and #$3F ; 06FE 29 3F )? + sta $07 ; 0700 85 07 .. + lda r0L ; 0702 A5 02 .. +L0704: sta r0H ; 0704 85 03 .. + lda $07 ; 0706 A5 07 .. + bpl L0711 ; 0708 10 07 .. + lda r0H ; 070A A5 03 .. + sta r0L ; 070C 85 02 .. + lda $07 ; 070E A5 07 .. + rts ; 0710 60 ` +; ---------------------------------------------------------------------------- +L0711: and #$0F ; 0711 29 0F ). + cmp #$01 ; 0713 C9 01 .. + bne L0721 ; 0715 D0 0A .. + lda $06 ; 0717 A5 06 .. + cmp #$02 ; 0719 C9 02 .. + bne L0721 ; 071B D0 04 .. + lda #$01 ; 071D A9 01 .. + sta $06 ; 071F 85 06 .. +L0721: lda $07 ; 0721 A5 07 .. + and #$40 ; 0723 29 40 )@ + beq L0736 ; 0725 F0 0F .. + lda $07 ; 0727 A5 07 .. + and #$0F ; 0729 29 0F ). + cmp $06 ; 072B C5 06 .. + bne L0736 ; 072D D0 07 .. + lda r0H ; 072F A5 03 .. + sta r0L ; 0731 85 02 .. + lda $07 ; 0733 A5 07 .. + rts ; 0735 60 ` +; ---------------------------------------------------------------------------- +L0736: lda $06 ; 0736 A5 06 .. + rts ; 0738 60 ` +; ---------------------------------------------------------------------------- +L0739: lda $8489 ; 0739 AD 89 84 ... + eor #$01 ; 073C 49 01 I. +L073E: jsr LC2B0 ; 073E 20 B0 C2 .. + txa ; 0741 8A . + bne L0768 ; 0742 D0 24 .$ + lda ramExpSize ; 0744 AD C3 88 ... + bne L075F ; 0747 D0 16 .. + lda $212F ; 0749 AD 2F 21 ./! + pha ; 074C 48 H + ldy $8489 ; 074D AC 89 84 ... + lda $8486,y ; 0750 B9 86 84 ... + beq L075B ; 0753 F0 06 .. + sta $212F ; 0755 8D 2F 21 ./! + jsr L09C8 ; 0758 20 C8 09 .. +L075B: pla ; 075B 68 h + sta $212F ; 075C 8D 2F 21 ./! +L075F: ldy $8489 ; 075F AC 89 84 ... + lda $8486,y ; 0762 B9 86 84 ... + sta curType ; 0765 8D C6 88 ... +L0768: rts ; 0768 60 ` +; ---------------------------------------------------------------------------- +L0769: pha ; 0769 48 H + lda #$00 ; 076A A9 00 .. + sta $212C ; 076C 8D 2C 21 .,! + lda $8489 ; 076F AD 89 84 ... + sta $212B ; 0772 8D 2B 21 .+! + pla ; 0775 68 h + beq L07B6 ; 0776 F0 3E .> + cmp #$01 ; 0778 C9 01 .. + bne L077F ; 077A D0 03 .. + jmp L07B7 ; 077C 4C B7 07 L.. +; ---------------------------------------------------------------------------- +L077F: cmp #$02 ; 077F C9 02 .. + bne L0786 ; 0781 D0 03 .. + jmp L07DF ; 0783 4C DF 07 L.. +; ---------------------------------------------------------------------------- +L0786: cmp #$03 ; 0786 C9 03 .. + bne L078D ; 0788 D0 03 .. + jmp L07EF ; 078A 4C EF 07 L.. +; ---------------------------------------------------------------------------- +L078D: cmp #$41 ; 078D C9 41 .A + bne L0797 ; 078F D0 06 .. + jsr L07B7 ; 0791 20 B7 07 .. + jmp L07FF ; 0794 4C FF 07 L.. +; ---------------------------------------------------------------------------- +L0797: cmp #$43 ; 0797 C9 43 .C + bne L07A1 ; 0799 D0 06 .. + jsr L07EF ; 079B 20 EF 07 .. + jmp L0820 ; 079E 4C 20 08 L . +; ---------------------------------------------------------------------------- +L07A1: cmp #$81 ; 07A1 C9 81 .. + bne L07A8 ; 07A3 D0 03 .. + jmp L0841 ; 07A5 4C 41 08 LA. +; ---------------------------------------------------------------------------- +L07A8: cmp #$82 ; 07A8 C9 82 .. + bne L07AF ; 07AA D0 03 .. + jmp L0873 ; 07AC 4C 73 08 Ls. +; ---------------------------------------------------------------------------- +L07AF: cmp #$83 ; 07AF C9 83 .. + bne L07B6 ; 07B1 D0 03 .. + jmp L08A5 ; 07B3 4C A5 08 L.. +; ---------------------------------------------------------------------------- +L07B6: rts ; 07B6 60 ` +; ---------------------------------------------------------------------------- +L07B7: lda $212C ; 07B7 AD 2C 21 .,! + cmp #$01 ; 07BA C9 01 .. + beq L07DE ; 07BC F0 20 . + cmp #$41 ; 07BE C9 41 .A + bne L07D6 ; 07C0 D0 14 .. + ldy $212B ; 07C2 AC 2B 21 .+! + lda #$01 ; 07C5 A9 01 .. + sta $8486,y ; 07C7 99 86 84 ... + sta $03FE,y ; 07CA 99 FE 03 ... + lda #$00 ; 07CD A9 00 .. + sta $88BF,y ; 07CF 99 BF 88 ... + dec $180C ; 07D2 CE 0C 18 ... + rts ; 07D5 60 ` +; ---------------------------------------------------------------------------- +L07D6: lda #$01 ; 07D6 A9 01 .. + sta $212F ; 07D8 8D 2F 21 ./! + jmp L08D7 ; 07DB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07DE: rts ; 07DE 60 ` +; ---------------------------------------------------------------------------- +L07DF: lda $212C ; 07DF AD 2C 21 .,! + cmp #$02 ; 07E2 C9 02 .. + beq L07EE ; 07E4 F0 08 .. + lda #$02 ; 07E6 A9 02 .. + sta $212F ; 07E8 8D 2F 21 ./! + jmp L08D7 ; 07EB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07EE: rts ; 07EE 60 ` +; ---------------------------------------------------------------------------- +L07EF: lda $212C ; 07EF AD 2C 21 .,! + cmp #$03 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$03 ; 07F6 A9 03 .. + sta $212F ; 07F8 8D 2F 21 ./! + jmp L08D7 ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07FE: rts ; 07FE 60 ` +; ---------------------------------------------------------------------------- +L07FF: lda $212C ; 07FF AD 2C 21 .,! + cmp #$41 ; 0802 C9 41 .A + beq L081F ; 0804 F0 19 .. + lda #$41 ; 0806 A9 41 .A + jsr L0911 ; 0808 20 11 09 .. + ldy $212B ; 080B AC 2B 21 .+! + sta $88BF,y ; 080E 99 BF 88 ... + lda #$41 ; 0811 A9 41 .A + sta $8486,y ; 0813 99 86 84 ... + sta $03FE,y ; 0816 99 FE 03 ... + jsr LC1E1 ; 0819 20 E1 C1 .. + dec $180C ; 081C CE 0C 18 ... +L081F: rts ; 081F 60 ` +; ---------------------------------------------------------------------------- +L0820: lda $212C ; 0820 AD 2C 21 .,! + cmp #$43 ; 0823 C9 43 .C + beq L0840 ; 0825 F0 19 .. + lda #$43 ; 0827 A9 43 .C + jsr L0911 ; 0829 20 11 09 .. + ldy $212B ; 082C AC 2B 21 .+! + sta $88BF,y ; 082F 99 BF 88 ... + lda #$43 ; 0832 A9 43 .C + sta $8486,y ; 0834 99 86 84 ... + sta $03FE,y ; 0837 99 FE 03 ... + jsr LC1E1 ; 083A 20 E1 C1 .. + dec $180C ; 083D CE 0C 18 ... +L0840: rts ; 0840 60 ` +; ---------------------------------------------------------------------------- +L0841: lda $212C ; 0841 AD 2C 21 .,! + cmp #$81 ; 0844 C9 81 .. + beq L0872 ; 0846 F0 2A .* + lda #$81 ; 0848 A9 81 .. + sta $212F ; 084A 8D 2F 21 ./! + jsr L09C8 ; 084D 20 C8 09 .. + inc $848D ; 0850 EE 8D 84 ... + lda #$81 ; 0853 A9 81 .. + jsr L0911 ; 0855 20 11 09 .. + ldy $212B ; 0858 AC 2B 21 .+! + sta $88BF,y ; 085B 99 BF 88 ... + lda #$81 ; 085E A9 81 .. + sta $8486,y ; 0860 99 86 84 ... + sta $03FE,y ; 0863 99 FE 03 ... + lda $212B ; 0866 AD 2B 21 .+! + jsr L073E ; 0869 20 3E 07 >. + jsr L0A8A ; 086C 20 8A 0A .. + dec $180C ; 086F CE 0C 18 ... +L0872: rts ; 0872 60 ` +; ---------------------------------------------------------------------------- +L0873: lda $212C ; 0873 AD 2C 21 .,! + cmp #$82 ; 0876 C9 82 .. + beq L08A4 ; 0878 F0 2A .* + lda #$82 ; 087A A9 82 .. + sta $212F ; 087C 8D 2F 21 ./! + jsr L09C8 ; 087F 20 C8 09 .. + inc $848D ; 0882 EE 8D 84 ... + lda #$82 ; 0885 A9 82 .. + jsr L0911 ; 0887 20 11 09 .. + ldy $212B ; 088A AC 2B 21 .+! + sta $88BF,y ; 088D 99 BF 88 ... + lda #$82 ; 0890 A9 82 .. + sta $8486,y ; 0892 99 86 84 ... + sta $03FE,y ; 0895 99 FE 03 ... + lda $212B ; 0898 AD 2B 21 .+! + jsr L073E ; 089B 20 3E 07 >. + jsr L0A8A ; 089E 20 8A 0A .. + dec $180C ; 08A1 CE 0C 18 ... +L08A4: rts ; 08A4 60 ` +; ---------------------------------------------------------------------------- +L08A5: lda $212C ; 08A5 AD 2C 21 .,! + cmp #$83 ; 08A8 C9 83 .. + beq L08D6 ; 08AA F0 2A .* + lda #$83 ; 08AC A9 83 .. + sta $212F ; 08AE 8D 2F 21 ./! + jsr L09C8 ; 08B1 20 C8 09 .. + inc $848D ; 08B4 EE 8D 84 ... + lda #$83 ; 08B7 A9 83 .. + jsr L0911 ; 08B9 20 11 09 .. + ldy $212B ; 08BC AC 2B 21 .+! + sta $88BF,y ; 08BF 99 BF 88 ... + lda #$83 ; 08C2 A9 83 .. + sta $8486,y ; 08C4 99 86 84 ... + sta $03FE,y ; 08C7 99 FE 03 ... + lda $212B ; 08CA AD 2B 21 .+! + jsr L073E ; 08CD 20 3E 07 >. + jsr L0A8A ; 08D0 20 8A 0A .. + dec $180C ; 08D3 CE 0C 18 ... +L08D6: rts ; 08D6 60 ` +; ---------------------------------------------------------------------------- +L08D7: jsr L09C8 ; 08D7 20 C8 09 .. + lda $212B ; 08DA AD 2B 21 .+! + jsr L073E ; 08DD 20 3E 07 >. + lda firstBoot ; 08E0 AD C5 88 ... + cmp #$FF ; 08E3 C9 FF .. + beq L08F6 ; 08E5 F0 0F .. + ldy $212B ; 08E7 AC 2B 21 .+! + lda $212F ; 08EA AD 2F 21 ./! + sta $8486,y ; 08ED 99 86 84 ... + inc $848D ; 08F0 EE 8D 84 ... + clv ; 08F3 B8 . + bvc L08FF ; 08F4 50 09 P. +L08F6: jsr L1E05 ; 08F6 20 05 1E .. + lda $212B ; 08F9 AD 2B 21 .+! + jsr L073E ; 08FC 20 3E 07 >. +L08FF: dec $180C ; 08FF CE 0C 18 ... + ldy $212B ; 0902 AC 2B 21 .+! + lda $8486,y ; 0905 B9 86 84 ... + sta $03FE,y ; 0908 99 FE 03 ... + lda #$00 ; 090B A9 00 .. + sta $88BF,y ; 090D 99 BF 88 ... + rts ; 0910 60 ` +; ---------------------------------------------------------------------------- +L0911: pha ; 0911 48 H + jsr L0977 ; 0912 20 77 09 w. + pla ; 0915 68 h + sta r0L ; 0916 85 02 .. + lda $212C ; 0918 AD 2C 21 .,! + and #$C0 ; 091B 29 C0 ). + bne L092A ; 091D D0 0B .. + lda r0L ; 091F A5 02 .. + jsr L09AD ; 0921 20 AD 09 .. + cmp #$01 ; 0924 C9 01 .. + beq L0933 ; 0926 F0 0B .. + bne L0945 ; 0928 D0 1B .. +L092A: ldy $212B ; 092A AC 2B 21 .+! + lda $88BF,y ; 092D B9 BF 88 ... + ldx #$00 ; 0930 A2 00 .. + rts ; 0932 60 ` +; ---------------------------------------------------------------------------- +L0933: ldy ramExpSize ; 0933 AC C3 88 ... +L0936: dey ; 0936 88 . + bmi L0942 ; 0937 30 09 0. + lda $2130,y ; 0939 B9 30 21 .0! + bne L0936 ; 093C D0 F8 .. + tya ; 093E 98 . + ldx #$00 ; 093F A2 00 .. + rts ; 0941 60 ` +; ---------------------------------------------------------------------------- +L0942: ldx #$FF ; 0942 A2 FF .. + rts ; 0944 60 ` +; ---------------------------------------------------------------------------- +L0945: sta r0L ; 0945 85 02 .. + ldy #$00 ; 0947 A0 00 .. +L0949: lda r0L ; 0949 A5 02 .. + sta r0H ; 094B 85 03 .. +L094D: sty r1L ; 094D 84 04 .. + cpy ramExpSize ; 094F CC C3 88 ... + bcs L0974 ; 0952 B0 20 . + lda $2130,y ; 0954 B9 30 21 .0! + iny ; 0957 C8 . + cmp #$00 ; 0958 C9 00 .. + bne L094D ; 095A D0 F1 .. +L095C: dec r0H ; 095C C6 03 .. + beq L096F ; 095E F0 0F .. + cpy ramExpSize ; 0960 CC C3 88 ... + bcs L0974 ; 0963 B0 0F .. + lda $2130,y ; 0965 B9 30 21 .0! + iny ; 0968 C8 . + cmp #$00 ; 0969 C9 00 .. + bne L0949 ; 096B D0 DC .. + beq L095C ; 096D F0 ED .. +L096F: lda r1L ; 096F A5 04 .. + ldx #$00 ; 0971 A2 00 .. + rts ; 0973 60 ` +; ---------------------------------------------------------------------------- +L0974: ldx #$FF ; 0974 A2 FF .. + rts ; 0976 60 ` +; ---------------------------------------------------------------------------- +L0977: ldy #$1F ; 0977 A0 1F .. + lda #$00 ; 0979 A9 00 .. +L097B: sta $2130,y ; 097B 99 30 21 .0! + dey ; 097E 88 . + bpl L097B ; 097F 10 FA .. + lda #$FF ; 0981 A9 FF .. + sta $2130 ; 0983 8D 30 21 .0! + lda #$08 ; 0986 A9 08 .. + sta r0L ; 0988 85 02 .. +L098A: ldy r0L ; 098A A4 02 .. + lda $8486,y ; 098C B9 86 84 ... + jsr L09AD ; 098F 20 AD 09 .. + tax ; 0992 AA . + beq L09A4 ; 0993 F0 0F .. + ldy r0L ; 0995 A4 02 .. + lda $88BF,y ; 0997 B9 BF 88 ... + tay ; 099A A8 . +L099B: lda #$FF ; 099B A9 FF .. + sta $2130,y ; 099D 99 30 21 .0! + iny ; 09A0 C8 . + dex ; 09A1 CA . + bne L099B ; 09A2 D0 F7 .. +L09A4: inc r0L ; 09A4 E6 02 .. + lda r0L ; 09A6 A5 02 .. + cmp #$0C ; 09A8 C9 0C .. + bcc L098A ; 09AA 90 DE .. + rts ; 09AC 60 ` +; ---------------------------------------------------------------------------- +L09AD: sta r0H ; 09AD 85 03 .. + and #$C0 ; 09AF 29 C0 ). + beq L09C2 ; 09B1 F0 0F .. + lda r0H ; 09B3 A5 03 .. + cmp #$83 ; 09B5 C9 83 .. + bne L09BC ; 09B7 D0 03 .. + clc ; 09B9 18 . + adc #$01 ; 09BA 69 01 i. +L09BC: and #$0F ; 09BC 29 0F ). + tay ; 09BE A8 . + lda L09C3,y ; 09BF B9 C3 09 ... +L09C2: rts ; 09C2 60 ` +; ---------------------------------------------------------------------------- +L09C3: !byte $03 ; 09C3 03 . + !byte $03 ; 09C4 03 . + asl $01 ; 09C5 06 01 .. + !byte $0D ; 09C7 0D . +L09C8: lda ramExpSize ; 09C8 AD C3 88 ... + bne L09F0 ; 09CB D0 23 .# + lda sysRAMFlg ; 09CD AD C4 88 ... + and #$BF ; 09D0 29 BF ). + sta sysRAMFlg ; 09D2 8D C4 88 ... + sta $C012 ; 09D5 8D 12 C0 ... + sta L040A ; 09D8 8D 0A 04 ... + ldy $212F ; 09DB AC 2F 21 ./! + lda $212B ; 09DE AD 2B 21 .+! + jsr L0A3D ; 09E1 20 3D 0A =. + lda #$90 ; 09E4 A9 90 .. + sta r1H ; 09E6 85 05 .. + lda #$00 ; 09E8 A9 00 .. + sta r1L ; 09EA 85 04 .. + jsr LC17E ; 09EC 20 7E C1 ~. + rts ; 09EF 60 ` +; ---------------------------------------------------------------------------- +L09F0: lda sysRAMFlg ; 09F0 AD C4 88 ... + ora #$40 ; 09F3 09 40 .@ + sta sysRAMFlg ; 09F5 8D C4 88 ... + sta $C012 ; 09F8 8D 12 C0 ... + sta L040A ; 09FB 8D 0A 04 ... + ldy $848E ; 09FE AC 8E 84 ... + beq L0A0B ; 0A01 F0 08 .. + lda #$08 ; 0A03 A9 08 .. + jsr L0A3D ; 0A05 20 3D 0A =. + jsr StashRAM;LC2C8 ; 0A08 20 C8 C2 .. +L0A0B: ldy $848F ; 0A0B AC 8F 84 ... + beq L0A18 ; 0A0E F0 08 .. + lda #$09 ; 0A10 A9 09 .. + !byte $20 ; 0A12 20 +L0A13: and $200A,x ; 0A13 3D 0A 20 =. + iny ; 0A16 C8 . + !byte $C2 ; 0A17 C2 . +L0A18: ldy $8490 ; 0A18 AC 90 84 ... + beq L0A25 ; 0A1B F0 08 .. + lda #$0A ; 0A1D A9 0A .. + jsr L0A3D ; 0A1F 20 3D 0A =. + jsr StashRAM;LC2C8 ; 0A22 20 C8 C2 .. +L0A25: ldy $212F ; 0A25 AC 2F 21 ./! + lda $212B ; 0A28 AD 2B 21 .+! + jsr L0A3D ; 0A2B 20 3D 0A =. + jsr StashRAM;LC2C8 ; 0A2E 20 C8 C2 .. + lda #$90 ; 0A31 A9 90 .. + sta r1H ; 0A33 85 05 .. + lda #$00 ; 0A35 A9 00 .. + sta r1L ; 0A37 85 04 .. + jsr LC17E ; 0A39 20 7E C1 ~. + rts ; 0A3C 60 ` +; ---------------------------------------------------------------------------- +L0A3D: pha ; 0A3D 48 H + jsr L0A76 ; 0A3E 20 76 0A v. + lda L0A64,y ; 0A41 B9 64 0A .d. + sta r0L ; 0A44 85 02 .. + lda L0A69,y ; 0A46 B9 69 0A .i. + sta r0H ; 0A49 85 03 .. + pla ; 0A4B 68 h + tay ; 0A4C A8 . + lda L0A66,y ; 0A4D B9 66 0A .f. + sta r1L ; 0A50 85 04 .. + lda L0A6A,y ; 0A52 B9 6A 0A .j. + sta r1H ; 0A55 85 05 .. + lda #$0D ; 0A57 A9 0D .. + sta $07 ; 0A59 85 07 .. + lda #$80 ; 0A5B A9 80 .. + sta $06 ; 0A5D 85 06 .. + lda #$00 ; 0A5F A9 00 .. + sta $08 ; 0A61 85 08 .. + rts ; 0A63 60 ` +; ---------------------------------------------------------------------------- +L0A64: !byte $80 ; 0A64 80 . + brk ; 0A65 00 . +L0A66: !byte $80 ; 0A66 80 . + brk ; 0A67 00 . + !byte $80 ; 0A68 80 . +L0A69: !byte $3C ; 0A69 3C < +L0A6A: lsr ;a ; 0A6A 4A J + !byte $57 ; 0A6B 57 W + adc $72 ; 0A6C 65 72 er + brk ; 0A6E 00 . + !byte $80 ; 0A6F 80 . + brk ; 0A70 00 . + !byte $80 ; 0A71 80 . + !byte $83 ; 0A72 83 . + bcc L0A13 ; 0A73 90 9E .. + !byte $AB ; 0A75 AB . +L0A76: tya ; 0A76 98 . + bpl L0A85 ; 0A77 10 0C .. + cmp #$83 ; 0A79 C9 83 .. + beq L0A81 ; 0A7B F0 04 .. + ldy #$03 ; 0A7D A0 03 .. + bne L0A89 ; 0A7F D0 08 .. +L0A81: ldy #$04 ; 0A81 A0 04 .. + bne L0A89 ; 0A83 D0 04 .. +L0A85: and #$0F ; 0A85 29 0F ). + tay ; 0A87 A8 . + dey ; 0A88 88 . +L0A89: rts ; 0A89 60 ` +; ---------------------------------------------------------------------------- +L0A8A: ldy $212B ; 0A8A AC 2B 21 .+! + lda $8486,y ; 0A8D B9 86 84 ... + and #$0F ; 0A90 29 0F ). + cmp #$03 ; 0A92 C9 03 .. + bcc L0A99 ; 0A94 90 03 .. + jmp L0C8E ; 0A96 4C 8E 0C L.. +; ---------------------------------------------------------------------------- +L0A99: ldy #$00 ; 0A99 A0 00 .. + tya ; 0A9B 98 . +L0A9C: sta $8200,y ; 0A9C 99 00 82 ... + iny ; 0A9F C8 . + bne L0A9C ; 0AA0 D0 FA .. + lda #$34 ; 0AA2 A9 34 .4 + sta L0BBB ; 0AA4 8D BB 0B ... + lda #$00 ; 0AA7 A9 00 .. + sta L0B28 ; 0AA9 8D 28 0B .(. + ldy $8489 ; 0AAC AC 89 84 ... + lda $8486,y ; 0AAF B9 86 84 ... + and #$0F ; 0AB2 29 0F ). + ldy #$BD ; 0AB4 A0 BD .. + cmp #$01 ; 0AB6 C9 01 .. + beq L0AC6 ; 0AB8 F0 0C .. + ldy #$00 ; 0ABA A0 00 .. + lda #$37 ; 0ABC A9 37 .7 + sta L0BBB ; 0ABE 8D BB 0B ... + lda #$80 ; 0AC1 A9 80 .. + sta L0B28 ; 0AC3 8D 28 0B .(. +L0AC6: dey ; 0AC6 88 . + lda L0B25,y ; 0AC7 B9 25 0B .%. + sta $8200,y ; 0ACA 99 00 82 ... + tya ; 0ACD 98 . + bne L0AC6 ; 0ACE D0 F6 .. + ldy $8489 ; 0AD0 AC 89 84 ... + lda $8486,y ; 0AD3 B9 86 84 ... + and #$0F ; 0AD6 29 0F ). + cmp #$01 ; 0AD8 C9 01 .. + beq L0AF1 ; 0ADA F0 15 .. + ldy #$00 ; 0ADC A0 00 .. + tya ; 0ADE 98 . +L0ADF: sta $8900,y ; 0ADF 99 00 89 ... + iny ; 0AE2 C8 . + bne L0ADF ; 0AE3 D0 FA .. + ldy #$69 ; 0AE5 A0 69 .i +L0AE7: dey ; 0AE7 88 . + lda L0C25,y ; 0AE8 B9 25 0C .%. + sta $8900,y ; 0AEB 99 00 89 ... + tya ; 0AEE 98 . + bne L0AE7 ; 0AEF D0 F6 .. +L0AF1: jsr LC24A ; 0AF1 20 4A C2 J. + jsr L0B1B ; 0AF4 20 1B 0B .. + lda #$FF ; 0AF7 A9 FF .. + sta $8001 ; 0AF9 8D 01 80 ... + lda #$80 ; 0AFC A9 80 .. + sta $0B ; 0AFE 85 0B .. + lda #$00 ; 0B00 A9 00 .. + sta $0A ; 0B02 85 0A .. + lda #$12 ; 0B04 A9 12 .. + sta r1L ; 0B06 85 04 .. + lda #$01 ; 0B08 A9 01 .. + sta r1H ; 0B0A 85 05 .. + jsr LC1E7 ; 0B0C 20 E7 C1 .. + inc r1L ; 0B0F E6 04 .. + lda #$08 ; 0B11 A9 08 .. + sta r1H ; 0B13 85 05 .. + jsr LC1E7 ; 0B15 20 E7 C1 .. + lda #$00 ; 0B18 A9 00 .. + rts ; 0B1A 60 ` +; ---------------------------------------------------------------------------- +L0B1B: ldy #$00 ; 0B1B A0 00 .. + tya ; 0B1D 98 . +L0B1E: sta $8000,y ; 0B1E 99 00 80 ... + dey ; 0B21 88 . + bne L0B1E ; 0B22 D0 FA .. + rts ; 0B24 60 ` +; ---------------------------------------------------------------------------- +L0B25: !byte $12 ; 0B25 12 . + ora ($41,x) ; 0B26 01 41 .A +L0B28: brk ; 0B28 00 . + ora $FF,x ; 0B29 15 FF .. + !byte $FF ; 0B2B FF . + !byte $1F ; 0B2C 1F . + ora $FF,x ; 0B2D 15 FF .. + !byte $FF ; 0B2F FF . + !byte $1F ; 0B30 1F . + ora $FF,x ; 0B31 15 FF .. + !byte $FF ; 0B33 FF . + !byte $1F ; 0B34 1F . + ora $FF,x ; 0B35 15 FF .. + !byte $FF ; 0B37 FF . + !byte $1F ; 0B38 1F . + ora $FF,x ; 0B39 15 FF .. + !byte $FF ; 0B3B FF . + !byte $1F ; 0B3C 1F . + ora $FF,x ; 0B3D 15 FF .. + !byte $FF ; 0B3F FF . + !byte $1F ; 0B40 1F . + ora $FF,x ; 0B41 15 FF .. + !byte $FF ; 0B43 FF . + !byte $1F ; 0B44 1F . + ora $FF,x ; 0B45 15 FF .. + !byte $FF ; 0B47 FF . + !byte $1F ; 0B48 1F . + ora $FF,x ; 0B49 15 FF .. + !byte $FF ; 0B4B FF . + !byte $1F ; 0B4C 1F . + ora $FF,x ; 0B4D 15 FF .. + !byte $FF ; 0B4F FF . + !byte $1F ; 0B50 1F . + ora $FF,x ; 0B51 15 FF .. + !byte $FF ; 0B53 FF . + !byte $1F ; 0B54 1F . + ora $FF,x ; 0B55 15 FF .. + !byte $FF ; 0B57 FF . + !byte $1F ; 0B58 1F . + ora $FF,x ; 0B59 15 FF .. + !byte $FF ; 0B5B FF . + !byte $1F ; 0B5C 1F . + ora $FF,x ; 0B5D 15 FF .. + !byte $FF ; 0B5F FF . + !byte $1F ; 0B60 1F . + ora $FF,x ; 0B61 15 FF .. + !byte $FF ; 0B63 FF . + !byte $1F ; 0B64 1F . + ora $FF,x ; 0B65 15 FF .. + !byte $FF ; 0B67 FF . + !byte $1F ; 0B68 1F . + ora $FF,x ; 0B69 15 FF .. + !byte $FF ; 0B6B FF . + !byte $1F ; 0B6C 1F . + ora ($FC),y ; 0B6D 11 FC .. + !byte $FF ; 0B6F FF . + !byte $07 ; 0B70 07 . + !byte $12 ; 0B71 12 . + !byte $FF ; 0B72 FF . + inc L1307,x ; 0B73 FE 07 13 ... + !byte $FF ; 0B76 FF . + !byte $FF ; 0B77 FF . + !byte $07 ; 0B78 07 . + !byte $13 ; 0B79 13 . + !byte $FF ; 0B7A FF . + !byte $FF ; 0B7B FF . + !byte $07 ; 0B7C 07 . + !byte $13 ; 0B7D 13 . + !byte $FF ; 0B7E FF . + !byte $FF ; 0B7F FF . + !byte $07 ; 0B80 07 . + !byte $13 ; 0B81 13 . + !byte $FF ; 0B82 FF . + !byte $FF ; 0B83 FF . + !byte $07 ; 0B84 07 . + !byte $13 ; 0B85 13 . + !byte $FF ; 0B86 FF . + !byte $FF ; 0B87 FF . + !byte $07 ; 0B88 07 . + !byte $12 ; 0B89 12 . + !byte $FF ; 0B8A FF . + !byte $FF ; 0B8B FF . + !byte $03 ; 0B8C 03 . + !byte $12 ; 0B8D 12 . + !byte $FF ; 0B8E FF . + !byte $FF ; 0B8F FF . + !byte $03 ; 0B90 03 . + !byte $12 ; 0B91 12 . + !byte $FF ; 0B92 FF . + !byte $FF ; 0B93 FF . + !byte $03 ; 0B94 03 . + !byte $12 ; 0B95 12 . + !byte $FF ; 0B96 FF . + !byte $FF ; 0B97 FF . + !byte $03 ; 0B98 03 . + !byte $12 ; 0B99 12 . + !byte $FF ; 0B9A FF . + !byte $FF ; 0B9B FF . + !byte $03 ; 0B9C 03 . + !byte $12 ; 0B9D 12 . + !byte $FF ; 0B9E FF . + !byte $FF ; 0B9F FF . + !byte $03 ; 0BA0 03 . + ora ($FF),y ; 0BA1 11 FF .. + !byte $FF ; 0BA3 FF . + ora ($11,x) ; 0BA4 01 11 .. + !byte $FF ; 0BA6 FF . + !byte $FF ; 0BA7 FF . + ora ($11,x) ; 0BA8 01 11 .. + !byte $FF ; 0BAA FF . + !byte $FF ; 0BAB FF . + ora ($11,x) ; 0BAC 01 11 .. + !byte $FF ; 0BAE FF . + !byte $FF ; 0BAF FF . + ora ($11,x) ; 0BB0 01 11 .. + !byte $FF ; 0BB2 FF . + !byte $FF ; 0BB3 FF . + ora ($52,x) ; 0BB4 01 52 .R + eor ($4D,x) ; 0BB6 41 4D AM + jsr L3531 ; 0BB8 20 31 35 15 +L0BBB: !byte $37 ; 0BBB 37 7 + and ($A0),y ; 0BBC 31 A0 1. + ldy #$A0 ; 0BBE A0 A0 .. + ldy #$A0 ; 0BC0 A0 A0 .. + ldy #$A0 ; 0BC2 A0 A0 .. + ldy #$A0 ; 0BC4 A0 A0 .. + ldy #$52 ; 0BC6 A0 52 .R + !byte $44 ; 0BC8 44 D + ldy #$32 ; 0BC9 A0 32 .2 + eor ($A0,x) ; 0BCB 41 A0 A. + ldy #$A0 ; 0BCD A0 A0 .. + ldy #$13 ; 0BCF A0 13 .. + php ; 0BD1 08 . + !byte $47 ; 0BD2 47 G + eor $4F ; 0BD3 45 4F EO + !byte $53 ; 0BD5 53 S + jsr L6F66 ; 0BD6 20 66 6F fo + !byte $72 ; 0BD9 72 r + adc $7461 ; 0BDA 6D 61 74 mat + jsr L3156 ; 0BDD 20 56 31 V1 + rol $0030 ; 0BE0 2E 30 00 .0. + brk ; 0BE3 00 . + brk ; 0BE4 00 . + brk ; 0BE5 00 . + brk ; 0BE6 00 . + brk ; 0BE7 00 . + brk ; 0BE8 00 . + brk ; 0BE9 00 . + brk ; 0BEA 00 . + brk ; 0BEB 00 . + brk ; 0BEC 00 . + brk ; 0BED 00 . + brk ; 0BEE 00 . + brk ; 0BEF 00 . + brk ; 0BF0 00 . + brk ; 0BF1 00 . + brk ; 0BF2 00 . + brk ; 0BF3 00 . + brk ; 0BF4 00 . + brk ; 0BF5 00 . + brk ; 0BF6 00 . + brk ; 0BF7 00 . + brk ; 0BF8 00 . + brk ; 0BF9 00 . + brk ; 0BFA 00 . + brk ; 0BFB 00 . + brk ; 0BFC 00 . + brk ; 0BFD 00 . + brk ; 0BFE 00 . + brk ; 0BFF 00 . + brk ; 0C00 00 . + brk ; 0C01 00 . + ora $15,x ; 0C02 15 15 .. + ora $15,x ; 0C04 15 15 .. + ora $15,x ; 0C06 15 15 .. + ora $15,x ; 0C08 15 15 .. + ora $15,x ; 0C0A 15 15 .. + ora $15,x ; 0C0C 15 15 .. + ora $15,x ; 0C0E 15 15 .. + ora $15,x ; 0C10 15 15 .. + ora $00,x ; 0C12 15 00 .. + !byte $13 ; 0C14 13 . + !byte $13 ; 0C15 13 . + !byte $13 ; 0C16 13 . + !byte $13 ; 0C17 13 . + !byte $13 ; 0C18 13 . + !byte $13 ; 0C19 13 . + !byte $12 ; 0C1A 12 . + !byte $12 ; 0C1B 12 . + !byte $12 ; 0C1C 12 . + !byte $12 ; 0C1D 12 . + !byte $12 ; 0C1E 12 . + !byte $12 ; 0C1F 12 . + ora ($11),y ; 0C20 11 11 .. + ora ($11),y ; 0C22 11 11 .. + !byte $11 ; 0C24 11 . +L0C25: !byte $FF ; 0C25 FF . + !byte $FF ; 0C26 FF . + !byte $1F ; 0C27 1F . + !byte $FF ; 0C28 FF . + !byte $FF ; 0C29 FF . + !byte $1F ; 0C2A 1F . + !byte $FF ; 0C2B FF . + !byte $FF ; 0C2C FF . + !byte $1F ; 0C2D 1F . + !byte $FF ; 0C2E FF . + !byte $FF ; 0C2F FF . + !byte $1F ; 0C30 1F . + !byte $FF ; 0C31 FF . + !byte $FF ; 0C32 FF . + !byte $1F ; 0C33 1F . + !byte $FF ; 0C34 FF . + !byte $FF ; 0C35 FF . + !byte $1F ; 0C36 1F . + !byte $FF ; 0C37 FF . + !byte $FF ; 0C38 FF . + !byte $1F ; 0C39 1F . + !byte $FF ; 0C3A FF . + !byte $FF ; 0C3B FF . + !byte $1F ; 0C3C 1F . + !byte $FF ; 0C3D FF . + !byte $FF ; 0C3E FF . + !byte $1F ; 0C3F 1F . + !byte $FF ; 0C40 FF . + !byte $FF ; 0C41 FF . + !byte $1F ; 0C42 1F . + !byte $FF ; 0C43 FF . + !byte $FF ; 0C44 FF . + !byte $1F ; 0C45 1F . + !byte $FF ; 0C46 FF . + !byte $FF ; 0C47 FF . + !byte $1F ; 0C48 1F . + !byte $FF ; 0C49 FF . + !byte $FF ; 0C4A FF . + !byte $1F ; 0C4B 1F . + !byte $FF ; 0C4C FF . + !byte $FF ; 0C4D FF . + !byte $1F ; 0C4E 1F . + !byte $FF ; 0C4F FF . + !byte $FF ; 0C50 FF . + !byte $1F ; 0C51 1F . + !byte $FF ; 0C52 FF . + !byte $FF ; 0C53 FF . + !byte $1F ; 0C54 1F . + !byte $FF ; 0C55 FF . + !byte $FF ; 0C56 FF . + !byte $1F ; 0C57 1F . + brk ; 0C58 00 . + brk ; 0C59 00 . + brk ; 0C5A 00 . + !byte $FF ; 0C5B FF . + !byte $FF ; 0C5C FF . + !byte $07 ; 0C5D 07 . + !byte $FF ; 0C5E FF . + !byte $FF ; 0C5F FF . + !byte $07 ; 0C60 07 . + !byte $FF ; 0C61 FF . + !byte $FF ; 0C62 FF . + !byte $07 ; 0C63 07 . + !byte $FF ; 0C64 FF . + !byte $FF ; 0C65 FF . + !byte $07 ; 0C66 07 . + !byte $FF ; 0C67 FF . + !byte $FF ; 0C68 FF . + !byte $07 ; 0C69 07 . + !byte $FF ; 0C6A FF . + !byte $FF ; 0C6B FF . + !byte $07 ; 0C6C 07 . + !byte $FF ; 0C6D FF . + !byte $FF ; 0C6E FF . + !byte $03 ; 0C6F 03 . + !byte $FF ; 0C70 FF . + !byte $FF ; 0C71 FF . + !byte $03 ; 0C72 03 . + !byte $FF ; 0C73 FF . + !byte $FF ; 0C74 FF . + !byte $03 ; 0C75 03 . + !byte $FF ; 0C76 FF . + !byte $FF ; 0C77 FF . + !byte $03 ; 0C78 03 . + !byte $FF ; 0C79 FF . + !byte $FF ; 0C7A FF . + !byte $03 ; 0C7B 03 . + !byte $FF ; 0C7C FF . + !byte $FF ; 0C7D FF . + !byte $03 ; 0C7E 03 . + !byte $FF ; 0C7F FF . + !byte $FF ; 0C80 FF . + ora ($FF,x) ; 0C81 01 FF .. + !byte $FF ; 0C83 FF . + ora ($FF,x) ; 0C84 01 FF .. + !byte $FF ; 0C86 FF . + ora ($FF,x) ; 0C87 01 FF .. + !byte $FF ; 0C89 FF . + ora ($FF,x) ; 0C8A 01 FF .. + !byte $FF ; 0C8C FF . + !byte $01 ; 0C8D 01 . +L0C8E: ldy #$00 ; 0C8E A0 00 .. + tya ; 0C90 98 . +L0C91: sta $8200,y ; 0C91 99 00 82 ... + iny ; 0C94 C8 . + bne L0C91 ; 0C95 D0 FA .. + lda #$28 ; 0C97 A9 28 .( + sta $8200 ; 0C99 8D 00 82 ... + lda #$03 ; 0C9C A9 03 .. + sta $8201 ; 0C9E 8D 01 82 ... + lda #$44 ; 0CA1 A9 44 .D + sta $8202 ; 0CA3 8D 02 82 ... + ldy #$2D ; 0CA6 A0 2D .- +L0CA8: lda L0D36,y ; 0CA8 B9 36 0D .6. + sta $8290,y ; 0CAB 99 90 82 ... + dey ; 0CAE 88 . + bpl L0CA8 ; 0CAF 10 F7 .. + lda #$28 ; 0CB1 A9 28 .( + sta r1L ; 0CB3 85 04 .. + lda #$00 ; 0CB5 A9 00 .. + sta r1H ; 0CB7 85 05 .. + lda #$82 ; 0CB9 A9 82 .. + sta $0B ; 0CBB 85 0B .. + lda #$00 ; 0CBD A9 00 .. + sta $0A ; 0CBF 85 0A .. + jsr LC1E7 ; 0CC1 20 E7 C1 .. + ldy #$00 ; 0CC4 A0 00 .. +L0CC6: lda L0D64,y ; 0CC6 B9 64 0D .d. + sta $8900,y ; 0CC9 99 00 89 ... + iny ; 0CCC C8 . + bne L0CC6 ; 0CCD D0 F7 .. + lda #$28 ; 0CCF A9 28 .( + sta r1L ; 0CD1 85 04 .. + lda #$01 ; 0CD3 A9 01 .. + sta r1H ; 0CD5 85 05 .. + lda #$89 ; 0CD7 A9 89 .. + sta $0B ; 0CD9 85 0B .. + lda #$00 ; 0CDB A9 00 .. + sta $0A ; 0CDD 85 0A .. + jsr LC1E7 ; 0CDF 20 E7 C1 .. + lda #$FF ; 0CE2 A9 FF .. + sta $8901 ; 0CE4 8D 01 89 ... + lda #$00 ; 0CE7 A9 00 .. + sta $8900 ; 0CE9 8D 00 89 ... + lda #$28 ; 0CEC A9 28 .( + sta $89FA ; 0CEE 8D FA 89 ... + lda #$FF ; 0CF1 A9 FF .. + sta $89FB ; 0CF3 8D FB 89 ... + lda #$FF ; 0CF6 A9 FF .. + sta $89FD ; 0CF8 8D FD 89 ... + lda #$28 ; 0CFB A9 28 .( + sta r1L ; 0CFD 85 04 .. + lda #$02 ; 0CFF A9 02 .. + sta r1H ; 0D01 85 05 .. + lda #$89 ; 0D03 A9 89 .. + sta $0B ; 0D05 85 0B .. + lda #$00 ; 0D07 A9 00 .. + sta $0A ; 0D09 85 0A .. + jsr LC1E7 ; 0D0B 20 E7 C1 .. + jsr LC247 ; 0D0E 20 47 C2 G. + jsr L0B1B ; 0D11 20 1B 0B .. + lda #$FF ; 0D14 A9 FF .. + sta $8001 ; 0D16 8D 01 80 ... + lda #$80 ; 0D19 A9 80 .. + sta $0B ; 0D1B 85 0B .. + lda #$00 ; 0D1D A9 00 .. + sta $0A ; 0D1F 85 0A .. + lda #$28 ; 0D21 A9 28 .( + sta r1L ; 0D23 85 04 .. + lda #$03 ; 0D25 A9 03 .. + sta r1H ; 0D27 85 05 .. + jsr LC1E7 ; 0D29 20 E7 C1 .. + lda #$13 ; 0D2C A9 13 .. + sta r1H ; 0D2E 85 05 .. + jsr LC1E7 ; 0D30 20 E7 C1 .. + lda #$00 ; 0D33 A9 00 .. + rts ; 0D35 60 ` +; ---------------------------------------------------------------------------- +L0D36: !byte $52 ; 0D36 52 R + eor ($4D,x) ; 0D37 41 4D AM + jsr L3531 ; 0D39 20 31 35 15 + sec ; 0D3C 38 8 + and ($A0),y ; 0D3D 31 A0 1. + ldy #$A0 ; 0D3F A0 A0 .. + ldy #$A0 ; 0D41 A0 A0 .. + ldy #$A0 ; 0D43 A0 A0 .. + ldy #$A0 ; 0D45 A0 A0 .. + ldy #$52 ; 0D47 A0 52 .R + !byte $44 ; 0D49 44 D + ldy #$33 ; 0D4A A0 33 .3 + !byte $44 ; 0D4C 44 D + ldy #$A0 ; 0D4D A0 A0 .. + brk ; 0D4F 00 . + brk ; 0D50 00 . + plp ; 0D51 28 ( + !byte $13 ; 0D52 13 . + !byte $47 ; 0D53 47 G + eor $4F ; 0D54 45 4F EO + !byte $53 ; 0D56 53 S + jsr L6F66 ; 0D57 20 66 6F fo + !byte $72 ; 0D5A 72 r + adc $7461 ; 0D5B 6D 61 74 mat + jsr L3156 ; 0D5E 20 56 31 V1 + rol $0030 ; 0D61 2E 30 00 .0. +L0D64: plp ; 0D64 28 ( + !byte $02 ; 0D65 02 . + !byte $44 ; 0D66 44 D + !byte $BB ; 0D67 BB . + eor $41 ; 0D68 45 41 EA + cpy #$00 ; 0D6A C0 00 .. + brk ; 0D6C 00 . + brk ; 0D6D 00 . + brk ; 0D6E 00 . + brk ; 0D6F 00 . + brk ; 0D70 00 . + brk ; 0D71 00 . + brk ; 0D72 00 . + brk ; 0D73 00 . + plp ; 0D74 28 ( + !byte $FF ; 0D75 FF . + !byte $FF ; 0D76 FF . + !byte $FF ; 0D77 FF . + !byte $FF ; 0D78 FF . + !byte $FF ; 0D79 FF . + plp ; 0D7A 28 ( + !byte $FF ; 0D7B FF . + !byte $FF ; 0D7C FF . + !byte $FF ; 0D7D FF . + !byte $FF ; 0D7E FF . + !byte $FF ; 0D7F FF . + plp ; 0D80 28 ( + !byte $FF ; 0D81 FF . + !byte $FF ; 0D82 FF . + !byte $FF ; 0D83 FF . + !byte $FF ; 0D84 FF . + !byte $FF ; 0D85 FF . + plp ; 0D86 28 ( + !byte $FF ; 0D87 FF . + !byte $FF ; 0D88 FF . + !byte $FF ; 0D89 FF . + !byte $FF ; 0D8A FF . + !byte $FF ; 0D8B FF . + plp ; 0D8C 28 ( + !byte $FF ; 0D8D FF . + !byte $FF ; 0D8E FF . + !byte $FF ; 0D8F FF . + !byte $FF ; 0D90 FF . + !byte $FF ; 0D91 FF . + plp ; 0D92 28 ( + !byte $FF ; 0D93 FF . + !byte $FF ; 0D94 FF . + !byte $FF ; 0D95 FF . + !byte $FF ; 0D96 FF . + !byte $FF ; 0D97 FF . + plp ; 0D98 28 ( + !byte $FF ; 0D99 FF . + !byte $FF ; 0D9A FF . + !byte $FF ; 0D9B FF . + !byte $FF ; 0D9C FF . + !byte $FF ; 0D9D FF . + plp ; 0D9E 28 ( + !byte $FF ; 0D9F FF . + !byte $FF ; 0DA0 FF . + !byte $FF ; 0DA1 FF . + !byte $FF ; 0DA2 FF . + !byte $FF ; 0DA3 FF . + plp ; 0DA4 28 ( + !byte $FF ; 0DA5 FF . + !byte $FF ; 0DA6 FF . + !byte $FF ; 0DA7 FF . + !byte $FF ; 0DA8 FF . + !byte $FF ; 0DA9 FF . + plp ; 0DAA 28 ( + !byte $FF ; 0DAB FF . + !byte $FF ; 0DAC FF . + !byte $FF ; 0DAD FF . + !byte $FF ; 0DAE FF . + !byte $FF ; 0DAF FF . + plp ; 0DB0 28 ( + !byte $FF ; 0DB1 FF . + !byte $FF ; 0DB2 FF . + !byte $FF ; 0DB3 FF . + !byte $FF ; 0DB4 FF . + !byte $FF ; 0DB5 FF . + plp ; 0DB6 28 ( + !byte $FF ; 0DB7 FF . + !byte $FF ; 0DB8 FF . + !byte $FF ; 0DB9 FF . + !byte $FF ; 0DBA FF . + !byte $FF ; 0DBB FF . + plp ; 0DBC 28 ( + !byte $FF ; 0DBD FF . + !byte $FF ; 0DBE FF . + !byte $FF ; 0DBF FF . + !byte $FF ; 0DC0 FF . + !byte $FF ; 0DC1 FF . + plp ; 0DC2 28 ( + !byte $FF ; 0DC3 FF . + !byte $FF ; 0DC4 FF . + !byte $FF ; 0DC5 FF . + !byte $FF ; 0DC6 FF . + !byte $FF ; 0DC7 FF . + plp ; 0DC8 28 ( + !byte $FF ; 0DC9 FF . + !byte $FF ; 0DCA FF . + !byte $FF ; 0DCB FF . + !byte $FF ; 0DCC FF . + !byte $FF ; 0DCD FF . + plp ; 0DCE 28 ( + !byte $FF ; 0DCF FF . + !byte $FF ; 0DD0 FF . + !byte $FF ; 0DD1 FF . + !byte $FF ; 0DD2 FF . + !byte $FF ; 0DD3 FF . + plp ; 0DD4 28 ( + !byte $FF ; 0DD5 FF . + !byte $FF ; 0DD6 FF . + !byte $FF ; 0DD7 FF . + !byte $FF ; 0DD8 FF . + !byte $FF ; 0DD9 FF . + plp ; 0DDA 28 ( + !byte $FF ; 0DDB FF . + !byte $FF ; 0DDC FF . + !byte $FF ; 0DDD FF . + !byte $FF ; 0DDE FF . + !byte $FF ; 0DDF FF . + plp ; 0DE0 28 ( + !byte $FF ; 0DE1 FF . + !byte $FF ; 0DE2 FF . + !byte $FF ; 0DE3 FF . + !byte $FF ; 0DE4 FF . + !byte $FF ; 0DE5 FF . + plp ; 0DE6 28 ( + !byte $FF ; 0DE7 FF . + !byte $FF ; 0DE8 FF . + !byte $FF ; 0DE9 FF . + !byte $FF ; 0DEA FF . + !byte $FF ; 0DEB FF . + plp ; 0DEC 28 ( + !byte $FF ; 0DED FF . + !byte $FF ; 0DEE FF . + !byte $FF ; 0DEF FF . + !byte $FF ; 0DF0 FF . + !byte $FF ; 0DF1 FF . + plp ; 0DF2 28 ( + !byte $FF ; 0DF3 FF . + !byte $FF ; 0DF4 FF . + !byte $FF ; 0DF5 FF . + !byte $FF ; 0DF6 FF . + !byte $FF ; 0DF7 FF . + plp ; 0DF8 28 ( + !byte $FF ; 0DF9 FF . + !byte $FF ; 0DFA FF . + !byte $FF ; 0DFB FF . + !byte $FF ; 0DFC FF . + !byte $FF ; 0DFD FF . + plp ; 0DFE 28 ( + !byte $FF ; 0DFF FF . + !byte $FF ; 0E00 FF . + !byte $FF ; 0E01 FF . + !byte $FF ; 0E02 FF . + !byte $FF ; 0E03 FF . + plp ; 0E04 28 ( + !byte $FF ; 0E05 FF . + !byte $FF ; 0E06 FF . + !byte $FF ; 0E07 FF . + !byte $FF ; 0E08 FF . + !byte $FF ; 0E09 FF . + plp ; 0E0A 28 ( + !byte $FF ; 0E0B FF . + !byte $FF ; 0E0C FF . + !byte $FF ; 0E0D FF . + !byte $FF ; 0E0E FF . + !byte $FF ; 0E0F FF . + plp ; 0E10 28 ( + !byte $FF ; 0E11 FF . + !byte $FF ; 0E12 FF . + !byte $FF ; 0E13 FF . + !byte $FF ; 0E14 FF . + !byte $FF ; 0E15 FF . + plp ; 0E16 28 ( + !byte $FF ; 0E17 FF . + !byte $FF ; 0E18 FF . + !byte $FF ; 0E19 FF . + !byte $FF ; 0E1A FF . + !byte $FF ; 0E1B FF . + plp ; 0E1C 28 ( + !byte $FF ; 0E1D FF . + !byte $FF ; 0E1E FF . + !byte $FF ; 0E1F FF . + !byte $FF ; 0E20 FF . + !byte $FF ; 0E21 FF . + plp ; 0E22 28 ( + !byte $FF ; 0E23 FF . + !byte $FF ; 0E24 FF . + !byte $FF ; 0E25 FF . + !byte $FF ; 0E26 FF . + !byte $FF ; 0E27 FF . + plp ; 0E28 28 ( + !byte $FF ; 0E29 FF . + !byte $FF ; 0E2A FF . + !byte $FF ; 0E2B FF . + !byte $FF ; 0E2C FF . + !byte $FF ; 0E2D FF . + plp ; 0E2E 28 ( + !byte $FF ; 0E2F FF . + !byte $FF ; 0E30 FF . + !byte $FF ; 0E31 FF . + !byte $FF ; 0E32 FF . + !byte $FF ; 0E33 FF . + plp ; 0E34 28 ( + !byte $FF ; 0E35 FF . + !byte $FF ; 0E36 FF . + !byte $FF ; 0E37 FF . + !byte $FF ; 0E38 FF . + !byte $FF ; 0E39 FF . + plp ; 0E3A 28 ( + !byte $FF ; 0E3B FF . + !byte $FF ; 0E3C FF . + !byte $FF ; 0E3D FF . + !byte $FF ; 0E3E FF . + !byte $FF ; 0E3F FF . + plp ; 0E40 28 ( + !byte $FF ; 0E41 FF . + !byte $FF ; 0E42 FF . + !byte $FF ; 0E43 FF . + !byte $FF ; 0E44 FF . + !byte $FF ; 0E45 FF . + plp ; 0E46 28 ( + !byte $FF ; 0E47 FF . + !byte $FF ; 0E48 FF . + !byte $FF ; 0E49 FF . + !byte $FF ; 0E4A FF . + !byte $FF ; 0E4B FF . + plp ; 0E4C 28 ( + !byte $FF ; 0E4D FF . + !byte $FF ; 0E4E FF . + !byte $FF ; 0E4F FF . + !byte $FF ; 0E50 FF . + !byte $FF ; 0E51 FF . + plp ; 0E52 28 ( + !byte $FF ; 0E53 FF . + !byte $FF ; 0E54 FF . + !byte $FF ; 0E55 FF . + !byte $FF ; 0E56 FF . + !byte $FF ; 0E57 FF . + plp ; 0E58 28 ( + !byte $FF ; 0E59 FF . + !byte $FF ; 0E5A FF . + !byte $FF ; 0E5B FF . + !byte $FF ; 0E5C FF . + !byte $FF ; 0E5D FF . + !byte $23 ; 0E5E 23 # + !byte $F0 ; 0E5F F0 . +L0E60: !byte $FF ; 0E60 FF . + !byte $F7 ; 0E61 F7 . + !byte $FF ; 0E62 FF . + !byte $FF ; 0E63 FF . +L0E64: lda #$E5 ; 0E64 A9 E5 .. + sta r0H ; 0E66 85 03 .. + lda #$80 ; 0E68 A9 80 .. + sta r0L ; 0E6A 85 02 .. + jsr L0EA0 ; 0E6C 20 A0 0E .. + cpx #$00 ; 0E6F E0 00 .. + bne L0E82 ; 0E71 D0 0F .. + cmp #$00 ; 0E73 C9 00 .. + bne L0E82 ; 0E75 D0 0B .. + lda #$A6 ; 0E77 A9 A6 .. + sta r0H ; 0E79 85 03 .. + lda #$C0 ; 0E7B A9 C0 .. + sta r0L ; 0E7D 85 02 .. + jsr L0EA0 ; 0E7F 20 A0 0E .. +L0E82: cpx #$00 ; 0E82 E0 00 .. + bne L0E9D ; 0E84 D0 17 .. + tax ; 0E86 AA . + lda #$01 ; 0E87 A9 01 .. + cpx #$41 ; 0E89 E0 41 .A + beq L0E9F ; 0E8B F0 12 .. + lda #$02 ; 0E8D A9 02 .. + cpx #$71 ; 0E8F E0 71 .q + beq L0E9F ; 0E91 F0 0C .. + lda #$03 ; 0E93 A9 03 .. + ldx #$81 ; 0E95 A2 81 .. + bne L0E9F ; 0E97 D0 06 .. + lda #$FF ; 0E99 A9 FF .. + bne L0E9F ; 0E9B D0 02 .. +L0E9D: lda #$00 ; 0E9D A9 00 .. +L0E9F: rts ; 0E9F 60 ` +; ---------------------------------------------------------------------------- +L0EA0: jsr L0EF5 ; 0EA0 20 F5 0E .. + lda #$01 ; 0EA3 A9 01 .. + sta $07 ; 0EA5 85 07 .. + lda #$00 ; 0EA7 A9 00 .. + sta $06 ; 0EA9 85 06 .. +L0EAB: jsr L0F05 ; 0EAB 20 05 0F .. + cpx #$00 ; 0EAE E0 00 .. + bne L0EF4 ; 0EB0 D0 42 .B + cmp #$31 ; 0EB2 C9 31 .1 + bne L0EE4 ; 0EB4 D0 2E .. + jsr L0F05 ; 0EB6 20 05 0F .. + cmp #$35 ; 0EB9 C9 35 .5 + bne L0EE4 ; 0EBB D0 27 .' + jsr L0F05 ; 0EBD 20 05 0F .. + sta r1L ; 0EC0 85 04 .. + and #$70 ; 0EC2 29 70 )p + cmp #$30 ; 0EC4 C9 30 .0 + bne L0EE4 ; 0EC6 D0 1C .. + lda r1L ; 0EC8 A5 04 .. + asl ;a ; 0ECA 0A . + asl ;a ; 0ECB 0A . + asl ;a ; 0ECC 0A . + asl ;a ; 0ECD 0A . + sta r1L ; 0ECE 85 04 .. + jsr L0F05 ; 0ED0 20 05 0F .. + sta r1H ; 0ED3 85 05 .. + and #$70 ; 0ED5 29 70 )p + cmp #$30 ; 0ED7 C9 30 .0 + bne L0EE4 ; 0ED9 D0 09 .. + lda r1H ; 0EDB A5 05 .. + and #$0F ; 0EDD 29 0F ). + ora r1L ; 0EDF 05 04 .. + ldx #$00 ; 0EE1 A2 00 .. + rts ; 0EE3 60 ` +; ---------------------------------------------------------------------------- +L0EE4: lda $06 ; 0EE4 A5 06 .. + bne L0EEA ; 0EE6 D0 02 .. + dec $07 ; 0EE8 C6 07 .. +L0EEA: dec $06 ; 0EEA C6 06 .. + lda $06 ; 0EEC A5 06 .. + ora $07 ; 0EEE 05 07 .. + bne L0EAB ; 0EF0 D0 B9 .. + ldx #$00 ; 0EF2 A2 00 .. +L0EF4: rts ; 0EF4 60 ` +; ---------------------------------------------------------------------------- +L0EF5: lda r0H ; 0EF5 A5 03 .. + sta L0F72 ; 0EF7 8D 72 0F .r. + lda r0L ; 0EFA A5 02 .. + sta L0F71 ; 0EFC 8D 71 0F .q. + lda #$20 ; 0EFF A9 20 . + sta $2109 ; 0F01 8D 09 21 ..! + rts ; 0F04 60 ` +; ---------------------------------------------------------------------------- +L0F05: ldy $2109 ; 0F05 AC 09 21 ..! + cpy #$20 ; 0F08 C0 20 . + bcs L0F15 ; 0F0A B0 09 .. + lda $210A,y ; 0F0C B9 0A 21 ..! + inc $2109 ; 0F0F EE 09 21 ..! + ldx #$00 ; 0F12 A2 00 .. + rts ; 0F14 60 ` +; ---------------------------------------------------------------------------- +L0F15: jsr LC25C ; 0F15 20 5C C2 \. + lda #$0F ; 0F18 A9 0F .. + sta r0H ; 0F1A 85 03 .. + lda #$6E ; 0F1C A9 6E .n + sta r0L ; 0F1E 85 02 .. + jsr L0F74 ; 0F20 20 74 0F t. + beq L0F29 ; 0F23 F0 04 .. + jsr LC25F ; 0F25 20 5F C2 _. + rts ; 0F28 60 ` +; ---------------------------------------------------------------------------- +L0F29: jsr LFFAE ; 0F29 20 AE FF .. + lda $8489 ; 0F2C AD 89 84 ... + jsr LFFB4 ; 0F2F 20 B4 FF .. + lda #$FF ; 0F32 A9 FF .. + jsr LFF96 ; 0F34 20 96 FF .. + ldy #$00 ; 0F37 A0 00 .. +L0F39: jsr LFFA5 ; 0F39 20 A5 FF .. + sta $210A,y ; 0F3C 99 0A 21 ..! + iny ; 0F3F C8 . + cpy #$20 ; 0F40 C0 20 . + bcc L0F39 ; 0F42 90 F5 .. + jsr LFFAB ; 0F44 20 AB FF .. + lda $8489 ; 0F47 AD 89 84 ... + jsr LFFB1 ; 0F4A 20 B1 FF .. + lda #$EF ; 0F4D A9 EF .. + jsr LFF93 ; 0F4F 20 93 FF .. + jsr LFFAE ; 0F52 20 AE FF .. + jsr LC25F ; 0F55 20 5F C2 _. + lda #$00 ; 0F58 A9 00 .. + sta $2109 ; 0F5A 8D 09 21 ..! + clc ; 0F5D 18 . + lda #$20 ; 0F5E A9 20 . + adc L0F71 ; 0F60 6D 71 0F mq. + sta L0F71 ; 0F63 8D 71 0F .q. + bcc L0F6B ; 0F66 90 03 .. + inc L0F72 ; 0F68 EE 72 0F .r. +L0F6B: clv ; 0F6B B8 . + bvc L0F05 ; 0F6C 50 97 P. + eor $522D ; 0F6E 4D 2D 52 M-R +L0F71: brk ; 0F71 00 . +L0F72: brk ; 0F72 00 . + !byte $20 ; 0F73 20 +L0F74: lda #$00 ; 0F74 A9 00 .. + sta $90 ; 0F76 85 90 .. + lda $8489 ; 0F78 AD 89 84 ... + jsr LFFB1 ; 0F7B 20 B1 FF .. + bit $90 ; 0F7E 24 90 $. + bmi L0F9A ; 0F80 30 18 0. + lda #$FF ; 0F82 A9 FF .. + jsr LFF93 ; 0F84 20 93 FF .. + bit $90 ; 0F87 24 90 $. + bmi L0F9A ; 0F89 30 0F 0. + ldy #$00 ; 0F8B A0 00 .. +L0F8D: lda ($02),y ; 0F8D B1 02 .. + jsr LFFA8 ; 0F8F 20 A8 FF .. + iny ; 0F92 C8 . + cpy #$06 ; 0F93 C0 06 .. + bcc L0F8D ; 0F95 90 F6 .. + ldx #$00 ; 0F97 A2 00 .. + rts ; 0F99 60 ` +; ---------------------------------------------------------------------------- +L0F9A: jsr LFFAE ; 0F9A 20 AE FF .. + ldx #$0D ; 0F9D A2 0D .. + rts ; 0F9F 60 ` +; ---------------------------------------------------------------------------- +L0FA0: lda #$00 ; 0FA0 A9 00 .. + sta $848D ; 0FA2 8D 8D 84 ... + ldy #$01 ; 0FA5 A0 01 .. +L0FA7: lda $848E,y ; 0FA7 B9 8E 84 ... + beq L0FAF ; 0FAA F0 03 .. + inc $848D ; 0FAC EE 8D 84 ... +L0FAF: dey ; 0FAF 88 . + bpl L0FA7 ; 0FB0 10 F5 .. + rts ; 0FB2 60 ` +; ---------------------------------------------------------------------------- +L0FB3: jsr LC25C ;initForIO ; 0FB3 20 5C C2 \. + lda #$08 + sta ramExpSize + sta $2102 +; rts + +; lda #$00 ; 0FB6 A9 00 .. +; sta ramExpSize ; 0FB8 8D C3 88 ... +; lda #$02 ; 0FBB A9 02 .. +; sta $2102 ; 0FBD 8D 02 21 ..! +; lda $DF00 ; 0FC0 AD 00 DF ... +; and #$10 ;sizebit ; 0FC3 29 10 ). +; beq L0FCC ; 0FC5 F0 05 .. +; lda #$20 ; 0FC7 A9 20 . +; sta $2102 ; 0FC9 8D 02 21 ..! +;L0FCC: lda $DF00 ; 0FCC AD 00 DF ... +; and #$E0 ; 0FCF 29 E0 ). +; bne L100D ; 0FD1 D0 3A .: +; lda #$55 ; 0FD3 A9 55 .U +; sta $DF02 ; 0FD5 8D 02 DF ... +; cmp $DF02 ; 0FD8 CD 02 DF ... +; bne L100D ; 0FDB D0 30 .0 +; lda #$AA ; 0FDD A9 AA .. +; sta $DF02 ; 0FDF 8D 02 DF ... +; ldy #$00 ; 0FE2 A0 00 .. +;L0FE4: dey ; 0FE4 88 . +; bne L0FE4 ; 0FE5 D0 FD .. +; cmp $DF02 ; 0FE7 CD 02 DF ... +; bne L100D ; 0FEA D0 21 .! +; lda #$01 ; 0FEC A9 01 .. +; sta ramExpSize ; 0FEE 8D C3 88 ... +; lda #$00 ; 0FF1 A9 00 .. +; sta $08 ; 0FF3 85 08 .. +;L0FF5: jsr L1010 ; 0FF5 20 10 10 .. +; bcc L100A ; 0FF8 90 10 .. +; lda ramExpSize ; 0FFA AD C3 88 ... +; cmp $2102 ; 0FFD CD 02 21 ..! +; beq L100D ; 1000 F0 0B .. +; inc ramExpSize ; 1002 EE C3 88 ... +; inc $08 ; 1005 E6 08 .. +; clv ; 1007 B8 . +; bvc L0FF5 ; 1008 50 EB P. +;L100A: dec ramExpSize ; 100A CE C3 88 ... +L100D: jmp LC25F ; 100D 4C 5F C2 L_. +; ---------------------------------------------------------------------------- +L1010: lda #$20 ; 1010 A9 20 . + sta r0H ; 1012 85 03 .. + lda #$FA ; 1014 A9 FA .. + sta r0L ; 1016 85 02 .. + lda #$00 ; 1018 A9 00 .. + sta r1L ; 101A 85 04 .. + sta r1H ; 101C 85 05 .. + lda #$00 ; 101E A9 00 .. + sta $07 ; 1020 85 07 .. + lda #$08 ; 1022 A9 08 .. + sta $06 ; 1024 85 06 .. + jsr FetchRAM ; 1026 20 CB C2 .. + lda #$10 ; 1029 A9 10 .. + sta r0H ; 102B 85 03 .. + lda #$79 ; 102D A9 79 .y + sta r0L ; 102F 85 02 .. + jsr StashRAM;LC2C8 ; 1031 20 C8 C2 .. + lda #$20 ; 1034 A9 20 . + sta r0H ; 1036 85 03 .. + lda #$EA ; 1038 A9 EA .. + sta r0L ; 103A 85 02 .. + jsr FetchRAM ; 103C 20 CB C2 .. + lda $08 ; 103F A5 08 .. + pha ; 1041 48 H + lda #$00 ; 1042 A9 00 .. + sta $08 ; 1044 85 08 .. + lda #$20 ; 1046 A9 20 . + sta r0H ; 1048 85 03 .. + lda #$F2 ; 104A A9 F2 .. + sta r0L ; 104C 85 02 .. + jsr FetchRAM ; 104E 20 CB C2 .. + pla ; 1051 68 h + sta $08 ; 1052 85 08 .. + lda #$20 ; 1054 A9 20 . + sta r0H ; 1056 85 03 .. + lda #$FA ; 1058 A9 FA .. + sta r0L ; 105A 85 02 .. + jsr StashRAM;LC2C8 ; 105C 20 C8 C2 .. + ldy #$07 ; 105F A0 07 .. +L1061: lda L1079,y ; 1061 B9 79 10 .y. + cmp $20EA,y ; 1064 D9 EA 20 .. + bne L1077 ; 1067 D0 0E .. + ldx $08 ; 1069 A6 08 .. + beq L1072 ; 106B F0 05 .. + cmp $20F2,y ; 106D D9 F2 20 .. + beq L1077 ; 1070 F0 05 .. +L1072: dey ; 1072 88 . + bpl L1061 ; 1073 10 EC .. + sec ; 1075 38 8 + rts ; 1076 60 ` +; ---------------------------------------------------------------------------- +L1077: clc ; 1077 18 . + rts ; 1078 60 ` +; ---------------------------------------------------------------------------- +L1079: !byte $52 ; 1079 52 R + eor ($4D,x) ; 107A 41 4D AM + !byte $43 ; 107C 43 C + pla ; 107D 68 h + adc $63 ; 107E 65 63 ec + !byte $6B ; 1080 6B k +L1081: lda sysRAMFlg ; 1081 AD C4 88 ... + and #$20 ; 1084 29 20 ) + beq L1094 ; 1086 F0 0C .. + lda $2104 ; 1088 AD 04 21 ..! + jsr L073E ; 108B 20 3E 07 >. + jsr L1095 ; 108E 20 95 10 .. + jsr L1145 ; 1091 20 45 11 E. +L1094: rts ; 1094 60 ` +; ---------------------------------------------------------------------------- +L1095: jsr L113A ; 1095 20 3A 11 :. + lda #$84 ; 1098 A9 84 .. + sta r0H ; 109A 85 03 .. + lda #$79 ; 109C A9 79 .y + sta r1H ; 109E 85 05 .. + lda #$05 ; 10A0 A9 05 .. + sta $07 ; 10A2 85 07 .. + jsr StashRAM;LC2C8 ; 10A4 20 C8 C2 .. + bit sysRAMFlg ; 10A7 2C C4 88 ,.. + bvs L10C2 ; 10AA 70 16 p. + jsr L113A ; 10AC 20 3A 11 :. + lda #$90 ; 10AF A9 90 .. + sta r0H ; 10B1 85 03 .. + lda #$83 ; 10B3 A9 83 .. + sta r1H ; 10B5 85 05 .. + lda #$0D ; 10B7 A9 0D .. + sta $07 ; 10B9 85 07 .. + lda #$80 ; 10BB A9 80 .. + sta $06 ; 10BD 85 06 .. + jsr StashRAM;LC2C8 ; 10BF 20 C8 C2 .. +L10C2: jsr L113A ; 10C2 20 3A 11 :. + lda #$80 ; 10C5 A9 80 .. + sta r0L ; 10C7 85 02 .. + sta $06 ; 10C9 85 06 .. + lda #$9D ; 10CB A9 9D .. + sta r0H ; 10CD 85 03 .. + lda #$B9 ; 10CF A9 B9 .. + sta r1H ; 10D1 85 05 .. + lda #$00 ; 10D3 A9 00 .. + sta $08 ; 10D5 85 08 .. + lda #$02 ; 10D7 A9 02 .. + sta $07 ; 10D9 85 07 .. + jsr StashRAM;LC2C8 ; 10DB 20 C8 C2 .. + jsr L113A ; 10DE 20 3A 11 :. + lda #$BF ; 10E1 A9 BF .. + sta r0H ; 10E3 85 03 .. + lda #$40 ; 10E5 A9 40 .@ + sta r0L ; 10E7 85 02 .. + lda #$BB ; 10E9 A9 BB .. + sta r1H ; 10EB 85 05 .. + lda #$80 ; 10ED A9 80 .. + sta r1L ; 10EF 85 04 .. + lda #$10 ; 10F1 A9 10 .. + sta $07 ; 10F3 85 07 .. + lda #$C0 ; 10F5 A9 C0 .. + sta $06 ; 10F7 85 06 .. + jsr StashRAM;LC2C8 ; 10F9 20 C8 C2 .. + lda #$30 ; 10FC A9 30 .0 + sta $0A ; 10FE 85 0A .. + lda #$D0 ; 1100 A9 D0 .. + sta $0D ; 1102 85 0D .. + lda #$00 ; 1104 A9 00 .. + sta $0C ; 1106 85 0C .. + lda #$80 ; 1108 A9 80 .. + sta r0H ; 110A 85 03 .. + lda #$00 ; 110C A9 00 .. + sta r0L ; 110E 85 02 .. + lda #$CC ; 1110 A9 CC .. + sta r1H ; 1112 85 05 .. + lda #$40 ; 1114 A9 40 .@ + sta r1L ; 1116 85 04 .. + lda #$01 ; 1118 A9 01 .. + sta $07 ; 111A 85 07 .. + lda #$00 ; 111C A9 00 .. + sta $06 ; 111E 85 06 .. + lda #$00 ; 1120 A9 00 .. + sta $08 ; 1122 85 08 .. +L1124: ldy #$00 ; 1124 A0 00 .. +L1126: lda ($0C),y ; 1126 B1 0C .. + sta $8000,y ; 1128 99 00 80 ... + iny ; 112B C8 . + bne L1126 ; 112C D0 F8 .. + jsr StashRAM;LC2C8 ; 112E 20 C8 C2 .. + inc $0D ; 1131 E6 0D .. + inc r1H ; 1133 E6 05 .. + dec $0A ; 1135 C6 0A .. + bne L1124 ; 1137 D0 EB .. + rts ; 1139 60 ` +; ---------------------------------------------------------------------------- +L113A: lda #$00 ; 113A A9 00 .. + sta r0L ; 113C 85 02 .. + sta r1L ; 113E 85 04 .. + sta $06 ; 1140 85 06 .. + sta $08 ; 1142 85 08 .. + rts ; 1144 60 ` +; ---------------------------------------------------------------------------- +L1145: jsr L113A ; 1145 20 3A 11 :. + lda #$7E ; 1148 A9 7E .~ + sta r1H ; 114A 85 05 .. + lda #$05 ; 114C A9 05 .. + sta $07 ; 114E 85 07 .. + lda #$11 ; 1150 A9 11 .. + sta r0H ; 1152 85 03 .. + lda #$5B ; 1154 A9 5B .[ + sta r0L ; 1156 85 02 .. + jmp StashRAM;LC2C8 ; 1158 4C C8 C2 L.. +; ---------------------------------------------------------------------------- + sei ; 115B 78 x + cld ; 115C D8 . + ldx #$FF ; 115D A2 FF .. + txs ; 115F 9A . + lda #$30 ; 1160 A9 30 .0 + sta $01 ; 1162 85 01 .. + lda #$90 ; 1164 A9 90 .. + sta r0H ; 1166 85 03 .. + lda #$00 ; 1168 A9 00 .. + sta r0L ; 116A 85 02 .. + lda #$83 ; 116C A9 83 .. + sta r1H ; 116E 85 05 .. + lda #$00 ; 1170 A9 00 .. + sta r1L ; 1172 85 04 .. + lda #$0D ; 1174 A9 0D .. + sta $07 ; 1176 85 07 .. + lda #$80 ; 1178 A9 80 .. + sta $06 ; 117A 85 06 .. + jsr L6216 ; 117C 20 16 62 .b + lda #$9D ; 117F A9 9D .. + sta r0H ; 1181 85 03 .. + lda #$80 ; 1183 A9 80 .. + sta r0L ; 1185 85 02 .. + lda #$B9 ; 1187 A9 B9 .. + sta r1H ; 1189 85 05 .. + lda #$00 ; 118B A9 00 .. + sta r1L ; 118D 85 04 .. + lda #$02 ; 118F A9 02 .. + sta $07 ; 1191 85 07 .. + lda #$80 ; 1193 A9 80 .. + sta $06 ; 1195 85 06 .. + jsr L6216 ; 1197 20 16 62 .b + lda #$BF ; 119A A9 BF .. + sta r0H ; 119C 85 03 .. + lda #$40 ; 119E A9 40 .@ + sta r0L ; 11A0 85 02 .. + lda #$BB ; 11A2 A9 BB .. + sta r1H ; 11A4 85 05 .. + lda #$80 ; 11A6 A9 80 .. + sta r1L ; 11A8 85 04 .. + lda #$00 ; 11AA A9 00 .. + sta $07 ; 11AC 85 07 .. + lda #$C0 ; 11AE A9 C0 .. + sta $06 ; 11B0 85 06 .. + jsr L6216 ; 11B2 20 16 62 .b + lda #$C0 ; 11B5 A9 C0 .. + sta r0H ; 11B7 85 03 .. + lda #$80 ; 11B9 A9 80 .. + sta r0L ; 11BB 85 02 .. + lda #$BC ; 11BD A9 BC .. + sta r1H ; 11BF 85 05 .. + lda #$C0 ; 11C1 A9 C0 .. + sta r1L ; 11C3 85 04 .. + lda #$0F ; 11C5 A9 0F .. + sta $07 ; 11C7 85 07 .. + lda #$80 ; 11C9 A9 80 .. + sta $06 ; 11CB 85 06 .. + jsr L6216 ; 11CD 20 16 62 .b + lda #$30 ; 11D0 A9 30 .0 + sta $0A ; 11D2 85 0A .. + lda #$D0 ; 11D4 A9 D0 .. + sta $0D ; 11D6 85 0D .. + lda #$00 ; 11D8 A9 00 .. + sta $0C ; 11DA 85 0C .. + lda #$80 ; 11DC A9 80 .. + sta r0H ; 11DE 85 03 .. + lda #$00 ; 11E0 A9 00 .. + sta r0L ; 11E2 85 02 .. + lda #$CC ; 11E4 A9 CC .. + sta r1H ; 11E6 85 05 .. + lda #$40 ; 11E8 A9 40 .@ + sta r1L ; 11EA 85 04 .. + lda #$01 ; 11EC A9 01 .. + sta $07 ; 11EE 85 07 .. + lda #$00 ; 11F0 A9 00 .. + sta $06 ; 11F2 85 06 .. +L11F4: jsr L6216 ; 11F4 20 16 62 .b + ldy #$00 ; 11F7 A0 00 .. +L11F9: lda $8000,y ; 11F9 B9 00 80 ... + sta ($0C),y ; 11FC 91 0C .. + iny ; 11FE C8 . + bne L11F9 ; 11FF D0 F8 .. + inc $0D ; 1201 E6 0D .. + inc r1H ; 1203 E6 05 .. + dec $0A ; 1205 C6 0A .. + bne L11F4 ; 1207 D0 EB .. + jsr LC1B4 ; 1209 20 B4 C1 .. + brk ; 120C 00 . + ora $00 ; 120D 05 00 .. + sty $00 ; 120F 84 00 .. + lda #$00 ; 1211 A9 00 .. + sta r0L ; 1213 85 02 .. + lda #$A0 ; 1215 A9 A0 .. + sta r0H ; 1217 85 03 .. + ldx #$7D ; 1219 A2 7D .} +L121B: ldy #$3F ; 121B A0 3F .? +L121D: lda #$55 ; 121D A9 55 .U + sta ($02),y ; 121F 91 02 .. + dey ; 1221 88 . + lda #$AA ; 1222 A9 AA .. + sta ($02),y ; 1224 91 02 .. + dey ; 1226 88 . + bpl L121D ; 1227 10 F4 .. + lda r0L ; 1229 A5 02 .. + clc ; 122B 18 . + adc #$40 ; 122C 69 40 i@ + sta r0L ; 122E 85 02 .. + bcc L1234 ; 1230 90 02 .. + inc r0H ; 1232 E6 03 .. +L1234: dex ; 1234 CA . + bne L121B ; 1235 D0 E4 .. + jsr LC271 ; 1237 20 71 C2 q. + lda #$FF ; 123A A9 FF .. + sta firstBoot ; 123C 8D C5 88 ... + jsr LFE80 ; 123F 20 80 FE .. + lda #$88 ; 1242 A9 88 .. + sta r0H ; 1244 85 03 .. + lda #$C3 ; 1246 A9 C3 .. + sta r0L ; 1248 85 02 .. + lda #$7D ; 124A A9 7D .} + sta r1H ; 124C 85 05 .. + lda #$C3 ; 124E A9 C3 .. + sta r1L ; 1250 85 04 .. + lda #$00 ; 1252 A9 00 .. + sta $07 ; 1254 85 07 .. + lda #$02 ; 1256 A9 02 .. + sta $06 ; 1258 85 06 .. + jsr L6216 ; 125A 20 16 62 .b + lda $C012 ; 125D AD 12 C0 ... + sta sysRAMFlg ; 1260 8D C4 88 ... + lda #$85 ; 1263 A9 85 .. + sta r0H ; 1265 85 03 .. + lda #$16 ; 1267 A9 16 .. + sta r0L ; 1269 85 02 .. + lda #$7A ; 126B A9 7A .z + sta r1H ; 126D 85 05 .. + lda #$16 ; 126F A9 16 .. + sta r1L ; 1271 85 04 .. + lda #$00 ; 1273 A9 00 .. + sta $07 ; 1275 85 07 .. + lda #$03 ; 1277 A9 03 .. + sta $06 ; 1279 85 06 .. + lda #$00 ; 127B A9 00 .. + sta $08 ; 127D 85 08 .. + jsr FetchRAM ; 127F 20 CB C2 .. + lda $DC08 ; 1282 AD 08 DC ... + sta $DC08 ; 1285 8D 08 DC ... + lda #$84 ; 1288 A9 84 .. + sta r0H ; 128A 85 03 .. + lda #$8E ; 128C A9 8E .. + sta r0L ; 128E 85 02 .. + lda #$79 ; 1290 A9 79 .y + sta r1H ; 1292 85 05 .. + lda #$8E ; 1294 A9 8E .. + sta r1L ; 1296 85 04 .. + lda #$00 ; 1298 A9 00 .. + sta $07 ; 129A 85 07 .. + lda #$04 ; 129C A9 04 .. + sta $06 ; 129E 85 06 .. + jsr FetchRAM ; 12A0 20 CB C2 .. + lda #$88 ; 12A3 A9 88 .. + sta r0H ; 12A5 85 03 .. + lda #$C7 ; 12A7 A9 C7 .. + sta r0L ; 12A9 85 02 .. + lda #$7D ; 12AB A9 7D .} + sta r1H ; 12AD 85 05 .. + lda #$C7 ; 12AF A9 C7 .. + sta r1L ; 12B1 85 04 .. + lda #$00 ; 12B3 A9 00 .. + sta $07 ; 12B5 85 07 .. + lda #$04 ; 12B7 A9 04 .. + sta $06 ; 12B9 85 06 .. + jsr FetchRAM ; 12BB 20 CB C2 .. + lda #$84 ; 12BE A9 84 .. + sta r0H ; 12C0 85 03 .. + lda #$65 ; 12C2 A9 65 .e + sta r0L ; 12C4 85 02 .. + lda #$79 ; 12C6 A9 79 .y + sta r1H ; 12C8 85 05 .. + lda #$65 ; 12CA A9 65 .e + sta r1L ; 12CC 85 04 .. + lda #$00 ; 12CE A9 00 .. + sta $07 ; 12D0 85 07 .. + lda #$11 ; 12D2 A9 11 .. + sta $06 ; 12D4 85 06 .. + jsr FetchRAM ; 12D6 20 CB C2 .. + lda #$88 ; 12D9 A9 88 .. + sta r0H ; 12DB 85 03 .. + lda #$CB ; 12DD A9 CB .. + sta r0L ; 12DF 85 02 .. + lda #$7D ; 12E1 A9 7D .} + sta r1H ; 12E3 85 05 .. + lda #$CB ; 12E5 A9 CB .. + sta r1L ; 12E7 85 04 .. + lda #$00 ; 12E9 A9 00 .. + sta $07 ; 12EB 85 07 .. + lda #$11 ; 12ED A9 11 .. + sta $06 ; 12EF 85 06 .. + jsr FetchRAM ; 12F1 20 CB C2 .. + lda #$84 ; 12F4 A9 84 .. + sta r0H ; 12F6 85 03 .. + lda #$89 ; 12F8 A9 89 .. + sta r0L ; 12FA 85 02 .. + lda #$79 ; 12FC A9 79 .y + sta r1H ; 12FE 85 05 .. + lda #$89 ; 1300 A9 89 .. + sta r1L ; 1302 85 04 .. + lda #$00 ; 1304 A9 00 .. + !byte $85 ; 1306 85 . +L1307: !byte $07 ; 1307 07 . + lda #$01 ; 1308 A9 01 .. + sta $06 ; 130A 85 06 .. + jsr FetchRAM ; 130C 20 CB C2 .. + jsr LC25C ; 130F 20 5C C2 \. + lda #$04 ; 1312 A9 04 .. + sta r0L ; 1314 85 02 .. +L1316: ldy #$00 ; 1316 A0 00 .. + ldx #$00 ; 1318 A2 00 .. +L131A: dey ; 131A 88 . + bne L131A ; 131B D0 FD .. + dex ; 131D CA . + bne L131A ; 131E D0 FA .. + dec r0L ; 1320 C6 02 .. + bne L1316 ; 1322 D0 F2 .. + jsr LC25F ; 1324 20 5F C2 _. + lda $8489 ; 1327 AD 89 84 ... + pha ; 132A 48 H + lda #$0B ; 132B A9 0B .. + sta $8489 ; 132D 8D 89 84 ... + sta $BA ; 1330 85 BA .. + lda #$00 ; 1332 A9 00 .. + sta $848D ; 1334 8D 8D 84 ... + sta $BA ; 1337 85 BA .. + lda #$08 ; 1339 A9 08 .. + sta $848C ; 133B 8D 8C 84 ... + jsr LC2B0 ; 133E 20 B0 C2 .. + lda #$08 ; 1341 A9 08 .. + sta $2103 ; 1343 8D 03 21 ..! +L1346: ldy $2103 ; 1346 AC 03 21 ..! + lda $8486,y ; 1349 B9 86 84 ... + beq L135E ; 134C F0 10 .. + cpy #$0A ; 134E C0 0A .. + bcs L1355 ; 1350 B0 03 .. + inc $848D ; 1352 EE 8D 84 ... +L1355: lda $2103 ; 1355 AD 03 21 ..! + jsr LC2B0 ; 1358 20 B0 C2 .. + jsr LC1E1 ; 135B 20 E1 C1 .. +L135E: inc $2103 ; 135E EE 03 21 ..! + lda $2103 ; 1361 AD 03 21 ..! + cmp #$0C ; 1364 C9 0C .. + bcc L1346 ; 1366 90 DE .. + beq L1346 ; 1368 F0 DC .. + pla ; 136A 68 h + jsr LC2B0 ;setDevice ; 136B 20 B0 C2 .. + jmp EnterDesktop ; 136E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + ;ldy #$91 ; 1371 A0 91 .. + ;ldx $01 ; 1373 A6 01 .. + ;lda #$35 ; 1375 A9 35 .5 + ;sta $01 ; 1377 85 01 .. + + ;lda $03 ; 1379 A5 03 .. + ;sta $DF03 ; 137B 8D 03 DF ... + ;lda $02 ; 137E A5 02 .. + ;sta $DF02 ; 1380 8D 02 DF ... + ;lda $05 ; 1383 A5 05 .. + ;sta $DF05 ; 1385 8D 05 DF ... + ;lda $04 ; 1388 A5 04 .. + ;sta $DF04 ; 138A 8D 04 DF ... + ;lda #$00 ; 138D A9 00 .. + ;sta $DF06 ; 138F 8D 06 DF ... + ;lda $07 ; 1392 A5 07 .. + ;sta $DF08 ; 1394 8D 08 DF ... + ;lda $06 ; 1397 A5 06 .. + ;sta $DF07 ; 1399 8D 07 DF ... + ;lda #$00 ; 139C A9 00 .. + ;sta $DF09 ; 139E 8D 09 DF ... + ;sta $DF0A ; 13A1 8D 0A DF ... + ;sty $DF01 ; 13A4 8C 01 DF ... +;L13A7: ;lda $DF00 ; 13A7 AD 00 DF ... + ;brk; + ; and #$60 ; 13AA 29 60 )` + ; beq L13A7 ; 13AC F0 F9 .. + ; stx $01 ; 13AE 86 01 .. + jsr FetchRAM + rts ; 13B0 60 ` +; ---------------------------------------------------------------------------- + !byte $A2 ; 13B1 A2 . diff --git a/_newconf/newconf/r0.bin b/_newconf/newconf/r0.bin new file mode 100644 index 0000000000000000000000000000000000000000..92809fa524b202a6547123fc4b905835e9a4ecb2 GIT binary patch literal 4012 zcmd^Ce{3699Y5cl@6OJTbCNaDIKJu}?NXNsh><{+g{!DLdj;&Q-JwDHN zlBV4x(D;vM-`#uf`}^0s?*$}D5Xg^Y_qbj5nG}0V?r14=?r@U{M>Zz%dlOF3AivSc z;Td7uHbanUz;P1ft3g*b$R?ExM@U9@XKiM=H8vHuh$Uu(giNwB4O;R6d0PBaQTDXgW%f>q zd1i?P%)h--l-V2f?){?a?iel$kLu~UBrBiQLbn2 zn3Kr_g6^%EAm0z?U4`97{j{s(cZMxFKM=NpGzD`7OQa2!N{1|kJUe4@v4aX*%?0AQ ziVMP1ulUc?$kRpW3(sVQ3Gc2N-!5pW%S2~panMIS{N8|HTe+Kz=md+dwHbYP+On)>a3j#dsKV%>hg5l_2UX#K*}lRLg+@>9T3G@-E~H9 z&2386pZ$1Lcbqxf?1l9mJm7G7zqbiOq}X8eIt{8>;;%)h0ci(4 z9n+)s1S$fIPO>ZK#hh5KPyN}nq-X)TDDf<48wf=8iTrHHlq4n4z;p0+_m~|$T0Lx> zusper*E6{ZPRZLz=!Sl2V_*;*vG)WPe4A)H)bY=vpF#Y;U%-k3QrBNTi>1+zjvWV3m*InXVv z^!?Qz^=kT;uQvPF)E3{r>1y_U>4UB&-w)h)ZSQ`VtlxOg`pn|kzB#j@o3C252e*9j zOJvs*gO7dvDgIXMte%=5eqVXx5LzmuxiXsgfa(A3AM#-2O@9eiF8>E$-{OBM=0i+;452y7G@cWfj-#=T9>7*%VQbYv8aUVOHB<52ZuCAE?JX$o# zAs;Vq@{&(|@-sgpker_m8>IqCy-QxGfTn$Vi9GKE5%@^BkkLlTW4m>TNl6z6^_RE( z{NX#dqtAvhDb8!!za!Pz27b@;iO#!KGU1mBO6onX#34W1V1kd6$OQ5@s3p9+?8v(n z?Yf*<+Yyb}qs0sV+fiv`=h4~WeSy*t;Cc?d3KHg7yfpx8oRSSs>eB$uVoUjmk|D2;}vLdIc7vD*cM zjsP-*T8_Y^0!)G(ojCiM)c_0X0jhSir-9Z5v|7?}>kt^cJcdf_Du~WEoDa^0*_((A zgv$7Q&?@>q3p(hEPXdX4%@Sj!;t&3q^?v~wfyHi_D-ORdD&P8ziq6o!rZ+#2stq+j zH!99!!4(In03n>}cVJimLw$+rKd=cLaAXQY`|DxSf<5G=86hYn1a211SW@DGs z`$d}`#4YlVoY*$dWr->AymXSiPImL}oZ~hbx<+j%GYg_;pv)|k;d&w*km5EM&}vW% z2(3W)ArM+?2omB2*CK^n?X07nt;Bl_NPB=ZRzre!dFF8eCu#ytEC=x{>8nxo)j&;4 zRHtfGrRqYNj5(xvdbuElxr`obCL<`x0Q;-Lvx-> u;FAnb$(WRQ59vh;;VE9Fu2lJ0du`^TWMIyFH}7meknw#PJN3~@Hv4aG6&$+& literal 0 HcmV?d00001 diff --git a/_newconf/newconf/r0.find b/_newconf/newconf/r0.find new file mode 100644 index 00000000..4b090de5 --- /dev/null +++ b/_newconf/newconf/r0.find @@ -0,0 +1,10 @@ +#!/bin/sh + +for a in L043E L0616 L0672 L0739 L073E L0911 L0E19 L0FA0 L0FB3 +do + grep $a r0.labels +done +#grep L043E r0.labels +#grep L0616 r0.labels +#grep L0E19 r0.labels + diff --git a/_newconf/newconf/r0.info b/_newconf/newconf/r0.info new file mode 100644 index 00000000..806f06c7 --- /dev/null +++ b/_newconf/newconf/r0.info @@ -0,0 +1,41 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r0.asm"; + INPUTNAME "configure.cvt.record.0"; + STARTADDR $406; + PAGELENGTH 0; # No paging + CPU "6502"; + COMMENTS 4; + + }; + +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/const.inc";}; +ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/diskdrv.inc";}; +ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geossym2.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/inputdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/printdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/dio.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geosmac.ca65.inc";}; +ASMINC { FILE "geossym.inc";}; +ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/jumptab.inc";}; +ASMINC { FILE "c64kernal.inc";}; + +# One segment for the whole stuff +SEGMENT { START $406; END $FFFF; NAME "record1"; }; + +RANGE { START $406; END $40a; TYPE BYTETABLE;}; +RANGE { START $0511; END $0521; TYPE TEXTTABLE; }; +RANGE { START $0b25; END $0bb3; TYPE BYTETABLE; }; +RANGE { START $0bb4; END $0c8d; TYPE TEXTTABLE; }; + +RANGE { START $0d36; END $e63; TYPE TEXTTABLE; }; + +RANGE { START $1079; END $1080; TYPE TEXTTABLE; }; +RANGE { START $190F ; END $198F; TYPE TEXTTABLE; }; +RANGE { START $19E4 ; END $1A36; TYPE TEXTTABLE; }; + +RANGE { START $1A4B ; END $1A73; TYPE TEXTTABLE; }; +RANGE { START $1BC0 ; END $1C37; TYPE TEXTTABLE; }; +RANGE { START $1D61 ; END $1D9B; TYPE TEXTTABLE; }; +RANGE { START $1F42 ; END $1FA1; TYPE TEXTTABLE; }; + diff --git a/_newconf/newconf/r0.labels b/_newconf/newconf/r0.labels new file mode 100644 index 00000000..9bf1263c --- /dev/null +++ b/_newconf/newconf/r0.labels @@ -0,0 +1,685 @@ +_GetDirHead =$901a; unused +GotoFirstMenu =$c1bd; unused +TestPoint =$c13f; unused +READST =$ffb7; unused +L1346 =$1346 +i_ImprintRectangle =$c253; unused +L0EA0 =$ea0; ? +spr5pic =$8b40; unused +CHKIN =$ffc6; unused +L0AC6 =$ac6; ? +L0EE4 =$ee4; ? +_GetFreeDirBlk =$901e; unused +mcmclr0 =$d025; unused +bkvec =$316; unused +bootName =$c006; unused +InitRam =$c181; unused +i_PutString =$c1ae; unused +mcmclr1 =$d026; unused +L0AE7 =$ae7 +SaveFile =$c1ed; unused +cardDataPntr =$2c; unused +a8L =$7c; unused +_NxtBlkAlloc =$9028; unused +sidbase =$d400; unused +a0H =$fc; unused +a2H =$71; unused +LoadCharSet =$c1cc; unused +a4H =$75; unused +menuNumber =$84b7; unused +alarmSetFlag =$851c; unused +L0F6B =$f6b; ? +AppendRecord =$c289; unused +a6H =$79; unused +dirEntryBuf =$8400; unused +EnterTurbo =$c214; unused +L0F8D =$f8d +a8H =$7d; unused +inputDevName =$88cb; unused +VerWriteBlock =$c223; unused +a0L =$fb; unused +a2L =$70; unused +DoIcons =$c15a; unused +ClearRam =$c178; unused +a4L =$74; unused +irqvec =$314; unused +InitProcesses =$c103; unused +a6L =$78; unused +APP_RAM =$400; unused +AddDirBlock =$9039; unused +GetBlock =$c1e4; unused +ACPTR =$ffa5 +minMouseSpeed =$8502; unused +OPEN =$ffc0; unused +PRINTBASE =$7900; unused +i_Rectangle =$c19f; unused +TempHideMouse =$c2d7; unused +L081F =$81f; ? +mob3clr =$d02a; unused +inputData =$8506; unused +PutDecimal =$c184; unused +L043E =$43e; unused +keyVector =$84a3; unused +_ChangeDiskDevice =$900a; unused +c128Flag =$c013 +L064A =$64a; ? +SwapBData =$c2e6; unused +mouseFaultVec =$84a7; unused +stringX =$84be; unused +stringY =$84c0; unused +RstrFrmDialogue =$c2bf; unused +L09C8 =$9c8; ? +ToBASIC =$c241; unused +SECOND =$ff93 +L047C =$47c; ? +L07B6 =$7b6; ? +L09A4 =$9a4; ? +Get1stDirEntry =$9030; unused +L07B7 =$7b7; ? +L05A5 =$5a5; ? +L05E7 =$5e7; ? +STATUS =$90 +_FreeBlock =$9022; unused +L07D6 =$7d6; ? +SetNextFree =$c292; unused +L05A3 =$5a3; ? +saveFontTab =$850c; unused +PutChar =$c145; unused +ColorCard =$c2f8; unused +GetCharWidth =$c1c9; unused +BACK_SCR_BASE =$6000; unused +PromptOn =$c29b; unused +L09C3 =$9c3; ? +hour =$8519; unused +dblClickCount =$8515; unused +L05C1 =$5c1 +L09C2 =$9c2; ? +L6216 =$6216 +mouseData =$8505; unused +L0977 =$977; ? +_PutBlock =$9018; unused +UDTIM =$ffea; unused +WriteFile =$c1f9; unused +L0557 =$557; ? +Sleep =$c199; unused +GETIN =$ffe4; unused +L0704 =$704; ? +L0936 =$936 +L0974 =$974; ? +spr4pic =$8b00; unused +mobenble =$d015; unused +MOUSE_BASE =$fe80 +L0786 =$786; ? +L0911 =$911; ? +graphMode =$3f; unused +PurgeTurbo =$c235 +L0933 =$933; ? +MainLoop =$c1c3; unused +SETLFS =$ffba; unused +L0721 =$721; ? +turboFlags =$8492 +UseSystemFont =$c14b; unused +SmallPutChar =$c202; unused +alphaFlag =$84b4; unused +appMain =$849b; unused +GetNextChar =$c2a7; unused +grirq =$d019; unused +CPU_DATA =$1 +L0768 =$768; ? +usedRecords =$8497; unused +moby2 =$d017; unused +_SetGEOSDisk =$902e; unused +L0558 =$558; ? +L0769 =$769; ? +L04CC =$4cc; ? +VerifyRAM =$c2d1; unused +L04EC =$4ec; ? +_FindBAMBit =$9026; unused +GetBorder =$9036; unused +FollowChain =$c205; unused +L04EB =$4eb; ? +DoInlineReturn =$c2a4; unused +CIOUT =$ffa8 +isGEOS =$848b; unused +iconSelFlg =$84b5; unused +L0BBB =$bbb; ? +ReadRecord =$c28c +mob2clr =$d029; unused +BASIN =$ffcf; unused +L0A18 =$a18; ? +L0E19 =$e19; unused +fileSize =$8499; unused +SetGDirEntry =$c1f0; unused +_ExitTurbo =$9004; unused +ReadByte =$c2b6; unused +StringFaultVec =$84ab; unused +FrameRectangle =$c127; unused +CallRoutine =$c1d8; unused +L0A99 =$a99; ? +version =$c00f +BlkAlloc =$c1fc; unused +_ReadBlock =$900e; unused +L0A13 =$a13 +msePicPtr =$31; unused +EnterDeskTop =$c22c +SETNAM =$ffbd; unused +ramExpSize =$88c3 +mouseLeft =$84ba; unused +dlgBoxRamBuf =$851f; unused +ReadBuff =$903c; unused +DeleteFile =$c238; unused +L0C25 =$c25; ? +returnAddress =$3d; unused +L0A76 =$a76; ? +StashRAM =$c2c8 +Ddec =$c175; unused +DrDCurDkNm =$88ee; unused +L0FB3 =$fb3; ? +L3156 =$3156 +L1077 =$1077; ? +GetNxtDirEntry =$9033; unused +vdcdata =$d601; unused +mouseRight =$84bc; unused +spr7pic =$8bc0; unused +RestartProcess =$c106; unused +L1010 =$1010; unused +L1094 =$1094; ? +PreviousRecord =$c27d; unused +mouseBottom =$84b9; unused +IRQ_VECTOR =$fffe; unused +L1072 =$1072; ? +L1095 =$1095; ? +r1L =$4 +r9H =$15; unused +_ChkDkGEOS =$902c; unused +bakclr2 =$d023; unused +r3L =$8 +windowBottom =$34; unused +bakclr3 =$d024; unused +L0E9F =$e9f; ? +driveType =$848e +MoveData =$c17e +CINT =$ff81; unused +r5L =$c +_CalcBlksFree =$9020; unused +bakclr0 =$d021; unused +IOBASE =$fff3; unused +dateCopy =$c018; unused +r7L =$10 +DrACurDkNm =$841e; unused +bakclr1 =$d022; unused +L0C8E =$c8e; ? +L0E9D =$e9d; ? +driveData =$88bf +ChangeDiskDevice =$c2bc; unused +r1H =$5 +r9L =$14; unused +PutDirHead =$c24a +RESET_VECTOR =$fffc; unused +L1079 =$1079; ? +RESTOR =$ff8a; unused +r3H =$9; unused +DrBCurDkNm =$8430; unused +L0A9C =$a9c +i_GraphicsString =$c1a8; unused +NextRecord =$c27a; unused +r5H =$d +SCNKEY =$ff9f; unused +r7H =$11 +DrCCurDkNm =$88dc; unused +_GetBlock =$9016; unused +L0A3D =$a3d; ? +CPU_DDR =$0 +obj6Pointer =$8ffe; unused +FillRam =$c17b; unused +GetFHdrInfo =$c229; unused +r14H =$1f; unused +mouseYPos =$3c; unused +GetScanLine =$c13c; unused +mobbakcol =$d01f; unused +RDTIM =$ffde; unused +r10H =$17 +obj7Pointer =$8fff; unused +CopyString =$c265; unused +L099B =$99b +mob1clr =$d028; unused +r12H =$1b; unused +HideOnlyMouse =$c2f2; unused +Ddiv =$c169; unused +r14L =$1e; unused +obj4Pointer =$8ffc; unused +SAVE =$ffd8; unused +i_BitmapUp =$c1ab; unused +L095C =$95c +L097B =$97b +r10L =$16 +obj5Pointer =$8ffd; unused +mobmcm =$d01c; unused +grirqen =$d01a; unused +L057B =$57b; ? +r12L =$1a; unused +ReDoMenu =$c193; unused +DoneWithIO =$c25f +L078D =$78d; ? +interleave =$848c +obj2Pointer =$8ffa; unused +L08A4 =$8a4; ? +dir2Head =$8900 +WriteBlock =$c220; unused +SCREEN =$ffed; unused +L08A5 =$8a5; ? +obj3Pointer =$8ffb; unused +InterruptMain =$c100; unused +L04A4 =$4a4 +obj0Pointer =$8ff8; unused +BldGDirEntry =$c1f3; unused +SetColorMode =$c2f5; unused +L04C2 =$4c2; ? +L06B2 =$6b2; ? +L04A2 =$4a2; ? +scr80colors =$88bd; unused +obj1Pointer =$8ff9; unused +mouseSpeed =$8507; unused +DoDlgBox =$c256; unused +BSOUT =$ffd2; unused +spr6pic =$8b80; unused +SetNewMode =$c2dd; unused +L0470 =$470; ? +L0873 =$873; ? +ColorRectangle =$c2fb; unused +NewDisk =$c1e1 +CopyFString =$c268; unused +L0496 =$496; ? +L0872 =$872; ? +LISTEN =$ffb1 +Panic =$c2c2; unused +DoMenu =$c151; unused +LdDeskAcc =$c217; unused +mouseOn =$30; unused +_BlkAlloc =$902a; unused +screencolors =$851e; unused +EXP_BASE =$df00; unused +L09AD =$9ad; ? +L07DE =$7de; ? +UNLSN =$ffae +OpenRecordFile =$c274 +L07FE =$7fe; ? +minutes =$851a; unused +config =$ff00; unused +L07FF =$7ff; ? +keyreg =$d02f; unused +L07DF =$7df; ? +scr80polar =$88bc; unused +vicbase =$d000; unused +L0478 =$478; ? +L0649 =$649; ? +InitForIO =$c25c +PromptOff =$c29e; unused +L0479 =$479; ? +curRecord =$8496; unused +VECTOR =$ff8d; unused +DrawPoint =$c133; unused +L0418 =$418; ? +L0608 =$608 +currentMode =$2e; unused +L0EEA =$eea; ? +mouseXPos =$3a; unused +CKOUT =$ffc9; unused +L0EAB =$eab +mob0clr =$d027; unused +L0B28 =$b28; ? +L0F29 =$f29; ? +curDevice =$ba +InsertRecord =$c286; unused +MEMTOP =$ff99; unused +inputVector =$84a5; unused +L113A =$113a; ? +VerifyBData =$c2e9; unused +SetDevice =$c2b0 +L0D36 =$d36; ? +L10C2 =$10c2; ? +i_RecoverRectangle =$c1a5; unused +L0B25 =$b25; ? +L0F05 =$f05; ? +PutBlock =$c1e7 +leftMargin =$35; unused +rightMargin =$37; unused +_DoneWithIO =$9002; unused +BBMult =$c160; unused +mob2xpos =$d004; unused +L0AF1 =$af1; ? +L1316 =$1316 +mob0ypos =$d001; unused +L1145 =$1145; ? +L1355 =$1355; ? +L1126 =$1126 +FindFTypes =$c23b +CLOSE =$ffc3; unused +GetRealSize =$c1b1; unused +L1124 =$1124 +cia2base =$dd00; unused +TURBO_DD00_CPY =$8f; unused +memBase =$88cf; unused +L0EF4 =$ef4; ? +spr1pic =$8a40; unused +mouseTop =$84b8; unused +L0CC6 =$cc6 +L0EF5 =$ef5; ? +i_FillRam =$c1b4 +FastDelFile =$c244; unused +CLALL =$ffe7; unused +a9L =$7e; unused +curType =$88c6 +L0B1B =$b1b; ? +STOP =$ffe1; unused +a1H =$fe; unused +a3H =$73; unused +a5H =$77; unused +BlockProcess =$c10c; unused +L0CA8 =$ca8 +StartAppl =$c22f; unused +a7H =$7b; unused +random =$850a; unused +a9H =$7f; unused +UnFreezeProcess =$c115; unused +CloseRecordFile =$c277 +a1L =$fd; unused +a3L =$72 +EnableProcess =$c109; unused +NormalizeX =$c2e0; unused +RstrAppl =$c23e; unused +a5L =$76; unused +curDrive =$8489 +_WriteBlock =$9010; unused +L0F9A =$f9a; ? +a7L =$7a; unused +PrntFilename =$8465; unused +AccessCache =$c2ef; unused +L0B1E =$b1e +mob1ypos =$d003; unused +mob3xpos =$d006; unused +intBotVector =$849f; unused +MouseOff =$c18d; unused +BMult =$c163; unused +OpenDisk =$c2a1; unused +Dabs =$c16f; unused +mob7clr =$d02e; unused +curSetWidth =$27; unused +lpypos =$d014; unused +L05F8 =$5f8; ? +maxMouseSpeed =$8501; unused +RecoverRectangle =$c12d; unused +PosSprite =$c1cf; unused +BitOtherClip =$c2c5; unused +L048F =$48f; ? +ReadBlock =$c21a; unused +L040A =$40a +L048E =$48e; ? +PrntDiskName =$8476; unused +intTopVector =$849d; unused +COLOR_MATRIX =$8c00; unused +L07A8 =$7a8; ? +SwapRAM =$c2ce; unused +string =$24; unused +i_FrameRectangle =$c1a2; unused +mmu =$d500; unused +DrawSprite =$c1c6; unused +keyData =$8504; unused +ExitTurbo =$c232 +BRKVector =$84af; unused +_PutDirHead =$901c; unused +L05F7 =$5f7; ? +fileWritten =$8498; unused +RecoverAllMenus =$c157; unused +L1E05 =$1e05 +L07A1 =$7a1; ? +L09F0 =$9f0; ? +selectionFlash =$84b3; unused +mob2ypos =$d005; unused +L0736 =$736; ? +i_MoveData =$c1b7 +rasreg =$d012; unused +mobprior =$d01b; unused +sysRAMFlg =$88c4 +L0945 =$945; ? +WriteBuff =$903f; unused +ctab =$d800; unused +spr0pic =$8a00; unused +EnablSprite =$c1d2; unused +L0522 =$522; ? +L0797 =$797; ? +L0942 =$942; ? +L0711 =$711; ? +L0563 =$563; ? +pressFlag =$39; unused +SetPattern =$c139; unused +DisablSprite =$c1d5; unused +DShiftRight =$c262; unused +L08FF =$8ff; ? +FreezeProcess =$c112; unused +UpdateRecordFile =$c295; unused +mouseAccel =$8503; unused +L06AD =$6ad; ? +CmpFString =$c26e; unused +L06AC =$6ac; ? +curPattern =$22; unused +mobx2 =$d01d; unused +InitTextPrompt =$c1c0; unused +BitmapClip =$c2aa; unused +L06AA =$6aa; ? +savedmoby2 =$88bb; unused +L0739 =$739; ? +L0949 =$949 +L06EB =$6eb; ? +GetFile =$c208; unused +L0A69 =$a69; ? +mob1xpos =$d002; unused +mob3ypos =$d007; unused +TKSA =$ff96 +GetSerialNumber =$c196; unused +mob6clr =$d02d; unused +L100D =$fbe; unused +L121D =$121d +HorizontalLine =$c118; unused +lpxpos =$d013; unused +cia1base =$dc00; unused +year =$8516; unused +FreeBlock =$c2b9; unused +L11F9 =$11f9 +L121B =$121b +L0FAF =$faf; ? +TALK =$ffb4 +L0A89 =$a89; ? +SETTMO =$ffa2; unused +SETTIM =$ffdb; unused +L11F4 =$11f4 +mouseVector =$84a1; unused +CRC =$c20e; unused +L0A85 =$a85; ? +DrawLine =$c130; unused +L0E64 =$e64; ? +ReadFile =$c1ff; unused +L0A64 =$a64; ? +L0E82 =$e82; ? +BitmapUp =$c142; unused +extclr =$d020; unused +L0A25 =$a25; ? +LOAD =$ffd5; unused +ClearMouseMode =$c19c; unused +CalcBlksFree =$c1db; unused +L0A66 =$a66; ? +L0A81 =$a81; ? +L0C91 =$c91 +mob4ypos =$d009; unused +mob6xpos =$d00c; unused +CLRCH =$ffcc; unused +sysDBData =$851d; unused +nationality =$c010; unused +CmpString =$c26b; unused +mousePicData =$84c1; unused +_InitForIO =$9000; unused +L1466 =$1466 +RecoverVector =$84b1; unused +L1081 =$1081; ? +L1234 =$1234; ? +L0FA0 =$fa0; ? +grmemptr =$d018; unused +nmivec =$318; unused +alarmTmtVector =$84ad; unused +L0FA7 =$fa7 +L1061 =$1061 +spr3pic =$8ac0; unused +GetString =$c1ba; unused +AllocateBlock =$9048; unused +SetGEOSDisk =$c1ea; unused +UnBlockProcess =$c10f; unused +LdApplic =$c21d; unused +DoPreviousMenu =$c190; unused +r0L =$2 +r8H =$13; unused +L0A0B =$a0b; ? +L0A6A =$a6a; ? +r2L =$6 +RAMTAS =$ff87; unused +r4L =$a +r6L =$e +SCREEN_BASE =$a000; unused +r0H =$3 +r8L =$12; unused +r2H =$7 +dataDiskName =$8453; unused +_OpenDisk =$9014; unused +VerticalLine =$c121; unused +r4H =$b +MoveBData =$c2e3; unused +r6H =$f +RecoverLine =$c11e; unused +L0A8A =$a8a; ? +r15H =$21; unused +mob5ypos =$d00b; unused +mob7xpos =$d00e; unused +vdcreg =$d600; unused +day =$8518; unused +dataFileName =$8442; unused +DeleteRecord =$c283; unused +L096F =$96f; ? +L098A =$98a +r11H =$19; unused +mob5clr =$d02c; unused +L050E =$50e; ? +L077F =$77f; ? +L094D =$94d +r13H =$1d; unused +L073E =$73e; ? +L075F =$75f; ? +r15L =$20; unused +L092A =$92a; ? +L058F =$58f; ? +r11L =$18; unused +GetRandom =$c187; unused +WriteRecord =$c28f; unused +r13L =$1c; unused +fileTrScTab =$8300; unused +GetDirHead =$c247 +L075B =$75b; ? +ramBase =$88c7 +sysFlgCopy =$c012 +L08D6 =$8d6; ? +curDirHead =$8200 +L04B7 =$4b7; ? +L08D7 =$8d7; ? +L08F6 =$8f6; ? +OS_ROM =$c000; unused +L06E7 =$6e7; ? +_NewDisk =$900c; unused +_EnterTurbo =$9008; unused +InvertRectangle =$c12a; unused +FindFile =$c20b; unused +L04B3 =$4b3; ? +faultData =$84b6; unused +Dnegate =$c172; unused +msbxpos =$d010; unused +curHeight =$29; unused +NUMDRV =$848d +mob6ypos =$d00d; unused +L0483 =$483; ? +mob4xpos =$d008; unused +L0616 =$616; unused +dispBufferOn =$2f; unused +L0615 =$615; ? +GraphicsString =$c136; unused +NxtBlkAlloc =$c24d; unused +SetMousePicture =$c2da; unused +DoRAMOp =$c2d4; unused +spr2pic =$8a80; unused +GetPtrCurDkNm =$c298; unused +UNTLK =$ffab +diskBlkBuf =$8000 +L0671 =$671; ? +L0820 =$820; ? +LdFile =$c211; unused +InvertLine =$c11b; unused +L0462 =$462; ? +L0672 =$672; ? +L0840 =$840; ? +seconds =$851b; unused +Rectangle =$c124; unused +ChkDkGEOS =$c1de; unused +L0841 =$841; ? +DShiftLeft =$c15d; unused +ImprintRectangle =$c250; unused +mobmobcol =$d01e; unused +L07EE =$7ee; ? +RenameFile =$c259; unused +PointRecord =$c280 +L07AF =$7af; ? +NMI_VECTOR =$fffa; unused +L07EF =$7ef; ? +TURBO_DD00 =$8e; unused +grcntrl2 =$d016; unused +diskOpenFlg =$848a; unused +baselineOffset =$26; unused +DoBOp =$c2ec; unused +L09BC =$9bc; ? +grcntrl1 =$d011; unused +L0408 =$408 +mob5xpos =$d00a; unused +mob7ypos =$d00f; unused +firstBoot =$88c5 +_PurgeTurbo =$9006; unused +L135E =$135e; ? +curIndexTable =$2a; unused +month =$8517; unused +PutString =$c148; unused +DMult =$c166; unused +mob4clr =$d02b; unused +ReadLink =$904b; unused +L0F39 =$f39 +FirstInit =$c271 +MouseUp =$c18a; unused +IOINIT =$ff84; unused +MEMBOT =$ff9c; unused +windowTop =$33; unused +IsMseInRegion =$c2b3; unused +vdcClrMode =$88be; unused +DSdiv =$c16c; unused +fileHeader =$8100; unused +L0ADF =$adf +_VerWriteBlock =$9012; unused +_SetNextFree =$9024; unused +L131A =$131a +FindBAMBit =$c2ad; unused +FetchRAM =$c2cb +StartMouseMode =$c14e; unused +clkreg =$d030; unused +L0F71 =$f71; ? +FreeFile =$c226; unused +SETMSG =$ff90; unused +L0F72 =$f72; ? +RecoverMenu =$c154; unused +GetFreeDirBlk =$c1f6; unused +L0D64 =$d64; ? +L0F74 =$f74; ? +otherPressVec =$84a9; unused +RAMC_BASE =$de00; unused +L0F15 =$f15; ? diff --git a/_newconf/newconf/r0.lst b/_newconf/newconf/r0.lst new file mode 100644 index 00000000..afc6cc66 --- /dev/null +++ b/_newconf/newconf/r0.lst @@ -0,0 +1,2370 @@ +ca65 V2.13.2 - (C) Copyright 1998-2005 Ullrich von Bassewitz +Main file : r0.asm +Current file: r0.asm + +000000r 1 ; da65 V2.13.2 - (C) Copyright 2000-2009, Ullrich von Bassewitz +000000r 1 ; Created: 2010-05-27 22:45:43 +000000r 1 ; Input file: configure.cvt.record.0 +000000r 1 ; Page: 1 +000000r 1 +000000r 1 +000000r 1 .setcpu "6502" +000000r 1 .export L043E ; := $043E; fix! +000000r 1 .export L0616 ; := $0616; fix! +000000r 1 .export L0672 ; := $0672; fix! +000000r 1 .export L0739 ; := $0739; fix! +000000r 1 .export L073E ; := $073E; fix! +000000r 1 .export L0911 ; := $0911; fix! +000000r 1 .export L0E19 ; := $0E19; fix! +000000r 1 .export L0FA0 ; := $0FA0; fix! +000000r 1 .export L0FB3 ; := $0FB3; fix! +000000r 1 ; ---------------------------------------------------------------------------- +000000r 1 CPU_DDR := $0000 +000000r 1 CPU_DATA := $0001 +000000r 1 r0L := $0002 +000000r 1 r0H := $0003 +000000r 1 r1L := $0004 +000000r 1 r1H := $0005 +000000r 1 r2L := $0006 +000000r 1 r2H := $0007 +000000r 1 r3L := $0008 +000000r 1 r3H := $0009 +000000r 1 r4L := $000A +000000r 1 r4H := $000B +000000r 1 r5L := $000C +000000r 1 r5H := $000D +000000r 1 r6L := $000E +000000r 1 r6H := $000F +000000r 1 r7L := $0010 +000000r 1 r7H := $0011 +000000r 1 r8L := $0012 +000000r 1 r8H := $0013 +000000r 1 r9L := $0014 +000000r 1 r9H := $0015 +000000r 1 r10L := $0016 +000000r 1 r10H := $0017 +000000r 1 r11L := $0018 +000000r 1 r11H := $0019 +000000r 1 r12L := $001A +000000r 1 r12H := $001B +000000r 1 r13L := $001C +000000r 1 r13H := $001D +000000r 1 r14L := $001E +000000r 1 r14H := $001F +000000r 1 r15L := $0020 +000000r 1 r15H := $0021 +000000r 1 curPattern := $0022 +000000r 1 string := $0024 +000000r 1 baselineOffset := $0026 +000000r 1 curSetWidth := $0027 +000000r 1 curHeight := $0029 +000000r 1 curIndexTable := $002A +000000r 1 cardDataPntr := $002C +000000r 1 currentMode := $002E +000000r 1 dispBufferOn := $002F +000000r 1 mouseOn := $0030 +000000r 1 msePicPtr := $0031 +000000r 1 windowTop := $0033 +000000r 1 windowBottom := $0034 +000000r 1 leftMargin := $0035 +000000r 1 rightMargin := $0037 +000000r 1 pressFlag := $0039 +000000r 1 mouseXPos := $003A +000000r 1 mouseYPos := $003C +000000r 1 returnAddress := $003D +000000r 1 graphMode := $003F +000000r 1 a2L := $0070 +000000r 1 a2H := $0071 +000000r 1 a3L := $0072 +000000r 1 a3H := $0073 +000000r 1 a4L := $0074 +000000r 1 a4H := $0075 +000000r 1 a5L := $0076 +000000r 1 a5H := $0077 +000000r 1 a6L := $0078 +000000r 1 a6H := $0079 +000000r 1 a7L := $007A +000000r 1 a7H := $007B +000000r 1 a8L := $007C +000000r 1 a8H := $007D +000000r 1 a9L := $007E +000000r 1 a9H := $007F +000000r 1 TURBO_DD00 := $008E ; from 1541 turbo +000000r 1 TURBO_DD00_CPY := $008F ; from 1541 turbo +000000r 1 STATUS := $0090 +000000r 1 curDevice := $00BA +000000r 1 a0L := $00FB +000000r 1 a0H := $00FC +000000r 1 a1L := $00FD +000000r 1 a1H := $00FE +000000r 1 irqvec := $0314 +000000r 1 bkvec := $0316 +000000r 1 nmivec := $0318 +000000r 1 APP_RAM := $0400 +000000r 1 L1466 := $1466 +000000r 1 L1E05 := $1E05 +000000r 1 L3156 := $3156 +000000r 1 BACK_SCR_BASE := $6000 +000000r 1 L6216 := $6216 +000000r 1 PRINTBASE := $7900 +000000r 1 diskBlkBuf := $8000 +000000r 1 fileHeader := $8100 +000000r 1 curDirHead := $8200 +000000r 1 fileTrScTab := $8300 +000000r 1 dirEntryBuf := $8400 +000000r 1 DrACurDkNm := $841E +000000r 1 DrBCurDkNm := $8430 +000000r 1 dataFileName := $8442 +000000r 1 dataDiskName := $8453 +000000r 1 PrntFilename := $8465 +000000r 1 PrntDiskName := $8476 +000000r 1 curDrive := $8489 +000000r 1 diskOpenFlg := $848A +000000r 1 isGEOS := $848B +000000r 1 interleave := $848C +000000r 1 NUMDRV := $848D +000000r 1 driveType := $848E +000000r 1 turboFlags := $8492 +000000r 1 curRecord := $8496 +000000r 1 usedRecords := $8497 +000000r 1 fileWritten := $8498 +000000r 1 fileSize := $8499 +000000r 1 appMain := $849B +000000r 1 intTopVector := $849D +000000r 1 intBotVector := $849F +000000r 1 mouseVector := $84A1 +000000r 1 keyVector := $84A3 +000000r 1 inputVector := $84A5 +000000r 1 mouseFaultVec := $84A7 +000000r 1 otherPressVec := $84A9 +000000r 1 StringFaultVec := $84AB +000000r 1 alarmTmtVector := $84AD +000000r 1 BRKVector := $84AF +000000r 1 RecoverVector := $84B1 +000000r 1 selectionFlash := $84B3 +000000r 1 alphaFlag := $84B4 +000000r 1 iconSelFlg := $84B5 +000000r 1 faultData := $84B6 +000000r 1 menuNumber := $84B7 +000000r 1 mouseTop := $84B8 +000000r 1 mouseBottom := $84B9 +000000r 1 mouseLeft := $84BA +000000r 1 mouseRight := $84BC +000000r 1 stringX := $84BE +000000r 1 stringY := $84C0 +000000r 1 mousePicData := $84C1 +000000r 1 maxMouseSpeed := $8501 +000000r 1 minMouseSpeed := $8502 +000000r 1 mouseAccel := $8503 +000000r 1 keyData := $8504 +000000r 1 mouseData := $8505 +000000r 1 inputData := $8506 +000000r 1 mouseSpeed := $8507 +000000r 1 random := $850A +000000r 1 saveFontTab := $850C +000000r 1 dblClickCount := $8515 +000000r 1 year := $8516 +000000r 1 month := $8517 +000000r 1 day := $8518 +000000r 1 hour := $8519 +000000r 1 minutes := $851A +000000r 1 seconds := $851B +000000r 1 alarmSetFlag := $851C +000000r 1 sysDBData := $851D +000000r 1 screencolors := $851E +000000r 1 dlgBoxRamBuf := $851F ; to $8697 +000000r 1 savedmoby2 := $88BB +000000r 1 scr80polar := $88BC +000000r 1 scr80colors := $88BD +000000r 1 vdcClrMode := $88BE +000000r 1 driveData := $88BF +000000r 1 ramExpSize := $88C3 +000000r 1 sysRAMFlg := $88C4 +000000r 1 firstBoot := $88C5 +000000r 1 curType := $88C6 +000000r 1 ramBase := $88C7 +000000r 1 inputDevName := $88CB +000000r 1 memBase := $88CF ; ??? +000000r 1 DrCCurDkNm := $88DC +000000r 1 DrDCurDkNm := $88EE +000000r 1 dir2Head := $8900 +000000r 1 spr0pic := $8A00 +000000r 1 spr1pic := $8A40 +000000r 1 spr2pic := $8A80 +000000r 1 spr3pic := $8AC0 +000000r 1 spr4pic := $8B00 +000000r 1 spr5pic := $8B40 +000000r 1 spr6pic := $8B80 +000000r 1 spr7pic := $8BC0 +000000r 1 COLOR_MATRIX := $8C00 +000000r 1 obj0Pointer := $8FF8 +000000r 1 obj1Pointer := $8FF9 +000000r 1 obj2Pointer := $8FFA +000000r 1 obj3Pointer := $8FFB +000000r 1 obj4Pointer := $8FFC +000000r 1 obj5Pointer := $8FFD +000000r 1 obj6Pointer := $8FFE +000000r 1 obj7Pointer := $8FFF +000000r 1 _InitForIO := $9000 +000000r 1 _DoneWithIO := $9002 +000000r 1 _ExitTurbo := $9004 +000000r 1 _PurgeTurbo := $9006 +000000r 1 _EnterTurbo := $9008 +000000r 1 _ChangeDiskDevice:= $900A +000000r 1 _NewDisk := $900C +000000r 1 _ReadBlock := $900E +000000r 1 _WriteBlock := $9010 +000000r 1 _VerWriteBlock := $9012 +000000r 1 _OpenDisk := $9014 +000000r 1 _GetBlock := $9016 +000000r 1 _PutBlock := $9018 +000000r 1 _GetDirHead := $901A +000000r 1 _PutDirHead := $901C +000000r 1 _GetFreeDirBlk := $901E +000000r 1 _CalcBlksFree := $9020 +000000r 1 _FreeBlock := $9022 +000000r 1 _SetNextFree := $9024 +000000r 1 _FindBAMBit := $9026 +000000r 1 _NxtBlkAlloc := $9028 +000000r 1 _BlkAlloc := $902A +000000r 1 _ChkDkGEOS := $902C +000000r 1 _SetGEOSDisk := $902E +000000r 1 Get1stDirEntry := $9030 +000000r 1 GetNxtDirEntry := $9033 +000000r 1 GetBorder := $9036 +000000r 1 AddDirBlock := $9039 +000000r 1 ReadBuff := $903C +000000r 1 WriteBuff := $903F +000000r 1 AllocateBlock := $9048 +000000r 1 ReadLink := $904B +000000r 1 SCREEN_BASE := $A000 +000000r 1 OS_ROM := $C000 +000000r 1 bootName := $C006 +000000r 1 version := $C00F +000000r 1 nationality := $C010 +000000r 1 sysFlgCopy := $C012 +000000r 1 c128Flag := $C013 +000000r 1 dateCopy := $C018 +000000r 1 InterruptMain := $C100 +000000r 1 InitProcesses := $C103 +000000r 1 RestartProcess := $C106 +000000r 1 EnableProcess := $C109 +000000r 1 BlockProcess := $C10C +000000r 1 UnBlockProcess := $C10F +000000r 1 FreezeProcess := $C112 +000000r 1 UnFreezeProcess := $C115 +000000r 1 HorizontalLine := $C118 +000000r 1 InvertLine := $C11B +000000r 1 RecoverLine := $C11E +000000r 1 VerticalLine := $C121 +000000r 1 Rectangle := $C124 +000000r 1 FrameRectangle := $C127 +000000r 1 InvertRectangle := $C12A +000000r 1 RecoverRectangle:= $C12D +000000r 1 DrawLine := $C130 +000000r 1 DrawPoint := $C133 +000000r 1 GraphicsString := $C136 +000000r 1 SetPattern := $C139 +000000r 1 GetScanLine := $C13C +000000r 1 TestPoint := $C13F +000000r 1 BitmapUp := $C142 +000000r 1 PutChar := $C145 +000000r 1 PutString := $C148 +000000r 1 UseSystemFont := $C14B +000000r 1 StartMouseMode := $C14E +000000r 1 DoMenu := $C151 +000000r 1 RecoverMenu := $C154 +000000r 1 RecoverAllMenus := $C157 +000000r 1 DoIcons := $C15A +000000r 1 DShiftLeft := $C15D +000000r 1 BBMult := $C160 +000000r 1 BMult := $C163 +000000r 1 DMult := $C166 +000000r 1 Ddiv := $C169 +000000r 1 DSdiv := $C16C +000000r 1 Dabs := $C16F +000000r 1 Dnegate := $C172 +000000r 1 Ddec := $C175 +000000r 1 ClearRam := $C178 +000000r 1 FillRam := $C17B +000000r 1 MoveData := $C17E +000000r 1 InitRam := $C181 +000000r 1 PutDecimal := $C184 +000000r 1 GetRandom := $C187 +000000r 1 MouseUp := $C18A +000000r 1 MouseOff := $C18D +000000r 1 DoPreviousMenu := $C190 +000000r 1 ReDoMenu := $C193 +000000r 1 GetSerialNumber := $C196 +000000r 1 Sleep := $C199 +000000r 1 ClearMouseMode := $C19C +000000r 1 i_Rectangle := $C19F +000000r 1 i_FrameRectangle:= $C1A2 +000000r 1 i_RecoverRectangle:= $C1A5 +000000r 1 i_GraphicsString:= $C1A8 +000000r 1 i_BitmapUp := $C1AB +000000r 1 i_PutString := $C1AE +000000r 1 GetRealSize := $C1B1 +000000r 1 i_FillRam := $C1B4 +000000r 1 i_MoveData := $C1B7 +000000r 1 GetString := $C1BA +000000r 1 GotoFirstMenu := $C1BD +000000r 1 InitTextPrompt := $C1C0 +000000r 1 MainLoop := $C1C3 +000000r 1 DrawSprite := $C1C6 +000000r 1 GetCharWidth := $C1C9 +000000r 1 LoadCharSet := $C1CC +000000r 1 PosSprite := $C1CF +000000r 1 EnablSprite := $C1D2 +000000r 1 DisablSprite := $C1D5 +000000r 1 CallRoutine := $C1D8 +000000r 1 CalcBlksFree := $C1DB +000000r 1 ChkDkGEOS := $C1DE +000000r 1 NewDisk := $C1E1 +000000r 1 GetBlock := $C1E4 +000000r 1 PutBlock := $C1E7 +000000r 1 SetGEOSDisk := $C1EA +000000r 1 SaveFile := $C1ED +000000r 1 SetGDirEntry := $C1F0 +000000r 1 BldGDirEntry := $C1F3 +000000r 1 GetFreeDirBlk := $C1F6 +000000r 1 WriteFile := $C1F9 +000000r 1 BlkAlloc := $C1FC +000000r 1 ReadFile := $C1FF +000000r 1 SmallPutChar := $C202 +000000r 1 FollowChain := $C205 +000000r 1 GetFile := $C208 +000000r 1 FindFile := $C20B +000000r 1 CRC := $C20E +000000r 1 LdFile := $C211 +000000r 1 EnterTurbo := $C214 +000000r 1 LdDeskAcc := $C217 +000000r 1 ReadBlock := $C21A +000000r 1 LdApplic := $C21D +000000r 1 WriteBlock := $C220 +000000r 1 VerWriteBlock := $C223 +000000r 1 FreeFile := $C226 +000000r 1 GetFHdrInfo := $C229 +000000r 1 EnterDeskTop := $C22C +000000r 1 StartAppl := $C22F +000000r 1 ExitTurbo := $C232 +000000r 1 PurgeTurbo := $C235 +000000r 1 DeleteFile := $C238 +000000r 1 FindFTypes := $C23B +000000r 1 RstrAppl := $C23E +000000r 1 ToBASIC := $C241 +000000r 1 FastDelFile := $C244 +000000r 1 GetDirHead := $C247 +000000r 1 PutDirHead := $C24A +000000r 1 NxtBlkAlloc := $C24D +000000r 1 ImprintRectangle:= $C250 +000000r 1 i_ImprintRectangle:= $C253 +000000r 1 DoDlgBox := $C256 +000000r 1 RenameFile := $C259 +000000r 1 InitForIO := $C25C +000000r 1 DoneWithIO := $C25F +000000r 1 DShiftRight := $C262 +000000r 1 CopyString := $C265 +000000r 1 CopyFString := $C268 +000000r 1 CmpString := $C26B +000000r 1 CmpFString := $C26E +000000r 1 FirstInit := $C271 +000000r 1 OpenRecordFile := $C274 +000000r 1 CloseRecordFile := $C277 +000000r 1 NextRecord := $C27A +000000r 1 PreviousRecord := $C27D +000000r 1 PointRecord := $C280 +000000r 1 DeleteRecord := $C283 +000000r 1 InsertRecord := $C286 +000000r 1 AppendRecord := $C289 +000000r 1 ReadRecord := $C28C +000000r 1 WriteRecord := $C28F +000000r 1 SetNextFree := $C292 +000000r 1 UpdateRecordFile:= $C295 +000000r 1 GetPtrCurDkNm := $C298 +000000r 1 PromptOn := $C29B +000000r 1 PromptOff := $C29E +000000r 1 OpenDisk := $C2A1 +000000r 1 DoInlineReturn := $C2A4 +000000r 1 GetNextChar := $C2A7 +000000r 1 BitmapClip := $C2AA +000000r 1 FindBAMBit := $C2AD +000000r 1 SetDevice := $C2B0 +000000r 1 IsMseInRegion := $C2B3 +000000r 1 ReadByte := $C2B6 +000000r 1 FreeBlock := $C2B9 +000000r 1 ChangeDiskDevice:= $C2BC +000000r 1 RstrFrmDialogue := $C2BF +000000r 1 Panic := $C2C2 +000000r 1 BitOtherClip := $C2C5 +000000r 1 StashRAM := $C2C8 +000000r 1 FetchRAM := $C2CB +000000r 1 SwapRAM := $C2CE +000000r 1 VerifyRAM := $C2D1 +000000r 1 DoRAMOp := $C2D4 +000000r 1 TempHideMouse := $C2D7 +000000r 1 SetMousePicture := $C2DA +000000r 1 SetNewMode := $C2DD +000000r 1 NormalizeX := $C2E0 +000000r 1 MoveBData := $C2E3 +000000r 1 SwapBData := $C2E6 +000000r 1 VerifyBData := $C2E9 +000000r 1 DoBOp := $C2EC +000000r 1 AccessCache := $C2EF +000000r 1 HideOnlyMouse := $C2F2 +000000r 1 SetColorMode := $C2F5 +000000r 1 ColorCard := $C2F8 +000000r 1 ColorRectangle := $C2FB +000000r 1 vicbase := $D000 +000000r 1 mob0ypos := $D001 +000000r 1 mob1xpos := $D002 +000000r 1 mob1ypos := $D003 +000000r 1 mob2xpos := $D004 +000000r 1 mob2ypos := $D005 +000000r 1 mob3xpos := $D006 +000000r 1 mob3ypos := $D007 +000000r 1 mob4xpos := $D008 +000000r 1 mob4ypos := $D009 +000000r 1 mob5xpos := $D00A +000000r 1 mob5ypos := $D00B +000000r 1 mob6xpos := $D00C +000000r 1 mob6ypos := $D00D +000000r 1 mob7xpos := $D00E +000000r 1 mob7ypos := $D00F +000000r 1 msbxpos := $D010 +000000r 1 grcntrl1 := $D011 +000000r 1 rasreg := $D012 +000000r 1 lpxpos := $D013 +000000r 1 lpypos := $D014 +000000r 1 mobenble := $D015 +000000r 1 grcntrl2 := $D016 +000000r 1 moby2 := $D017 +000000r 1 grmemptr := $D018 +000000r 1 grirq := $D019 +000000r 1 grirqen := $D01A +000000r 1 mobprior := $D01B +000000r 1 mobmcm := $D01C +000000r 1 mobx2 := $D01D +000000r 1 mobmobcol := $D01E +000000r 1 mobbakcol := $D01F +000000r 1 extclr := $D020 +000000r 1 bakclr0 := $D021 +000000r 1 bakclr1 := $D022 +000000r 1 bakclr2 := $D023 +000000r 1 bakclr3 := $D024 +000000r 1 mcmclr0 := $D025 +000000r 1 mcmclr1 := $D026 +000000r 1 mob0clr := $D027 +000000r 1 mob1clr := $D028 +000000r 1 mob2clr := $D029 +000000r 1 mob3clr := $D02A +000000r 1 mob4clr := $D02B +000000r 1 mob5clr := $D02C +000000r 1 mob6clr := $D02D +000000r 1 mob7clr := $D02E +000000r 1 keyreg := $D02F +000000r 1 clkreg := $D030 +000000r 1 sidbase := $D400 +000000r 1 mmu := $D500 +000000r 1 vdcreg := $D600 +000000r 1 vdcdata := $D601 +000000r 1 ctab := $D800 +000000r 1 cia1base := $DC00 +000000r 1 cia2base := $DD00 +000000r 1 RAMC_BASE := $DE00 +000000r 1 EXP_BASE := $DF00 +000000r 1 MOUSE_BASE := $FE80 +000000r 1 config := $FF00 +000000r 1 CINT := $FF81 +000000r 1 IOINIT := $FF84 +000000r 1 RAMTAS := $FF87 +000000r 1 RESTOR := $FF8A +000000r 1 VECTOR := $FF8D +000000r 1 SETMSG := $FF90 +000000r 1 SECOND := $FF93 +000000r 1 TKSA := $FF96 +000000r 1 MEMTOP := $FF99 +000000r 1 MEMBOT := $FF9C +000000r 1 SCNKEY := $FF9F +000000r 1 SETTMO := $FFA2 +000000r 1 ACPTR := $FFA5 +000000r 1 CIOUT := $FFA8 +000000r 1 UNTLK := $FFAB +000000r 1 UNLSN := $FFAE +000000r 1 LISTEN := $FFB1 +000000r 1 TALK := $FFB4 +000000r 1 READST := $FFB7 +000000r 1 SETLFS := $FFBA +000000r 1 SETNAM := $FFBD +000000r 1 OPEN := $FFC0 +000000r 1 CLOSE := $FFC3 +000000r 1 CHKIN := $FFC6 +000000r 1 CKOUT := $FFC9 +000000r 1 CLRCH := $FFCC +000000r 1 BASIN := $FFCF +000000r 1 BSOUT := $FFD2 +000000r 1 LOAD := $FFD5 +000000r 1 SAVE := $FFD8 +000000r 1 SETTIM := $FFDB +000000r 1 RDTIM := $FFDE +000000r 1 STOP := $FFE1 +000000r 1 GETIN := $FFE4 +000000r 1 CLALL := $FFE7 +000000r 1 UDTIM := $FFEA +000000r 1 SCREEN := $FFED +000000r 1 IOBASE := $FFF3 +000000r 1 NMI_VECTOR := $FFFA +000000r 1 RESET_VECTOR := $FFFC +000000r 1 IRQ_VECTOR := $FFFE +000000r 1 ; ---------------------------------------------------------------------------- +000000r 1 01 03 .byte $01,$03 ; 0406 01 03 .. +000002r 1 03 00 L0408: .byte $03,$00 ; 0408 03 00 .. +000004r 1 E0 L040A: .byte $E0 ; 040A E0 . +000005r 1 ; ---------------------------------------------------------------------------- +000005r 1 20 rr rr jsr L047C ; 040B 20 7C 04 |. +000008r 1 AD C5 88 lda firstBoot ; 040E AD C5 88 ... +00000Br 1 C9 FF cmp #$FF ; 0411 C9 FF .. +00000Dr 1 D0 03 bne L0418 ; 0413 D0 03 .. +00000Fr 1 4C rr rr jmp L04EC ; 0415 4C EC 04 L.. +000012r 1 ; ---------------------------------------------------------------------------- +000012r 1 2C 13 C0 L0418: bit c128Flag ; 0418 2C 13 C0 ,.. +000015r 1 30 5C bmi L0479 ; 041B 30 5C 0\ +000017r 1 AD 89 84 lda curDrive ; 041D AD 89 84 ... +00001Ar 1 8D 04 21 sta $2104 ; 0420 8D 04 21 ..! +00001Dr 1 A8 tay ; 0423 A8 . +00001Er 1 B9 86 84 lda $8486,y ; 0424 B9 86 84 ... +000021r 1 8D 05 21 sta $2105 ; 0427 8D 05 21 ..! +000024r 1 20 rr rr jsr L0FB3 ; 042A 20 B3 0F .. +000027r 1 20 B7 C1 jsr i_MoveData ; 042D 20 B7 C1 .. +00002Ar 1 00 brk ; 0430 00 . +00002Br 1 50 50 bvc L0483 ; 0431 50 50 PP +00002Dr 1 21 00 and (CPU_DDR,x) ; 0433 21 00 !. +00002Fr 1 04 .byte $04 ; 0435 04 . +000030r 1 A9 01 lda #$01 ; 0436 A9 01 .. +000032r 1 8D 8D 84 sta NUMDRV ; 0438 8D 8D 84 ... +000035r 1 20 rr rr jsr L0558 ; 043B 20 58 05 X. +000038r 1 AD 04 21 L043E: lda $2104 ; 043E AD 04 21 ..! +00003Br 1 20 rr rr jsr L073E ; 0441 20 3E 07 >. +00003Er 1 20 rr rr jsr L1081 ; 0444 20 81 10 .. +000041r 1 20 rr rr jsr L0FA0 ; 0447 20 A0 0F .. +000044r 1 AD C3 88 lda ramExpSize ; 044A AD C3 88 ... +000047r 1 D0 21 bne L0470 ; 044D D0 21 .! +000049r 1 AD 8D 84 lda NUMDRV ; 044F AD 8D 84 ... +00004Cr 1 C9 02 cmp #$02 ; 0452 C9 02 .. +00004Er 1 90 1A bcc L0470 ; 0454 90 1A .. +000050r 1 AD 8E 84 lda driveType ; 0456 AD 8E 84 ... +000053r 1 CD 8F 84 cmp $848F ; 0459 CD 8F 84 ... +000056r 1 D0 04 bne L0462 ; 045C D0 04 .. +000058r 1 C9 03 cmp #$03 ; 045E C9 03 .. +00005Ar 1 D0 0E bne L0470 ; 0460 D0 0E .. +00005Cr 1 20 rr rr L0462: jsr L0739 ; 0462 20 39 07 9. +00005Fr 1 20 35 C2 jsr PurgeTurbo ; 0465 20 35 C2 5. +000062r 1 20 rr rr jsr L0739 ; 0468 20 39 07 9. +000065r 1 A9 01 lda #$01 ; 046B A9 01 .. +000067r 1 8D 8D 84 sta NUMDRV ; 046D 8D 8D 84 ... +00006Ar 1 20 B7 C1 L0470: jsr i_MoveData ; 0470 20 B7 C1 .. +00006Dr 1 50 21 bvc L0496 ; 0473 50 21 P! +00006Fr 1 00 brk ; 0475 00 . +000070r 1 50 00 bvc L0478 ; 0476 50 00 P. +000072r 1 04 L0478: .byte $04 ; 0478 04 . +000073r 1 4C 2C C2 L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. +000076r 1 ; ---------------------------------------------------------------------------- +000076r 1 2C 13 C0 L047C: bit c128Flag ; 047C 2C 13 C0 ,.. +000079r 1 30 0D bmi L048E ; 047F 30 0D 0. +00007Br 1 AD .byte $AD ; 0481 AD . +00007Cr 1 0F .byte $0F ; 0482 0F . +00007Dr 1 C0 C9 L0483: cpy #$C9 ; 0483 C0 C9 .. +00007Fr 1 14 .byte $14 ; 0485 14 . +000080r 1 B0 06 bcs L048E ; 0486 B0 06 .. +000082r 1 20 rr rr jsr L04CC ; 0488 20 CC 04 .. +000085r 1 20 rr rr jsr L048F ; 048B 20 8F 04 .. +000088r 1 60 L048E: rts ; 048E 60 ` +000089r 1 ; ---------------------------------------------------------------------------- +000089r 1 A9 C3 L048F: lda #$C3 ; 048F A9 C3 .. +00008Br 1 85 03 sta r0H ; 0491 85 03 .. +00008Dr 1 A9 10 lda #$10 ; 0493 A9 10 .. +00008Fr 1 85 .byte $85 ; 0495 85 . +000090r 1 02 L0496: .byte $02 ; 0496 02 . +000091r 1 A0 00 ldy #$00 ; 0497 A0 00 .. +000093r 1 84 04 sty r1L ; 0499 84 04 .. +000095r 1 20 rr rr jsr L04A2 ; 049B 20 A2 04 .. +000098r 1 A9 05 lda #$05 ; 049E A9 05 .. +00009Ar 1 85 04 sta r1L ; 04A0 85 04 .. +00009Cr 1 A6 04 L04A2: ldx r1L ; 04A2 A6 04 .. +00009Er 1 B1 02 L04A4: lda (r0L),y ; 04A4 B1 02 .. +0000A0r 1 DD rr rr cmp L04C2,x ; 04A6 DD C2 04 ... +0000A3r 1 F0 08 beq L04B3 ; 04A9 F0 08 .. +0000A5r 1 E4 04 cpx r1L ; 04AB E4 04 .. +0000A7r 1 D0 F3 bne L04A2 ; 04AD D0 F3 .. +0000A9r 1 C8 iny ; 04AF C8 . +0000AAr 1 D0 F0 bne L04A2 ; 04B0 D0 F0 .. +0000ACr 1 60 rts ; 04B2 60 ` +0000ADr 1 ; ---------------------------------------------------------------------------- +0000ADr 1 C8 L04B3: iny ; 04B3 C8 . +0000AEr 1 D0 01 bne L04B7 ; 04B4 D0 01 .. +0000B0r 1 60 rts ; 04B6 60 ` +0000B1r 1 ; ---------------------------------------------------------------------------- +0000B1r 1 E8 L04B7: inx ; 04B7 E8 . +0000B2r 1 BD rr rr lda L04C2,x ; 04B8 BD C2 04 ... +0000B5r 1 D0 E7 bne L04A4 ; 04BB D0 E7 .. +0000B7r 1 A9 34 lda #$34 ; 04BD A9 34 .4 +0000B9r 1 91 02 sta (r0L),y ; 04BF 91 02 .. +0000BBr 1 60 rts ; 04C1 60 ` +0000BCr 1 ; ---------------------------------------------------------------------------- +0000BCr 1 AD 5C 81 L04C2: lda $815C ; 04C2 AD 5C 81 .\. +0000BFr 1 C9 00 cmp #$00 ; 04C5 C9 00 .. +0000C1r 1 20 56 31 jsr L3156 ; 04C7 20 56 31 V1 +0000C4r 1 2E .byte $2E ; 04CA 2E . +0000C5r 1 00 brk ; 04CB 00 . +0000C6r 1 AD 0F C0 L04CC: lda version ; 04CC AD 0F C0 ... +0000C9r 1 C9 13 cmp #$13 ; 04CF C9 13 .. +0000CBr 1 D0 18 bne L04EB ; 04D1 D0 18 .. +0000CDr 1 AD B2 C2 lda $C2B2 ; 04D3 AD B2 C2 ... +0000D0r 1 85 03 sta r0H ; 04D6 85 03 .. +0000D2r 1 AD B1 C2 lda $C2B1 ; 04D8 AD B1 C2 ... +0000D5r 1 85 02 sta r0L ; 04DB 85 02 .. +0000D7r 1 A0 00 ldy #$00 ; 04DD A0 00 .. +0000D9r 1 B1 02 lda (r0L),y ; 04DF B1 02 .. +0000DBr 1 C9 EA cmp #$EA ; 04E1 C9 EA .. +0000DDr 1 F0 06 beq L04EB ; 04E3 F0 06 .. +0000DFr 1 A0 03 ldy #$03 ; 04E5 A0 03 .. +0000E1r 1 A9 3D lda #$3D ; 04E7 A9 3D .= +0000E3r 1 91 02 sta (r0L),y ; 04E9 91 02 .. +0000E5r 1 60 L04EB: rts ; 04EB 60 ` +0000E6r 1 ; ---------------------------------------------------------------------------- +0000E6r 1 20 rr rr L04EC: jsr L0522 ; 04EC 20 22 05 ". +0000E9r 1 8A txa ; 04EF 8A . +0000EAr 1 D0 1C bne L050E ; 04F0 D0 1C .. +0000ECr 1 A9 01 lda #$01 ; 04F2 A9 01 .. +0000EEr 1 20 80 C2 jsr PointRecord ; 04F4 20 80 C2 .. +0000F1r 1 A9 13 lda #$13 ; 04F7 A9 13 .. +0000F3r 1 85 11 sta r7H ; 04F9 85 11 .. +0000F5r 1 A9 B1 lda #$B1 ; 04FB A9 B1 .. +0000F7r 1 85 10 sta r7L ; 04FD 85 10 .. +0000F9r 1 A9 FF lda #$FF ; 04FF A9 FF .. +0000FBr 1 85 06 sta r2L ; 0501 85 06 .. +0000FDr 1 85 07 sta r2H ; 0503 85 07 .. +0000FFr 1 20 8C C2 jsr ReadRecord ; 0505 20 8C C2 .. +000102r 1 8A txa ; 0508 8A . +000103r 1 D0 03 bne L050E ; 0509 D0 03 .. +000105r 1 4C 66 14 jmp L1466 ; 050B 4C 66 14 Lf. +000108r 1 ; ---------------------------------------------------------------------------- +000108r 1 4C 2C C2 L050E: jmp EnterDeskTop ; 050E 4C 2C C2 L,. +00010Br 1 ; ---------------------------------------------------------------------------- +00010Br 1 43 6F 6E 66 .byte "Configure V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur +00010Fr 1 69 67 75 72 +000113r 1 65 20 20 20 +00011Br 1 ; 0519 65 20 20 20 56 32 2E 31 e V2.1 +00011Br 1 00 .byte $00 ; 0521 00 . +00011Cr 1 ; ---------------------------------------------------------------------------- +00011Cr 1 A2 00 L0522: ldx #$00 ; 0522 A2 00 .. +00011Er 1 AD rr rr lda L06AC ; 0524 AD AC 06 ... +000121r 1 D0 2E bne L0557 ; 0527 D0 2E .. +000123r 1 A9 20 lda #$20 ; 0529 A9 20 . +000125r 1 85 0F sta r6H ; 052B 85 0F .. +000127r 1 A9 D9 lda #$D9 ; 052D A9 D9 .. +000129r 1 85 0E sta r6L ; 052F 85 0E .. +00012Br 1 A9 0E lda #$0E ; 0531 A9 0E .. +00012Dr 1 85 10 sta r7L ; 0533 85 10 .. +00012Fr 1 A9 01 lda #$01 ; 0535 A9 01 .. +000131r 1 85 11 sta r7H ; 0537 85 11 .. +000133r 1 A9 05 lda #$05 ; 0539 A9 05 .. +000135r 1 85 17 sta r10H ; 053B 85 17 .. +000137r 1 A9 11 lda #$11 ; 053D A9 11 .. +000139r 1 85 16 sta r10L ; 053F 85 16 .. +00013Br 1 20 3B C2 jsr FindFTypes ; 0541 20 3B C2 ;. +00013Er 1 8A txa ; 0544 8A . +00013Fr 1 D0 10 bne L0557 ; 0545 D0 10 .. +000141r 1 A9 20 lda #$20 ; 0547 A9 20 . +000143r 1 85 03 sta r0H ; 0549 85 03 .. +000145r 1 A9 D9 lda #$D9 ; 054B A9 D9 .. +000147r 1 85 02 sta r0L ; 054D 85 02 .. +000149r 1 20 74 C2 jsr OpenRecordFile ; 054F 20 74 C2 t. +00014Cr 1 A9 FF lda #$FF ; 0552 A9 FF .. +00014Er 1 8D rr rr sta L06AC ; 0554 8D AC 06 ... +000151r 1 60 L0557: rts ; 0557 60 ` +000152r 1 ; ---------------------------------------------------------------------------- +000152r 1 20 32 C2 L0558: jsr ExitTurbo ; 0558 20 32 C2 2. +000155r 1 AD C3 88 lda ramExpSize ; 055B AD C3 88 ... +000158r 1 F0 03 beq L0563 ; 055E F0 03 .. +00015Ar 1 AD rr rr lda L040A ; 0560 AD 0A 04 ... +00015Dr 1 29 A0 L0563: and #$A0 ; 0563 29 A0 ). +00015Fr 1 8D C4 88 sta sysRAMFlg ; 0565 8D C4 88 ... +000162r 1 8D 12 C0 sta sysFlgCopy ; 0568 8D 12 C0 ... +000165r 1 AD 05 21 lda $2105 ; 056B AD 05 21 ..! +000168r 1 C9 02 cmp #$02 ; 056E C9 02 .. +00016Ar 1 B0 09 bcs L057B ; 0570 B0 09 .. +00016Cr 1 20 rr rr jsr L0E64 ; 0572 20 64 0E d. +00016Fr 1 C9 FF cmp #$FF ; 0575 C9 FF .. +000171r 1 D0 02 bne L057B ; 0577 D0 02 .. +000173r 1 A9 01 lda #$01 ; 0579 A9 01 .. +000175r 1 8D 06 21 L057B: sta $2106 ; 057B 8D 06 21 ..! +000178r 1 AD 89 84 lda curDrive ; 057E AD 89 84 ... +00017Br 1 49 01 eor #$01 ; 0581 49 01 I. +00017Dr 1 20 B0 C2 jsr SetDevice ; 0583 20 B0 C2 .. +000180r 1 20 rr rr jsr L0E64 ; 0586 20 64 0E d. +000183r 1 C9 FF cmp #$FF ; 0589 C9 FF .. +000185r 1 D0 02 bne L058F ; 058B D0 02 .. +000187r 1 A9 00 lda #$00 ; 058D A9 00 .. +000189r 1 8D 07 21 L058F: sta $2107 ; 058F 8D 07 21 ..! +00018Cr 1 AD C3 88 lda ramExpSize ; 0592 AD C3 88 ... +00018Fr 1 F0 0C beq L05A3 ; 0595 F0 0C .. +000191r 1 A9 0A lda #$0A ; 0597 A9 0A .. +000193r 1 20 B0 C2 jsr SetDevice ; 0599 20 B0 C2 .. +000196r 1 20 rr rr jsr L0E64 ; 059C 20 64 0E d. +000199r 1 C9 FF cmp #$FF ; 059F C9 FF .. +00019Br 1 D0 02 bne L05A5 ; 05A1 D0 02 .. +00019Dr 1 A9 00 L05A3: lda #$00 ; 05A3 A9 00 .. +00019Fr 1 8D 08 21 L05A5: sta $2108 ; 05A5 8D 08 21 ..! +0001A2r 1 AD 04 21 lda $2104 ; 05A8 AD 04 21 ..! +0001A5r 1 20 B0 C2 jsr SetDevice ; 05AB 20 B0 C2 .. +0001A8r 1 20 rr rr jsr L06B2 ; 05AE 20 B2 06 .. +0001ABr 1 20 rr rr jsr L064A ; 05B1 20 4A 06 J. +0001AEr 1 8A txa ; 05B4 8A . +0001AFr 1 D0 40 bne L05F7 ; 05B5 D0 40 .@ +0001B1r 1 20 35 C2 jsr PurgeTurbo ; 05B7 20 35 C2 5. +0001B4r 1 A0 03 ldy #$03 ; 05BA A0 03 .. +0001B6r 1 A9 00 lda #$00 ; 05BC A9 00 .. +0001B8r 1 8D 8D 84 sta NUMDRV ; 05BE 8D 8D 84 ... +0001BBr 1 99 8E 84 L05C1: sta driveType,y ; 05C1 99 8E 84 ... +0001BEr 1 99 92 84 sta turboFlags,y ; 05C4 99 92 84 ... +0001C1r 1 99 BF 88 sta driveData,y ; 05C7 99 BF 88 ... +0001C4r 1 99 C7 88 sta ramBase,y ; 05CA 99 C7 88 ... +0001C7r 1 88 dey ; 05CD 88 . +0001C8r 1 10 F1 bpl L05C1 ; 05CE 10 F1 .. +0001CAr 1 20 rr rr jsr L05F8 ; 05D0 20 F8 05 .. +0001CDr 1 AD 06 21 lda $2106 ; 05D3 AD 06 21 ..! +0001D0r 1 20 rr rr jsr L0769 ; 05D6 20 69 07 i. +0001D3r 1 AD 07 21 lda $2107 ; 05D9 AD 07 21 ..! +0001D6r 1 F0 09 beq L05E7 ; 05DC F0 09 .. +0001D8r 1 20 rr rr jsr L0739 ; 05DE 20 39 07 9. +0001DBr 1 AD 07 21 lda $2107 ; 05E1 AD 07 21 ..! +0001DEr 1 20 rr rr jsr L0769 ; 05E4 20 69 07 i. +0001E1r 1 AD 08 21 L05E7: lda $2108 ; 05E7 AD 08 21 ..! +0001E4r 1 F0 0B beq L05F7 ; 05EA F0 0B .. +0001E6r 1 A9 0A lda #$0A ; 05EC A9 0A .. +0001E8r 1 20 rr rr jsr L073E ; 05EE 20 3E 07 >. +0001EBr 1 AD 08 21 lda $2108 ; 05F1 AD 08 21 ..! +0001EEr 1 20 rr rr jsr L0769 ; 05F4 20 69 07 i. +0001F1r 1 60 L05F7: rts ; 05F7 60 ` +0001F2r 1 ; ---------------------------------------------------------------------------- +0001F2r 1 AD C3 88 L05F8: lda ramExpSize ; 05F8 AD C3 88 ... +0001F5r 1 F0 18 beq L0615 ; 05FB F0 18 .. +0001F7r 1 A9 08 lda #$08 ; 05FD A9 08 .. +0001F9r 1 8D 2B 21 sta $212B ; 05FF 8D 2B 21 .+! +0001FCr 1 AD 06 21 lda $2106 ; 0602 AD 06 21 ..! +0001FFr 1 8D 2F 21 sta $212F ; 0605 8D 2F 21 ./! +000202r 1 20 rr rr L0608: jsr L09C8 ; 0608 20 C8 09 .. +000205r 1 EE 2B 21 inc $212B ; 060B EE 2B 21 .+! +000208r 1 AD 2B 21 lda $212B ; 060E AD 2B 21 .+! +00020Br 1 C9 0C cmp #$0C ; 0611 C9 0C .. +00020Dr 1 D0 F3 bne L0608 ; 0613 D0 F3 .. +00020Fr 1 60 L0615: rts ; 0615 60 ` +000210r 1 ; ---------------------------------------------------------------------------- +000210r 1 AC 89 84 L0616: ldy curDrive ; 0616 AC 89 84 ... +000213r 1 B9 86 84 lda $8486,y ; 0619 B9 86 84 ... +000216r 1 F0 2B beq L0649 ; 061C F0 2B .+ +000218r 1 A8 tay ; 061E A8 . +000219r 1 20 rr rr jsr L0A76 ; 061F 20 76 0A v. +00021Cr 1 B9 rr rr lda L06AD,y ; 0622 B9 AD 06 ... +00021Fr 1 D0 22 bne L0649 ; 0625 D0 22 ." +000221r 1 A9 FF lda #$FF ; 0627 A9 FF .. +000223r 1 99 rr rr sta L06AD,y ; 0629 99 AD 06 ... +000226r 1 B9 rr rr lda L0A64,y ; 062C B9 64 0A .d. +000229r 1 85 04 sta r1L ; 062F 85 04 .. +00022Br 1 B9 rr rr lda L0A69,y ; 0631 B9 69 0A .i. +00022Er 1 85 05 sta r1H ; 0634 85 05 .. +000230r 1 A9 90 lda #$90 ; 0636 A9 90 .. +000232r 1 85 03 sta r0H ; 0638 85 03 .. +000234r 1 A9 00 lda #$00 ; 063A A9 00 .. +000236r 1 85 02 sta r0L ; 063C 85 02 .. +000238r 1 A9 0D lda #$0D ; 063E A9 0D .. +00023Ar 1 85 07 sta r2H ; 0640 85 07 .. +00023Cr 1 A9 80 lda #$80 ; 0642 A9 80 .. +00023Er 1 85 06 sta r2L ; 0644 85 06 .. +000240r 1 20 7E C1 jsr MoveData ; 0646 20 7E C1 ~. +000243r 1 60 L0649: rts ; 0649 60 ` +000244r 1 ; ---------------------------------------------------------------------------- +000244r 1 AD 06 21 L064A: lda $2106 ; 064A AD 06 21 ..! +000247r 1 20 rr rr jsr L0672 ; 064D 20 72 06 r. +00024Ar 1 D0 1F bne L0671 ; 0650 D0 1F .. +00024Cr 1 AD 07 21 lda $2107 ; 0652 AD 07 21 ..! +00024Fr 1 20 rr rr jsr L0672 ; 0655 20 72 06 r. +000252r 1 D0 17 bne L0671 ; 0658 D0 17 .. +000254r 1 AD 08 21 lda $2108 ; 065A AD 08 21 ..! +000257r 1 20 rr rr jsr L0672 ; 065D 20 72 06 r. +00025Ar 1 D0 0F bne L0671 ; 0660 D0 0F .. +00025Cr 1 A2 00 ldx #$00 ; 0662 A2 00 .. +00025Er 1 AD rr rr lda L06AC ; 0664 AD AC 06 ... +000261r 1 F0 08 beq L0671 ; 0667 F0 08 .. +000263r 1 20 77 C2 jsr CloseRecordFile ; 0669 20 77 C2 w. +000266r 1 A9 00 lda #$00 ; 066C A9 00 .. +000268r 1 8D rr rr sta L06AC ; 066E 8D AC 06 ... +00026Br 1 60 L0671: rts ; 0671 60 ` +00026Cr 1 ; ---------------------------------------------------------------------------- +00026Cr 1 A2 00 L0672: ldx #$00 ; 0672 A2 00 .. +00026Er 1 A8 tay ; 0674 A8 . +00026Fr 1 F0 33 beq L06AA ; 0675 F0 33 .3 +000271r 1 20 rr rr jsr L0A76 ; 0677 20 76 0A v. +000274r 1 B9 rr rr lda L06AD,y ; 067A B9 AD 06 ... +000277r 1 D0 2B bne L06AA ; 067D D0 2B .+ +000279r 1 98 tya ; 067F 98 . +00027Ar 1 48 pha ; 0680 48 H +00027Br 1 20 rr rr jsr L0522 ; 0681 20 22 05 ". +00027Er 1 68 pla ; 0684 68 h +00027Fr 1 A8 tay ; 0685 A8 . +000280r 1 8A txa ; 0686 8A . +000281r 1 D0 21 bne L06AA ; 0687 D0 21 .! +000283r 1 A9 FF lda #$FF ; 0689 A9 FF .. +000285r 1 99 rr rr sta L06AD,y ; 068B 99 AD 06 ... +000288r 1 B9 rr rr lda L0A64,y ; 068E B9 64 0A .d. +00028Br 1 85 10 sta r7L ; 0691 85 10 .. +00028Dr 1 B9 rr rr lda L0A69,y ; 0693 B9 69 0A .i. +000290r 1 85 11 sta r7H ; 0696 85 11 .. +000292r 1 98 tya ; 0698 98 . +000293r 1 18 clc ; 0699 18 . +000294r 1 69 02 adc #$02 ; 069A 69 02 i. +000296r 1 20 80 C2 jsr PointRecord ; 069C 20 80 C2 .. +000299r 1 A9 0D lda #$0D ; 069F A9 0D .. +00029Br 1 85 07 sta r2H ; 06A1 85 07 .. +00029Dr 1 A9 80 lda #$80 ; 06A3 A9 80 .. +00029Fr 1 85 06 sta r2L ; 06A5 85 06 .. +0002A1r 1 20 8C C2 jsr ReadRecord ; 06A7 20 8C C2 .. +0002A4r 1 8A L06AA: txa ; 06AA 8A . +0002A5r 1 60 rts ; 06AB 60 ` +0002A6r 1 ; ---------------------------------------------------------------------------- +0002A6r 1 00 L06AC: brk ; 06AC 00 . +0002A7r 1 00 L06AD: brk ; 06AD 00 . +0002A8r 1 00 brk ; 06AE 00 . +0002A9r 1 00 brk ; 06AF 00 . +0002AAr 1 00 brk ; 06B0 00 . +0002ABr 1 00 brk ; 06B1 00 . +0002ACr 1 A9 01 L06B2: lda #$01 ; 06B2 A9 01 .. +0002AEr 1 85 02 sta r0L ; 06B4 85 02 .. +0002B0r 1 AD 04 21 lda $2104 ; 06B6 AD 04 21 ..! +0002B3r 1 49 01 eor #$01 ; 06B9 49 01 I. +0002B5r 1 A8 tay ; 06BB A8 . +0002B6r 1 B9 FE 03 lda $03FE,y ; 06BC B9 FE 03 ... +0002B9r 1 AE 07 21 ldx $2107 ; 06BF AE 07 21 ..! +0002BCr 1 20 rr rr jsr L06EB ; 06C2 20 EB 06 .. +0002BFr 1 8D 07 21 sta $2107 ; 06C5 8D 07 21 ..! +0002C2r 1 AC 04 21 ldy $2104 ; 06C8 AC 04 21 ..! +0002C5r 1 B9 FE 03 lda $03FE,y ; 06CB B9 FE 03 ... +0002C8r 1 29 7F and #$7F ; 06CE 29 7F ). +0002CAr 1 AE 06 21 ldx $2106 ; 06D0 AE 06 21 ..! +0002CDr 1 20 rr rr jsr L06EB ; 06D3 20 EB 06 .. +0002D0r 1 8D 06 21 sta $2106 ; 06D6 8D 06 21 ..! +0002D3r 1 AD C3 88 lda ramExpSize ; 06D9 AD C3 88 ... +0002D6r 1 F0 09 beq L06E7 ; 06DC F0 09 .. +0002D8r 1 AD rr rr lda L0408 ; 06DE AD 08 04 ... +0002DBr 1 AE 08 21 ldx $2108 ; 06E1 AE 08 21 ..! +0002DEr 1 20 rr rr jsr L06EB ; 06E4 20 EB 06 .. +0002E1r 1 8D 08 21 L06E7: sta $2108 ; 06E7 8D 08 21 ..! +0002E4r 1 60 rts ; 06EA 60 ` +0002E5r 1 ; ---------------------------------------------------------------------------- +0002E5r 1 86 06 L06EB: stx r2L ; 06EB 86 06 .. +0002E7r 1 85 07 sta r2H ; 06ED 85 07 .. +0002E9r 1 20 rr rr jsr L09AD ; 06EF 20 AD 09 .. +0002ECr 1 18 clc ; 06F2 18 . +0002EDr 1 65 02 adc r0L ; 06F3 65 02 e. +0002EFr 1 CD C3 88 cmp ramExpSize ; 06F5 CD C3 88 ... +0002F2r 1 90 0A bcc L0704 ; 06F8 90 0A .. +0002F4r 1 F0 08 beq L0704 ; 06FA F0 08 .. +0002F6r 1 A5 07 lda r2H ; 06FC A5 07 .. +0002F8r 1 29 3F and #$3F ; 06FE 29 3F )? +0002FAr 1 85 07 sta r2H ; 0700 85 07 .. +0002FCr 1 A5 02 lda r0L ; 0702 A5 02 .. +0002FEr 1 85 03 L0704: sta r0H ; 0704 85 03 .. +000300r 1 A5 07 lda r2H ; 0706 A5 07 .. +000302r 1 10 07 bpl L0711 ; 0708 10 07 .. +000304r 1 A5 03 lda r0H ; 070A A5 03 .. +000306r 1 85 02 sta r0L ; 070C 85 02 .. +000308r 1 A5 07 lda r2H ; 070E A5 07 .. +00030Ar 1 60 rts ; 0710 60 ` +00030Br 1 ; ---------------------------------------------------------------------------- +00030Br 1 29 0F L0711: and #$0F ; 0711 29 0F ). +00030Dr 1 C9 01 cmp #$01 ; 0713 C9 01 .. +00030Fr 1 D0 0A bne L0721 ; 0715 D0 0A .. +000311r 1 A5 06 lda r2L ; 0717 A5 06 .. +000313r 1 C9 02 cmp #$02 ; 0719 C9 02 .. +000315r 1 D0 04 bne L0721 ; 071B D0 04 .. +000317r 1 A9 01 lda #$01 ; 071D A9 01 .. +000319r 1 85 06 sta r2L ; 071F 85 06 .. +00031Br 1 A5 07 L0721: lda r2H ; 0721 A5 07 .. +00031Dr 1 29 40 and #$40 ; 0723 29 40 )@ +00031Fr 1 F0 0F beq L0736 ; 0725 F0 0F .. +000321r 1 A5 07 lda r2H ; 0727 A5 07 .. +000323r 1 29 0F and #$0F ; 0729 29 0F ). +000325r 1 C5 06 cmp r2L ; 072B C5 06 .. +000327r 1 D0 07 bne L0736 ; 072D D0 07 .. +000329r 1 A5 03 lda r0H ; 072F A5 03 .. +00032Br 1 85 02 sta r0L ; 0731 85 02 .. +00032Dr 1 A5 07 lda r2H ; 0733 A5 07 .. +00032Fr 1 60 rts ; 0735 60 ` +000330r 1 ; ---------------------------------------------------------------------------- +000330r 1 A5 06 L0736: lda r2L ; 0736 A5 06 .. +000332r 1 60 rts ; 0738 60 ` +000333r 1 ; ---------------------------------------------------------------------------- +000333r 1 AD 89 84 L0739: lda curDrive ; 0739 AD 89 84 ... +000336r 1 49 01 eor #$01 ; 073C 49 01 I. +000338r 1 20 B0 C2 L073E: jsr SetDevice ; 073E 20 B0 C2 .. +00033Br 1 8A txa ; 0741 8A . +00033Cr 1 D0 24 bne L0768 ; 0742 D0 24 .$ +00033Er 1 AD C3 88 lda ramExpSize ; 0744 AD C3 88 ... +000341r 1 D0 16 bne L075F ; 0747 D0 16 .. +000343r 1 AD 2F 21 lda $212F ; 0749 AD 2F 21 ./! +000346r 1 48 pha ; 074C 48 H +000347r 1 AC 89 84 ldy curDrive ; 074D AC 89 84 ... +00034Ar 1 B9 86 84 lda $8486,y ; 0750 B9 86 84 ... +00034Dr 1 F0 06 beq L075B ; 0753 F0 06 .. +00034Fr 1 8D 2F 21 sta $212F ; 0755 8D 2F 21 ./! +000352r 1 20 rr rr jsr L09C8 ; 0758 20 C8 09 .. +000355r 1 68 L075B: pla ; 075B 68 h +000356r 1 8D 2F 21 sta $212F ; 075C 8D 2F 21 ./! +000359r 1 AC 89 84 L075F: ldy curDrive ; 075F AC 89 84 ... +00035Cr 1 B9 86 84 lda $8486,y ; 0762 B9 86 84 ... +00035Fr 1 8D C6 88 sta curType ; 0765 8D C6 88 ... +000362r 1 60 L0768: rts ; 0768 60 ` +000363r 1 ; ---------------------------------------------------------------------------- +000363r 1 48 L0769: pha ; 0769 48 H +000364r 1 A9 00 lda #$00 ; 076A A9 00 .. +000366r 1 8D 2C 21 sta $212C ; 076C 8D 2C 21 .,! +000369r 1 AD 89 84 lda curDrive ; 076F AD 89 84 ... +00036Cr 1 8D 2B 21 sta $212B ; 0772 8D 2B 21 .+! +00036Fr 1 68 pla ; 0775 68 h +000370r 1 F0 3E beq L07B6 ; 0776 F0 3E .> +000372r 1 C9 01 cmp #$01 ; 0778 C9 01 .. +000374r 1 D0 03 bne L077F ; 077A D0 03 .. +000376r 1 4C rr rr jmp L07B7 ; 077C 4C B7 07 L.. +000379r 1 ; ---------------------------------------------------------------------------- +000379r 1 C9 02 L077F: cmp #$02 ; 077F C9 02 .. +00037Br 1 D0 03 bne L0786 ; 0781 D0 03 .. +00037Dr 1 4C rr rr jmp L07DF ; 0783 4C DF 07 L.. +000380r 1 ; ---------------------------------------------------------------------------- +000380r 1 C9 03 L0786: cmp #$03 ; 0786 C9 03 .. +000382r 1 D0 03 bne L078D ; 0788 D0 03 .. +000384r 1 4C rr rr jmp L07EF ; 078A 4C EF 07 L.. +000387r 1 ; ---------------------------------------------------------------------------- +000387r 1 C9 41 L078D: cmp #$41 ; 078D C9 41 .A +000389r 1 D0 06 bne L0797 ; 078F D0 06 .. +00038Br 1 20 rr rr jsr L07B7 ; 0791 20 B7 07 .. +00038Er 1 4C rr rr jmp L07FF ; 0794 4C FF 07 L.. +000391r 1 ; ---------------------------------------------------------------------------- +000391r 1 C9 43 L0797: cmp #$43 ; 0797 C9 43 .C +000393r 1 D0 06 bne L07A1 ; 0799 D0 06 .. +000395r 1 20 rr rr jsr L07EF ; 079B 20 EF 07 .. +000398r 1 4C rr rr jmp L0820 ; 079E 4C 20 08 L . +00039Br 1 ; ---------------------------------------------------------------------------- +00039Br 1 C9 81 L07A1: cmp #$81 ; 07A1 C9 81 .. +00039Dr 1 D0 03 bne L07A8 ; 07A3 D0 03 .. +00039Fr 1 4C rr rr jmp L0841 ; 07A5 4C 41 08 LA. +0003A2r 1 ; ---------------------------------------------------------------------------- +0003A2r 1 C9 82 L07A8: cmp #$82 ; 07A8 C9 82 .. +0003A4r 1 D0 03 bne L07AF ; 07AA D0 03 .. +0003A6r 1 4C rr rr jmp L0873 ; 07AC 4C 73 08 Ls. +0003A9r 1 ; ---------------------------------------------------------------------------- +0003A9r 1 C9 83 L07AF: cmp #$83 ; 07AF C9 83 .. +0003ABr 1 D0 03 bne L07B6 ; 07B1 D0 03 .. +0003ADr 1 4C rr rr jmp L08A5 ; 07B3 4C A5 08 L.. +0003B0r 1 ; ---------------------------------------------------------------------------- +0003B0r 1 60 L07B6: rts ; 07B6 60 ` +0003B1r 1 ; ---------------------------------------------------------------------------- +0003B1r 1 AD 2C 21 L07B7: lda $212C ; 07B7 AD 2C 21 .,! +0003B4r 1 C9 01 cmp #$01 ; 07BA C9 01 .. +0003B6r 1 F0 20 beq L07DE ; 07BC F0 20 . +0003B8r 1 C9 41 cmp #$41 ; 07BE C9 41 .A +0003BAr 1 D0 14 bne L07D6 ; 07C0 D0 14 .. +0003BCr 1 AC 2B 21 ldy $212B ; 07C2 AC 2B 21 .+! +0003BFr 1 A9 01 lda #$01 ; 07C5 A9 01 .. +0003C1r 1 99 86 84 sta $8486,y ; 07C7 99 86 84 ... +0003C4r 1 99 FE 03 sta $03FE,y ; 07CA 99 FE 03 ... +0003C7r 1 A9 00 lda #$00 ; 07CD A9 00 .. +0003C9r 1 99 BF 88 sta driveData,y ; 07CF 99 BF 88 ... +0003CCr 1 CE 0C 18 dec $180C ; 07D2 CE 0C 18 ... +0003CFr 1 60 rts ; 07D5 60 ` +0003D0r 1 ; ---------------------------------------------------------------------------- +0003D0r 1 A9 01 L07D6: lda #$01 ; 07D6 A9 01 .. +0003D2r 1 8D 2F 21 sta $212F ; 07D8 8D 2F 21 ./! +0003D5r 1 4C rr rr jmp L08D7 ; 07DB 4C D7 08 L.. +0003D8r 1 ; ---------------------------------------------------------------------------- +0003D8r 1 60 L07DE: rts ; 07DE 60 ` +0003D9r 1 ; ---------------------------------------------------------------------------- +0003D9r 1 AD 2C 21 L07DF: lda $212C ; 07DF AD 2C 21 .,! +0003DCr 1 C9 02 cmp #$02 ; 07E2 C9 02 .. +0003DEr 1 F0 08 beq L07EE ; 07E4 F0 08 .. +0003E0r 1 A9 02 lda #$02 ; 07E6 A9 02 .. +0003E2r 1 8D 2F 21 sta $212F ; 07E8 8D 2F 21 ./! +0003E5r 1 4C rr rr jmp L08D7 ; 07EB 4C D7 08 L.. +0003E8r 1 ; ---------------------------------------------------------------------------- +0003E8r 1 60 L07EE: rts ; 07EE 60 ` +0003E9r 1 ; ---------------------------------------------------------------------------- +0003E9r 1 AD 2C 21 L07EF: lda $212C ; 07EF AD 2C 21 .,! +0003ECr 1 C9 03 cmp #$03 ; 07F2 C9 03 .. +0003EEr 1 F0 08 beq L07FE ; 07F4 F0 08 .. +0003F0r 1 A9 03 lda #$03 ; 07F6 A9 03 .. +0003F2r 1 8D 2F 21 sta $212F ; 07F8 8D 2F 21 ./! +0003F5r 1 4C rr rr jmp L08D7 ; 07FB 4C D7 08 L.. +0003F8r 1 ; ---------------------------------------------------------------------------- +0003F8r 1 60 L07FE: rts ; 07FE 60 ` +0003F9r 1 ; ---------------------------------------------------------------------------- +0003F9r 1 AD 2C 21 L07FF: lda $212C ; 07FF AD 2C 21 .,! +0003FCr 1 C9 41 cmp #$41 ; 0802 C9 41 .A +0003FEr 1 F0 19 beq L081F ; 0804 F0 19 .. +000400r 1 A9 41 lda #$41 ; 0806 A9 41 .A +000402r 1 20 rr rr jsr L0911 ; 0808 20 11 09 .. +000405r 1 AC 2B 21 ldy $212B ; 080B AC 2B 21 .+! +000408r 1 99 BF 88 sta driveData,y ; 080E 99 BF 88 ... +00040Br 1 A9 41 lda #$41 ; 0811 A9 41 .A +00040Dr 1 99 86 84 sta $8486,y ; 0813 99 86 84 ... +000410r 1 99 FE 03 sta $03FE,y ; 0816 99 FE 03 ... +000413r 1 20 E1 C1 jsr NewDisk ; 0819 20 E1 C1 .. +000416r 1 CE 0C 18 dec $180C ; 081C CE 0C 18 ... +000419r 1 60 L081F: rts ; 081F 60 ` +00041Ar 1 ; ---------------------------------------------------------------------------- +00041Ar 1 AD 2C 21 L0820: lda $212C ; 0820 AD 2C 21 .,! +00041Dr 1 C9 43 cmp #$43 ; 0823 C9 43 .C +00041Fr 1 F0 19 beq L0840 ; 0825 F0 19 .. +000421r 1 A9 43 lda #$43 ; 0827 A9 43 .C +000423r 1 20 rr rr jsr L0911 ; 0829 20 11 09 .. +000426r 1 AC 2B 21 ldy $212B ; 082C AC 2B 21 .+! +000429r 1 99 BF 88 sta driveData,y ; 082F 99 BF 88 ... +00042Cr 1 A9 43 lda #$43 ; 0832 A9 43 .C +00042Er 1 99 86 84 sta $8486,y ; 0834 99 86 84 ... +000431r 1 99 FE 03 sta $03FE,y ; 0837 99 FE 03 ... +000434r 1 20 E1 C1 jsr NewDisk ; 083A 20 E1 C1 .. +000437r 1 CE 0C 18 dec $180C ; 083D CE 0C 18 ... +00043Ar 1 60 L0840: rts ; 0840 60 ` +00043Br 1 ; ---------------------------------------------------------------------------- +00043Br 1 AD 2C 21 L0841: lda $212C ; 0841 AD 2C 21 .,! +00043Er 1 C9 81 cmp #$81 ; 0844 C9 81 .. +000440r 1 F0 2A beq L0872 ; 0846 F0 2A .* +000442r 1 A9 81 lda #$81 ; 0848 A9 81 .. +000444r 1 8D 2F 21 sta $212F ; 084A 8D 2F 21 ./! +000447r 1 20 rr rr jsr L09C8 ; 084D 20 C8 09 .. +00044Ar 1 EE 8D 84 inc NUMDRV ; 0850 EE 8D 84 ... +00044Dr 1 A9 81 lda #$81 ; 0853 A9 81 .. +00044Fr 1 20 rr rr jsr L0911 ; 0855 20 11 09 .. +000452r 1 AC 2B 21 ldy $212B ; 0858 AC 2B 21 .+! +000455r 1 99 BF 88 sta driveData,y ; 085B 99 BF 88 ... +000458r 1 A9 81 lda #$81 ; 085E A9 81 .. +00045Ar 1 99 86 84 sta $8486,y ; 0860 99 86 84 ... +00045Dr 1 99 FE 03 sta $03FE,y ; 0863 99 FE 03 ... +000460r 1 AD 2B 21 lda $212B ; 0866 AD 2B 21 .+! +000463r 1 20 rr rr jsr L073E ; 0869 20 3E 07 >. +000466r 1 20 rr rr jsr L0A8A ; 086C 20 8A 0A .. +000469r 1 CE 0C 18 dec $180C ; 086F CE 0C 18 ... +00046Cr 1 60 L0872: rts ; 0872 60 ` +00046Dr 1 ; ---------------------------------------------------------------------------- +00046Dr 1 AD 2C 21 L0873: lda $212C ; 0873 AD 2C 21 .,! +000470r 1 C9 82 cmp #$82 ; 0876 C9 82 .. +000472r 1 F0 2A beq L08A4 ; 0878 F0 2A .* +000474r 1 A9 82 lda #$82 ; 087A A9 82 .. +000476r 1 8D 2F 21 sta $212F ; 087C 8D 2F 21 ./! +000479r 1 20 rr rr jsr L09C8 ; 087F 20 C8 09 .. +00047Cr 1 EE 8D 84 inc NUMDRV ; 0882 EE 8D 84 ... +00047Fr 1 A9 82 lda #$82 ; 0885 A9 82 .. +000481r 1 20 rr rr jsr L0911 ; 0887 20 11 09 .. +000484r 1 AC 2B 21 ldy $212B ; 088A AC 2B 21 .+! +000487r 1 99 BF 88 sta driveData,y ; 088D 99 BF 88 ... +00048Ar 1 A9 82 lda #$82 ; 0890 A9 82 .. +00048Cr 1 99 86 84 sta $8486,y ; 0892 99 86 84 ... +00048Fr 1 99 FE 03 sta $03FE,y ; 0895 99 FE 03 ... +000492r 1 AD 2B 21 lda $212B ; 0898 AD 2B 21 .+! +000495r 1 20 rr rr jsr L073E ; 089B 20 3E 07 >. +000498r 1 20 rr rr jsr L0A8A ; 089E 20 8A 0A .. +00049Br 1 CE 0C 18 dec $180C ; 08A1 CE 0C 18 ... +00049Er 1 60 L08A4: rts ; 08A4 60 ` +00049Fr 1 ; ---------------------------------------------------------------------------- +00049Fr 1 AD 2C 21 L08A5: lda $212C ; 08A5 AD 2C 21 .,! +0004A2r 1 C9 83 cmp #$83 ; 08A8 C9 83 .. +0004A4r 1 F0 2A beq L08D6 ; 08AA F0 2A .* +0004A6r 1 A9 83 lda #$83 ; 08AC A9 83 .. +0004A8r 1 8D 2F 21 sta $212F ; 08AE 8D 2F 21 ./! +0004ABr 1 20 rr rr jsr L09C8 ; 08B1 20 C8 09 .. +0004AEr 1 EE 8D 84 inc NUMDRV ; 08B4 EE 8D 84 ... +0004B1r 1 A9 83 lda #$83 ; 08B7 A9 83 .. +0004B3r 1 20 rr rr jsr L0911 ; 08B9 20 11 09 .. +0004B6r 1 AC 2B 21 ldy $212B ; 08BC AC 2B 21 .+! +0004B9r 1 99 BF 88 sta driveData,y ; 08BF 99 BF 88 ... +0004BCr 1 A9 83 lda #$83 ; 08C2 A9 83 .. +0004BEr 1 99 86 84 sta $8486,y ; 08C4 99 86 84 ... +0004C1r 1 99 FE 03 sta $03FE,y ; 08C7 99 FE 03 ... +0004C4r 1 AD 2B 21 lda $212B ; 08CA AD 2B 21 .+! +0004C7r 1 20 rr rr jsr L073E ; 08CD 20 3E 07 >. +0004CAr 1 20 rr rr jsr L0A8A ; 08D0 20 8A 0A .. +0004CDr 1 CE 0C 18 dec $180C ; 08D3 CE 0C 18 ... +0004D0r 1 60 L08D6: rts ; 08D6 60 ` +0004D1r 1 ; ---------------------------------------------------------------------------- +0004D1r 1 20 rr rr L08D7: jsr L09C8 ; 08D7 20 C8 09 .. +0004D4r 1 AD 2B 21 lda $212B ; 08DA AD 2B 21 .+! +0004D7r 1 20 rr rr jsr L073E ; 08DD 20 3E 07 >. +0004DAr 1 AD C5 88 lda firstBoot ; 08E0 AD C5 88 ... +0004DDr 1 C9 FF cmp #$FF ; 08E3 C9 FF .. +0004DFr 1 F0 0F beq L08F6 ; 08E5 F0 0F .. +0004E1r 1 AC 2B 21 ldy $212B ; 08E7 AC 2B 21 .+! +0004E4r 1 AD 2F 21 lda $212F ; 08EA AD 2F 21 ./! +0004E7r 1 99 86 84 sta $8486,y ; 08ED 99 86 84 ... +0004EAr 1 EE 8D 84 inc NUMDRV ; 08F0 EE 8D 84 ... +0004EDr 1 B8 clv ; 08F3 B8 . +0004EEr 1 50 09 bvc L08FF ; 08F4 50 09 P. +0004F0r 1 20 05 1E L08F6: jsr L1E05 ; 08F6 20 05 1E .. +0004F3r 1 AD 2B 21 lda $212B ; 08F9 AD 2B 21 .+! +0004F6r 1 20 rr rr jsr L073E ; 08FC 20 3E 07 >. +0004F9r 1 CE 0C 18 L08FF: dec $180C ; 08FF CE 0C 18 ... +0004FCr 1 AC 2B 21 ldy $212B ; 0902 AC 2B 21 .+! +0004FFr 1 B9 86 84 lda $8486,y ; 0905 B9 86 84 ... +000502r 1 99 FE 03 sta $03FE,y ; 0908 99 FE 03 ... +000505r 1 A9 00 lda #$00 ; 090B A9 00 .. +000507r 1 99 BF 88 sta driveData,y ; 090D 99 BF 88 ... +00050Ar 1 60 rts ; 0910 60 ` +00050Br 1 ; ---------------------------------------------------------------------------- +00050Br 1 48 L0911: pha ; 0911 48 H +00050Cr 1 20 rr rr jsr L0977 ; 0912 20 77 09 w. +00050Fr 1 68 pla ; 0915 68 h +000510r 1 85 02 sta r0L ; 0916 85 02 .. +000512r 1 AD 2C 21 lda $212C ; 0918 AD 2C 21 .,! +000515r 1 29 C0 and #$C0 ; 091B 29 C0 ). +000517r 1 D0 0B bne L092A ; 091D D0 0B .. +000519r 1 A5 02 lda r0L ; 091F A5 02 .. +00051Br 1 20 rr rr jsr L09AD ; 0921 20 AD 09 .. +00051Er 1 C9 01 cmp #$01 ; 0924 C9 01 .. +000520r 1 F0 0B beq L0933 ; 0926 F0 0B .. +000522r 1 D0 1B bne L0945 ; 0928 D0 1B .. +000524r 1 AC 2B 21 L092A: ldy $212B ; 092A AC 2B 21 .+! +000527r 1 B9 BF 88 lda driveData,y ; 092D B9 BF 88 ... +00052Ar 1 A2 00 ldx #$00 ; 0930 A2 00 .. +00052Cr 1 60 rts ; 0932 60 ` +00052Dr 1 ; ---------------------------------------------------------------------------- +00052Dr 1 AC C3 88 L0933: ldy ramExpSize ; 0933 AC C3 88 ... +000530r 1 88 L0936: dey ; 0936 88 . +000531r 1 30 09 bmi L0942 ; 0937 30 09 0. +000533r 1 B9 30 21 lda $2130,y ; 0939 B9 30 21 .0! +000536r 1 D0 F8 bne L0936 ; 093C D0 F8 .. +000538r 1 98 tya ; 093E 98 . +000539r 1 A2 00 ldx #$00 ; 093F A2 00 .. +00053Br 1 60 rts ; 0941 60 ` +00053Cr 1 ; ---------------------------------------------------------------------------- +00053Cr 1 A2 FF L0942: ldx #$FF ; 0942 A2 FF .. +00053Er 1 60 rts ; 0944 60 ` +00053Fr 1 ; ---------------------------------------------------------------------------- +00053Fr 1 85 02 L0945: sta r0L ; 0945 85 02 .. +000541r 1 A0 00 ldy #$00 ; 0947 A0 00 .. +000543r 1 A5 02 L0949: lda r0L ; 0949 A5 02 .. +000545r 1 85 03 sta r0H ; 094B 85 03 .. +000547r 1 84 04 L094D: sty r1L ; 094D 84 04 .. +000549r 1 CC C3 88 cpy ramExpSize ; 094F CC C3 88 ... +00054Cr 1 B0 20 bcs L0974 ; 0952 B0 20 . +00054Er 1 B9 30 21 lda $2130,y ; 0954 B9 30 21 .0! +000551r 1 C8 iny ; 0957 C8 . +000552r 1 C9 00 cmp #$00 ; 0958 C9 00 .. +000554r 1 D0 F1 bne L094D ; 095A D0 F1 .. +000556r 1 C6 03 L095C: dec r0H ; 095C C6 03 .. +000558r 1 F0 0F beq L096F ; 095E F0 0F .. +00055Ar 1 CC C3 88 cpy ramExpSize ; 0960 CC C3 88 ... +00055Dr 1 B0 0F bcs L0974 ; 0963 B0 0F .. +00055Fr 1 B9 30 21 lda $2130,y ; 0965 B9 30 21 .0! +000562r 1 C8 iny ; 0968 C8 . +000563r 1 C9 00 cmp #$00 ; 0969 C9 00 .. +000565r 1 D0 DC bne L0949 ; 096B D0 DC .. +000567r 1 F0 ED beq L095C ; 096D F0 ED .. +000569r 1 A5 04 L096F: lda r1L ; 096F A5 04 .. +00056Br 1 A2 00 ldx #$00 ; 0971 A2 00 .. +00056Dr 1 60 rts ; 0973 60 ` +00056Er 1 ; ---------------------------------------------------------------------------- +00056Er 1 A2 FF L0974: ldx #$FF ; 0974 A2 FF .. +000570r 1 60 rts ; 0976 60 ` +000571r 1 ; ---------------------------------------------------------------------------- +000571r 1 A0 1F L0977: ldy #$1F ; 0977 A0 1F .. +000573r 1 A9 00 lda #$00 ; 0979 A9 00 .. +000575r 1 99 30 21 L097B: sta $2130,y ; 097B 99 30 21 .0! +000578r 1 88 dey ; 097E 88 . +000579r 1 10 FA bpl L097B ; 097F 10 FA .. +00057Br 1 A9 FF lda #$FF ; 0981 A9 FF .. +00057Dr 1 8D 30 21 sta $2130 ; 0983 8D 30 21 .0! +000580r 1 A9 08 lda #$08 ; 0986 A9 08 .. +000582r 1 85 02 sta r0L ; 0988 85 02 .. +000584r 1 A4 02 L098A: ldy r0L ; 098A A4 02 .. +000586r 1 B9 86 84 lda $8486,y ; 098C B9 86 84 ... +000589r 1 20 rr rr jsr L09AD ; 098F 20 AD 09 .. +00058Cr 1 AA tax ; 0992 AA . +00058Dr 1 F0 0F beq L09A4 ; 0993 F0 0F .. +00058Fr 1 A4 02 ldy r0L ; 0995 A4 02 .. +000591r 1 B9 BF 88 lda driveData,y ; 0997 B9 BF 88 ... +000594r 1 A8 tay ; 099A A8 . +000595r 1 A9 FF L099B: lda #$FF ; 099B A9 FF .. +000597r 1 99 30 21 sta $2130,y ; 099D 99 30 21 .0! +00059Ar 1 C8 iny ; 09A0 C8 . +00059Br 1 CA dex ; 09A1 CA . +00059Cr 1 D0 F7 bne L099B ; 09A2 D0 F7 .. +00059Er 1 E6 02 L09A4: inc r0L ; 09A4 E6 02 .. +0005A0r 1 A5 02 lda r0L ; 09A6 A5 02 .. +0005A2r 1 C9 0C cmp #$0C ; 09A8 C9 0C .. +0005A4r 1 90 DE bcc L098A ; 09AA 90 DE .. +0005A6r 1 60 rts ; 09AC 60 ` +0005A7r 1 ; ---------------------------------------------------------------------------- +0005A7r 1 85 03 L09AD: sta r0H ; 09AD 85 03 .. +0005A9r 1 29 C0 and #$C0 ; 09AF 29 C0 ). +0005ABr 1 F0 0F beq L09C2 ; 09B1 F0 0F .. +0005ADr 1 A5 03 lda r0H ; 09B3 A5 03 .. +0005AFr 1 C9 83 cmp #$83 ; 09B5 C9 83 .. +0005B1r 1 D0 03 bne L09BC ; 09B7 D0 03 .. +0005B3r 1 18 clc ; 09B9 18 . +0005B4r 1 69 01 adc #$01 ; 09BA 69 01 i. +0005B6r 1 29 0F L09BC: and #$0F ; 09BC 29 0F ). +0005B8r 1 A8 tay ; 09BE A8 . +0005B9r 1 B9 rr rr lda L09C3,y ; 09BF B9 C3 09 ... +0005BCr 1 60 L09C2: rts ; 09C2 60 ` +0005BDr 1 ; ---------------------------------------------------------------------------- +0005BDr 1 03 L09C3: .byte $03 ; 09C3 03 . +0005BEr 1 03 .byte $03 ; 09C4 03 . +0005BFr 1 06 01 asl CPU_DATA ; 09C5 06 01 .. +0005C1r 1 0D .byte $0D ; 09C7 0D . +0005C2r 1 AD C3 88 L09C8: lda ramExpSize ; 09C8 AD C3 88 ... +0005C5r 1 D0 23 bne L09F0 ; 09CB D0 23 .# +0005C7r 1 AD C4 88 lda sysRAMFlg ; 09CD AD C4 88 ... +0005CAr 1 29 BF and #$BF ; 09D0 29 BF ). +0005CCr 1 8D C4 88 sta sysRAMFlg ; 09D2 8D C4 88 ... +0005CFr 1 8D 12 C0 sta sysFlgCopy ; 09D5 8D 12 C0 ... +0005D2r 1 8D rr rr sta L040A ; 09D8 8D 0A 04 ... +0005D5r 1 AC 2F 21 ldy $212F ; 09DB AC 2F 21 ./! +0005D8r 1 AD 2B 21 lda $212B ; 09DE AD 2B 21 .+! +0005DBr 1 20 rr rr jsr L0A3D ; 09E1 20 3D 0A =. +0005DEr 1 A9 90 lda #$90 ; 09E4 A9 90 .. +0005E0r 1 85 05 sta r1H ; 09E6 85 05 .. +0005E2r 1 A9 00 lda #$00 ; 09E8 A9 00 .. +0005E4r 1 85 04 sta r1L ; 09EA 85 04 .. +0005E6r 1 20 7E C1 jsr MoveData ; 09EC 20 7E C1 ~. +0005E9r 1 60 rts ; 09EF 60 ` +0005EAr 1 ; ---------------------------------------------------------------------------- +0005EAr 1 AD C4 88 L09F0: lda sysRAMFlg ; 09F0 AD C4 88 ... +0005EDr 1 09 40 ora #$40 ; 09F3 09 40 .@ +0005EFr 1 8D C4 88 sta sysRAMFlg ; 09F5 8D C4 88 ... +0005F2r 1 8D 12 C0 sta sysFlgCopy ; 09F8 8D 12 C0 ... +0005F5r 1 8D rr rr sta L040A ; 09FB 8D 0A 04 ... +0005F8r 1 AC 8E 84 ldy driveType ; 09FE AC 8E 84 ... +0005FBr 1 F0 08 beq L0A0B ; 0A01 F0 08 .. +0005FDr 1 A9 08 lda #$08 ; 0A03 A9 08 .. +0005FFr 1 20 rr rr jsr L0A3D ; 0A05 20 3D 0A =. +000602r 1 20 C8 C2 jsr StashRAM ; 0A08 20 C8 C2 .. +000605r 1 AC 8F 84 L0A0B: ldy $848F ; 0A0B AC 8F 84 ... +000608r 1 F0 08 beq L0A18 ; 0A0E F0 08 .. +00060Ar 1 A9 09 lda #$09 ; 0A10 A9 09 .. +00060Cr 1 20 .byte $20 ; 0A12 20 +00060Dr 1 3D 0A 20 L0A13: and $200A,x ; 0A13 3D 0A 20 =. +000610r 1 C8 iny ; 0A16 C8 . +000611r 1 C2 .byte $C2 ; 0A17 C2 . +000612r 1 AC 90 84 L0A18: ldy $8490 ; 0A18 AC 90 84 ... +000615r 1 F0 08 beq L0A25 ; 0A1B F0 08 .. +000617r 1 A9 0A lda #$0A ; 0A1D A9 0A .. +000619r 1 20 rr rr jsr L0A3D ; 0A1F 20 3D 0A =. +00061Cr 1 20 C8 C2 jsr StashRAM ; 0A22 20 C8 C2 .. +00061Fr 1 AC 2F 21 L0A25: ldy $212F ; 0A25 AC 2F 21 ./! +000622r 1 AD 2B 21 lda $212B ; 0A28 AD 2B 21 .+! +000625r 1 20 rr rr jsr L0A3D ; 0A2B 20 3D 0A =. +000628r 1 20 C8 C2 jsr StashRAM ; 0A2E 20 C8 C2 .. +00062Br 1 A9 90 lda #$90 ; 0A31 A9 90 .. +00062Dr 1 85 05 sta r1H ; 0A33 85 05 .. +00062Fr 1 A9 00 lda #$00 ; 0A35 A9 00 .. +000631r 1 85 04 sta r1L ; 0A37 85 04 .. +000633r 1 20 7E C1 jsr MoveData ; 0A39 20 7E C1 ~. +000636r 1 60 rts ; 0A3C 60 ` +000637r 1 ; ---------------------------------------------------------------------------- +000637r 1 48 L0A3D: pha ; 0A3D 48 H +000638r 1 20 rr rr jsr L0A76 ; 0A3E 20 76 0A v. +00063Br 1 B9 rr rr lda L0A64,y ; 0A41 B9 64 0A .d. +00063Er 1 85 02 sta r0L ; 0A44 85 02 .. +000640r 1 B9 rr rr lda L0A69,y ; 0A46 B9 69 0A .i. +000643r 1 85 03 sta r0H ; 0A49 85 03 .. +000645r 1 68 pla ; 0A4B 68 h +000646r 1 A8 tay ; 0A4C A8 . +000647r 1 B9 rr rr lda L0A66,y ; 0A4D B9 66 0A .f. +00064Ar 1 85 04 sta r1L ; 0A50 85 04 .. +00064Cr 1 B9 rr rr lda L0A6A,y ; 0A52 B9 6A 0A .j. +00064Fr 1 85 05 sta r1H ; 0A55 85 05 .. +000651r 1 A9 0D lda #$0D ; 0A57 A9 0D .. +000653r 1 85 07 sta r2H ; 0A59 85 07 .. +000655r 1 A9 80 lda #$80 ; 0A5B A9 80 .. +000657r 1 85 06 sta r2L ; 0A5D 85 06 .. +000659r 1 A9 00 lda #$00 ; 0A5F A9 00 .. +00065Br 1 85 08 sta r3L ; 0A61 85 08 .. +00065Dr 1 60 rts ; 0A63 60 ` +00065Er 1 ; ---------------------------------------------------------------------------- +00065Er 1 80 L0A64: .byte $80 ; 0A64 80 . +00065Fr 1 00 brk ; 0A65 00 . +000660r 1 80 L0A66: .byte $80 ; 0A66 80 . +000661r 1 00 brk ; 0A67 00 . +000662r 1 80 .byte $80 ; 0A68 80 . +000663r 1 3C L0A69: .byte $3C ; 0A69 3C < +000664r 1 4A L0A6A: lsr a ; 0A6A 4A J +000665r 1 57 .byte $57 ; 0A6B 57 W +000666r 1 65 72 adc a3L ; 0A6C 65 72 er +000668r 1 00 brk ; 0A6E 00 . +000669r 1 80 .byte $80 ; 0A6F 80 . +00066Ar 1 00 brk ; 0A70 00 . +00066Br 1 80 .byte $80 ; 0A71 80 . +00066Cr 1 83 .byte $83 ; 0A72 83 . +00066Dr 1 90 9E bcc L0A13 ; 0A73 90 9E .. +00066Fr 1 AB .byte $AB ; 0A75 AB . +000670r 1 98 L0A76: tya ; 0A76 98 . +000671r 1 10 0C bpl L0A85 ; 0A77 10 0C .. +000673r 1 C9 83 cmp #$83 ; 0A79 C9 83 .. +000675r 1 F0 04 beq L0A81 ; 0A7B F0 04 .. +000677r 1 A0 03 ldy #$03 ; 0A7D A0 03 .. +000679r 1 D0 08 bne L0A89 ; 0A7F D0 08 .. +00067Br 1 A0 04 L0A81: ldy #$04 ; 0A81 A0 04 .. +00067Dr 1 D0 04 bne L0A89 ; 0A83 D0 04 .. +00067Fr 1 29 0F L0A85: and #$0F ; 0A85 29 0F ). +000681r 1 A8 tay ; 0A87 A8 . +000682r 1 88 dey ; 0A88 88 . +000683r 1 60 L0A89: rts ; 0A89 60 ` +000684r 1 ; ---------------------------------------------------------------------------- +000684r 1 AC 2B 21 L0A8A: ldy $212B ; 0A8A AC 2B 21 .+! +000687r 1 B9 86 84 lda $8486,y ; 0A8D B9 86 84 ... +00068Ar 1 29 0F and #$0F ; 0A90 29 0F ). +00068Cr 1 C9 03 cmp #$03 ; 0A92 C9 03 .. +00068Er 1 90 03 bcc L0A99 ; 0A94 90 03 .. +000690r 1 4C rr rr jmp L0C8E ; 0A96 4C 8E 0C L.. +000693r 1 ; ---------------------------------------------------------------------------- +000693r 1 A0 00 L0A99: ldy #$00 ; 0A99 A0 00 .. +000695r 1 98 tya ; 0A9B 98 . +000696r 1 99 00 82 L0A9C: sta curDirHead,y ; 0A9C 99 00 82 ... +000699r 1 C8 iny ; 0A9F C8 . +00069Ar 1 D0 FA bne L0A9C ; 0AA0 D0 FA .. +00069Cr 1 A9 34 lda #$34 ; 0AA2 A9 34 .4 +00069Er 1 8D rr rr sta L0BBB ; 0AA4 8D BB 0B ... +0006A1r 1 A9 00 lda #$00 ; 0AA7 A9 00 .. +0006A3r 1 8D rr rr sta L0B28 ; 0AA9 8D 28 0B .(. +0006A6r 1 AC 89 84 ldy curDrive ; 0AAC AC 89 84 ... +0006A9r 1 B9 86 84 lda $8486,y ; 0AAF B9 86 84 ... +0006ACr 1 29 0F and #$0F ; 0AB2 29 0F ). +0006AEr 1 A0 BD ldy #$BD ; 0AB4 A0 BD .. +0006B0r 1 C9 01 cmp #$01 ; 0AB6 C9 01 .. +0006B2r 1 F0 0C beq L0AC6 ; 0AB8 F0 0C .. +0006B4r 1 A0 00 ldy #$00 ; 0ABA A0 00 .. +0006B6r 1 A9 37 lda #$37 ; 0ABC A9 37 .7 +0006B8r 1 8D rr rr sta L0BBB ; 0ABE 8D BB 0B ... +0006BBr 1 A9 80 lda #$80 ; 0AC1 A9 80 .. +0006BDr 1 8D rr rr sta L0B28 ; 0AC3 8D 28 0B .(. +0006C0r 1 88 L0AC6: dey ; 0AC6 88 . +0006C1r 1 B9 rr rr lda L0B25,y ; 0AC7 B9 25 0B .%. +0006C4r 1 99 00 82 sta curDirHead,y ; 0ACA 99 00 82 ... +0006C7r 1 98 tya ; 0ACD 98 . +0006C8r 1 D0 F6 bne L0AC6 ; 0ACE D0 F6 .. +0006CAr 1 AC 89 84 ldy curDrive ; 0AD0 AC 89 84 ... +0006CDr 1 B9 86 84 lda $8486,y ; 0AD3 B9 86 84 ... +0006D0r 1 29 0F and #$0F ; 0AD6 29 0F ). +0006D2r 1 C9 01 cmp #$01 ; 0AD8 C9 01 .. +0006D4r 1 F0 15 beq L0AF1 ; 0ADA F0 15 .. +0006D6r 1 A0 00 ldy #$00 ; 0ADC A0 00 .. +0006D8r 1 98 tya ; 0ADE 98 . +0006D9r 1 99 00 89 L0ADF: sta dir2Head,y ; 0ADF 99 00 89 ... +0006DCr 1 C8 iny ; 0AE2 C8 . +0006DDr 1 D0 FA bne L0ADF ; 0AE3 D0 FA .. +0006DFr 1 A0 69 ldy #$69 ; 0AE5 A0 69 .i +0006E1r 1 88 L0AE7: dey ; 0AE7 88 . +0006E2r 1 B9 rr rr lda L0C25,y ; 0AE8 B9 25 0C .%. +0006E5r 1 99 00 89 sta dir2Head,y ; 0AEB 99 00 89 ... +0006E8r 1 98 tya ; 0AEE 98 . +0006E9r 1 D0 F6 bne L0AE7 ; 0AEF D0 F6 .. +0006EBr 1 20 4A C2 L0AF1: jsr PutDirHead ; 0AF1 20 4A C2 J. +0006EEr 1 20 rr rr jsr L0B1B ; 0AF4 20 1B 0B .. +0006F1r 1 A9 FF lda #$FF ; 0AF7 A9 FF .. +0006F3r 1 8D 01 80 sta $8001 ; 0AF9 8D 01 80 ... +0006F6r 1 A9 80 lda #$80 ; 0AFC A9 80 .. +0006F8r 1 85 0B sta r4H ; 0AFE 85 0B .. +0006FAr 1 A9 00 lda #$00 ; 0B00 A9 00 .. +0006FCr 1 85 0A sta r4L ; 0B02 85 0A .. +0006FEr 1 A9 12 lda #$12 ; 0B04 A9 12 .. +000700r 1 85 04 sta r1L ; 0B06 85 04 .. +000702r 1 A9 01 lda #$01 ; 0B08 A9 01 .. +000704r 1 85 05 sta r1H ; 0B0A 85 05 .. +000706r 1 20 E7 C1 jsr PutBlock ; 0B0C 20 E7 C1 .. +000709r 1 E6 04 inc r1L ; 0B0F E6 04 .. +00070Br 1 A9 08 lda #$08 ; 0B11 A9 08 .. +00070Dr 1 85 05 sta r1H ; 0B13 85 05 .. +00070Fr 1 20 E7 C1 jsr PutBlock ; 0B15 20 E7 C1 .. +000712r 1 A9 00 lda #$00 ; 0B18 A9 00 .. +000714r 1 60 rts ; 0B1A 60 ` +000715r 1 ; ---------------------------------------------------------------------------- +000715r 1 A0 00 L0B1B: ldy #$00 ; 0B1B A0 00 .. +000717r 1 98 tya ; 0B1D 98 . +000718r 1 99 00 80 L0B1E: sta diskBlkBuf,y ; 0B1E 99 00 80 ... +00071Br 1 88 dey ; 0B21 88 . +00071Cr 1 D0 FA bne L0B1E ; 0B22 D0 FA .. +00071Er 1 60 rts ; 0B24 60 ` +00071Fr 1 ; ---------------------------------------------------------------------------- +00071Fr 1 12 01 41 L0B25: .byte $12,$01,$41 ; 0B25 12 01 41 ..A +000722r 1 00 15 FF FF L0B28: .byte $00,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B28 00 15 FF FF 1F 15 FF FF ........ +000726r 1 1F 15 FF FF +00072Ar 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B30 1F 15 FF FF 1F 15 FF FF ........ +00072Er 1 1F 15 FF FF +000732r 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B38 1F 15 FF FF 1F 15 FF FF ........ +000736r 1 1F 15 FF FF +00073Ar 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B40 1F 15 FF FF 1F 15 FF FF ........ +00073Er 1 1F 15 FF FF +000742r 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B48 1F 15 FF FF 1F 15 FF FF ........ +000746r 1 1F 15 FF FF +00074Ar 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B50 1F 15 FF FF 1F 15 FF FF ........ +00074Er 1 1F 15 FF FF +000752r 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B58 1F 15 FF FF 1F 15 FF FF ........ +000756r 1 1F 15 FF FF +00075Ar 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B60 1F 15 FF FF 1F 15 FF FF ........ +00075Er 1 1F 15 FF FF +000762r 1 1F 15 FF FF .byte $1F,$15,$FF,$FF,$1F,$11,$FC,$FF ; 0B68 1F 15 FF FF 1F 11 FC FF ........ +000766r 1 1F 11 FC FF +00076Ar 1 07 12 FF FE .byte $07,$12,$FF,$FE,$07,$13,$FF,$FF ; 0B70 07 12 FF FE 07 13 FF FF ........ +00076Er 1 07 13 FF FF +000772r 1 07 13 FF FF .byte $07,$13,$FF,$FF,$07,$13,$FF,$FF ; 0B78 07 13 FF FF 07 13 FF FF ........ +000776r 1 07 13 FF FF +00077Ar 1 07 13 FF FF .byte $07,$13,$FF,$FF,$07,$13,$FF,$FF ; 0B80 07 13 FF FF 07 13 FF FF ........ +00077Er 1 07 13 FF FF +000782r 1 07 12 FF FF .byte $07,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B88 07 12 FF FF 03 12 FF FF ........ +000786r 1 03 12 FF FF +00078Ar 1 03 12 FF FF .byte $03,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B90 03 12 FF FF 03 12 FF FF ........ +00078Er 1 03 12 FF FF +000792r 1 03 12 FF FF .byte $03,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B98 03 12 FF FF 03 12 FF FF ........ +000796r 1 03 12 FF FF +00079Ar 1 03 11 FF FF .byte $03,$11,$FF,$FF,$01,$11,$FF,$FF ; 0BA0 03 11 FF FF 01 11 FF FF ........ +00079Er 1 01 11 FF FF +0007A2r 1 01 11 FF FF .byte $01,$11,$FF,$FF,$01,$11,$FF,$FF ; 0BA8 01 11 FF FF 01 11 FF FF ........ +0007A6r 1 01 11 FF FF +0007AAr 1 01 11 FF FF .byte $01,$11,$FF,$FF ; 0BB0 01 11 FF FF .... +0007AEr 1 ; ---------------------------------------------------------------------------- +0007AEr 1 01 .byte $01 ; 0BB4 01 . +0007AFr 1 52 41 4D 20 .byte "RAM 15" ; 0BB5 52 41 4D 20 31 35 RAM 15 +0007B3r 1 31 35 +0007B5r 1 37 31 L0BBB: .byte "71" ; 0BBB 37 31 71 +0007B7r 1 A0 A0 A0 A0 .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 ; 0BBD A0 A0 A0 A0 A0 A0 A0 A0 ........ +0007BBr 1 A0 A0 A0 A0 +0007BFr 1 A0 A0 .byte $A0,$A0 ; 0BC5 A0 A0 .. +0007C1r 1 52 44 .byte "RD" ; 0BC7 52 44 RD +0007C3r 1 A0 .byte $A0 ; 0BC9 A0 . +0007C4r 1 32 41 .byte "2A" ; 0BCA 32 41 2A +0007C6r 1 A0 A0 A0 A0 .byte $A0,$A0,$A0,$A0,$13,$08 ; 0BCC A0 A0 A0 A0 13 08 ...... +0007CAr 1 13 08 +0007CCr 1 47 45 4F 53 .byte "GEOS format V1.0" ; 0BD2 47 45 4F 53 20 66 6F 72 GEOS for +0007D0r 1 20 66 6F 72 +0007D4r 1 6D 61 74 20 +0007DCr 1 ; 0BDA 6D 61 74 20 56 31 2E 30 mat V1.0 +0007DCr 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BE2 00 00 00 00 00 00 00 00 ........ +0007E0r 1 00 00 00 00 +0007E4r 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BEA 00 00 00 00 00 00 00 00 ........ +0007E8r 1 00 00 00 00 +0007ECr 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BF2 00 00 00 00 00 00 00 00 ........ +0007F0r 1 00 00 00 00 +0007F4r 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BFA 00 00 00 00 00 00 00 00 ........ +0007F8r 1 00 00 00 00 +0007FCr 1 15 15 15 15 .byte $15,$15,$15,$15,$15,$15,$15,$15 ; 0C02 15 15 15 15 15 15 15 15 ........ +000800r 1 15 15 15 15 +000804r 1 15 15 15 15 .byte $15,$15,$15,$15,$15,$15,$15,$15 ; 0C0A 15 15 15 15 15 15 15 15 ........ +000808r 1 15 15 15 15 +00080Cr 1 15 00 13 13 .byte $15,$00,$13,$13,$13,$13,$13,$13 ; 0C12 15 00 13 13 13 13 13 13 ........ +000810r 1 13 13 13 13 +000814r 1 12 12 12 12 .byte $12,$12,$12,$12,$12,$12,$11,$11 ; 0C1A 12 12 12 12 12 12 11 11 ........ +000818r 1 12 12 11 11 +00081Cr 1 11 11 11 .byte $11,$11,$11 ; 0C22 11 11 11 ... +00081Fr 1 FF FF 1F FF L0C25: .byte $FF,$FF,$1F,$FF,$FF,$1F,$FF,$FF ; 0C25 FF FF 1F FF FF 1F FF FF ........ +000823r 1 FF 1F FF FF +000827r 1 1F FF FF 1F .byte $1F,$FF,$FF,$1F,$FF,$FF,$1F,$FF ; 0C2D 1F FF FF 1F FF FF 1F FF ........ +00082Br 1 FF FF 1F FF +00082Fr 1 FF 1F FF FF .byte $FF,$1F,$FF,$FF,$1F,$FF,$FF,$1F ; 0C35 FF 1F FF FF 1F FF FF 1F ........ +000833r 1 1F FF FF 1F +000837r 1 FF FF 1F FF .byte $FF,$FF,$1F,$FF,$FF,$1F,$FF,$FF ; 0C3D FF FF 1F FF FF 1F FF FF ........ +00083Br 1 FF 1F FF FF +00083Fr 1 1F FF FF 1F .byte $1F,$FF,$FF,$1F,$FF,$FF,$1F,$FF ; 0C45 1F FF FF 1F FF FF 1F FF ........ +000843r 1 FF FF 1F FF +000847r 1 FF 1F FF FF .byte $FF,$1F,$FF,$FF,$1F,$FF,$FF,$1F ; 0C4D FF 1F FF FF 1F FF FF 1F ........ +00084Br 1 1F FF FF 1F +00084Fr 1 FF FF 1F 00 .byte $FF,$FF,$1F,$00,$00,$00,$FF,$FF ; 0C55 FF FF 1F 00 00 00 FF FF ........ +000853r 1 00 00 FF FF +000857r 1 07 FF FF 07 .byte $07,$FF,$FF,$07,$FF,$FF,$07,$FF ; 0C5D 07 FF FF 07 FF FF 07 FF ........ +00085Br 1 FF FF 07 FF +00085Fr 1 FF 07 FF FF .byte $FF,$07,$FF,$FF,$07,$FF,$FF,$07 ; 0C65 FF 07 FF FF 07 FF FF 07 ........ +000863r 1 07 FF FF 07 +000867r 1 FF FF 03 FF .byte $FF,$FF,$03,$FF,$FF,$03,$FF,$FF ; 0C6D FF FF 03 FF FF 03 FF FF ........ +00086Br 1 FF 03 FF FF +00086Fr 1 03 FF FF 03 .byte $03,$FF,$FF,$03,$FF,$FF,$03,$FF ; 0C75 03 FF FF 03 FF FF 03 FF ........ +000873r 1 FF FF 03 FF +000877r 1 FF 03 FF FF .byte $FF,$03,$FF,$FF,$01,$FF,$FF,$01 ; 0C7D FF 03 FF FF 01 FF FF 01 ........ +00087Br 1 01 FF FF 01 +00087Fr 1 FF FF 01 FF .byte $FF,$FF,$01,$FF,$FF,$01,$FF,$FF ; 0C85 FF FF 01 FF FF 01 FF FF ........ +000883r 1 FF 01 FF FF +000887r 1 01 .byte $01 ; 0C8D 01 . +000888r 1 ; ---------------------------------------------------------------------------- +000888r 1 A0 00 L0C8E: ldy #$00 ; 0C8E A0 00 .. +00088Ar 1 98 tya ; 0C90 98 . +00088Br 1 99 00 82 L0C91: sta curDirHead,y ; 0C91 99 00 82 ... +00088Er 1 C8 iny ; 0C94 C8 . +00088Fr 1 D0 FA bne L0C91 ; 0C95 D0 FA .. +000891r 1 A9 28 lda #$28 ; 0C97 A9 28 .( +000893r 1 8D 00 82 sta curDirHead ; 0C99 8D 00 82 ... +000896r 1 A9 03 lda #$03 ; 0C9C A9 03 .. +000898r 1 8D 01 82 sta $8201 ; 0C9E 8D 01 82 ... +00089Br 1 A9 44 lda #$44 ; 0CA1 A9 44 .D +00089Dr 1 8D 02 82 sta $8202 ; 0CA3 8D 02 82 ... +0008A0r 1 A0 2D ldy #$2D ; 0CA6 A0 2D .- +0008A2r 1 B9 rr rr L0CA8: lda L0D36,y ; 0CA8 B9 36 0D .6. +0008A5r 1 99 90 82 sta $8290,y ; 0CAB 99 90 82 ... +0008A8r 1 88 dey ; 0CAE 88 . +0008A9r 1 10 F7 bpl L0CA8 ; 0CAF 10 F7 .. +0008ABr 1 A9 28 lda #$28 ; 0CB1 A9 28 .( +0008ADr 1 85 04 sta r1L ; 0CB3 85 04 .. +0008AFr 1 A9 00 lda #$00 ; 0CB5 A9 00 .. +0008B1r 1 85 05 sta r1H ; 0CB7 85 05 .. +0008B3r 1 A9 82 lda #$82 ; 0CB9 A9 82 .. +0008B5r 1 85 0B sta r4H ; 0CBB 85 0B .. +0008B7r 1 A9 00 lda #$00 ; 0CBD A9 00 .. +0008B9r 1 85 0A sta r4L ; 0CBF 85 0A .. +0008BBr 1 20 E7 C1 jsr PutBlock ; 0CC1 20 E7 C1 .. +0008BEr 1 A0 00 ldy #$00 ; 0CC4 A0 00 .. +0008C0r 1 B9 rr rr L0CC6: lda L0D64,y ; 0CC6 B9 64 0D .d. +0008C3r 1 99 00 89 sta dir2Head,y ; 0CC9 99 00 89 ... +0008C6r 1 C8 iny ; 0CCC C8 . +0008C7r 1 D0 F7 bne L0CC6 ; 0CCD D0 F7 .. +0008C9r 1 A9 28 lda #$28 ; 0CCF A9 28 .( +0008CBr 1 85 04 sta r1L ; 0CD1 85 04 .. +0008CDr 1 A9 01 lda #$01 ; 0CD3 A9 01 .. +0008CFr 1 85 05 sta r1H ; 0CD5 85 05 .. +0008D1r 1 A9 89 lda #$89 ; 0CD7 A9 89 .. +0008D3r 1 85 0B sta r4H ; 0CD9 85 0B .. +0008D5r 1 A9 00 lda #$00 ; 0CDB A9 00 .. +0008D7r 1 85 0A sta r4L ; 0CDD 85 0A .. +0008D9r 1 20 E7 C1 jsr PutBlock ; 0CDF 20 E7 C1 .. +0008DCr 1 A9 FF lda #$FF ; 0CE2 A9 FF .. +0008DEr 1 8D 01 89 sta $8901 ; 0CE4 8D 01 89 ... +0008E1r 1 A9 00 lda #$00 ; 0CE7 A9 00 .. +0008E3r 1 8D 00 89 sta dir2Head ; 0CE9 8D 00 89 ... +0008E6r 1 A9 28 lda #$28 ; 0CEC A9 28 .( +0008E8r 1 8D FA 89 sta $89FA ; 0CEE 8D FA 89 ... +0008EBr 1 A9 FF lda #$FF ; 0CF1 A9 FF .. +0008EDr 1 8D FB 89 sta $89FB ; 0CF3 8D FB 89 ... +0008F0r 1 A9 FF lda #$FF ; 0CF6 A9 FF .. +0008F2r 1 8D FD 89 sta $89FD ; 0CF8 8D FD 89 ... +0008F5r 1 A9 28 lda #$28 ; 0CFB A9 28 .( +0008F7r 1 85 04 sta r1L ; 0CFD 85 04 .. +0008F9r 1 A9 02 lda #$02 ; 0CFF A9 02 .. +0008FBr 1 85 05 sta r1H ; 0D01 85 05 .. +0008FDr 1 A9 89 lda #$89 ; 0D03 A9 89 .. +0008FFr 1 85 0B sta r4H ; 0D05 85 0B .. +000901r 1 A9 00 lda #$00 ; 0D07 A9 00 .. +000903r 1 85 0A sta r4L ; 0D09 85 0A .. +000905r 1 20 E7 C1 jsr PutBlock ; 0D0B 20 E7 C1 .. +000908r 1 20 47 C2 jsr GetDirHead ; 0D0E 20 47 C2 G. +00090Br 1 20 rr rr jsr L0B1B ; 0D11 20 1B 0B .. +00090Er 1 A9 FF lda #$FF ; 0D14 A9 FF .. +000910r 1 8D 01 80 sta $8001 ; 0D16 8D 01 80 ... +000913r 1 A9 80 lda #$80 ; 0D19 A9 80 .. +000915r 1 85 0B sta r4H ; 0D1B 85 0B .. +000917r 1 A9 00 lda #$00 ; 0D1D A9 00 .. +000919r 1 85 0A sta r4L ; 0D1F 85 0A .. +00091Br 1 A9 28 lda #$28 ; 0D21 A9 28 .( +00091Dr 1 85 04 sta r1L ; 0D23 85 04 .. +00091Fr 1 A9 03 lda #$03 ; 0D25 A9 03 .. +000921r 1 85 05 sta r1H ; 0D27 85 05 .. +000923r 1 20 E7 C1 jsr PutBlock ; 0D29 20 E7 C1 .. +000926r 1 A9 13 lda #$13 ; 0D2C A9 13 .. +000928r 1 85 05 sta r1H ; 0D2E 85 05 .. +00092Ar 1 20 E7 C1 jsr PutBlock ; 0D30 20 E7 C1 .. +00092Dr 1 A9 00 lda #$00 ; 0D33 A9 00 .. +00092Fr 1 60 rts ; 0D35 60 ` +000930r 1 ; ---------------------------------------------------------------------------- +000930r 1 52 41 4D 20 L0D36: .byte "RAM 1581" ; 0D36 52 41 4D 20 31 35 38 31 RAM 1581 +000934r 1 31 35 38 31 +000938r 1 A0 A0 A0 A0 .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 ; 0D3E A0 A0 A0 A0 A0 A0 A0 A0 ........ +00093Cr 1 A0 A0 A0 A0 +000940r 1 A0 A0 .byte $A0,$A0 ; 0D46 A0 A0 .. +000942r 1 52 44 .byte "RD" ; 0D48 52 44 RD +000944r 1 A0 .byte $A0 ; 0D4A A0 . +000945r 1 33 44 .byte "3D" ; 0D4B 33 44 3D +000947r 1 A0 A0 00 00 .byte $A0,$A0,$00,$00 ; 0D4D A0 A0 00 00 .... +00094Br 1 28 .byte "(" ; 0D51 28 ( +00094Cr 1 13 .byte $13 ; 0D52 13 . +00094Dr 1 47 45 4F 53 .byte "GEOS format V1.0" ; 0D53 47 45 4F 53 20 66 6F 72 GEOS for +000951r 1 20 66 6F 72 +000955r 1 6D 61 74 20 +00095Dr 1 ; 0D5B 6D 61 74 20 56 31 2E 30 mat V1.0 +00095Dr 1 00 .byte $00 ; 0D63 00 . +00095Er 1 28 L0D64: .byte "(" ; 0D64 28 ( +00095Fr 1 02 .byte $02 ; 0D65 02 . +000960r 1 44 .byte "D" ; 0D66 44 D +000961r 1 BB .byte $BB ; 0D67 BB . +000962r 1 45 41 .byte "EA" ; 0D68 45 41 EA +000964r 1 C0 00 00 00 .byte $C0,$00,$00,$00,$00,$00,$00,$00 ; 0D6A C0 00 00 00 00 00 00 00 ........ +000968r 1 00 00 00 00 +00096Cr 1 00 00 .byte $00,$00 ; 0D72 00 00 .. +00096Er 1 28 .byte "(" ; 0D74 28 ( +00096Fr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D75 FF FF FF FF FF ..... +000973r 1 FF +000974r 1 28 .byte "(" ; 0D7A 28 ( +000975r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D7B FF FF FF FF FF ..... +000979r 1 FF +00097Ar 1 28 .byte "(" ; 0D80 28 ( +00097Br 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D81 FF FF FF FF FF ..... +00097Fr 1 FF +000980r 1 28 .byte "(" ; 0D86 28 ( +000981r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D87 FF FF FF FF FF ..... +000985r 1 FF +000986r 1 28 .byte "(" ; 0D8C 28 ( +000987r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D8D FF FF FF FF FF ..... +00098Br 1 FF +00098Cr 1 28 .byte "(" ; 0D92 28 ( +00098Dr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D93 FF FF FF FF FF ..... +000991r 1 FF +000992r 1 28 .byte "(" ; 0D98 28 ( +000993r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D99 FF FF FF FF FF ..... +000997r 1 FF +000998r 1 28 .byte "(" ; 0D9E 28 ( +000999r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0D9F FF FF FF FF FF ..... +00099Dr 1 FF +00099Er 1 28 .byte "(" ; 0DA4 28 ( +00099Fr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DA5 FF FF FF FF FF ..... +0009A3r 1 FF +0009A4r 1 28 .byte "(" ; 0DAA 28 ( +0009A5r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DAB FF FF FF FF FF ..... +0009A9r 1 FF +0009AAr 1 28 .byte "(" ; 0DB0 28 ( +0009ABr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DB1 FF FF FF FF FF ..... +0009AFr 1 FF +0009B0r 1 28 .byte "(" ; 0DB6 28 ( +0009B1r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DB7 FF FF FF FF FF ..... +0009B5r 1 FF +0009B6r 1 28 .byte "(" ; 0DBC 28 ( +0009B7r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DBD FF FF FF FF FF ..... +0009BBr 1 FF +0009BCr 1 28 .byte "(" ; 0DC2 28 ( +0009BDr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DC3 FF FF FF FF FF ..... +0009C1r 1 FF +0009C2r 1 28 .byte "(" ; 0DC8 28 ( +0009C3r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DC9 FF FF FF FF FF ..... +0009C7r 1 FF +0009C8r 1 28 .byte "(" ; 0DCE 28 ( +0009C9r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DCF FF FF FF FF FF ..... +0009CDr 1 FF +0009CEr 1 28 .byte "(" ; 0DD4 28 ( +0009CFr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DD5 FF FF FF FF FF ..... +0009D3r 1 FF +0009D4r 1 28 .byte "(" ; 0DDA 28 ( +0009D5r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DDB FF FF FF FF FF ..... +0009D9r 1 FF +0009DAr 1 28 .byte "(" ; 0DE0 28 ( +0009DBr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DE1 FF FF FF FF FF ..... +0009DFr 1 FF +0009E0r 1 28 .byte "(" ; 0DE6 28 ( +0009E1r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DE7 FF FF FF FF FF ..... +0009E5r 1 FF +0009E6r 1 28 .byte "(" ; 0DEC 28 ( +0009E7r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DED FF FF FF FF FF ..... +0009EBr 1 FF +0009ECr 1 28 .byte "(" ; 0DF2 28 ( +0009EDr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DF3 FF FF FF FF FF ..... +0009F1r 1 FF +0009F2r 1 28 .byte "(" ; 0DF8 28 ( +0009F3r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DF9 FF FF FF FF FF ..... +0009F7r 1 FF +0009F8r 1 28 .byte "(" ; 0DFE 28 ( +0009F9r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0DFF FF FF FF FF FF ..... +0009FDr 1 FF +0009FEr 1 28 .byte "(" ; 0E04 28 ( +0009FFr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E05 FF FF FF FF FF ..... +000A03r 1 FF +000A04r 1 28 .byte "(" ; 0E0A 28 ( +000A05r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E0B FF FF FF FF FF ..... +000A09r 1 FF +000A0Ar 1 28 .byte "(" ; 0E10 28 ( +000A0Br 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E11 FF FF FF FF FF ..... +000A0Fr 1 FF +000A10r 1 28 .byte "(" ; 0E16 28 ( +000A11r 1 FF FF .byte $FF,$FF ; 0E17 FF FF FF FF FF ..... +000A13r 1 FF FF FF L0E19: .byte $FF,$FF,$FF +000A16r 1 28 .byte "(" ; 0E1C 28 ( +000A17r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E1D FF FF FF FF FF ..... +000A1Br 1 FF +000A1Cr 1 28 .byte "(" ; 0E22 28 ( +000A1Dr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E23 FF FF FF FF FF ..... +000A21r 1 FF +000A22r 1 28 .byte "(" ; 0E28 28 ( +000A23r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E29 FF FF FF FF FF ..... +000A27r 1 FF +000A28r 1 28 .byte "(" ; 0E2E 28 ( +000A29r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E2F FF FF FF FF FF ..... +000A2Dr 1 FF +000A2Er 1 28 .byte "(" ; 0E34 28 ( +000A2Fr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E35 FF FF FF FF FF ..... +000A33r 1 FF +000A34r 1 28 .byte "(" ; 0E3A 28 ( +000A35r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E3B FF FF FF FF FF ..... +000A39r 1 FF +000A3Ar 1 28 .byte "(" ; 0E40 28 ( +000A3Br 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E41 FF FF FF FF FF ..... +000A3Fr 1 FF +000A40r 1 28 .byte "(" ; 0E46 28 ( +000A41r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E47 FF FF FF FF FF ..... +000A45r 1 FF +000A46r 1 28 .byte "(" ; 0E4C 28 ( +000A47r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E4D FF FF FF FF FF ..... +000A4Br 1 FF +000A4Cr 1 28 .byte "(" ; 0E52 28 ( +000A4Dr 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E53 FF FF FF FF FF ..... +000A51r 1 FF +000A52r 1 28 .byte "(" ; 0E58 28 ( +000A53r 1 FF FF FF FF .byte $FF,$FF,$FF,$FF,$FF ; 0E59 FF FF FF FF FF ..... +000A57r 1 FF +000A58r 1 23 .byte "#" ; 0E5E 23 # +000A59r 1 F0 FF F7 FF .byte $F0,$FF,$F7,$FF,$FF ; 0E5F F0 FF F7 FF FF ..... +000A5Dr 1 FF +000A5Er 1 ; ---------------------------------------------------------------------------- +000A5Er 1 A9 E5 L0E64: lda #$E5 ; 0E64 A9 E5 .. +000A60r 1 85 03 sta r0H ; 0E66 85 03 .. +000A62r 1 A9 80 lda #$80 ; 0E68 A9 80 .. +000A64r 1 85 02 sta r0L ; 0E6A 85 02 .. +000A66r 1 20 rr rr jsr L0EA0 ; 0E6C 20 A0 0E .. +000A69r 1 E0 00 cpx #$00 ; 0E6F E0 00 .. +000A6Br 1 D0 0F bne L0E82 ; 0E71 D0 0F .. +000A6Dr 1 C9 00 cmp #$00 ; 0E73 C9 00 .. +000A6Fr 1 D0 0B bne L0E82 ; 0E75 D0 0B .. +000A71r 1 A9 A6 lda #$A6 ; 0E77 A9 A6 .. +000A73r 1 85 03 sta r0H ; 0E79 85 03 .. +000A75r 1 A9 C0 lda #$C0 ; 0E7B A9 C0 .. +000A77r 1 85 02 sta r0L ; 0E7D 85 02 .. +000A79r 1 20 rr rr jsr L0EA0 ; 0E7F 20 A0 0E .. +000A7Cr 1 E0 00 L0E82: cpx #$00 ; 0E82 E0 00 .. +000A7Er 1 D0 17 bne L0E9D ; 0E84 D0 17 .. +000A80r 1 AA tax ; 0E86 AA . +000A81r 1 A9 01 lda #$01 ; 0E87 A9 01 .. +000A83r 1 E0 41 cpx #$41 ; 0E89 E0 41 .A +000A85r 1 F0 12 beq L0E9F ; 0E8B F0 12 .. +000A87r 1 A9 02 lda #$02 ; 0E8D A9 02 .. +000A89r 1 E0 71 cpx #$71 ; 0E8F E0 71 .q +000A8Br 1 F0 0C beq L0E9F ; 0E91 F0 0C .. +000A8Dr 1 A9 03 lda #$03 ; 0E93 A9 03 .. +000A8Fr 1 A2 81 ldx #$81 ; 0E95 A2 81 .. +000A91r 1 D0 06 bne L0E9F ; 0E97 D0 06 .. +000A93r 1 A9 FF lda #$FF ; 0E99 A9 FF .. +000A95r 1 D0 02 bne L0E9F ; 0E9B D0 02 .. +000A97r 1 A9 00 L0E9D: lda #$00 ; 0E9D A9 00 .. +000A99r 1 60 L0E9F: rts ; 0E9F 60 ` +000A9Ar 1 ; ---------------------------------------------------------------------------- +000A9Ar 1 20 rr rr L0EA0: jsr L0EF5 ; 0EA0 20 F5 0E .. +000A9Dr 1 A9 01 lda #$01 ; 0EA3 A9 01 .. +000A9Fr 1 85 07 sta r2H ; 0EA5 85 07 .. +000AA1r 1 A9 00 lda #$00 ; 0EA7 A9 00 .. +000AA3r 1 85 06 sta r2L ; 0EA9 85 06 .. +000AA5r 1 20 rr rr L0EAB: jsr L0F05 ; 0EAB 20 05 0F .. +000AA8r 1 E0 00 cpx #$00 ; 0EAE E0 00 .. +000AAAr 1 D0 42 bne L0EF4 ; 0EB0 D0 42 .B +000AACr 1 C9 31 cmp #$31 ; 0EB2 C9 31 .1 +000AAEr 1 D0 2E bne L0EE4 ; 0EB4 D0 2E .. +000AB0r 1 20 rr rr jsr L0F05 ; 0EB6 20 05 0F .. +000AB3r 1 C9 35 cmp #$35 ; 0EB9 C9 35 .5 +000AB5r 1 D0 27 bne L0EE4 ; 0EBB D0 27 .' +000AB7r 1 20 rr rr jsr L0F05 ; 0EBD 20 05 0F .. +000ABAr 1 85 04 sta r1L ; 0EC0 85 04 .. +000ABCr 1 29 70 and #$70 ; 0EC2 29 70 )p +000ABEr 1 C9 30 cmp #$30 ; 0EC4 C9 30 .0 +000AC0r 1 D0 1C bne L0EE4 ; 0EC6 D0 1C .. +000AC2r 1 A5 04 lda r1L ; 0EC8 A5 04 .. +000AC4r 1 0A asl a ; 0ECA 0A . +000AC5r 1 0A asl a ; 0ECB 0A . +000AC6r 1 0A asl a ; 0ECC 0A . +000AC7r 1 0A asl a ; 0ECD 0A . +000AC8r 1 85 04 sta r1L ; 0ECE 85 04 .. +000ACAr 1 20 rr rr jsr L0F05 ; 0ED0 20 05 0F .. +000ACDr 1 85 05 sta r1H ; 0ED3 85 05 .. +000ACFr 1 29 70 and #$70 ; 0ED5 29 70 )p +000AD1r 1 C9 30 cmp #$30 ; 0ED7 C9 30 .0 +000AD3r 1 D0 09 bne L0EE4 ; 0ED9 D0 09 .. +000AD5r 1 A5 05 lda r1H ; 0EDB A5 05 .. +000AD7r 1 29 0F and #$0F ; 0EDD 29 0F ). +000AD9r 1 05 04 ora r1L ; 0EDF 05 04 .. +000ADBr 1 A2 00 ldx #$00 ; 0EE1 A2 00 .. +000ADDr 1 60 rts ; 0EE3 60 ` +000ADEr 1 ; ---------------------------------------------------------------------------- +000ADEr 1 A5 06 L0EE4: lda r2L ; 0EE4 A5 06 .. +000AE0r 1 D0 02 bne L0EEA ; 0EE6 D0 02 .. +000AE2r 1 C6 07 dec r2H ; 0EE8 C6 07 .. +000AE4r 1 C6 06 L0EEA: dec r2L ; 0EEA C6 06 .. +000AE6r 1 A5 06 lda r2L ; 0EEC A5 06 .. +000AE8r 1 05 07 ora r2H ; 0EEE 05 07 .. +000AEAr 1 D0 B9 bne L0EAB ; 0EF0 D0 B9 .. +000AECr 1 A2 00 ldx #$00 ; 0EF2 A2 00 .. +000AEEr 1 60 L0EF4: rts ; 0EF4 60 ` +000AEFr 1 ; ---------------------------------------------------------------------------- +000AEFr 1 A5 03 L0EF5: lda r0H ; 0EF5 A5 03 .. +000AF1r 1 8D rr rr sta L0F72 ; 0EF7 8D 72 0F .r. +000AF4r 1 A5 02 lda r0L ; 0EFA A5 02 .. +000AF6r 1 8D rr rr sta L0F71 ; 0EFC 8D 71 0F .q. +000AF9r 1 A9 20 lda #$20 ; 0EFF A9 20 . +000AFBr 1 8D 09 21 sta $2109 ; 0F01 8D 09 21 ..! +000AFEr 1 60 rts ; 0F04 60 ` +000AFFr 1 ; ---------------------------------------------------------------------------- +000AFFr 1 AC 09 21 L0F05: ldy $2109 ; 0F05 AC 09 21 ..! +000B02r 1 C0 20 cpy #$20 ; 0F08 C0 20 . +000B04r 1 B0 09 bcs L0F15 ; 0F0A B0 09 .. +000B06r 1 B9 0A 21 lda $210A,y ; 0F0C B9 0A 21 ..! +000B09r 1 EE 09 21 inc $2109 ; 0F0F EE 09 21 ..! +000B0Cr 1 A2 00 ldx #$00 ; 0F12 A2 00 .. +000B0Er 1 60 rts ; 0F14 60 ` +000B0Fr 1 ; ---------------------------------------------------------------------------- +000B0Fr 1 20 5C C2 L0F15: jsr InitForIO ; 0F15 20 5C C2 \. +000B12r 1 A9 0F lda #$0F ; 0F18 A9 0F .. +000B14r 1 85 03 sta r0H ; 0F1A 85 03 .. +000B16r 1 A9 6E lda #$6E ; 0F1C A9 6E .n +000B18r 1 85 02 sta r0L ; 0F1E 85 02 .. +000B1Ar 1 20 rr rr jsr L0F74 ; 0F20 20 74 0F t. +000B1Dr 1 F0 04 beq L0F29 ; 0F23 F0 04 .. +000B1Fr 1 20 5F C2 jsr DoneWithIO ; 0F25 20 5F C2 _. +000B22r 1 60 rts ; 0F28 60 ` +000B23r 1 ; ---------------------------------------------------------------------------- +000B23r 1 20 AE FF L0F29: jsr UNLSN ; 0F29 20 AE FF .. +000B26r 1 AD 89 84 lda curDrive ; 0F2C AD 89 84 ... +000B29r 1 20 B4 FF jsr TALK ; 0F2F 20 B4 FF .. +000B2Cr 1 A9 FF lda #$FF ; 0F32 A9 FF .. +000B2Er 1 20 96 FF jsr TKSA ; 0F34 20 96 FF .. +000B31r 1 A0 00 ldy #$00 ; 0F37 A0 00 .. +000B33r 1 20 A5 FF L0F39: jsr ACPTR ; 0F39 20 A5 FF .. +000B36r 1 99 0A 21 sta $210A,y ; 0F3C 99 0A 21 ..! +000B39r 1 C8 iny ; 0F3F C8 . +000B3Ar 1 C0 20 cpy #$20 ; 0F40 C0 20 . +000B3Cr 1 90 F5 bcc L0F39 ; 0F42 90 F5 .. +000B3Er 1 20 AB FF jsr UNTLK ; 0F44 20 AB FF .. +000B41r 1 AD 89 84 lda curDrive ; 0F47 AD 89 84 ... +000B44r 1 20 B1 FF jsr LISTEN ; 0F4A 20 B1 FF .. +000B47r 1 A9 EF lda #$EF ; 0F4D A9 EF .. +000B49r 1 20 93 FF jsr SECOND ; 0F4F 20 93 FF .. +000B4Cr 1 20 AE FF jsr UNLSN ; 0F52 20 AE FF .. +000B4Fr 1 20 5F C2 jsr DoneWithIO ; 0F55 20 5F C2 _. +000B52r 1 A9 00 lda #$00 ; 0F58 A9 00 .. +000B54r 1 8D 09 21 sta $2109 ; 0F5A 8D 09 21 ..! +000B57r 1 18 clc ; 0F5D 18 . +000B58r 1 A9 20 lda #$20 ; 0F5E A9 20 . +000B5Ar 1 6D rr rr adc L0F71 ; 0F60 6D 71 0F mq. +000B5Dr 1 8D rr rr sta L0F71 ; 0F63 8D 71 0F .q. +000B60r 1 90 03 bcc L0F6B ; 0F66 90 03 .. +000B62r 1 EE rr rr inc L0F72 ; 0F68 EE 72 0F .r. +000B65r 1 B8 L0F6B: clv ; 0F6B B8 . +000B66r 1 50 97 bvc L0F05 ; 0F6C 50 97 P. +000B68r 1 4D 2D 52 eor $522D ; 0F6E 4D 2D 52 M-R +000B6Br 1 00 L0F71: brk ; 0F71 00 . +000B6Cr 1 00 L0F72: brk ; 0F72 00 . +000B6Dr 1 20 .byte $20 ; 0F73 20 +000B6Er 1 A9 00 L0F74: lda #$00 ; 0F74 A9 00 .. +000B70r 1 85 90 sta STATUS ; 0F76 85 90 .. +000B72r 1 AD 89 84 lda curDrive ; 0F78 AD 89 84 ... +000B75r 1 20 B1 FF jsr LISTEN ; 0F7B 20 B1 FF .. +000B78r 1 24 90 bit STATUS ; 0F7E 24 90 $. +000B7Ar 1 30 18 bmi L0F9A ; 0F80 30 18 0. +000B7Cr 1 A9 FF lda #$FF ; 0F82 A9 FF .. +000B7Er 1 20 93 FF jsr SECOND ; 0F84 20 93 FF .. +000B81r 1 24 90 bit STATUS ; 0F87 24 90 $. +000B83r 1 30 0F bmi L0F9A ; 0F89 30 0F 0. +000B85r 1 A0 00 ldy #$00 ; 0F8B A0 00 .. +000B87r 1 B1 02 L0F8D: lda (r0L),y ; 0F8D B1 02 .. +000B89r 1 20 A8 FF jsr CIOUT ; 0F8F 20 A8 FF .. +000B8Cr 1 C8 iny ; 0F92 C8 . +000B8Dr 1 C0 06 cpy #$06 ; 0F93 C0 06 .. +000B8Fr 1 90 F6 bcc L0F8D ; 0F95 90 F6 .. +000B91r 1 A2 00 ldx #$00 ; 0F97 A2 00 .. +000B93r 1 60 rts ; 0F99 60 ` +000B94r 1 ; ---------------------------------------------------------------------------- +000B94r 1 20 AE FF L0F9A: jsr UNLSN ; 0F9A 20 AE FF .. +000B97r 1 A2 0D ldx #$0D ; 0F9D A2 0D .. +000B99r 1 60 rts ; 0F9F 60 ` +000B9Ar 1 ; ---------------------------------------------------------------------------- +000B9Ar 1 A9 00 L0FA0: lda #$00 ; 0FA0 A9 00 .. +000B9Cr 1 8D 8D 84 sta NUMDRV ; 0FA2 8D 8D 84 ... +000B9Fr 1 A0 01 ldy #$01 ; 0FA5 A0 01 .. +000BA1r 1 B9 8E 84 L0FA7: lda driveType,y ; 0FA7 B9 8E 84 ... +000BA4r 1 F0 03 beq L0FAF ; 0FAA F0 03 .. +000BA6r 1 EE 8D 84 inc NUMDRV ; 0FAC EE 8D 84 ... +000BA9r 1 88 L0FAF: dey ; 0FAF 88 . +000BAAr 1 10 F5 bpl L0FA7 ; 0FB0 10 F5 .. +000BACr 1 60 rts ; 0FB2 60 ` +000BADr 1 ; ---------------------------------------------------------------------------- +000BADr 1 20 5C C2 L0FB3: jsr InitForIO ; 0FB3 20 5C C2 \. +000BB0r 1 A9 00 lda #$00 ; 0FB6 A9 00 .. +000BB2r 1 8D C3 88 sta ramExpSize ; 0FB8 8D C3 88 ... +000BB5r 1 A9 02 lda #$02 ; 0FBB A9 02 .. +000BB7r 1 8D 02 21 sta $2102 ; 0FBD 8D 02 21 ..! +000BBAr 1 AD 00 DF lda EXP_BASE ; 0FC0 AD 00 DF ... +000BBDr 1 29 10 and #$10 ; 0FC3 29 10 ). +000BBFr 1 F0 05 beq L0FCC ; 0FC5 F0 05 .. +000BC1r 1 A9 20 lda #$20 ; 0FC7 A9 20 . +000BC3r 1 8D 02 21 sta $2102 ; 0FC9 8D 02 21 ..! +000BC6r 1 AD 00 DF L0FCC: lda EXP_BASE ; 0FCC AD 00 DF ... +000BC9r 1 29 E0 and #$E0 ; 0FCF 29 E0 ). +000BCBr 1 D0 3A bne L100D ; 0FD1 D0 3A .: +000BCDr 1 A9 55 lda #$55 ; 0FD3 A9 55 .U +000BCFr 1 8D 02 DF sta $DF02 ; 0FD5 8D 02 DF ... +000BD2r 1 CD 02 DF cmp $DF02 ; 0FD8 CD 02 DF ... +000BD5r 1 D0 30 bne L100D ; 0FDB D0 30 .0 +000BD7r 1 A9 AA lda #$AA ; 0FDD A9 AA .. +000BD9r 1 8D 02 DF sta $DF02 ; 0FDF 8D 02 DF ... +000BDCr 1 A0 00 ldy #$00 ; 0FE2 A0 00 .. +000BDEr 1 88 L0FE4: dey ; 0FE4 88 . +000BDFr 1 D0 FD bne L0FE4 ; 0FE5 D0 FD .. +000BE1r 1 CD 02 DF cmp $DF02 ; 0FE7 CD 02 DF ... +000BE4r 1 D0 21 bne L100D ; 0FEA D0 21 .! +000BE6r 1 A9 01 lda #$01 ; 0FEC A9 01 .. +000BE8r 1 8D C3 88 sta ramExpSize ; 0FEE 8D C3 88 ... +000BEBr 1 A9 00 lda #$00 ; 0FF1 A9 00 .. +000BEDr 1 85 08 sta r3L ; 0FF3 85 08 .. +000BEFr 1 20 rr rr L0FF5: jsr L1010 ; 0FF5 20 10 10 .. +000BF2r 1 90 10 bcc L100A ; 0FF8 90 10 .. +000BF4r 1 AD C3 88 lda ramExpSize ; 0FFA AD C3 88 ... +000BF7r 1 CD 02 21 cmp $2102 ; 0FFD CD 02 21 ..! +000BFAr 1 F0 0B beq L100D ; 1000 F0 0B .. +000BFCr 1 EE C3 88 inc ramExpSize ; 1002 EE C3 88 ... +000BFFr 1 E6 08 inc r3L ; 1005 E6 08 .. +000C01r 1 B8 clv ; 1007 B8 . +000C02r 1 50 EB bvc L0FF5 ; 1008 50 EB P. +000C04r 1 CE C3 88 L100A: dec ramExpSize ; 100A CE C3 88 ... +000C07r 1 4C 5F C2 L100D: jmp DoneWithIO ; 100D 4C 5F C2 L_. +000C0Ar 1 ; ---------------------------------------------------------------------------- +000C0Ar 1 A9 20 L1010: lda #$20 ; 1010 A9 20 . +000C0Cr 1 85 03 sta r0H ; 1012 85 03 .. +000C0Er 1 A9 FA lda #$FA ; 1014 A9 FA .. +000C10r 1 85 02 sta r0L ; 1016 85 02 .. +000C12r 1 A9 00 lda #$00 ; 1018 A9 00 .. +000C14r 1 85 04 sta r1L ; 101A 85 04 .. +000C16r 1 85 05 sta r1H ; 101C 85 05 .. +000C18r 1 A9 00 lda #$00 ; 101E A9 00 .. +000C1Ar 1 85 07 sta r2H ; 1020 85 07 .. +000C1Cr 1 A9 08 lda #$08 ; 1022 A9 08 .. +000C1Er 1 85 06 sta r2L ; 1024 85 06 .. +000C20r 1 20 CB C2 jsr FetchRAM ; 1026 20 CB C2 .. +000C23r 1 A9 10 lda #$10 ; 1029 A9 10 .. +000C25r 1 85 03 sta r0H ; 102B 85 03 .. +000C27r 1 A9 79 lda #$79 ; 102D A9 79 .y +000C29r 1 85 02 sta r0L ; 102F 85 02 .. +000C2Br 1 20 C8 C2 jsr StashRAM ; 1031 20 C8 C2 .. +000C2Er 1 A9 20 lda #$20 ; 1034 A9 20 . +000C30r 1 85 03 sta r0H ; 1036 85 03 .. +000C32r 1 A9 EA lda #$EA ; 1038 A9 EA .. +000C34r 1 85 02 sta r0L ; 103A 85 02 .. +000C36r 1 20 CB C2 jsr FetchRAM ; 103C 20 CB C2 .. +000C39r 1 A5 08 lda r3L ; 103F A5 08 .. +000C3Br 1 48 pha ; 1041 48 H +000C3Cr 1 A9 00 lda #$00 ; 1042 A9 00 .. +000C3Er 1 85 08 sta r3L ; 1044 85 08 .. +000C40r 1 A9 20 lda #$20 ; 1046 A9 20 . +000C42r 1 85 03 sta r0H ; 1048 85 03 .. +000C44r 1 A9 F2 lda #$F2 ; 104A A9 F2 .. +000C46r 1 85 02 sta r0L ; 104C 85 02 .. +000C48r 1 20 CB C2 jsr FetchRAM ; 104E 20 CB C2 .. +000C4Br 1 68 pla ; 1051 68 h +000C4Cr 1 85 08 sta r3L ; 1052 85 08 .. +000C4Er 1 A9 20 lda #$20 ; 1054 A9 20 . +000C50r 1 85 03 sta r0H ; 1056 85 03 .. +000C52r 1 A9 FA lda #$FA ; 1058 A9 FA .. +000C54r 1 85 02 sta r0L ; 105A 85 02 .. +000C56r 1 20 C8 C2 jsr StashRAM ; 105C 20 C8 C2 .. +000C59r 1 A0 07 ldy #$07 ; 105F A0 07 .. +000C5Br 1 B9 rr rr L1061: lda L1079,y ; 1061 B9 79 10 .y. +000C5Er 1 D9 EA 20 cmp $20EA,y ; 1064 D9 EA 20 .. +000C61r 1 D0 0E bne L1077 ; 1067 D0 0E .. +000C63r 1 A6 08 ldx r3L ; 1069 A6 08 .. +000C65r 1 F0 05 beq L1072 ; 106B F0 05 .. +000C67r 1 D9 F2 20 cmp $20F2,y ; 106D D9 F2 20 .. +000C6Ar 1 F0 05 beq L1077 ; 1070 F0 05 .. +000C6Cr 1 88 L1072: dey ; 1072 88 . +000C6Dr 1 10 EC bpl L1061 ; 1073 10 EC .. +000C6Fr 1 38 sec ; 1075 38 8 +000C70r 1 60 rts ; 1076 60 ` +000C71r 1 ; ---------------------------------------------------------------------------- +000C71r 1 18 L1077: clc ; 1077 18 . +000C72r 1 60 rts ; 1078 60 ` +000C73r 1 ; ---------------------------------------------------------------------------- +000C73r 1 52 41 4D 43 L1079: .byte "RAMCheck" ; 1079 52 41 4D 43 68 65 63 6B RAMCheck +000C77r 1 68 65 63 6B +000C7Br 1 ; ---------------------------------------------------------------------------- +000C7Br 1 AD C4 88 L1081: lda sysRAMFlg ; 1081 AD C4 88 ... +000C7Er 1 29 20 and #$20 ; 1084 29 20 ) +000C80r 1 F0 0C beq L1094 ; 1086 F0 0C .. +000C82r 1 AD 04 21 lda $2104 ; 1088 AD 04 21 ..! +000C85r 1 20 rr rr jsr L073E ; 108B 20 3E 07 >. +000C88r 1 20 rr rr jsr L1095 ; 108E 20 95 10 .. +000C8Br 1 20 rr rr jsr L1145 ; 1091 20 45 11 E. +000C8Er 1 60 L1094: rts ; 1094 60 ` +000C8Fr 1 ; ---------------------------------------------------------------------------- +000C8Fr 1 20 rr rr L1095: jsr L113A ; 1095 20 3A 11 :. +000C92r 1 A9 84 lda #$84 ; 1098 A9 84 .. +000C94r 1 85 03 sta r0H ; 109A 85 03 .. +000C96r 1 A9 79 lda #$79 ; 109C A9 79 .y +000C98r 1 85 05 sta r1H ; 109E 85 05 .. +000C9Ar 1 A9 05 lda #$05 ; 10A0 A9 05 .. +000C9Cr 1 85 07 sta r2H ; 10A2 85 07 .. +000C9Er 1 20 C8 C2 jsr StashRAM ; 10A4 20 C8 C2 .. +000CA1r 1 2C C4 88 bit sysRAMFlg ; 10A7 2C C4 88 ,.. +000CA4r 1 70 16 bvs L10C2 ; 10AA 70 16 p. +000CA6r 1 20 rr rr jsr L113A ; 10AC 20 3A 11 :. +000CA9r 1 A9 90 lda #$90 ; 10AF A9 90 .. +000CABr 1 85 03 sta r0H ; 10B1 85 03 .. +000CADr 1 A9 83 lda #$83 ; 10B3 A9 83 .. +000CAFr 1 85 05 sta r1H ; 10B5 85 05 .. +000CB1r 1 A9 0D lda #$0D ; 10B7 A9 0D .. +000CB3r 1 85 07 sta r2H ; 10B9 85 07 .. +000CB5r 1 A9 80 lda #$80 ; 10BB A9 80 .. +000CB7r 1 85 06 sta r2L ; 10BD 85 06 .. +000CB9r 1 20 C8 C2 jsr StashRAM ; 10BF 20 C8 C2 .. +000CBCr 1 20 rr rr L10C2: jsr L113A ; 10C2 20 3A 11 :. +000CBFr 1 A9 80 lda #$80 ; 10C5 A9 80 .. +000CC1r 1 85 02 sta r0L ; 10C7 85 02 .. +000CC3r 1 85 06 sta r2L ; 10C9 85 06 .. +000CC5r 1 A9 9D lda #$9D ; 10CB A9 9D .. +000CC7r 1 85 03 sta r0H ; 10CD 85 03 .. +000CC9r 1 A9 B9 lda #$B9 ; 10CF A9 B9 .. +000CCBr 1 85 05 sta r1H ; 10D1 85 05 .. +000CCDr 1 A9 00 lda #$00 ; 10D3 A9 00 .. +000CCFr 1 85 08 sta r3L ; 10D5 85 08 .. +000CD1r 1 A9 02 lda #$02 ; 10D7 A9 02 .. +000CD3r 1 85 07 sta r2H ; 10D9 85 07 .. +000CD5r 1 20 C8 C2 jsr StashRAM ; 10DB 20 C8 C2 .. +000CD8r 1 20 rr rr jsr L113A ; 10DE 20 3A 11 :. +000CDBr 1 A9 BF lda #$BF ; 10E1 A9 BF .. +000CDDr 1 85 03 sta r0H ; 10E3 85 03 .. +000CDFr 1 A9 40 lda #$40 ; 10E5 A9 40 .@ +000CE1r 1 85 02 sta r0L ; 10E7 85 02 .. +000CE3r 1 A9 BB lda #$BB ; 10E9 A9 BB .. +000CE5r 1 85 05 sta r1H ; 10EB 85 05 .. +000CE7r 1 A9 80 lda #$80 ; 10ED A9 80 .. +000CE9r 1 85 04 sta r1L ; 10EF 85 04 .. +000CEBr 1 A9 10 lda #$10 ; 10F1 A9 10 .. +000CEDr 1 85 07 sta r2H ; 10F3 85 07 .. +000CEFr 1 A9 C0 lda #$C0 ; 10F5 A9 C0 .. +000CF1r 1 85 06 sta r2L ; 10F7 85 06 .. +000CF3r 1 20 C8 C2 jsr StashRAM ; 10F9 20 C8 C2 .. +000CF6r 1 A9 30 lda #$30 ; 10FC A9 30 .0 +000CF8r 1 85 0A sta r4L ; 10FE 85 0A .. +000CFAr 1 A9 D0 lda #$D0 ; 1100 A9 D0 .. +000CFCr 1 85 0D sta r5H ; 1102 85 0D .. +000CFEr 1 A9 00 lda #$00 ; 1104 A9 00 .. +000D00r 1 85 0C sta r5L ; 1106 85 0C .. +000D02r 1 A9 80 lda #$80 ; 1108 A9 80 .. +000D04r 1 85 03 sta r0H ; 110A 85 03 .. +000D06r 1 A9 00 lda #$00 ; 110C A9 00 .. +000D08r 1 85 02 sta r0L ; 110E 85 02 .. +000D0Ar 1 A9 CC lda #$CC ; 1110 A9 CC .. +000D0Cr 1 85 05 sta r1H ; 1112 85 05 .. +000D0Er 1 A9 40 lda #$40 ; 1114 A9 40 .@ +000D10r 1 85 04 sta r1L ; 1116 85 04 .. +000D12r 1 A9 01 lda #$01 ; 1118 A9 01 .. +000D14r 1 85 07 sta r2H ; 111A 85 07 .. +000D16r 1 A9 00 lda #$00 ; 111C A9 00 .. +000D18r 1 85 06 sta r2L ; 111E 85 06 .. +000D1Ar 1 A9 00 lda #$00 ; 1120 A9 00 .. +000D1Cr 1 85 08 sta r3L ; 1122 85 08 .. +000D1Er 1 A0 00 L1124: ldy #$00 ; 1124 A0 00 .. +000D20r 1 B1 0C L1126: lda (r5L),y ; 1126 B1 0C .. +000D22r 1 99 00 80 sta diskBlkBuf,y ; 1128 99 00 80 ... +000D25r 1 C8 iny ; 112B C8 . +000D26r 1 D0 F8 bne L1126 ; 112C D0 F8 .. +000D28r 1 20 C8 C2 jsr StashRAM ; 112E 20 C8 C2 .. +000D2Br 1 E6 0D inc r5H ; 1131 E6 0D .. +000D2Dr 1 E6 05 inc r1H ; 1133 E6 05 .. +000D2Fr 1 C6 0A dec r4L ; 1135 C6 0A .. +000D31r 1 D0 EB bne L1124 ; 1137 D0 EB .. +000D33r 1 60 rts ; 1139 60 ` +000D34r 1 ; ---------------------------------------------------------------------------- +000D34r 1 A9 00 L113A: lda #$00 ; 113A A9 00 .. +000D36r 1 85 02 sta r0L ; 113C 85 02 .. +000D38r 1 85 04 sta r1L ; 113E 85 04 .. +000D3Ar 1 85 06 sta r2L ; 1140 85 06 .. +000D3Cr 1 85 08 sta r3L ; 1142 85 08 .. +000D3Er 1 60 rts ; 1144 60 ` +000D3Fr 1 ; ---------------------------------------------------------------------------- +000D3Fr 1 20 rr rr L1145: jsr L113A ; 1145 20 3A 11 :. +000D42r 1 A9 7E lda #$7E ; 1148 A9 7E .~ +000D44r 1 85 05 sta r1H ; 114A 85 05 .. +000D46r 1 A9 05 lda #$05 ; 114C A9 05 .. +000D48r 1 85 07 sta r2H ; 114E 85 07 .. +000D4Ar 1 A9 11 lda #$11 ; 1150 A9 11 .. +000D4Cr 1 85 03 sta r0H ; 1152 85 03 .. +000D4Er 1 A9 5B lda #$5B ; 1154 A9 5B .[ +000D50r 1 85 02 sta r0L ; 1156 85 02 .. +000D52r 1 4C C8 C2 jmp StashRAM ; 1158 4C C8 C2 L.. +000D55r 1 ; ---------------------------------------------------------------------------- +000D55r 1 78 sei ; 115B 78 x +000D56r 1 D8 cld ; 115C D8 . +000D57r 1 A2 FF ldx #$FF ; 115D A2 FF .. +000D59r 1 9A txs ; 115F 9A . +000D5Ar 1 A9 30 lda #$30 ; 1160 A9 30 .0 +000D5Cr 1 85 01 sta CPU_DATA ; 1162 85 01 .. +000D5Er 1 A9 90 lda #$90 ; 1164 A9 90 .. +000D60r 1 85 03 sta r0H ; 1166 85 03 .. +000D62r 1 A9 00 lda #$00 ; 1168 A9 00 .. +000D64r 1 85 02 sta r0L ; 116A 85 02 .. +000D66r 1 A9 83 lda #$83 ; 116C A9 83 .. +000D68r 1 85 05 sta r1H ; 116E 85 05 .. +000D6Ar 1 A9 00 lda #$00 ; 1170 A9 00 .. +000D6Cr 1 85 04 sta r1L ; 1172 85 04 .. +000D6Er 1 A9 0D lda #$0D ; 1174 A9 0D .. +000D70r 1 85 07 sta r2H ; 1176 85 07 .. +000D72r 1 A9 80 lda #$80 ; 1178 A9 80 .. +000D74r 1 85 06 sta r2L ; 117A 85 06 .. +000D76r 1 20 16 62 jsr L6216 ; 117C 20 16 62 .b +000D79r 1 A9 9D lda #$9D ; 117F A9 9D .. +000D7Br 1 85 03 sta r0H ; 1181 85 03 .. +000D7Dr 1 A9 80 lda #$80 ; 1183 A9 80 .. +000D7Fr 1 85 02 sta r0L ; 1185 85 02 .. +000D81r 1 A9 B9 lda #$B9 ; 1187 A9 B9 .. +000D83r 1 85 05 sta r1H ; 1189 85 05 .. +000D85r 1 A9 00 lda #$00 ; 118B A9 00 .. +000D87r 1 85 04 sta r1L ; 118D 85 04 .. +000D89r 1 A9 02 lda #$02 ; 118F A9 02 .. +000D8Br 1 85 07 sta r2H ; 1191 85 07 .. +000D8Dr 1 A9 80 lda #$80 ; 1193 A9 80 .. +000D8Fr 1 85 06 sta r2L ; 1195 85 06 .. +000D91r 1 20 16 62 jsr L6216 ; 1197 20 16 62 .b +000D94r 1 A9 BF lda #$BF ; 119A A9 BF .. +000D96r 1 85 03 sta r0H ; 119C 85 03 .. +000D98r 1 A9 40 lda #$40 ; 119E A9 40 .@ +000D9Ar 1 85 02 sta r0L ; 11A0 85 02 .. +000D9Cr 1 A9 BB lda #$BB ; 11A2 A9 BB .. +000D9Er 1 85 05 sta r1H ; 11A4 85 05 .. +000DA0r 1 A9 80 lda #$80 ; 11A6 A9 80 .. +000DA2r 1 85 04 sta r1L ; 11A8 85 04 .. +000DA4r 1 A9 00 lda #$00 ; 11AA A9 00 .. +000DA6r 1 85 07 sta r2H ; 11AC 85 07 .. +000DA8r 1 A9 C0 lda #$C0 ; 11AE A9 C0 .. +000DAAr 1 85 06 sta r2L ; 11B0 85 06 .. +000DACr 1 20 16 62 jsr L6216 ; 11B2 20 16 62 .b +000DAFr 1 A9 C0 lda #$C0 ; 11B5 A9 C0 .. +000DB1r 1 85 03 sta r0H ; 11B7 85 03 .. +000DB3r 1 A9 80 lda #$80 ; 11B9 A9 80 .. +000DB5r 1 85 02 sta r0L ; 11BB 85 02 .. +000DB7r 1 A9 BC lda #$BC ; 11BD A9 BC .. +000DB9r 1 85 05 sta r1H ; 11BF 85 05 .. +000DBBr 1 A9 C0 lda #$C0 ; 11C1 A9 C0 .. +000DBDr 1 85 04 sta r1L ; 11C3 85 04 .. +000DBFr 1 A9 0F lda #$0F ; 11C5 A9 0F .. +000DC1r 1 85 07 sta r2H ; 11C7 85 07 .. +000DC3r 1 A9 80 lda #$80 ; 11C9 A9 80 .. +000DC5r 1 85 06 sta r2L ; 11CB 85 06 .. +000DC7r 1 20 16 62 jsr L6216 ; 11CD 20 16 62 .b +000DCAr 1 A9 30 lda #$30 ; 11D0 A9 30 .0 +000DCCr 1 85 0A sta r4L ; 11D2 85 0A .. +000DCEr 1 A9 D0 lda #$D0 ; 11D4 A9 D0 .. +000DD0r 1 85 0D sta r5H ; 11D6 85 0D .. +000DD2r 1 A9 00 lda #$00 ; 11D8 A9 00 .. +000DD4r 1 85 0C sta r5L ; 11DA 85 0C .. +000DD6r 1 A9 80 lda #$80 ; 11DC A9 80 .. +000DD8r 1 85 03 sta r0H ; 11DE 85 03 .. +000DDAr 1 A9 00 lda #$00 ; 11E0 A9 00 .. +000DDCr 1 85 02 sta r0L ; 11E2 85 02 .. +000DDEr 1 A9 CC lda #$CC ; 11E4 A9 CC .. +000DE0r 1 85 05 sta r1H ; 11E6 85 05 .. +000DE2r 1 A9 40 lda #$40 ; 11E8 A9 40 .@ +000DE4r 1 85 04 sta r1L ; 11EA 85 04 .. +000DE6r 1 A9 01 lda #$01 ; 11EC A9 01 .. +000DE8r 1 85 07 sta r2H ; 11EE 85 07 .. +000DEAr 1 A9 00 lda #$00 ; 11F0 A9 00 .. +000DECr 1 85 06 sta r2L ; 11F2 85 06 .. +000DEEr 1 20 16 62 L11F4: jsr L6216 ; 11F4 20 16 62 .b +000DF1r 1 A0 00 ldy #$00 ; 11F7 A0 00 .. +000DF3r 1 B9 00 80 L11F9: lda diskBlkBuf,y ; 11F9 B9 00 80 ... +000DF6r 1 91 0C sta (r5L),y ; 11FC 91 0C .. +000DF8r 1 C8 iny ; 11FE C8 . +000DF9r 1 D0 F8 bne L11F9 ; 11FF D0 F8 .. +000DFBr 1 E6 0D inc r5H ; 1201 E6 0D .. +000DFDr 1 E6 05 inc r1H ; 1203 E6 05 .. +000DFFr 1 C6 0A dec r4L ; 1205 C6 0A .. +000E01r 1 D0 EB bne L11F4 ; 1207 D0 EB .. +000E03r 1 20 B4 C1 jsr i_FillRam ; 1209 20 B4 C1 .. +000E06r 1 00 brk ; 120C 00 . +000E07r 1 05 00 ora CPU_DDR ; 120D 05 00 .. +000E09r 1 84 00 sty CPU_DDR ; 120F 84 00 .. +000E0Br 1 A9 00 lda #$00 ; 1211 A9 00 .. +000E0Dr 1 85 02 sta r0L ; 1213 85 02 .. +000E0Fr 1 A9 A0 lda #$A0 ; 1215 A9 A0 .. +000E11r 1 85 03 sta r0H ; 1217 85 03 .. +000E13r 1 A2 7D ldx #$7D ; 1219 A2 7D .} +000E15r 1 A0 3F L121B: ldy #$3F ; 121B A0 3F .? +000E17r 1 A9 55 L121D: lda #$55 ; 121D A9 55 .U +000E19r 1 91 02 sta (r0L),y ; 121F 91 02 .. +000E1Br 1 88 dey ; 1221 88 . +000E1Cr 1 A9 AA lda #$AA ; 1222 A9 AA .. +000E1Er 1 91 02 sta (r0L),y ; 1224 91 02 .. +000E20r 1 88 dey ; 1226 88 . +000E21r 1 10 F4 bpl L121D ; 1227 10 F4 .. +000E23r 1 A5 02 lda r0L ; 1229 A5 02 .. +000E25r 1 18 clc ; 122B 18 . +000E26r 1 69 40 adc #$40 ; 122C 69 40 i@ +000E28r 1 85 02 sta r0L ; 122E 85 02 .. +000E2Ar 1 90 02 bcc L1234 ; 1230 90 02 .. +000E2Cr 1 E6 03 inc r0H ; 1232 E6 03 .. +000E2Er 1 CA L1234: dex ; 1234 CA . +000E2Fr 1 D0 E4 bne L121B ; 1235 D0 E4 .. +000E31r 1 20 71 C2 jsr FirstInit ; 1237 20 71 C2 q. +000E34r 1 A9 FF lda #$FF ; 123A A9 FF .. +000E36r 1 8D C5 88 sta firstBoot ; 123C 8D C5 88 ... +000E39r 1 20 80 FE jsr MOUSE_BASE ; 123F 20 80 FE .. +000E3Cr 1 A9 88 lda #$88 ; 1242 A9 88 .. +000E3Er 1 85 03 sta r0H ; 1244 85 03 .. +000E40r 1 A9 C3 lda #$C3 ; 1246 A9 C3 .. +000E42r 1 85 02 sta r0L ; 1248 85 02 .. +000E44r 1 A9 7D lda #$7D ; 124A A9 7D .} +000E46r 1 85 05 sta r1H ; 124C 85 05 .. +000E48r 1 A9 C3 lda #$C3 ; 124E A9 C3 .. +000E4Ar 1 85 04 sta r1L ; 1250 85 04 .. +000E4Cr 1 A9 00 lda #$00 ; 1252 A9 00 .. +000E4Er 1 85 07 sta r2H ; 1254 85 07 .. +000E50r 1 A9 02 lda #$02 ; 1256 A9 02 .. +000E52r 1 85 06 sta r2L ; 1258 85 06 .. +000E54r 1 20 16 62 jsr L6216 ; 125A 20 16 62 .b +000E57r 1 AD 12 C0 lda sysFlgCopy ; 125D AD 12 C0 ... +000E5Ar 1 8D C4 88 sta sysRAMFlg ; 1260 8D C4 88 ... +000E5Dr 1 A9 85 lda #$85 ; 1263 A9 85 .. +000E5Fr 1 85 03 sta r0H ; 1265 85 03 .. +000E61r 1 A9 16 lda #$16 ; 1267 A9 16 .. +000E63r 1 85 02 sta r0L ; 1269 85 02 .. +000E65r 1 A9 7A lda #$7A ; 126B A9 7A .z +000E67r 1 85 05 sta r1H ; 126D 85 05 .. +000E69r 1 A9 16 lda #$16 ; 126F A9 16 .. +000E6Br 1 85 04 sta r1L ; 1271 85 04 .. +000E6Dr 1 A9 00 lda #$00 ; 1273 A9 00 .. +000E6Fr 1 85 07 sta r2H ; 1275 85 07 .. +000E71r 1 A9 03 lda #$03 ; 1277 A9 03 .. +000E73r 1 85 06 sta r2L ; 1279 85 06 .. +000E75r 1 A9 00 lda #$00 ; 127B A9 00 .. +000E77r 1 85 08 sta r3L ; 127D 85 08 .. +000E79r 1 20 CB C2 jsr FetchRAM ; 127F 20 CB C2 .. +000E7Cr 1 AD 08 DC lda $DC08 ; 1282 AD 08 DC ... +000E7Fr 1 8D 08 DC sta $DC08 ; 1285 8D 08 DC ... +000E82r 1 A9 84 lda #$84 ; 1288 A9 84 .. +000E84r 1 85 03 sta r0H ; 128A 85 03 .. +000E86r 1 A9 8E lda #$8E ; 128C A9 8E .. +000E88r 1 85 02 sta r0L ; 128E 85 02 .. +000E8Ar 1 A9 79 lda #$79 ; 1290 A9 79 .y +000E8Cr 1 85 05 sta r1H ; 1292 85 05 .. +000E8Er 1 A9 8E lda #$8E ; 1294 A9 8E .. +000E90r 1 85 04 sta r1L ; 1296 85 04 .. +000E92r 1 A9 00 lda #$00 ; 1298 A9 00 .. +000E94r 1 85 07 sta r2H ; 129A 85 07 .. +000E96r 1 A9 04 lda #$04 ; 129C A9 04 .. +000E98r 1 85 06 sta r2L ; 129E 85 06 .. +000E9Ar 1 20 CB C2 jsr FetchRAM ; 12A0 20 CB C2 .. +000E9Dr 1 A9 88 lda #$88 ; 12A3 A9 88 .. +000E9Fr 1 85 03 sta r0H ; 12A5 85 03 .. +000EA1r 1 A9 C7 lda #$C7 ; 12A7 A9 C7 .. +000EA3r 1 85 02 sta r0L ; 12A9 85 02 .. +000EA5r 1 A9 7D lda #$7D ; 12AB A9 7D .} +000EA7r 1 85 05 sta r1H ; 12AD 85 05 .. +000EA9r 1 A9 C7 lda #$C7 ; 12AF A9 C7 .. +000EABr 1 85 04 sta r1L ; 12B1 85 04 .. +000EADr 1 A9 00 lda #$00 ; 12B3 A9 00 .. +000EAFr 1 85 07 sta r2H ; 12B5 85 07 .. +000EB1r 1 A9 04 lda #$04 ; 12B7 A9 04 .. +000EB3r 1 85 06 sta r2L ; 12B9 85 06 .. +000EB5r 1 20 CB C2 jsr FetchRAM ; 12BB 20 CB C2 .. +000EB8r 1 A9 84 lda #$84 ; 12BE A9 84 .. +000EBAr 1 85 03 sta r0H ; 12C0 85 03 .. +000EBCr 1 A9 65 lda #$65 ; 12C2 A9 65 .e +000EBEr 1 85 02 sta r0L ; 12C4 85 02 .. +000EC0r 1 A9 79 lda #$79 ; 12C6 A9 79 .y +000EC2r 1 85 05 sta r1H ; 12C8 85 05 .. +000EC4r 1 A9 65 lda #$65 ; 12CA A9 65 .e +000EC6r 1 85 04 sta r1L ; 12CC 85 04 .. +000EC8r 1 A9 00 lda #$00 ; 12CE A9 00 .. +000ECAr 1 85 07 sta r2H ; 12D0 85 07 .. +000ECCr 1 A9 11 lda #$11 ; 12D2 A9 11 .. +000ECEr 1 85 06 sta r2L ; 12D4 85 06 .. +000ED0r 1 20 CB C2 jsr FetchRAM ; 12D6 20 CB C2 .. +000ED3r 1 A9 88 lda #$88 ; 12D9 A9 88 .. +000ED5r 1 85 03 sta r0H ; 12DB 85 03 .. +000ED7r 1 A9 CB lda #$CB ; 12DD A9 CB .. +000ED9r 1 85 02 sta r0L ; 12DF 85 02 .. +000EDBr 1 A9 7D lda #$7D ; 12E1 A9 7D .} +000EDDr 1 85 05 sta r1H ; 12E3 85 05 .. +000EDFr 1 A9 CB lda #$CB ; 12E5 A9 CB .. +000EE1r 1 85 04 sta r1L ; 12E7 85 04 .. +000EE3r 1 A9 00 lda #$00 ; 12E9 A9 00 .. +000EE5r 1 85 07 sta r2H ; 12EB 85 07 .. +000EE7r 1 A9 11 lda #$11 ; 12ED A9 11 .. +000EE9r 1 85 06 sta r2L ; 12EF 85 06 .. +000EEBr 1 20 CB C2 jsr FetchRAM ; 12F1 20 CB C2 .. +000EEEr 1 A9 84 lda #$84 ; 12F4 A9 84 .. +000EF0r 1 85 03 sta r0H ; 12F6 85 03 .. +000EF2r 1 A9 89 lda #$89 ; 12F8 A9 89 .. +000EF4r 1 85 02 sta r0L ; 12FA 85 02 .. +000EF6r 1 A9 79 lda #$79 ; 12FC A9 79 .y +000EF8r 1 85 05 sta r1H ; 12FE 85 05 .. +000EFAr 1 A9 89 lda #$89 ; 1300 A9 89 .. +000EFCr 1 85 04 sta r1L ; 1302 85 04 .. +000EFEr 1 A9 00 lda #$00 ; 1304 A9 00 .. +000F00r 1 85 07 sta r2H ; 1306 85 07 .. +000F02r 1 A9 01 lda #$01 ; 1308 A9 01 .. +000F04r 1 85 06 sta r2L ; 130A 85 06 .. +000F06r 1 20 CB C2 jsr FetchRAM ; 130C 20 CB C2 .. +000F09r 1 20 5C C2 jsr InitForIO ; 130F 20 5C C2 \. +000F0Cr 1 A9 04 lda #$04 ; 1312 A9 04 .. +000F0Er 1 85 02 sta r0L ; 1314 85 02 .. +000F10r 1 A0 00 L1316: ldy #$00 ; 1316 A0 00 .. +000F12r 1 A2 00 ldx #$00 ; 1318 A2 00 .. +000F14r 1 88 L131A: dey ; 131A 88 . +000F15r 1 D0 FD bne L131A ; 131B D0 FD .. +000F17r 1 CA dex ; 131D CA . +000F18r 1 D0 FA bne L131A ; 131E D0 FA .. +000F1Ar 1 C6 02 dec r0L ; 1320 C6 02 .. +000F1Cr 1 D0 F2 bne L1316 ; 1322 D0 F2 .. +000F1Er 1 20 5F C2 jsr DoneWithIO ; 1324 20 5F C2 _. +000F21r 1 AD 89 84 lda curDrive ; 1327 AD 89 84 ... +000F24r 1 48 pha ; 132A 48 H +000F25r 1 A9 0B lda #$0B ; 132B A9 0B .. +000F27r 1 8D 89 84 sta curDrive ; 132D 8D 89 84 ... +000F2Ar 1 85 BA sta curDevice ; 1330 85 BA .. +000F2Cr 1 A9 00 lda #$00 ; 1332 A9 00 .. +000F2Er 1 8D 8D 84 sta NUMDRV ; 1334 8D 8D 84 ... +000F31r 1 85 BA sta curDevice ; 1337 85 BA .. +000F33r 1 A9 08 lda #$08 ; 1339 A9 08 .. +000F35r 1 8D 8C 84 sta interleave ; 133B 8D 8C 84 ... +000F38r 1 20 B0 C2 jsr SetDevice ; 133E 20 B0 C2 .. +000F3Br 1 A9 08 lda #$08 ; 1341 A9 08 .. +000F3Dr 1 8D 03 21 sta $2103 ; 1343 8D 03 21 ..! +000F40r 1 AC 03 21 L1346: ldy $2103 ; 1346 AC 03 21 ..! +000F43r 1 B9 86 84 lda $8486,y ; 1349 B9 86 84 ... +000F46r 1 F0 10 beq L135E ; 134C F0 10 .. +000F48r 1 C0 0A cpy #$0A ; 134E C0 0A .. +000F4Ar 1 B0 03 bcs L1355 ; 1350 B0 03 .. +000F4Cr 1 EE 8D 84 inc NUMDRV ; 1352 EE 8D 84 ... +000F4Fr 1 AD 03 21 L1355: lda $2103 ; 1355 AD 03 21 ..! +000F52r 1 20 B0 C2 jsr SetDevice ; 1358 20 B0 C2 .. +000F55r 1 20 E1 C1 jsr NewDisk ; 135B 20 E1 C1 .. +000F58r 1 EE 03 21 L135E: inc $2103 ; 135E EE 03 21 ..! +000F5Br 1 AD 03 21 lda $2103 ; 1361 AD 03 21 ..! +000F5Er 1 C9 0C cmp #$0C ; 1364 C9 0C .. +000F60r 1 90 DE bcc L1346 ; 1366 90 DE .. +000F62r 1 F0 DC beq L1346 ; 1368 F0 DC .. +000F64r 1 68 pla ; 136A 68 h +000F65r 1 20 B0 C2 jsr SetDevice ; 136B 20 B0 C2 .. +000F68r 1 4C 2C C2 jmp EnterDeskTop ; 136E 4C 2C C2 L,. +000F6Br 1 ; ---------------------------------------------------------------------------- +000F6Br 1 A0 91 ldy #$91 ; 1371 A0 91 .. +000F6Dr 1 A6 01 ldx CPU_DATA ; 1373 A6 01 .. +000F6Fr 1 A9 35 lda #$35 ; 1375 A9 35 .5 +000F71r 1 85 01 sta CPU_DATA ; 1377 85 01 .. +000F73r 1 A5 03 lda r0H ; 1379 A5 03 .. +000F75r 1 8D 03 DF sta $DF03 ; 137B 8D 03 DF ... +000F78r 1 A5 02 lda r0L ; 137E A5 02 .. +000F7Ar 1 8D 02 DF sta $DF02 ; 1380 8D 02 DF ... +000F7Dr 1 A5 05 lda r1H ; 1383 A5 05 .. +000F7Fr 1 8D 05 DF sta $DF05 ; 1385 8D 05 DF ... +000F82r 1 A5 04 lda r1L ; 1388 A5 04 .. +000F84r 1 8D 04 DF sta $DF04 ; 138A 8D 04 DF ... +000F87r 1 A9 00 lda #$00 ; 138D A9 00 .. +000F89r 1 8D 06 DF sta $DF06 ; 138F 8D 06 DF ... +000F8Cr 1 A5 07 lda r2H ; 1392 A5 07 .. +000F8Er 1 8D 08 DF sta $DF08 ; 1394 8D 08 DF ... +000F91r 1 A5 06 lda r2L ; 1397 A5 06 .. +000F93r 1 8D 07 DF sta $DF07 ; 1399 8D 07 DF ... +000F96r 1 A9 00 lda #$00 ; 139C A9 00 .. +000F98r 1 8D 09 DF sta $DF09 ; 139E 8D 09 DF ... +000F9Br 1 8D 0A DF sta $DF0A ; 13A1 8D 0A DF ... +000F9Er 1 8C 01 DF sty $DF01 ; 13A4 8C 01 DF ... +000FA1r 1 AD 00 DF L13A7: lda EXP_BASE ; 13A7 AD 00 DF ... +000FA4r 1 29 60 and #$60 ; 13AA 29 60 )` +000FA6r 1 F0 F9 beq L13A7 ; 13AC F0 F9 .. +000FA8r 1 86 01 stx CPU_DATA ; 13AE 86 01 .. +000FAAr 1 60 rts ; 13B0 60 ` +000FABr 1 ; ---------------------------------------------------------------------------- +000FABr 1 A2 .byte $A2 ; 13B1 A2 . +000FABr 1 diff --git a/_newconf/newconf/r0.o b/_newconf/newconf/r0.o new file mode 100644 index 0000000000000000000000000000000000000000..f43d9846e2d3fc0c5493a15e3a419ce44dcafd5d GIT binary patch literal 35375 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 literal 0 HcmV?d00001 diff --git a/_newconf/newconf/r0.prg b/_newconf/newconf/r0.prg new file mode 100644 index 0000000000000000000000000000000000000000..7127d6a6276385b752dd0349208c55a151b8ec69 GIT binary patch literal 3873 zcmd^Ce{3699Y5cl@6OJTbCNauV_({5!$ur47T%PLP)MGPb=aX?cN(0()w z#t<7$;;YWlE_Im%F%rm%aFy5Ps$@)RO_}OAZECk2djCPC0-ZEE)Q|ME|CEvN-O(q=Kn9S`?I6;H_Mkfbn zg{@l+L8bx6NszAwUD+U;RI(vLGP*lwGsATfB{B7JcP#Pdo&=Li5^E%%QOU*vo)w~l zvtY1QkYgPME~CNK^Q9Hj3OOZ{J+evXEQv-eF(V{oG9lBTCGV4G#6J~ePkUQt?-!Y8 z7Fodj+ZzR$y+a?^E1K^1p^`wJT)$S}tXf!``&z-0+?fLBG9#AGdrC&44+E3j6&z)E z(g2AUXp7ZEXRHYIEyYsF%Y{)`y>kVW>Urkrode(g{$L*=RNEJq<5A)eP=w;Jv1hEy^hCf=6MLfGDKL66v2N(nsv{ zaodi(N3I85#UKN!s~TPiUdNm7G{dU{(@lJZy~(AtQO#Ln0Nq(@Mo3T_v|8Y{|KSuoa{!m@8N!ZLm}tw-oZytjWa=Dr_|ui1#Wk z2yeaYKTjji7oaaZGa*cR_gDF@8Sh0<`X@)3u_z(JB{Yq<4TwBWH35i_DU>fbUxYUv z4@~B6NCzP7f&#Bi$p*I3pB#V|IDl(mV93?v15g78nqltdk#<9Eed3#Qb}H;?SvC5I zrDjD-%Bm4HD_LSzHKTedz`|LjBr>GAr2whR)A7`gDXfN+Rm@uGM%g_O#ai8UMsL+^ zO2wc3cvViEdE4xT^&LFmaCyJC2|}dUK^0P@*k4rCi4?n}mb#fj4yrL7EdqOa$=4`t&lJ(`e3N$? zo<<4z)SNv{04kOQ_TIeY>HI*i9-Q(1o|P*Unbn9@r(s7H&@MU+s#)T%MW_L3`#l}Y zBlaXJ0*p?uYv;tQSgKF`*|el+9=Ry-ENB}DMD@wsT*#CpCD6cg@NW009X(QMHcnWc zTF2{|JRC-~22rhYxk``Pp{^yAu>_Jq0}d$`ruOhnsJcnrg!Hb(La@>X|nX5g^b9IV28`Ru*cce8V)d4mRTgh zA~OJl`m~S)0@+d^chte_fjBxB7+Yc5Z1GYLl6Pj$$p{5sP{Ayd$8EM?HV3+emA=3F zf4!Uj<*Uv9jYG}8ueRKB<4pRnyUF(hx8B>jpCIcuKDa)!cx~I9+0e~*E!ty`e(_6W z=QD#(ed9U)tJqoTnjigKdFv&#l&|LU)xrq*o)wsm)>udP;V54_TD6}B&USmvR6M&2vyU_}#1zVB zB*7$C8c~`mBCe324)V{J*0Z%(mNv3a;bqCuXG@*z&a529Wy$;~SUw76gHb)m`)yWX z;=DSqWR;-Ga{NGY2KB7y?9wT5LWVgNGV)|PlnWadLk8evdx7du@M%8K>7Go!UNFf4 zA3xsYb)Wj=XMRQ?Sw9^%ig}W{LS8L{W_)^yyy629_(-^r(MHKryL5<2Nf!t8LtB6T z#C_W^XTz8j=QZQslj>{(zgPG|=hG^g^ow~Vb(Je|z@KO^!N*Bt0y#8l3BO%-q`$fY z51?k$+`W<0=Lu`vr+LBCmx&j&Bkw+BwwcKJp8mdXeV6~p5U;*E`hOupu0~99Awm;n zaY4+*D)@99wV!R}$9z&8fnv2mu2|rw$OcQHzXU8-RvHsZnT*4Z;Is<{9R?(h;)}qf zJWPTeooLp~YJdgx098iNQ$XtiS~W|!b?_v*eZ0u7gXmntx!`=5U4SbgRK~oomGylI zbkG$uyhOidiLqkghku;#e*qbR#qpLa4!l#O}v!tfakMk#c#i?;1t5)8k>FjPd0fEps(|CmK|D+Ps#JYdP}36C$tu;!)5Hv8ZNTbLKwWz-+)tC!X}$%OUWatYz3IWH&h9|~{Dn3DL= j=SA}2X. + ldy $212B ; 15F3 AC 2B 21 .+! + lda $8486,y ; 15F6 B9 86 84 ... + sta $212C ; 15F9 8D 2C 21 .,! + jmp L161C ; 15FC 4C 1C 16 L.. +; ---------------------------------------------------------------------------- +L15FF: lda $212E ; 15FF AD 2E 21 ..! + sta r15H ; 1602 85 21 .! + lda $212D ; 1604 AD 2D 21 .-! + sta r15L ; 1607 85 20 . + ldy #$00 ; 1609 A0 00 .. + lda (r15L),y ; 160B B1 20 . + sta $212B ; 160D 8D 2B 21 .+! + jsr L073E ; 1610 20 3E 07 >. + ldy $212B ; 1613 AC 2B 21 .+! + lda $8486,y ; 1616 B9 86 84 ... + sta $212C ; 1619 8D 2C 21 .,! +L161C: ldy #$01 ; 161C A0 01 .. + lda (r15L),y ; 161E B1 20 . + sta $212A ; 1620 8D 2A 21 .*! +L1623: clc ; 1623 18 . + lda #$02 ; 1624 A9 02 .. + adc r15L ; 1626 65 20 e + sta r15L ; 1628 85 20 . + bcc L162E ; 162A 90 02 .. + inc r15H ; 162C E6 21 .! +L162E: ldy #$00 ; 162E A0 00 .. + lda (r15L),y ; 1630 B1 20 . + sta r13L ; 1632 85 1C .. + iny ; 1634 C8 . + lda (r15L),y ; 1635 B1 20 . + sta r13H ; 1637 85 1D .. + beq L165D ; 1639 F0 22 ." + ldy $212A ; 163B AC 2A 21 .*! + jsr L1441 ; 163E 20 41 14 A. + jsr IsMseInRegion ; 1641 20 B3 C2 .. + beq L1657 ; 1644 F0 11 .. + ldy #$03 ; 1646 A0 03 .. + lda (r13L),y ; 1648 B1 1C .. + sta r0L ; 164A 85 02 .. + iny ; 164C C8 . + lda (r13L),y ; 164D B1 1C .. + sta r0H ; 164F 85 03 .. + jsr L165E ; 1651 20 5E 16 ^. + clv ; 1654 B8 . + bvc L165D ; 1655 50 06 P. +L1657: inc $212A ; 1657 EE 2A 21 .*! + clv ; 165A B8 . + bvc L1623 ; 165B 50 C6 P. +L165D: rts ; 165D 60 ` +; ---------------------------------------------------------------------------- +L165E: jmp (r0L) ; 165E 6C 02 00 l.. +; ---------------------------------------------------------------------------- + clc ; 1661 18 . + !text "Drive A" ; 1662 44 72 69 76 65 20 41 Drive A + !byte $00,$18 ; 1669 00 18 .. + !text "Drive B" ; 166B 44 72 69 76 65 20 42 Drive B + !byte $00,$18 ; 1672 00 18 .. + !text "Drive C" ; 1674 44 72 69 76 65 20 43 Drive C + !byte $00 ; 167B 00 . +; ---------------------------------------------------------------------------- +L167C: ldy #$03 ; 167C A0 03 .. + jsr L1720 ; 167E 20 20 17 . + ldy #$04 ; 1681 A0 04 .. + jsr L1720 ; 1683 20 20 17 . + lda ramExpSize ; 1686 AD C3 88 ... + beq L1690 ; 1689 F0 05 .. + ldy #$05 ; 168B A0 05 .. + jsr L1720 ; 168D 20 20 17 . +L1690: jsr L16BE ; 1690 20 BE 16 .. + jsr L16E8 ; 1693 20 E8 16 .. + lda ramExpSize ; 1696 AD C3 88 ... + beq L169E ; 1699 F0 03 .. + jsr L1712 ; 169B 20 12 17 .. +L169E: jsr ExitTurbo ; 169E 20 32 C2 2. + rts ; 16A1 60 ` +; ---------------------------------------------------------------------------- +L16A2: ldy #$03 ; 16A2 A0 03 .. + jsr L15AA ; 16A4 20 AA 15 .. + lda #$16 ; 16A7 A9 16 .. + sta r0H ; 16A9 85 03 .. + lda #$61 ; 16AB A9 61 .a + sta r0L ; 16AD 85 02 .. + lda #$13 ; 16AF A9 13 .. + sta r1H ; 16B1 85 05 .. + lda #$00 ; 16B3 A9 00 .. + sta r11H ; 16B5 85 19 .. + lda #$4F ; 16B7 A9 4F .O + sta r11L ; 16B9 85 18 .. + jsr PutString ; 16BB 20 48 C1 H. +L16BE: lda #$1B ; 16BE A9 1B .. + sta $212E ; 16C0 8D 2E 21 ..! + lda #$79 ; 16C3 A9 79 .y + sta $212D ; 16C5 8D 2D 21 .-! + jsr L1A74 ; 16C8 20 74 1A t. + rts ; 16CB 60 ` +; ---------------------------------------------------------------------------- +L16CC: ldy #$04 ; 16CC A0 04 .. + jsr L15AA ; 16CE 20 AA 15 .. + lda #$16 ; 16D1 A9 16 .. + sta r0H ; 16D3 85 03 .. + lda #$6A ; 16D5 A9 6A .j + sta r0L ; 16D7 85 02 .. + lda #$13 ; 16D9 A9 13 .. + sta r1H ; 16DB 85 05 .. + lda #$00 ; 16DD A9 00 .. + sta r11H ; 16DF 85 19 .. + lda #$E5 ; 16E1 A9 E5 .. + sta r11L ; 16E3 85 18 .. + jsr PutString ; 16E5 20 48 C1 H. +L16E8: lda #$1B ; 16E8 A9 1B .. + sta $212E ; 16EA 8D 2E 21 ..! + lda #$89 ; 16ED A9 89 .. + sta $212D ; 16EF 8D 2D 21 .-! + jsr L1A74 ; 16F2 20 74 1A t. + rts ; 16F5 60 ` +; ---------------------------------------------------------------------------- +L16F6: ldy #$05 ; 16F6 A0 05 .. + jsr L15AA ; 16F8 20 AA 15 .. + lda #$16 ; 16FB A9 16 .. + sta r0H ; 16FD 85 03 .. + lda #$73 ; 16FF A9 73 .s + sta r0L ; 1701 85 02 .. + lda #$75 ; 1703 A9 75 .u + sta r1H ; 1705 85 05 .. + lda #$00 ; 1707 A9 00 .. + sta r11H ; 1709 85 19 .. + lda #$4F ; 170B A9 4F .O + sta r11L ; 170D 85 18 .. + jsr PutString ; 170F 20 48 C1 H. +L1712: lda #$1B ; 1712 A9 1B .. + sta $212E ; 1714 8D 2E 21 ..! + lda #$99 ; 1717 A9 99 .. + sta $212D ; 1719 8D 2D 21 .-! + jsr L1A74 ; 171C 20 74 1A t. + rts ; 171F 60 ` +; ---------------------------------------------------------------------------- +L1720: jsr L1441 ; 1720 20 41 14 A. + clc ; 1723 18 . + lda #$02 ; 1724 A9 02 .. + adc r3L ; 1726 65 08 e. + sta r3L ; 1728 85 08 .. + bcc L172E ; 172A 90 02 .. + inc r3H ; 172C E6 09 .. +L172E: sec ; 172E 38 8 + lda r4L ; 172F A5 0A .. + sbc #$02 ; 1731 E9 02 .. + sta r4L ; 1733 85 0A .. + lda r4H ; 1735 A5 0B .. + sbc #$00 ; 1737 E9 00 .. + sta r4H ; 1739 85 0B .. + lda r2L ; 173B A5 06 .. + clc ; 173D 18 . + adc #$0F ; 173E 69 0F i. + sta r2L ; 1740 85 06 .. + lda r2H ; 1742 A5 07 .. + sec ; 1744 38 8 + sbc #$02 ; 1745 E9 02 .. + sta r2H ; 1747 85 07 .. + lda #$00 ; 1749 A9 00 .. + jsr SetPattern ; 174B 20 39 C1 9. + jsr Rectangle ; 174E 20 24 C1 $. + rts ; 1751 60 ` +; ---------------------------------------------------------------------------- +L1752: jsr L1873 ; 1752 20 73 18 s. + lda ramExpSize ; 1755 AD C3 88 ... + beq L1760 ; 1758 F0 06 .. + jsr L1761 ; 175A 20 61 17 a. + jsr L17B2 ; 175D 20 B2 17 .. +L1760: rts ; 1760 60 ` +; ---------------------------------------------------------------------------- +L1761: lda #$17 ; 1761 A9 17 .. + sta r0H ; 1763 85 03 .. + lda #$9E ; 1765 A9 9E .. + sta r0L ; 1767 85 02 .. + lda #$A4 ; 1769 A9 A4 .. + sta r1H ; 176B 85 05 .. + lda #$00 ; 176D A9 00 .. + sta r11H ; 176F 85 19 .. + lda #$BE ; 1771 A9 BE .. + sta r11L ; 1773 85 18 .. + jsr PutString ; 1775 20 48 C1 H. + lda #$17 ; 1778 A9 17 .. + sta r0H ; 177A 85 03 .. + lda #$A7 ; 177C A9 A7 .. + sta r0L ; 177E 85 02 .. + lda #$B2 ; 1780 A9 B2 .. + sta r1H ; 1782 85 05 .. + lda #$00 ; 1784 A9 00 .. + sta r11H ; 1786 85 19 .. + lda #$BE ; 1788 A9 BE .. + sta r11L ; 178A 85 18 .. + jsr PutString ; 178C 20 48 C1 H. +L178F: lda sysRAMFlg ; 178F AD C4 88 ... + and #$80 ; 1792 29 80 ). + beq L1798 ; 1794 F0 02 .. + lda #$02 ; 1796 A9 02 .. +L1798: ldy #$01 ; 1798 A0 01 .. + jsr L15CF ; 179A 20 CF 15 .. + rts ; 179D 60 ` +; ---------------------------------------------------------------------------- + clc ; 179E 18 . + !text "DMA for" ; 179F 44 4D 41 20 66 6F 72 DMA for + !byte $00,$22 ; 17A6 00 22 ." + !text "MoveData" ; 17A8 4D 6F 76 65 44 61 74 61 MoveData + !byte $22,$00 ; 17B0 22 00 ". +L17B2: !byte $A9 ; 17B2 A9 . +; ---------------------------------------------------------------------------- + !byte $17 ; 17B3 17 . + sta r0H ; 17B4 85 03 .. + lda #$D8 ; 17B6 A9 D8 .. + sta r0L ; 17B8 85 02 .. + lda #$8D ; 17BA A9 8D .. + sta r1H ; 17BC 85 05 .. + lda #$00 ; 17BE A9 00 .. + sta r11H ; 17C0 85 19 .. + lda #$BE ; 17C2 A9 BE .. + sta r11L ; 17C4 85 18 .. + jsr PutString ; 17C6 20 48 C1 H. +L17C9: lda sysRAMFlg ; 17C9 AD C4 88 ... + and #$20 ; 17CC 29 20 ) + beq L17D2 ; 17CE F0 02 .. + lda #$02 ; 17D0 A9 02 .. +L17D2: ldy #$02 ; 17D2 A0 02 .. + jsr L15CF ; 17D4 20 CF 15 .. + rts ; 17D7 60 ` +; ---------------------------------------------------------------------------- + !byte $18 ; 17D8 18 . + !text "RAM Reboot" ; 17D9 52 41 4D 20 52 65 62 6F RAM Rebo + ; 17E1 6F 74 ot + !byte $00 ; 17E3 00 . +; ---------------------------------------------------------------------------- + lda mouseData ; 17E4 AD 05 85 ... + bpl L17EA ; 17E7 10 01 .. + rts ; 17E9 60 ` +; ---------------------------------------------------------------------------- +L17EA: lda #$00 ; 17EA A9 00 .. + sta L180C ; 17EC 8D 0C 18 ... + jsr L1837 ; 17EF 20 37 18 7. + jsr L180D ; 17F2 20 0D 18 .. + jsr L181B ; 17F5 20 1B 18 .. + lda ramExpSize ; 17F8 AD C3 88 ... + beq L1800 ; 17FB F0 03 .. + jsr L1829 ; 17FD 20 29 18 ). +L1800: lda L180C ; 1800 AD 0C 18 ... + beq L180B ; 1803 F0 06 .. + jsr L0FA0 ; 1805 20 A0 0F .. + jsr L167C ; 1808 20 7C 16 |. +L180B: rts ; 180B 60 ` +; ---------------------------------------------------------------------------- +L180C: brk ; 180C 00 . +L180D: lda #$1B ; 180D A9 1B .. + sta $212E ; 180F 8D 2E 21 ..! + lda #$79 ; 1812 A9 79 .y + sta $212D ; 1814 8D 2D 21 .-! + jsr L15FF ; 1817 20 FF 15 .. + rts ; 181A 60 ` +; ---------------------------------------------------------------------------- +L181B: lda #$1B ; 181B A9 1B .. + sta $212E ; 181D 8D 2E 21 ..! + lda #$89 ; 1820 A9 89 .. + sta $212D ; 1822 8D 2D 21 .-! + jsr L15FF ; 1825 20 FF 15 .. + rts ; 1828 60 ` +; ---------------------------------------------------------------------------- +L1829: lda #$1B ; 1829 A9 1B .. + sta $212E ; 182B 8D 2E 21 ..! + lda #$99 ; 182E A9 99 .. + sta $212D ; 1830 8D 2D 21 .-! + jsr L15DF ; 1833 20 DF 15 .. + rts ; 1836 60 ` +; ---------------------------------------------------------------------------- +L1837: lda ramExpSize ; 1837 AD C3 88 ... + beq L1872 ; 183A F0 36 .6 + ldy #$01 ; 183C A0 01 .. + jsr L1441 ; 183E 20 41 14 A. + jsr IsMseInRegion ; 1841 20 B3 C2 .. + beq L1857 ; 1844 F0 11 .. + lda sysRAMFlg ; 1846 AD C4 88 ... + eor #$80 ; 1849 49 80 I. + sta sysRAMFlg ; 184B 8D C4 88 ... + sta sysFlgCopy ; 184E 8D 12 C0 ... + sta $040A ; 1851 8D 0A 04 ... + jmp L178F ; 1854 4C 8F 17 L.. +; ---------------------------------------------------------------------------- +L1857: ldy #$02 ; 1857 A0 02 .. + jsr L1441 ; 1859 20 41 14 A. + jsr IsMseInRegion ; 185C 20 B3 C2 .. + beq L1872 ; 185F F0 11 .. + lda sysRAMFlg ; 1861 AD C4 88 ... + eor #$20 ; 1864 49 20 I + sta sysRAMFlg ; 1866 8D C4 88 ... + sta sysFlgCopy ; 1869 8D 12 C0 ... + sta $040A ; 186C 8D 0A 04 ... + jmp L17C9 ; 186F 4C C9 17 L.. +; ---------------------------------------------------------------------------- +L1872: rts ; 1872 60 ` +; ---------------------------------------------------------------------------- +L1873: lda #$18 ; 1873 A9 18 .. + sta r0H ; 1875 85 03 .. + lda #$A5 ; 1877 A9 A5 .. + sta r0L ; 1879 85 02 .. + lda #$75 ; 187B A9 75 .u + sta r1H ; 187D 85 05 .. + lda #$00 ; 187F A9 00 .. + sta r11H ; 1881 85 19 .. + lda #$BE ; 1883 A9 BE .. + sta r11L ; 1885 85 18 .. + jsr PutString ; 1887 20 48 C1 H. + lda ramExpSize ; 188A AD C3 88 ... + sta r0L ; 188D 85 02 .. + lda #$40 ; 188F A9 40 .@ + sta r2L ; 1891 85 06 .. + ldx #$02 ; 1893 A2 02 .. + ldy #$06 ; 1895 A0 06 .. + jsr BBMult ; 1897 20 60 C1 `. + lda #$C0 ; 189A A9 C0 .. + jsr PutDecimal ; 189C 20 84 C1 .. + lda #$4B ; 189F A9 4B .K + jsr PutChar ; 18A1 20 45 C1 E. + rts ; 18A4 60 ` +; ---------------------------------------------------------------------------- + !byte $18 ; 18A5 18 . + !text "RAM expansion: " ; 18A6 52 41 4D 20 65 78 70 61 RAM expa + ; 18AE 6E 73 69 6F 6E 3A 20 nsion: + !byte $00 ; 18B5 00 . +; ---------------------------------------------------------------------------- + jsr DoPreviousMenu ; 18B6 20 90 C1 .. + lda driveType ; 18B9 AD 8E 84 ... + beq L18C0 ; 18BC F0 02 .. + bpl L18C8 ; 18BE 10 08 .. +L18C0: lda $848F ; 18C0 AD 8F 84 ... + beq L18C7 ; 18C3 F0 02 .. + bpl L18C8 ; 18C5 10 01 .. +L18C7: rts ; 18C7 60 ` +; ---------------------------------------------------------------------------- +L18C8: ldy $2104 ; 18C8 AC 04 21 ..! + lda $8486,y ; 18CB B9 86 84 ... + bne L18D6 ; 18CE D0 06 .. + tya ; 18D0 98 . + eor #$01 ; 18D1 49 01 I. + sta $2104 ; 18D3 8D 04 21 ..! +L18D6: jmp L043E ; 18D6 4C 3E 04 L>. +; ---------------------------------------------------------------------------- + ldx #$18 ; 18D9 A2 18 .. + lda #$E0 ; 18DB A9 E0 .. + jmp L2022 ; 18DD 4C 22 20 L" +; ---------------------------------------------------------------------------- + sta (r5L,x) ; 18E0 81 0C .. + bpl L1904 ; 18E2 10 20 . + !byte $0C ; 18E4 0C . + ora (CPU_DATA,x) ; 18E5 01 01 .. + pha ; 18E7 48 H + brk ; 18E8 00 . + jsr DoPreviousMenu ; 18E9 20 90 C1 .. + ldx #$18 ; 18EC A2 18 .. + lda #$F4 ; 18EE A9 F4 .. + jsr L2022 ; 18F0 20 22 20 " + rts ; 18F3 60 ` +; ---------------------------------------------------------------------------- + sta (r4H,x) ; 18F4 81 0B .. + php ; 18F6 08 . + bpl L1909 ; 18F7 10 10 .. + ora $080B,y ; 18F9 19 0B 08 ... + jsr L1921 ; 18FC 20 21 19 !. + !byte $0B ; 18FF 0B . + php ; 1900 08 . + bit L193B ; 1901 2C 3B 19 ,;. +L1904: !byte $0B ; 1904 0B . + php ; 1905 08 . + rol L194F,x ; 1906 3E 4F 19 >O. +L1909: !byte $0B ; 1909 0B . + php ; 190A 08 . + lsr ; 190B 4A J + jmp (L0E19) ; 190C 6C 19 0E l.. +; ---------------------------------------------------------------------------- + !byte $00,$18,$1A ; 190F 00 18 1A ... + !text "CONFIGURE 2.1" ; 1912 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 191A 45 20 32 2E 31 E 2.1 + !byte $1B,$00 ; 191F 1B 00 .. +L1921: !byte $18 ; 1921 18 . + !text "Copyright (C) 1986-1990," ; 1922 43 6F 70 79 72 69 67 68 Copyrigh + ; 192A 74 20 28 43 29 20 31 39 t (C) 19 + ; 1932 38 36 2D 31 39 39 30 2C 86-1990, + !byte $00 ; 193A 00 . +L193B: !text "Berkeley Softworks." ; 193B 42 65 72 6B 65 6C 65 79 Berkeley + ; 1943 20 53 6F 66 74 77 6F 72 Softwor + ; 194B 6B 73 2E ks. + !byte $00 ; 194E 00 . +L194F: !text "Portions Copyright (C) 1990," ; 194F 50 6F 72 74 69 6F 6E 73 Portions + ; 1957 20 43 6F 70 79 72 69 67 Copyrig + ; 195F 68 74 20 28 43 29 20 31 ht (C) 1 + ; 1967 39 39 30 2C 990, + !byte $00 ; 196B 00 . + !text "Jim Collette. (Q-Link: GEOREP J"; 196C 4A 69 6D 20 43 6F 6C 6C Jim Coll + ; 1974 65 74 74 65 2E 20 28 51 ette. (Q + ; 197C 2D 4C 69 6E 6B 3A 20 47 -Link: G + ; 1984 45 4F 52 45 50 20 4A EOREP J + !text "IM)" ; 198B 49 4D 29 IM) + !byte $1B,$00 ; 198E 1B 00 .. +; ---------------------------------------------------------------------------- + jsr DoPreviousMenu ; 1990 20 90 C1 .. + lda $2104 ; 1993 AD 04 21 ..! + jsr L073E ; 1996 20 3E 07 >. + lda #$20 ; 1999 A9 20 . + sta r0H ; 199B 85 03 .. + lda #$D9 ; 199D A9 D9 .. + sta r0L ; 199F 85 02 .. + jsr OpenRecordFile ; 19A1 20 74 C2 t. + txa ; 19A4 8A . + bne L19CE ; 19A5 D0 27 .' + lda #$00 ; 19A7 A9 00 .. + jsr PointRecord ; 19A9 20 80 C2 .. + lda #$80 ; 19AC A9 80 .. + sta r4H ; 19AE 85 0B .. + lda #$00 ; 19B0 A9 00 .. + sta r4L ; 19B2 85 0A .. + jsr GetBlock ; 19B4 20 E4 C1 .. + txa ; 19B7 8A . + bne L19CE ; 19B8 D0 14 .. + ldy #$04 ; 19BA A0 04 .. +L19BC: lda $0406,y ; 19BC B9 06 04 ... + sta $8002,y ; 19BF 99 02 80 ... + dey ; 19C2 88 . + bpl L19BC ; 19C3 10 F7 .. + jsr PutBlock ; 19C5 20 E7 C1 .. + txa ; 19C8 8A . + bne L19CE ; 19C9 D0 03 .. + jmp CloseRecordFile ; 19CB 4C 77 C2 Lw. +; ---------------------------------------------------------------------------- +L19CE: ldx #$19 ; 19CE A2 19 .. + lda #$D5 ; 19D0 A9 D5 .. + jmp L2022 ; 19D2 4C 22 20 L" +; ---------------------------------------------------------------------------- + sta (r4H,x) ; 19D5 81 0B .. + !byte $0C ; 19D7 0C . + jsr L19E4 ; 19D8 20 E4 19 .. + !byte $0B ; 19DB 0B . + !byte $0C ; 19DC 0C . + bmi L19E2 ; 19DD 30 03 0. + !byte $1A ; 19DF 1A . + ora (CPU_DATA,x) ; 19E0 01 01 .. +L19E2: pha ; 19E2 48 H + brk ; 19E3 00 . +L19E4: !byte $18 ; 19E4 18 . + !text "Unable to save configuration:" ; 19E5 55 6E 61 62 6C 65 20 74 Unable t + ; 19ED 6F 20 73 61 76 65 20 63 o save c + ; 19F5 6F 6E 66 69 67 75 72 61 onfigura + ; 19FD 74 69 6F 6E 3A tion: + !byte $00,$18 ; 1A02 00 18 .. + !text "Can't find " ; 1A04 43 61 6E 27 74 20 66 69 Can't fi + ; 1A0C 6E 64 20 nd + !byte $22 ; 1A0F 22 " + !text "CONFIGURE" ; 1A10 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 1A18 45 E + !byte $22 ; 1A19 22 " + !text " file." ; 1A1A 20 66 69 6C 65 2E file. + !byte $00,$00,$0E,$00,$00,$15,$00,$01 ; 1A20 00 00 0E 00 00 15 00 01 ........ + !text "-" ; 1A28 2D - + !byte $1A ; 1A29 1A . + !text "@= file" ; 1A2A 40 3D 20 66 69 6C 65 @= file + !byte $00 ; 1A31 00 . + !text "disk" ; 1A32 64 69 73 6B disk + !byte $00 ; 1A36 00 . +; ---------------------------------------------------------------------------- + asl $0038 ; 1A37 0E 38 00 .8. + brk ; 1A3A 00 . + !byte $62 ; 1A3B 62 b + brk ; 1A3C 00 . + !byte $83 ; 1A3D 83 . + eor $001a ;r12L ; 1A3E 4D 1A 00 M.. + bcc L1A5C ; 1A41 90 19 .. + rts ; 1A43 60 ` +; ---------------------------------------------------------------------------- + !byte $1A ; 1A44 1A . + brk ; 1A45 00 . + sbc #$18 ; 1A46 E9 18 .. + !byte $6F ; 1A48 6F o + !byte $1A ; 1A49 1A . + brk ; 1A4A 00 . + !byte $B6,$18 ; 1A4B B6 18 .. + !text "save configurat" ; 1A4D 73 61 76 65 20 63 6F 6E save con + ; 1A55 66 69 67 75 72 61 74 figurat +L1A5C: !text "ion" ; 1A5C 69 6F 6E ion + !byte $00 ; 1A5F 00 . + !text "CONFIGURE info" ; 1A60 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 1A68 45 20 69 6E 66 6F E info + !byte $00 ; 1A6E 00 . + !text "quit" ; 1A6F 71 75 69 74 quit + !byte $00 ; 1A73 00 . +; ---------------------------------------------------------------------------- +L1A74: lda $212E ; 1A74 AD 2E 21 ..! + sta r15H ; 1A77 85 21 .! + lda $212D ; 1A79 AD 2D 21 .-! + sta r15L ; 1A7C 85 20 . + ldy #$00 ; 1A7E A0 00 .. + lda (r15L),y ; 1A80 B1 20 . + sta $212B ; 1A82 8D 2B 21 .+! + tay ; 1A85 A8 . + lda $8486,y ; 1A86 B9 86 84 ... + sta $212C ; 1A89 8D 2C 21 .,! + ldy #$01 ; 1A8C A0 01 .. + lda (r15L),y ; 1A8E B1 20 . + sta $212A ; 1A90 8D 2A 21 .*! + clc ; 1A93 18 . + lda #$02 ; 1A94 A9 02 .. + adc r15L ; 1A96 65 20 e + sta r15L ; 1A98 85 20 . + bcc L1A9E ; 1A9A 90 02 .. + inc r15H ; 1A9C E6 21 .! +L1A9E: ldy #$0B ; 1A9E A0 0B .. +L1AA0: lda #$00 ; 1AA0 A9 00 .. + sta (r15L),y ; 1AA2 91 20 . + dey ; 1AA4 88 . + bpl L1AA0 ; 1AA5 10 F9 .. + jsr L1C39 ; 1AA7 20 39 1C 9. + jsr L1B5B ; 1AAA 20 5B 1B [. + jsr L1C41 ; 1AAD 20 41 1C A. + jsr L1B5B ; 1AB0 20 5B 1B [. + jsr L1C56 ; 1AB3 20 56 1C V. + jsr L1B5B ; 1AB6 20 5B 1B [. + jsr L1C88 ; 1AB9 20 88 1C .. + jsr L1B5B ; 1ABC 20 5B 1B [. + jsr L1C99 ; 1ABF 20 99 1C .. + jsr L1B5B ; 1AC2 20 5B 1B [. + jsr L1CAA ; 1AC5 20 AA 1C .. + jsr L1B5B ; 1AC8 20 5B 1B [. + jsr L1C6F ; 1ACB 20 6F 1C o. + jsr L1B5B ; 1ACE 20 5B 1B [. + jsr L1CC3 ; 1AD1 20 C3 1C .. + jsr L1B5B ; 1AD4 20 5B 1B [. + jsr L1CDC ; 1AD7 20 DC 1C .. + jsr L1B5B ; 1ADA 20 5B 1B [. + lda $212E ; 1ADD AD 2E 21 ..! + sta r15H ; 1AE0 85 21 .! + lda $212D ; 1AE2 AD 2D 21 .-! + sta r15L ; 1AE5 85 20 . + clc ; 1AE7 18 . + lda #$02 ; 1AE8 A9 02 .. + adc r15L ; 1AEA 65 20 e + sta r15L ; 1AEC 85 20 . + bcc L1AF2 ; 1AEE 90 02 .. + inc r15H ; 1AF0 E6 21 .! +L1AF2: ldy #$00 ; 1AF2 A0 00 .. + lda (r15L),y ; 1AF4 B1 20 . + sta r13L ; 1AF6 85 1C .. + iny ; 1AF8 C8 . + lda (r15L),y ; 1AF9 B1 20 . + sta r13H ; 1AFB 85 1D .. + beq L1B5A ; 1AFD F0 5B .[ + ldy $212A ; 1AFF AC 2A 21 .*! + jsr L1441 ; 1B02 20 41 14 A. + lda r2L ; 1B05 A5 06 .. + clc ; 1B07 18 . + adc #$08 ; 1B08 69 08 i. + sta r1H ; 1B0A 85 05 .. + sec ; 1B0C 38 8 + lda r3L ; 1B0D A5 08 .. + sbc #$5A ; 1B0F E9 5A .Z + sta r11L ; 1B11 85 18 .. + lda r3H ; 1B13 A5 09 .. + sbc #$00 ; 1B15 E9 00 .. + sta r11H ; 1B17 85 19 .. + ldy #$00 ; 1B19 A0 00 .. + lda (r13L),y ; 1B1B B1 1C .. + pha ; 1B1D 48 H + iny ; 1B1E C8 . + lda (r13L),y ; 1B1F B1 1C .. + sta r0L ; 1B21 85 02 .. + iny ; 1B23 C8 . + lda (r13L),y ; 1B24 B1 1C .. + sta r0H ; 1B26 85 03 .. + lda r15H ; 1B28 A5 21 .! + pha ; 1B2A 48 H + lda r15L ; 1B2B A5 20 . + pha ; 1B2D 48 H + jsr PutString ; 1B2E 20 48 C1 H. + pla ; 1B31 68 h + sta r15L ; 1B32 85 20 . + pla ; 1B34 68 h + sta r15H ; 1B35 85 21 .! + ldy $212A ; 1B37 AC 2A 21 .*! + pla ; 1B3A 68 h + cmp $212C ; 1B3B CD 2C 21 .,! + bne L1B44 ; 1B3E D0 04 .. + lda #$02 ; 1B40 A9 02 .. + bne L1B46 ; 1B42 D0 02 .. +L1B44: lda #$00 ; 1B44 A9 00 .. +L1B46: jsr L15CF ; 1B46 20 CF 15 .. + clc ; 1B49 18 . + lda #$02 ; 1B4A A9 02 .. + adc r15L ; 1B4C 65 20 e + sta r15L ; 1B4E 85 20 . + bcc L1B54 ; 1B50 90 02 .. + inc r15H ; 1B52 E6 21 .! +L1B54: inc $212A ; 1B54 EE 2A 21 .*! + clv ; 1B57 B8 . + bvc L1AF2 ; 1B58 50 98 P. +L1B5A: rts ; 1B5A 60 ` +; ---------------------------------------------------------------------------- +L1B5B: dey ; 1B5B 88 . + bmi L1B78 ; 1B5C 30 1A 0. + lda L1BB2,y ; 1B5E B9 B2 1B ... + tax ; 1B61 AA . + lda L1BA9,y ; 1B62 B9 A9 1B ... + ldy #$00 ; 1B65 A0 00 .. + sta (r15L),y ; 1B67 91 20 . + iny ; 1B69 C8 . + txa ; 1B6A 8A . + sta (r15L),y ; 1B6B 91 20 . + clc ; 1B6D 18 . + lda #$02 ; 1B6E A9 02 .. + adc r15L ; 1B70 65 20 e + sta r15L ; 1B72 85 20 . + bcc L1B78 ; 1B74 90 02 .. + inc r15H ; 1B76 E6 21 .! +L1B78: rts ; 1B78 60 ` +; ---------------------------------------------------------------------------- + php ; 1B79 08 . + asl CPU_DDR ; 1B7A 06 00 .. + brk ; 1B7C 00 . + brk ; 1B7D 00 . + brk ; 1B7E 00 . + brk ; 1B7F 00 . + brk ; 1B80 00 . + brk ; 1B81 00 . + brk ; 1B82 00 . + brk ; 1B83 00 . + brk ; 1B84 00 . + brk ; 1B85 00 . + brk ; 1B86 00 . + brk ; 1B87 00 . + brk ; 1B88 00 . + ora #$0C ; 1B89 09 0C .. + brk ; 1B8B 00 . + brk ; 1B8C 00 . + brk ; 1B8D 00 . + brk ; 1B8E 00 . + brk ; 1B8F 00 . + brk ; 1B90 00 . + brk ; 1B91 00 . + brk ; 1B92 00 . + brk ; 1B93 00 . + brk ; 1B94 00 . + brk ; 1B95 00 . + brk ; 1B96 00 . + brk ; 1B97 00 . + brk ; 1B98 00 . + asl ; 1B99 0A . + !byte $12 ; 1B9A 12 . + brk ; 1B9B 00 . + brk ; 1B9C 00 . + brk ; 1B9D 00 . + brk ; 1B9E 00 . + brk ; 1B9F 00 . + brk ; 1BA0 00 . + brk ; 1BA1 00 . + brk ; 1BA2 00 . + brk ; 1BA3 00 . + brk ; 1BA4 00 . + brk ; 1BA5 00 . + brk ; 1BA6 00 . + brk ; 1BA7 00 . + brk ; 1BA8 00 . +L1BA9: !byte $BB ; 1BA9 BB . + cmp #$D3 ; 1BAA C9 D3 .. + inc $F4 ; 1BAC E6 F4 .. + inc L1D08,x ; 1BAE FE 08 1D ... + !byte $2B ; 1BB1 2B + +L1BB2: !byte $1B ; 1BB2 1B . + !byte $1B ; 1BB3 1B . + !byte $1B ; 1BB4 1B . + !byte $1B ; 1BB5 1B . + !byte $1B ; 1BB6 1B . + !byte $1B ; 1BB7 1B . + !byte $1C ; 1BB8 1C . + !byte $1C ; 1BB9 1C . + !byte $1C ; 1BBA 1C . + brk ; 1BBB 00 . + cpy #$1B ; 1BBC C0 1B .. + sbc r13L,x ; 1BBE F5 1C .. + !text "No Drive" ; 1BC0 4E 6F 20 44 72 69 76 65 No Drive + !byte $00,$01,$CE,$1B,$B7,$07 ; 1BC8 00 01 CE 1B B7 07 ...... + !text "1541" ; 1BCE 31 35 34 31 1541 + !byte $00 ; 1BD2 00 . + !text "A" ; 1BD3 41 A + !byte $D8,$1B,$FF,$07 ; 1BD4 D8 1B FF 07 .... + !text "Shadowed 1541" ; 1BD8 53 68 61 64 6F 77 65 64 Shadowed + ; 1BE0 20 31 35 34 31 1541 + !byte $00,$81,$EB,$1B ; 1BE5 00 81 EB 1B .... + !text "A" ; 1BE9 41 A + !byte $08 ; 1BEA 08 . + !text "RAM 1541" ; 1BEB 52 41 4D 20 31 35 34 31 RAM 1541 + !byte $00,$02,$F9,$1B,$DF,$07 ; 1BF3 00 02 F9 1B DF 07 ...... + !text "1571" ; 1BF9 31 35 37 31 1571 + !byte $00,$03,$03,$1C,$EF,$07 ; 1BFD 00 03 03 1C EF 07 ...... + !text "1581" ; 1C03 31 35 38 31 1581 + !byte $00 ; 1C07 00 . + !text "C" ; 1C08 43 C + !byte $0D,$1C ; 1C09 0D 1C .. + !text " " ; 1C0B 20 + !byte $08 ; 1C0C 08 . + !text "Dir Shadow 1581" ; 1C0D 44 69 72 20 53 68 61 64 Dir Shad + ; 1C15 6F 77 20 31 35 38 31 ow 1581 + !byte $00,$82,$22,$1C ; 1C1C 00 82 22 1C ..". + !text "s" ; 1C20 73 s + !byte $08 ; 1C21 08 . + !text "RAM 1571" ; 1C22 52 41 4D 20 31 35 37 31 RAM 1571 + !byte $00,$83 ; 1C2A 00 83 .. + !byte "0" ; 1C2C 30 0 + !byte $1C,$A5,$08 ; 1C2D 1C A5 08 ... + !text "RAM 1581" ; 1C30 52 41 4D 20 31 35 38 31 RAM 1581 +; ---------------------------------------------------------------------------- + brk ; 1C38 00 . +L1C39: ldy $212C ; 1C39 AC 2C 21 .,! + beq L1C40 ; 1C3C F0 02 .. + ldy #$01 ; 1C3E A0 01 .. +L1C40: rts ; 1C40 60 ` +; ---------------------------------------------------------------------------- +L1C41: lda $212C ; 1C41 AD 2C 21 .,! + cmp #$01 ; 1C44 C9 01 .. + beq L1C50 ; 1C46 F0 08 .. + cmp #$41 ; 1C48 C9 41 .A + beq L1C50 ; 1C4A F0 04 .. + cmp #$00 ; 1C4C C9 00 .. + bne L1C53 ; 1C4E D0 03 .. +L1C50: ldy #$02 ; 1C50 A0 02 .. + rts ; 1C52 60 ` +; ---------------------------------------------------------------------------- +L1C53: ldy #$00 ; 1C53 A0 00 .. + rts ; 1C55 60 ` +; ---------------------------------------------------------------------------- +L1C56: lda $212C ; 1C56 AD 2C 21 .,! + cmp #$41 ; 1C59 C9 41 .A + beq L1C69 ; 1C5B F0 0C .. + cmp #$01 ; 1C5D C9 01 .. + bne L1C6C ; 1C5F D0 0B .. + lda #$41 ; 1C61 A9 41 .A + jsr L0911 ; 1C63 20 11 09 .. + txa ; 1C66 8A . + bne L1C6C ; 1C67 D0 03 .. +L1C69: ldy #$03 ; 1C69 A0 03 .. + rts ; 1C6B 60 ` +; ---------------------------------------------------------------------------- +L1C6C: ldy #$00 ; 1C6C A0 00 .. + rts ; 1C6E 60 ` +; ---------------------------------------------------------------------------- +L1C6F: lda $212C ; 1C6F AD 2C 21 .,! + cmp #$81 ; 1C72 C9 81 .. + beq L1C82 ; 1C74 F0 0C .. + cmp #$00 ; 1C76 C9 00 .. + bne L1C85 ; 1C78 D0 0B .. + lda #$81 ; 1C7A A9 81 .. + jsr L0911 ; 1C7C 20 11 09 .. + txa ; 1C7F 8A . + bne L1C85 ; 1C80 D0 03 .. +L1C82: ldy #$04 ; 1C82 A0 04 .. + rts ; 1C84 60 ` +; ---------------------------------------------------------------------------- +L1C85: ldy #$00 ; 1C85 A0 00 .. + rts ; 1C87 60 ` +; ---------------------------------------------------------------------------- +L1C88: lda $212C ; 1C88 AD 2C 21 .,! + cmp #$02 ; 1C8B C9 02 .. + beq L1C93 ; 1C8D F0 04 .. + cmp #$00 ; 1C8F C9 00 .. + bne L1C96 ; 1C91 D0 03 .. +L1C93: ldy #$05 ; 1C93 A0 05 .. + rts ; 1C95 60 ` +; ---------------------------------------------------------------------------- +L1C96: ldy #$00 ; 1C96 A0 00 .. + rts ; 1C98 60 ` +; ---------------------------------------------------------------------------- +L1C99: lda $212C ; 1C99 AD 2C 21 .,! + cmp #$03 ; 1C9C C9 03 .. + beq L1CA4 ; 1C9E F0 04 .. + cmp #$00 ; 1CA0 C9 00 .. + bne L1CA7 ; 1CA2 D0 03 .. +L1CA4: ldy #$06 ; 1CA4 A0 06 .. + rts ; 1CA6 60 ` +; ---------------------------------------------------------------------------- +L1CA7: ldy #$00 ; 1CA7 A0 00 .. + rts ; 1CA9 60 ` +; ---------------------------------------------------------------------------- +L1CAA: lda $212C ; 1CAA AD 2C 21 .,! + cmp #$43 ; 1CAD C9 43 .C + beq L1CBD ; 1CAF F0 0C .. + cmp #$03 ; 1CB1 C9 03 .. + bne L1CC0 ; 1CB3 D0 0B .. + lda #$43 ; 1CB5 A9 43 .C + jsr L0911 ; 1CB7 20 11 09 .. + txa ; 1CBA 8A . + bne L1CC0 ; 1CBB D0 03 .. +L1CBD: ldy #$07 ; 1CBD A0 07 .. + rts ; 1CBF 60 ` +; ---------------------------------------------------------------------------- +L1CC0: ldy #$00 ; 1CC0 A0 00 .. + rts ; 1CC2 60 ` +; ---------------------------------------------------------------------------- +L1CC3: lda $212C ; 1CC3 AD 2C 21 .,! + cmp #$82 ; 1CC6 C9 82 .. + beq L1CD6 ; 1CC8 F0 0C .. + cmp #$00 ; 1CCA C9 00 .. + bne L1CD9 ; 1CCC D0 0B .. + lda #$82 ; 1CCE A9 82 .. + jsr L0911 ; 1CD0 20 11 09 .. + txa ; 1CD3 8A . + bne L1CD9 ; 1CD4 D0 03 .. +L1CD6: ldy #$08 ; 1CD6 A0 08 .. + rts ; 1CD8 60 ` +; ---------------------------------------------------------------------------- +L1CD9: ldy #$00 ; 1CD9 A0 00 .. + rts ; 1CDB 60 ` +; ---------------------------------------------------------------------------- +L1CDC: lda $212C ; 1CDC AD 2C 21 .,! + cmp #$83 ; 1CDF C9 83 .. + beq L1CEF ; 1CE1 F0 0C .. + cmp #$00 ; 1CE3 C9 00 .. + bne L1CF2 ; 1CE5 D0 0B .. + lda #$83 ; 1CE7 A9 83 .. + jsr L0911 ; 1CE9 20 11 09 .. + txa ; 1CEC 8A . + bne L1CF2 ; 1CED D0 03 .. +L1CEF: ldy #$09 ; 1CEF A0 09 .. + rts ; 1CF1 60 ` +; ---------------------------------------------------------------------------- +L1CF2: ldy #$00 ; 1CF2 A0 00 .. + rts ; 1CF4 60 ` +; ---------------------------------------------------------------------------- + lda $212C ; 1CF5 AD 2C 21 .,! + beq L1D27 ; 1CF8 F0 2D .- + jsr PurgeTurbo ; 1CFA 20 35 C2 5. + lda $212C ; 1CFD AD 2C 21 .,! + bmi L1D1B ; 1D00 30 19 0. + lda $212B ; 1D02 AD 2B 21 .+! + clc ; 1D05 18 . + adc #$39 ; 1D06 69 39 i9 +L1D08: sta L1D9A ; 1D08 8D 9A 1D ... + ldx #$1D ; 1D0B A2 1D .. + lda #$9D ; 1D0D A9 9D .. + jsr L2022 ; 1D0F 20 22 20 " + lda r0L ; 1D12 A5 02 .. + cmp #$02 ; 1D14 C9 02 .. + beq L1D27 ; 1D16 F0 0F .. + jsr L1D28 ; 1D18 20 28 1D (. +L1D1B: lda $212B ; 1D1B AD 2B 21 .+! + jsr L1DF2 ; 1D1E 20 F2 1D .. + jsr L1DB0 ; 1D21 20 B0 1D .. + dec L180C ; 1D24 CE 0C 18 ... +L1D27: rts ; 1D27 60 ` +; ---------------------------------------------------------------------------- +L1D28: php ; 1D28 08 . + sei ; 1D29 78 x + lda #$1D ; 1D2A A9 1D .. + sta $84A0 ; 1D2C 8D A0 84 ... + lda #$53 ; 1D2F A9 53 .S + sta intBotVector ; 1D31 8D 9F 84 ... + lda #$00 ; 1D34 A9 00 .. + sta L1D60 ; 1D36 8D 60 1D .`. + lda #$78 ; 1D39 A9 78 .x + sta L1D5F ; 1D3B 8D 5F 1D ._. + plp ; 1D3E 28 ( +L1D3F: lda L1D5F ; 1D3F AD 5F 1D ._. + ora L1D60 ; 1D42 0D 60 1D .`. + bne L1D3F ; 1D45 D0 F8 .. + php ; 1D47 08 . + sei ; 1D48 78 x + lda #$00 ; 1D49 A9 00 .. + sta intBotVector ; 1D4B 8D 9F 84 ... + sta $84A0 ; 1D4E 8D A0 84 ... + plp ; 1D51 28 ( + rts ; 1D52 60 ` +; ---------------------------------------------------------------------------- + lda L1D5F ; 1D53 AD 5F 1D ._. + bne L1D5B ; 1D56 D0 03 .. + dec L1D60 ; 1D58 CE 60 1D .`. +L1D5B: dec L1D5F ; 1D5B CE 5F 1D ._. + rts ; 1D5E 60 ` +; ---------------------------------------------------------------------------- +L1D5F: brk ; 1D5F 00 . +L1D60: brk ; 1D60 00 . +L1D61: !byte $18 ; 1D61 18 . + !text "If you are able to, please" ; 1D62 49 66 20 79 6F 75 20 61 If you a + ; 1D6A 72 65 20 61 62 6C 65 20 re able + ; 1D72 74 6F 2C 20 70 6C 65 61 to, plea + ; 1D7A 73 65 se + !byte $00 ; 1D7C 00 . + !text "turn OFF and/or unplug drive " ; 1D7D 74 75 72 6E 20 4F 46 46 turn OFF + ; 1D85 20 61 6E 64 2F 6F 72 20 and/or + ; 1D8D 75 6E 70 6C 75 67 20 64 unplug d + ; 1D95 72 69 76 65 20 rive +L1D9A: !text "x." ; 1D9A 78 2E x. +; ---------------------------------------------------------------------------- + brk ; 1D9C 00 . + sta (r4H,x) ; 1D9D 81 0B .. + !byte $0C ; 1D9F 0C . + jsr L1D61 ; 1DA0 20 61 1D a. + !byte $0B ; 1DA3 0B . + !byte $0C ; 1DA4 0C . + bmi L1E24 ; 1DA5 30 7D 0} + ora $0101,x ; 1DA7 1D 01 01 ... + pha ; 1DAA 48 H + !byte $02 ; 1DAB 02 . + ora ($48),y ; 1DAC 11 48 .H + brk ; 1DAE 00 . +L1DAF: brk ; 1DAF 00 . +L1DB0: lda #$00 ; 1DB0 A9 00 .. + sta L1DAF ; 1DB2 8D AF 1D ... + lda #$08 ; 1DB5 A9 08 .. + jsr L1DCB ; 1DB7 20 CB 1D .. + lda #$09 ; 1DBA A9 09 .. + jsr L1DCB ; 1DBC 20 CB 1D .. + lda #$0A ; 1DBF A9 0A .. + jsr L1DCB ; 1DC1 20 CB 1D .. + lda L1DAF ; 1DC4 AD AF 1D ... + sta NUMDRV ; 1DC7 8D 8D 84 ... + rts ; 1DCA 60 ` +; ---------------------------------------------------------------------------- +L1DCB: tay ; 1DCB A8 . + lda $8486,y ; 1DCC B9 86 84 ... + beq L1DE0 ; 1DCF F0 0F .. + bmi L1DDD ; 1DD1 30 0A 0. + tya ; 1DD3 98 . + jsr L1DE1 ; 1DD4 20 E1 1D .. + bne L1DDD ; 1DD7 D0 04 .. + jsr L1DF2 ; 1DD9 20 F2 1D .. + rts ; 1DDC 60 ` +; ---------------------------------------------------------------------------- +L1DDD: inc L1DAF ; 1DDD EE AF 1D ... +L1DE0: rts ; 1DE0 60 ` +; ---------------------------------------------------------------------------- +L1DE1: jsr L073E ; 1DE1 20 3E 07 >. + lda NUMDRV ; 1DE4 AD 8D 84 ... + bne L1DEC ; 1DE7 D0 03 .. + inc NUMDRV ; 1DE9 EE 8D 84 ... +L1DEC: jsr NewDisk ; 1DEC 20 E1 C1 .. + cpx #$0D ; 1DEF E0 0D .. + rts ; 1DF1 60 ` +; ---------------------------------------------------------------------------- +L1DF2: ldy curDrive ; 1DF2 AC 89 84 ... + lda #$00 ; 1DF5 A9 00 .. + sta $8486,y ; 1DF7 99 86 84 ... + sta driveData,y ; 1DFA 99 BF 88 ... + sta $03FE,y ; 1DFD 99 FE 03 ... + sta diskOpenFlg,y ; 1E00 99 8A 84 ... + rts ; 1E03 60 ` +; ---------------------------------------------------------------------------- +L1E04: brk ; 1E04 00 . + lda #$00 ; 1E05 A9 00 .. + sta L1E04 ; 1E07 8D 04 1E ... + lda $212B ; 1E0A AD 2B 21 .+! + cmp #$0A ; 1E0D C9 0A .. + bcc L1E14 ; 1E0F 90 03 .. + jmp L1EB4 ; 1E11 4C B4 1E L.. +; ---------------------------------------------------------------------------- +L1E14: lda #$00 ; 1E14 A9 00 .. + sta L1E04 ; 1E16 8D 04 1E ... + ldy $212B ; 1E19 AC 2B 21 .+! + lda $212F ; 1E1C AD 2F 21 ./! + sta $8486,y ; 1E1F 99 86 84 ... + !byte $EE ; 1E22 EE . + !byte $8D ; 1E23 8D . +L1E24: sty $AD ; 1E24 84 AD .. + !byte $2B ; 1E26 2B + + and (r15L,x) ; 1E27 21 20 ! + sbc (r13H,x) ; 1E29 E1 1D .. + bne L1E48 ; 1E2B D0 1B .. + lda $212B ; 1E2D AD 2B 21 .+! + eor #$01 ; 1E30 49 01 I. + tay ; 1E32 A8 . + lda $8486,y ; 1E33 B9 86 84 ... + beq L1E59 ; 1E36 F0 21 .! + tya ; 1E38 98 . + ldy #$0B ; 1E39 A0 0B .. + bit sysRAMFlg ; 1E3B 2C C4 88 ,.. + bvs L1E43 ; 1E3E 70 03 p. + eor #$02 ; 1E40 49 02 I. + tay ; 1E42 A8 . +L1E43: lda $8486,y ; 1E43 B9 86 84 ... + beq L1E4A ; 1E46 F0 02 .. +L1E48: bne L1EB0 ; 1E48 D0 66 .f +L1E4A: sty L1E04 ; 1E4A 8C 04 1E ... + jsr L0739 ; 1E4D 20 39 07 9. + lda L1E04 ; 1E50 AD 04 1E ... + jsr L1FC5 ; 1E53 20 C5 1F .. + jsr PurgeTurbo ; 1E56 20 35 C2 5. +L1E59: ldx #$1F ; 1E59 A2 1F .. + lda #$A1 ; 1E5B A9 A1 .. + jsr L2022 ; 1E5D 20 22 20 " + lda r0L ; 1E60 A5 02 .. + cmp #$02 ; 1E62 C9 02 .. + beq L1E98 ; 1E64 F0 32 .2 + lda $212B ; 1E66 AD 2B 21 .+! + jsr L1DE1 ; 1E69 20 E1 1D .. + bne L1E98 ; 1E6C D0 2A .* + lda $212B ; 1E6E AD 2B 21 .+! + eor #$01 ; 1E71 49 01 I. + sta curDevice ; 1E73 85 BA .. + sta curDrive ; 1E75 8D 89 84 ... + tay ; 1E78 A8 . + lda $212F ; 1E79 AD 2F 21 ./! + sta $8486,y ; 1E7C 99 86 84 ... + lda $212B ; 1E7F AD 2B 21 .+! + jsr L1FC5 ; 1E82 20 C5 1F .. + lda $212B ; 1E85 AD 2B 21 .+! + sta curDevice ; 1E88 85 BA .. + sta curDrive ; 1E8A 8D 89 84 ... + eor #$01 ; 1E8D 49 01 I. + tay ; 1E8F A8 . + lda #$00 ; 1E90 A9 00 .. + sta $8486,y ; 1E92 99 86 84 ... + txa ; 1E95 8A . + bne L1E59 ; 1E96 D0 C1 .. +L1E98: lda L1E04 ; 1E98 AD 04 1E ... + beq L1EB0 ; 1E9B F0 13 .. + jsr L1DE1 ; 1E9D 20 E1 1D .. + bne L1EA8 ; 1EA0 D0 06 .. + jsr L1DF2 ; 1EA2 20 F2 1D .. + clv ; 1EA5 B8 . + bvc L1EB0 ; 1EA6 50 08 P. +L1EA8: lda $212B ; 1EA8 AD 2B 21 .+! + eor #$01 ; 1EAB 49 01 I. + jsr L1FC5 ; 1EAD 20 C5 1F .. +L1EB0: jsr L1DB0 ; 1EB0 20 B0 1D .. + rts ; 1EB3 60 ` +; ---------------------------------------------------------------------------- +L1EB4: lda #$00 ; 1EB4 A9 00 .. + sta L1E04 ; 1EB6 8D 04 1E ... + ldy $212B ; 1EB9 AC 2B 21 .+! + lda $212F ; 1EBC AD 2F 21 ./! + sta $8486,y ; 1EBF 99 86 84 ... + inc NUMDRV ; 1EC2 EE 8D 84 ... + lda $212B ; 1EC5 AD 2B 21 .+! + jsr L1DE1 ; 1EC8 20 E1 1D .. + bne L1EDB ; 1ECB D0 0E .. + ldy #$08 ; 1ECD A0 08 .. + lda $8486,y ; 1ECF B9 86 84 ... + beq L1EEE ; 1ED2 F0 1A .. + ldy #$0B ; 1ED4 A0 0B .. + lda $8486,y ; 1ED6 B9 86 84 ... + beq L1EDD ; 1ED9 F0 02 .. +L1EDB: bne L1F3E ; 1EDB D0 61 .a +L1EDD: sty L1E04 ; 1EDD 8C 04 1E ... + lda #$08 ; 1EE0 A9 08 .. + jsr L073E ; 1EE2 20 3E 07 >. + lda L1E04 ; 1EE5 AD 04 1E ... + jsr L1FC5 ; 1EE8 20 C5 1F .. + jsr PurgeTurbo ; 1EEB 20 35 C2 5. +L1EEE: ldx #$1F ; 1EEE A2 1F .. + lda #$B3 ; 1EF0 A9 B3 .. + jsr L2022 ; 1EF2 20 22 20 " + lda r0L ; 1EF5 A5 02 .. + cmp #$02 ; 1EF7 C9 02 .. + beq L1F29 ; 1EF9 F0 2E .. + lda $212B ; 1EFB AD 2B 21 .+! + jsr L1DE1 ; 1EFE 20 E1 1D .. + bne L1F29 ; 1F01 D0 26 .& + lda #$08 ; 1F03 A9 08 .. + sta curDevice ; 1F05 85 BA .. + sta curDrive ; 1F07 8D 89 84 ... + tay ; 1F0A A8 . + lda $212F ; 1F0B AD 2F 21 ./! + sta $8486,y ; 1F0E 99 86 84 ... + lda $212B ; 1F11 AD 2B 21 .+! + jsr L1FC5 ; 1F14 20 C5 1F .. + lda $212B ; 1F17 AD 2B 21 .+! + sta curDevice ; 1F1A 85 BA .. + sta curDrive ; 1F1C 8D 89 84 ... + ldy #$08 ; 1F1F A0 08 .. + lda #$00 ; 1F21 A9 00 .. + sta $8486,y ; 1F23 99 86 84 ... + txa ; 1F26 8A . + bne L1EEE ; 1F27 D0 C5 .. +L1F29: lda L1E04 ; 1F29 AD 04 1E ... + beq L1F3E ; 1F2C F0 10 .. + jsr L1DE1 ; 1F2E 20 E1 1D .. + bne L1F39 ; 1F31 D0 06 .. + jsr L1DF2 ; 1F33 20 F2 1D .. + clv ; 1F36 B8 . + bvc L1F3E ; 1F37 50 05 P. +L1F39: lda #$08 ; 1F39 A9 08 .. + jsr L1FC5 ; 1F3B 20 C5 1F .. +L1F3E: jsr L1DB0 ; 1F3E 20 B0 1D .. + rts ; 1F41 60 ` +; ---------------------------------------------------------------------------- + !byte $18 ; 1F42 18 . + !text "Plug in & turn ON new drive." ; 1F43 50 6C 75 67 20 69 6E 20 Plug in + ; 1F4B 26 20 74 75 72 6E 20 4F & turn O + ; 1F53 4E 20 6E 65 77 20 64 72 N new dr + ; 1F5B 69 76 65 2E ive. + !byte $00 ; 1F5F 00 . +L1F60: !byte $18 ; 1F60 18 . + !text "(Must be set to device 8 or 9)"; 1F61 28 4D 75 73 74 20 62 65 (Must be + ; 1F69 20 73 65 74 20 74 6F 20 set to + ; 1F71 64 65 76 69 63 65 20 38 device 8 + ; 1F79 20 6F 72 20 39 29 or 9) + !byte $00 ; 1F7F 00 . +L1F80: !byte $18 ; 1F80 18 . + !text "(Must be set to device 8 or 10)"; 1F81 28 4D 75 73 74 20 62 65 (Must be + ; 1F89 20 73 65 74 20 74 6F 20 set to + ; 1F91 64 65 76 69 63 65 20 38 device 8 + ; 1F99 20 6F 72 20 31 30 29 or 10) + !byte $00,$81 ; 1FA0 00 81 .. +; ---------------------------------------------------------------------------- + !byte $0B ; 1FA2 0B . + !byte $0C ; 1FA3 0C . + bpl L1FE8 ; 1FA4 10 42 .B + !byte $1F ; 1FA6 1F . + !byte $0B ; 1FA7 0B . + !byte $0C ; 1FA8 0C . + jsr L1F60 ; 1FA9 20 60 1F `. + ora (CPU_DATA,x) ; 1FAC 01 01 .. + pha ; 1FAE 48 H + !byte $02 ; 1FAF 02 . + ora ($48),y ; 1FB0 11 48 .H + brk ; 1FB2 00 . + sta (r4H,x) ; 1FB3 81 0B .. + !byte $0C ; 1FB5 0C . + bpl L1FFA ; 1FB6 10 42 .B + !byte $1F ; 1FB8 1F . + !byte $0B ; 1FB9 0B . + !byte $0C ; 1FBA 0C . + jsr L1F80 ; 1FBB 20 80 1F .. + ora (CPU_DATA,x) ; 1FBE 01 01 .. + pha ; 1FC0 48 H + !byte $02 ; 1FC1 02 . + ora ($48),y ; 1FC2 11 48 .H + brk ; 1FC4 00 . +L1FC5: bit sysRAMFlg ; 1FC5 2C C4 88 ,.. + bvc L1FEE ; 1FC8 50 24 P$ + pha ; 1FCA 48 H + tay ; 1FCB A8 . + lda $0A66,y ; 1FCC B9 66 0A .f. + sta r1L ; 1FCF 85 04 .. + lda $0A6A,y ; 1FD1 B9 6A 0A .j. + sta r1H ; 1FD4 85 05 .. + lda #$90 ; 1FD6 A9 90 .. + sta r0H ; 1FD8 85 03 .. + lda #$00 ; 1FDA A9 00 .. + sta r0L ; 1FDC 85 02 .. + lda #$0D ; 1FDE A9 0D .. + sta r2H ; 1FE0 85 07 .. + lda #$80 ; 1FE2 A9 80 .. + sta r2L ; 1FE4 85 06 .. + lda #$00 ; 1FE6 A9 00 .. +L1FE8: sta r3L ; 1FE8 85 08 .. + jsr StashRAM ; 1FEA 20 C8 C2 .. + pla ; 1FED 68 h +L1FEE: sta r0L ; 1FEE 85 02 .. + lda curDrive ; 1FF0 AD 89 84 ... + pha ; 1FF3 48 H + tay ; 1FF4 A8 . + lda driveData,y ; 1FF5 B9 BF 88 ... + pha ; 1FF8 48 H + !byte $B9 ; 1FF9 B9 . +L1FFA: stx $84 ; 1FFA 86 84 .. + pha ; 1FFC 48 H + bpl L2007 ; 1FFD 10 08 .. + lda r0L ; 1FFF A5 02 .. + jsr L073E ; 2001 20 3E 07 >. + clv ; 2004 B8 . + bvc L200C ; 2005 50 05 P. +L2007: lda r0L ; 2007 A5 02 .. + jsr ChangeDiskDevice ; 2009 20 BC C2 .. +L200C: ldy curDrive ; 200C AC 89 84 ... + pla ; 200F 68 h + sta $8486,y ; 2010 99 86 84 ... + pla ; 2013 68 h + sta driveData,y ; 2014 99 BF 88 ... + pla ; 2017 68 h + tay ; 2018 A8 . + lda #$00 ; 2019 A9 00 .. + sta driveData,y ; 201B 99 BF 88 ... + sta $8486,y ; 201E 99 86 84 ... + rts ; 2021 60 ` +; ---------------------------------------------------------------------------- +L2022: stx r0H ; 2022 86 03 .. + sta r0L ; 2024 85 02 .. + ldx #$00 ; 2026 A2 00 .. + stx $2550 ; 2028 8E 50 25 .P% + lda r5H ; 202B A5 0D .. + pha ; 202D 48 H + lda r5L ; 202E A5 0C .. + pha ; 2030 48 H + jsr L205B ; 2031 20 5B 20 [ + pla ; 2034 68 h + sta r5L ; 2035 85 0C .. + pla ; 2037 68 h + sta r5H ; 2038 85 0D .. + jmp DoDlgBox ; 203A 4C 56 C2 LV. +; ---------------------------------------------------------------------------- + ldx #$04 ; 203D A2 04 .. + jsr L204B ; 203F 20 4B 20 K + lda #$1A ; 2042 A9 1A .. + sta r0H ; 2044 85 03 .. + lda #$37 ; 2046 A9 37 .7 + sta r0L ; 2048 85 02 .. + rts ; 204A 60 ` +; ---------------------------------------------------------------------------- +L204B: stx $2550 ; 204B 8E 50 25 .P% + ldx $2550 ; 204E AE 50 25 .P% + jmp L205B ; 2051 4C 5B 20 L[ +; ---------------------------------------------------------------------------- + ldx $2550 ; 2054 AE 50 25 .P% + jsr L2060 ; 2057 20 60 20 ` + rts ; 205A 60 ` +; ---------------------------------------------------------------------------- +L205B: lda #$00 ; 205B A9 00 .. + clv ; 205D B8 . + bvc L2062 ; 205E 50 02 P. +L2060: lda #$FF ; 2060 A9 FF .. +L2062: sta r4H ; 2062 85 0B .. + jsr L20BA ; 2064 20 BA 20 . +L2067: ldx r2H ; 2067 A6 07 .. + jsr GetScanLine ; 2069 20 3C C1 <. + lda r2L ; 206C A5 06 .. + asl ; 206E 0A . + asl ; 206F 0A . + asl ; 2070 0A . + bcc L2075 ; 2071 90 02 .. + inc r5H ; 2073 E6 0D .. +L2075: tay ; 2075 A8 . + lda r3L ; 2076 A5 08 .. + sta r4L ; 2078 85 0A .. +L207A: bit r4H ; 207A 24 0B $. + bpl L2084 ; 207C 10 06 .. + jsr L20AC ; 207E 20 AC 20 . + clv ; 2081 B8 . + bvc L2087 ; 2082 50 03 P. +L2084: jsr L20A0 ; 2084 20 A0 20 . +L2087: inc r1L ; 2087 E6 04 .. + bne L208D ; 2089 D0 02 .. + inc r1H ; 208B E6 05 .. +L208D: clc ; 208D 18 . + adc #$08 ; 208E 69 08 i. + bcc L2094 ; 2090 90 02 .. + inc r5H ; 2092 E6 0D .. +L2094: tay ; 2094 A8 . + dec r4L ; 2095 C6 0A .. + bne L207A ; 2097 D0 E1 .. + inc r2H ; 2099 E6 07 .. + dec r3H ; 209B C6 09 .. + bne L2067 ; 209D D0 C8 .. + rts ; 209F 60 ` +; ---------------------------------------------------------------------------- +L20A0: lda (r5L),y ; 20A0 B1 0C .. + tax ; 20A2 AA . + tya ; 20A3 98 . + pha ; 20A4 48 H + ldy #$00 ; 20A5 A0 00 .. + txa ; 20A7 8A . + sta (r1L),y ; 20A8 91 04 .. + pla ; 20AA 68 h + rts ; 20AB 60 ` +; ---------------------------------------------------------------------------- +L20AC: tya ; 20AC 98 . + pha ; 20AD 48 H + ldy #$00 ; 20AE A0 00 .. + lda (r1L),y ; 20B0 B1 04 .. + tax ; 20B2 AA . + pla ; 20B3 68 h + tay ; 20B4 A8 . + txa ; 20B5 8A . + sta (r5L),y ; 20B6 91 0C .. + tya ; 20B8 98 . + rts ; 20B9 60 ` +; ---------------------------------------------------------------------------- +L20BA: lda #$25 ; 20BA A9 25 .% + sta r1H ; 20BC 85 05 .. + lda #$51 ; 20BE A9 51 .Q + sta r1L ; 20C0 85 04 .. + ldy #$00 ; 20C2 A0 00 .. +L20C4: lda L20D1,x ; 20C4 BD D1 20 .. + sta r2L,y ; 20C7 99 06 00 ... + inx ; 20CA E8 . + iny ; 20CB C8 . + cpy #$04 ; 20CC C0 04 .. + bne L20C4 ; 20CE D0 F4 .. + rts ; 20D0 60 ` +; ---------------------------------------------------------------------------- +L20D1: php ; 20D1 08 . + jsr L6819 ; 20D2 20 19 68 .h + brk ; 20D5 00 . + asl $2C0E ; 20D6 0E 0E 2C .., + !byte $C2 ; 20D9 C2 . diff --git a/_newconf/newconf/r1.bin b/_newconf/newconf/r1.bin new file mode 100644 index 0000000000000000000000000000000000000000..e3c8bc55dd5d82c4aca94dee05a6a81ee638dcfe GIT binary patch literal 3369 zcmaJ^eQZA4MI{Ar5xQ?96uf zkTxkHe#k^Mg#VIG-Cm=4&CTM`K({5`R^k*`qHWaEG^vxOwMZ;0n#8P%ZLKtwo%>=# z+S2-u-@EU8-E;1}=l8AyH{K*WH1ehOntIJ^KV@j>UQZNa=w|Z34K^+pLpGCa`1uaIF$#&RG5W2noW zM1v8aOrLruo-M%y+B9tbYymVGP>M)35Y}g^D90W)%Ckoav$oJ79MfSY;IS5I$ZUa* zQnRJLzf_}f5uvK($l?8M2cGL}t%5)Vf}tpQ`}_L>$GzQsJ|aXz5cQ+{lrJ0!gn|(2 zg#)cey5LZ2=iz2Ifr&EseHojGhyRo*1g1)%vmCZBNYGq@l{KYdW12pM&FN*svMIwY zo7Iy|}mQWE~}P1wA4Q;7U_l zqE4h|6SX2lD_9C$*^@th@A$m%!BMy$V}F=@KT$)=?F z9+AySy$~pt^+`h`$_)9vksua8Mb!1vHI@dZy%Jvr60v$-8Qecho@l%#aB zRU=W7un4eIfI7*|ScN+<$K3v7 z+HHdgY}U2&*stzOurxFQ0Uo?Nx=D=UH_QTD8?pWqZdNNG9`u{1pdt!YVM z#rV$jdxNZHb^(FWbn0R(%UO-7OYEVMrnT%)XY^xj8YC0<9_@rcKX6yUki`lX)|cpl zq6bJj*s(^dwZd!!5y80|Vb2kSgMAf6M5uh!zOcQn!A69ZQ2*I*;DkR4)h#v9(A2o2 zwxOx1-bwcQ!Y6%wzO&F3>W!Wbg-=H6h$j?|Vu}&?yccsg82Ap#`}%y*sILyHJ8Ip5 z;K^OA{X1JdaImet#->)LWnD@ESLrWEY|(|0%w{}YgN!WAc=%0lH$9RmQM7YO0~-#`;&u%1BVBq?enq?-)4SCY{Rsgm3iLY3qf!WW~H z$Ez6#_J+uJ2LgB=KTk?3_dCTW@D0{`8RFJYpvewLZP2XZ^D4$w99MBl#gK~csQ6cg zk0<&P4m-NSVXTvlvaT^{y!V1EBnz;+E0F5!F2-mpw3ZZINpK*lJUMcDtR-+x~4o90HYKiRQNLmxhLCzScmR-?Ke5bosqKq0_z|P(?%kv^5)9 z6RB_9C${&|bY}zMdHcU`)Yw2;3hiLr7YM_OBO0RcT$MeNb3^0ddV4bWhPr8|m_?S7 zQciJ6lQk|iXSGWt!z-Mm5LMWmwJd2eX4(vE3h;C)d|okx3WAEEoI;ydaJdk=ynxRM z^m#!Gy7K7Sl5;iW73Xp>&*c=xyka<~7|tmQa*Av%JhOng*H@&rib9|%@rq-@L0?6B zNODVDwiv1%sDO_g@P^~IMUaeVs3W1oXjkG#F=SH7LC++PIjU2~9EFl2^D(LkYS5xu zLRp5tEjexn%Mxiv0AaGEO)YJ}f8XaNHgLh6bGZ%mSUgDI{zjlms9MvJLS z_pdl4q>@x3mf`Q?o$5~dgF~`J`zLTCkgF(EO*H?%DdlOufF0f zA+=3JJ9K0#fiZ3P%w3ekF~#h>5%1^QICWYs)BCb^J>HvAh&MOj+D>esujN;BdoI8h zHGuq9;zDe4B{);u+<>SGF}RxANG6SOvg_ESdMsqtV^lp^xfX@J`jmQw+|w|C}ZFr->JZHA2b5)cT>$*>l^B8*cq_y-GB!{+K@W~ zk0gV63GRevqib@m*CcD_UNYgmU=%+d1V5*Rcrh82^*A=d;(}l1@UDx7*W)f+BA3;e zFl|Y=*bsCkFU>I;l6AOn8kdoJ<;J(?+vZ57RK~ z;X#3AEna1H$ik}nmML>**>I~Mvnb72rp8 + lda #$FB ; 4777 A9 FB .. +L4779: and $1C00 ; 4779 2D 00 1C -.. + jmp L0525 ; 477C 4C 25 05 L%. +; ---------------------------------------------------------------------------- + brk ; 477F 00 . + jsr L6040 ; 4780 20 40 60 @` + tax ; 4783 AA . + bit $20 ; 4784 24 20 $ + bpl L4791 ; 4786 10 09 .. + jsr L063B ; 4788 20 3B 06 ;. + lda #$20 ; 478B A9 20 . + sta $20 ; 478D 85 20 . + ldx #$00 ; 478F A2 00 .. +L4791: cpx $22 ; 4791 E4 22 ." + beq L47B6 ; 4793 F0 21 .! + jsr L04F6 ; 4795 20 F6 04 .. + cmp #$01 ; 4798 C9 01 .. + bne L47B6 ; 479A D0 1A .. + ldy $19 ; 479C A4 19 .. + iny ; 479E C8 . + cpy $43 ; 479F C4 43 .C + bcc L47A5 ; 47A1 90 02 .. + ldy #$00 ; 47A3 A0 00 .. +L47A5: sty $19 ; 47A5 84 19 .. + lda #$00 ; 47A7 A9 00 .. + sta $45 ; 47A9 85 45 .E + lda #$00 ; 47AB A9 00 .. + sta $33 ; 47AD 85 33 .3 + lda #$18 ; 47AF A9 18 .. + sta $32 ; 47B1 85 32 .2 + jsr L05A5 ; 47B3 20 A5 05 .. +L47B6: rts ; 47B6 60 ` +; ---------------------------------------------------------------------------- + jsr L0443 ; 47B7 20 43 04 C. + ldx $00 ; 47BA A6 00 .. + dex ; 47BC CA . + bne L47C2 ; 47BD D0 03 .. + jsr L0548 ; 47BF 20 48 05 H. +L47C2: jsr L037B ; 47C2 20 7B 03 {. + lda #$10 ; 47C5 A9 10 .. + bne L47CE ; 47C7 D0 05 .. + jsr L0443 ; 47C9 20 43 04 C. + lda #$00 ; 47CC A9 00 .. +L47CE: ldx $00 ; 47CE A6 00 .. + dex ; 47D0 CA . + beq L47D6 ; 47D1 F0 03 .. + rts ; 47D3 60 ` +; ---------------------------------------------------------------------------- + lda #$30 ; 47D4 A9 30 .0 +L47D6: sta $45 ; 47D6 85 45 .E + lda #$06 ; 47D8 A9 06 .. + sta $33 ; 47DA 85 33 .3 + lda #$4C ; 47DC A9 4C .L + sta $32 ; 47DE 85 32 .2 + lda #$07 ; 47E0 A9 07 .. + sta $31 ; 47E2 85 31 .1 + tsx ; 47E4 BA . + stx $49 ; 47E5 86 49 .I + ldx #$01 ; 47E7 A2 01 .. + stx $00 ; 47E9 86 00 .. + dex ; 47EB CA . + stx $3F ; 47EC 86 3F .? + lda #$EE ; 47EE A9 EE .. + sta $1C0C ; 47F0 8D 0C 1C ... + lda $45 ; 47F3 A5 45 .E + cmp #$10 ; 47F5 C9 10 .. + beq L4803 ; 47F7 F0 0A .. + cmp #$30 ; 47F9 C9 30 .0 + beq L4800 ; 47FB F0 03 .. + jmp LF4CA ; 47FD 4C CA F4 L.. +; ---------------------------------------------------------------------------- +L4800: jmp LF3B1 ; 4800 4C B1 F3 L.. +; ---------------------------------------------------------------------------- +L4803: jsr LF5E9 ; 4803 20 E9 F5 .. + sta $3A ; 4806 85 3A .: + lda $1C00 ; 4808 AD 00 1C ... + and #$10 ; 480B 29 10 ). + bne L4813 ; 480D D0 04 .. + lda #$08 ; 480F A9 08 .. + bne L486A ; 4811 D0 57 .W +L4813: jsr LF78F ; 4813 20 8F F7 .. + jsr LF510 ; 4816 20 10 F5 .. + ldx #$09 ; 4819 A2 09 .. +L481B: bvc L481B ; 481B 50 FE P. + clv ; 481D B8 . + dex ; 481E CA . + bne L481B ; 481F D0 FA .. + lda #$FF ; 4821 A9 FF .. + sta $1C03 ; 4823 8D 03 1C ... + lda $1C0C ; 4826 AD 0C 1C ... + and #$1F ; 4829 29 1F ). + ora #$C0 ; 482B 09 C0 .. + sta $1C0C ; 482D 8D 0C 1C ... + lda #$FF ; 4830 A9 FF .. + ldx #$05 ; 4832 A2 05 .. + sta $1C01 ; 4834 8D 01 1C ... + clv ; 4837 B8 . +L4838: bvc L4838 ; 4838 50 FE P. + clv ; 483A B8 . + dex ; 483B CA . + bne L4838 ; 483C D0 FA .. + ldy #$BB ; 483E A0 BB .. +L4840: lda $0100,y ; 4840 B9 00 01 ... +L4843: bvc L4843 ; 4843 50 FE P. + clv ; 4845 B8 . + sta $1C01 ; 4846 8D 01 1C ... + iny ; 4849 C8 . + bne L4840 ; 484A D0 F4 .. +L484C: lda ($30),y ; 484C B1 30 .0 +L484E: bvc L484E ; 484E 50 FE P. + clv ; 4850 B8 . + sta $1C01 ; 4851 8D 01 1C ... + iny ; 4854 C8 . + bne L484C ; 4855 D0 F5 .. +L4857: bvc L4857 ; 4857 50 FE P. + lda $1C0C ; 4859 AD 0C 1C ... + ora #$E0 ; 485C 09 E0 .. + sta $1C0C ; 485E 8D 0C 1C ... + lda #$00 ; 4861 A9 00 .. + sta $1C03 ; 4863 8D 03 1C ... + sta $50 ; 4866 85 50 .P + lda #$01 ; 4868 A9 01 .. +L486A: sta $00 ; 486A 85 00 .. + rts ; 486C 60 ` +; ---------------------------------------------------------------------------- + lda $20 ; 486D A5 20 . + and #$20 ; 486F 29 20 ) + bne L4880 ; 4871 D0 0D .. + jsr LF97E ; 4873 20 7E F9 ~. + ldy #$80 ; 4876 A0 80 .. +L4878: dex ; 4878 CA . + bne L4878 ; 4879 D0 FD .. + dey ; 487B 88 . + bne L4878 ; 487C D0 FA .. + sty $3E ; 487E 84 3E .> +L4880: lda #$FF ; 4880 A9 FF .. + sta $48 ; 4882 85 48 .H + rts ; 4884 60 ` +; ---------------------------------------------------------------------------- + brk ; 4885 00 . + brk ; 4886 00 . + brk ; 4887 00 . + brk ; 4888 00 . + bit $88C6 ; 4889 2C C6 88 ,.. + bvs L488F ; 488C 70 01 p. + rts ; 488E 60 ` +; ---------------------------------------------------------------------------- +L488F: lda #$9C ; 488F A9 9C .. + sta $03 ; 4891 85 03 .. + lda #$07 ; 4893 A9 07 .. + sta $02 ; 4895 85 02 .. + ldy #$00 ; 4897 A0 00 .. + sty $04 ; 4899 84 04 .. + sty $05 ; 489B 84 05 .. + sty $07 ; 489D 84 07 .. + iny ; 489F C8 . + iny ; 48A0 C8 . + sty $06 ; 48A1 84 06 .. + iny ; 48A3 C8 . + sty $09 ; 48A4 84 09 .. + ldy $8489 ; 48A6 AC 89 84 ... + lda $88BF,y ; 48A9 B9 BF 88 ... + sta $08 ; 48AC 85 08 .. +L48AE: jsr StashRAM ; 48AE 20 C8 C2 .. + inc $05 ; 48B1 E6 05 .. + bne L48AE ; 48B3 D0 F9 .. + inc $08 ; 48B5 E6 08 .. + dec $09 ; 48B7 C6 09 .. + bne L48AE ; 48B9 D0 F3 .. + rts ; 48BB 60 ` +; ---------------------------------------------------------------------------- + ldy #$91 ; 48BC A0 91 .. + jsr L9C56 ; 48BE 20 56 9C V. + ldy #$00 ; 48C1 A0 00 .. + lda ($0A),y ; 48C3 B1 0A .. + iny ; 48C5 C8 . + ora ($0A),y ; 48C6 11 0A .. + rts ; 48C8 60 ` +; ---------------------------------------------------------------------------- + ldx #$00 ; 48C9 A2 00 .. + rts ; 48CB 60 ` +; ---------------------------------------------------------------------------- + ldy #$93 ; 48CC A0 93 .. + jsr L9C56 ; 48CE 20 56 9C V. + and #$20 ; 48D1 29 20 ) + rts ; 48D3 60 ` +; ---------------------------------------------------------------------------- + ldy #$90 ; 48D4 A0 90 .. + lda $03 ; 48D6 A5 03 .. + pha ; 48D8 48 H + lda $02 ; 48D9 A5 02 .. + pha ; 48DB 48 H + lda $05 ; 48DC A5 05 .. + pha ; 48DE 48 H + lda $04 ; 48DF A5 04 .. + pha ; 48E1 48 H + lda $07 ; 48E2 A5 07 .. + pha ; 48E4 48 H + lda $06 ; 48E5 A5 06 .. + pha ; 48E7 48 H + lda $08 ; 48E8 A5 08 .. + pha ; 48EA 48 H + tya ; 48EB 98 . + pha ; 48EC 48 H + ldy $04 ; 48ED A4 04 .. + dey ; 48EF 88 . + lda $9CB3,y ; 48F0 B9 B3 9C ... + clc ; 48F3 18 . + adc $05 ; 48F4 65 05 e. + sta $05 ; 48F6 85 05 .. + lda $9CD7,y ; 48F8 B9 D7 9C ... + ldy $8489 ; 48FB AC 89 84 ... + adc $88BF,y ; 48FE 79 BF 88 y.. + sta $08 ; 4901 85 08 .. + ldy #$00 ; 4903 A0 00 .. + sty $04 ; 4905 84 04 .. + sty $06 ; 4907 84 06 .. + iny ; 4909 C8 . + sty $07 ; 490A 84 07 .. + lda $0B ; 490C A5 0B .. + sta $03 ; 490E 85 03 .. + lda $0A ; 4910 A5 0A .. + sta $02 ; 4912 85 02 .. + pla ; 4914 68 h + tay ; 4915 A8 . + jsr DoRAMOp ; 4916 20 D4 C2 .. + tax ; 4919 AA . + pla ; 491A 68 h + sta $08 ; 491B 85 08 .. + pla ; 491D 68 h + sta $06 ; 491E 85 06 .. + pla ; 4920 68 h + sta $07 ; 4921 85 07 .. + pla ; 4923 68 h + sta $04 ; 4924 85 04 .. + pla ; 4926 68 h + sta $05 ; 4927 85 05 .. + pla ; 4929 68 h + sta $02 ; 492A 85 02 .. + pla ; 492C 68 h + sta $03 ; 492D 85 03 .. + txa ; 492F 8A . + ldx #$00 ; 4930 A2 00 .. + rts ; 4932 60 ` +; ---------------------------------------------------------------------------- + brk ; 4933 00 . + ora $2A,x ; 4934 15 2A .* + .byte $3F ; 4936 3F ? + .byte $54 ; 4937 54 T + adc #$7E ; 4938 69 7E i~ + .byte $93 ; 493A 93 . + tay ; 493B A8 . + lda $E7D2,x ; 493C BD D2 E7 ... + .byte $FC ; 493F FC . + ora ($26),y ; 4940 11 26 .& + .byte $3B ; 4942 3B ; + bvc L49AA ; 4943 50 65 Pe + sei ; 4945 78 x + .byte $8B ; 4946 8B . + .byte $9E ; 4947 9E . + lda ($C4),y ; 4948 B1 C4 .. + .byte $D7 ; 494A D7 . + nop ; 494B EA . + .byte $FC ; 494C FC . + asl $3220 ; 494D 0E 20 32 . 2 + .byte $44 ; 4950 44 D + lsr $67,x ; 4951 56 67 Vg + sei ; 4953 78 x + .byte $89 ; 4954 89 . + txs ; 4955 9A . + .byte $AB ; 4956 AB . + brk ; 4957 00 . + brk ; 4958 00 . + brk ; 4959 00 . + brk ; 495A 00 . + brk ; 495B 00 . + brk ; 495C 00 . + brk ; 495D 00 . + brk ; 495E 00 . + brk ; 495F 00 . + brk ; 4960 00 . + brk ; 4961 00 . + brk ; 4962 00 . + brk ; 4963 00 . + ora ($01,x) ; 4964 01 01 .. + ora ($01,x) ; 4966 01 01 .. + ora ($01,x) ; 4968 01 01 .. + ora ($01,x) ; 496A 01 01 .. + ora ($01,x) ; 496C 01 01 .. + ora ($01,x) ; 496E 01 01 .. + ora ($02,x) ; 4970 01 02 .. + .byte $02 ; 4972 02 . + .byte $02 ; 4973 02 . + .byte $02 ; 4974 02 . + .byte $02 ; 4975 02 . + .byte $02 ; 4976 02 . + .byte $02 ; 4977 02 . + .byte $02 ; 4978 02 . + .byte $02 ; 4979 02 . + .byte $02 ; 497A 02 . + brk ; 497B 00 . + brk ; 497C 00 . + brk ; 497D 00 . + brk ; 497E 00 . + brk ; 497F 00 . + brk ; 4980 00 . + brk ; 4981 00 . + brk ; 4982 00 . + brk ; 4983 00 . + brk ; 4984 00 . + brk ; 4985 00 . + brk ; 4986 00 . + brk ; 4987 00 . + brk ; 4988 00 . + brk ; 4989 00 . + brk ; 498A 00 . + .byte $A2 ; 498B A2 . diff --git a/_newconf/newconf/r2.info b/_newconf/newconf/r2.info new file mode 100644 index 00000000..48bb918b --- /dev/null +++ b/_newconf/newconf/r2.info @@ -0,0 +1,25 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r2.asm"; + INPUTNAME "configure.cvt.record.2"; + STARTADDR $3c80; + PAGELENGTH 0; # No paging + CPU "6502"; + COMMENTS 4; + + }; + +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/const.inc";}; +ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/diskdrv.inc";}; +ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geossym2.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/inputdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/printdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/dio.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geosmac.ca65.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geossym.inc";}; +ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/jumptab.inc";}; + +# One segment for the whole stuff +SEGMENT { START $13b1; END $FFFF; NAME "record1"; }; +RANGE { START $3ede; END $3eee; TYPE TEXTTABLE; }; + diff --git a/_newconf/newconf/r4.asm b/_newconf/newconf/r4.asm new file mode 100644 index 00000000..cc966410 --- /dev/null +++ b/_newconf/newconf/r4.asm @@ -0,0 +1,2268 @@ +; da65 V2.15 +; Created: 2017-06-30 22:34:00 +; Input file: configure.cvt.record.4 +; Page: 1 + + + .setcpu "6502" + +; ---------------------------------------------------------------------------- +CPU_DDR := $0000 +CPU_DATA := $0001 +r0L := $0002 +r0H := $0003 +r1L := $0004 +r1H := $0005 +r2L := $0006 +r2H := $0007 +r3L := $0008 +r3H := $0009 +r4L := $000A +r4H := $000B +r5L := $000C +r5H := $000D +r6L := $000E +r6H := $000F +r7L := $0010 +r7H := $0011 +r8L := $0012 +r8H := $0013 +r9L := $0014 +r9H := $0015 +r10L := $0016 +r10H := $0017 +r11L := $0018 +r11H := $0019 +r12L := $001A +r12H := $001B +r13L := $001C +r13H := $001D +r14L := $001E +r14H := $001F +r15L := $0020 +r15H := $0021 +curPattern := $0022 +string := $0024 +baselineOffset := $0026 +curSetWidth := $0027 +curHeight := $0029 +curIndexTable := $002A +cardDataPntr := $002C +currentMode := $002E +dispBufferOn := $002F +mouseOn := $0030 +msePicPtr := $0031 +windowTop := $0033 +windowBottom := $0034 +leftMargin := $0035 +rightMargin := $0037 +pressFlag := $0039 +mouseXPos := $003A +mouseYPos := $003C +returnAddress := $003D +graphMode := $003F +a2L := $0070 +a2H := $0071 +a3L := $0072 +a3H := $0073 +a4L := $0074 +a4H := $0075 +a5L := $0076 +a5H := $0077 +a6L := $0078 +a6H := $0079 +a7L := $007A +a7H := $007B +a8L := $007C +a8H := $007D +a9L := $007E +a9H := $007F +TURBO_DD00 := $008E ; from 1541 turbo +TURBO_DD00_CPY := $008F ; from 1541 turbo +STATUS := $0090 +curDevice := $00BA +a0L := $00FB +a0H := $00FC +a1L := $00FD +a1H := $00FE +irqvec := $0314 +bkvec := $0316 +nmivec := $0318 +L032B := $032B +L0354 := $0354 +L0362 := $0362 +L0368 := $0368 +L03AD := $03AD +L03ED := $03ED +L03FB := $03FB +L03FC := $03FC +L03FD := $03FD +L03FE := $03FE +L03FF := $03FF +APP_RAM := $0400 +L0402 := $0402 +L046A := $046A +L046E := $046E +L04B0 := $04B0 +L04B9 := $04B9 +L04BE := $04BE +L04D1 := $04D1 +L04E9 := $04E9 +BACK_SCR_BASE := $6000 +L6216 := $6216 +PRINTBASE := $7900 +diskBlkBuf := $8000 +fileHeader := $8100 +curDirHead := $8200 +fileTrScTab := $8300 +dirEntryBuf := $8400 +DrACurDkNm := $841E +DrBCurDkNm := $8430 +dataFileName := $8442 +dataDiskName := $8453 +PrntFilename := $8465 +PrntDiskName := $8476 +curDrive := $8489 +diskOpenFlg := $848A +isGEOS := $848B +interleave := $848C +NUMDRV := $848D +driveType := $848E +turboFlags := $8492 +curRecord := $8496 +usedRecords := $8497 +fileWritten := $8498 +fileSize := $8499 +appMain := $849B +intTopVector := $849D +intBotVector := $849F +mouseVector := $84A1 +keyVector := $84A3 +inputVector := $84A5 +mouseFaultVec := $84A7 +otherPressVec := $84A9 +StringFaultVec := $84AB +alarmTmtVector := $84AD +BRKVector := $84AF +RecoverVector := $84B1 +selectionFlash := $84B3 +alphaFlag := $84B4 +iconSelFlg := $84B5 +faultData := $84B6 +menuNumber := $84B7 +mouseTop := $84B8 +mouseBottom := $84B9 +mouseLeft := $84BA +mouseRight := $84BC +stringX := $84BE +stringY := $84C0 +mousePicData := $84C1 +maxMouseSpeed := $8501 +minMouseSpeed := $8502 +mouseAccel := $8503 +keyData := $8504 +mouseData := $8505 +inputData := $8506 +mouseSpeed := $8507 +random := $850A +saveFontTab := $850C +dblClickCount := $8515 +year := $8516 +month := $8517 +day := $8518 +hour := $8519 +minutes := $851A +seconds := $851B +alarmSetFlag := $851C +sysDBData := $851D +screencolors := $851E +dlgBoxRamBuf := $851F ; to $8697 +savedmoby2 := $88BB +scr80polar := $88BC +scr80colors := $88BD +vdcClrMode := $88BE +driveData := $88BF +ramExpSize := $88C3 +sysRAMFlg := $88C4 +firstBoot := $88C5 +curType := $88C6 +ramBase := $88C7 +inputDevName := $88CB +memBase := $88CF ; ??? +DrCCurDkNm := $88DC +DrDCurDkNm := $88EE +dir2Head := $8900 +spr0pic := $8A00 +spr1pic := $8A40 +spr2pic := $8A80 +spr3pic := $8AC0 +spr4pic := $8B00 +spr5pic := $8B40 +spr6pic := $8B80 +spr7pic := $8BC0 +COLOR_MATRIX := $8C00 +obj0Pointer := $8FF8 +obj1Pointer := $8FF9 +obj2Pointer := $8FFA +obj3Pointer := $8FFB +obj4Pointer := $8FFC +obj5Pointer := $8FFD +obj6Pointer := $8FFE +obj7Pointer := $8FFF +SCREEN_BASE := $A000 +OS_ROM := $C000 +bootName := $C006 +version := $C00F +nationality := $C010 +sysFlgCopy := $C012 +c128Flag := $C013 +dateCopy := $C018 +InterruptMain := $C100 +InitProcesses := $C103 +RestartProcess := $C106 +EnableProcess := $C109 +BlockProcess := $C10C +UnBlockProcess := $C10F +FreezeProcess := $C112 +UnFreezeProcess := $C115 +HorizontalLine := $C118 +InvertLine := $C11B +RecoverLine := $C11E +VerticalLine := $C121 +Rectangle := $C124 +FrameRectangle := $C127 +InvertRectangle := $C12A +RecoverRectangle:= $C12D +DrawLine := $C130 +DrawPoint := $C133 +GraphicsString := $C136 +SetPattern := $C139 +GetScanLine := $C13C +TestPoint := $C13F +BitmapUp := $C142 +PutChar := $C145 +PutString := $C148 +UseSystemFont := $C14B +StartMouseMode := $C14E +DoMenu := $C151 +RecoverMenu := $C154 +RecoverAllMenus := $C157 +DoIcons := $C15A +DShiftLeft := $C15D +BBMult := $C160 +BMult := $C163 +DMult := $C166 +Ddiv := $C169 +DSdiv := $C16C +Dabs := $C16F +Dnegate := $C172 +Ddec := $C175 +ClearRam := $C178 +FillRam := $C17B +MoveData := $C17E +InitRam := $C181 +PutDecimal := $C184 +GetRandom := $C187 +MouseUp := $C18A +MouseOff := $C18D +DoPreviousMenu := $C190 +ReDoMenu := $C193 +GetSerialNumber := $C196 +Sleep := $C199 +ClearMouseMode := $C19C +i_Rectangle := $C19F +i_FrameRectangle:= $C1A2 +i_RecoverRectangle:= $C1A5 +i_GraphicsString:= $C1A8 +i_BitmapUp := $C1AB +i_PutString := $C1AE +GetRealSize := $C1B1 +i_FillRam := $C1B4 +i_MoveData := $C1B7 +GetString := $C1BA +GotoFirstMenu := $C1BD +InitTextPrompt := $C1C0 +MainLoop := $C1C3 +DrawSprite := $C1C6 +GetCharWidth := $C1C9 +LoadCharSet := $C1CC +PosSprite := $C1CF +EnablSprite := $C1D2 +DisablSprite := $C1D5 +CallRoutine := $C1D8 +CalcBlksFree := $C1DB +ChkDkGEOS := $C1DE +NewDisk := $C1E1 +GetBlock := $C1E4 +PutBlock := $C1E7 +SetGEOSDisk := $C1EA +SaveFile := $C1ED +SetGDirEntry := $C1F0 +BldGDirEntry := $C1F3 +GetFreeDirBlk := $C1F6 +WriteFile := $C1F9 +BlkAlloc := $C1FC +ReadFile := $C1FF +SmallPutChar := $C202 +FollowChain := $C205 +GetFile := $C208 +FindFile := $C20B +CRC := $C20E +LdFile := $C211 +EnterTurbo := $C214 +LdDeskAcc := $C217 +ReadBlock := $C21A +LdApplic := $C21D +WriteBlock := $C220 +VerWriteBlock := $C223 +FreeFile := $C226 +GetFHdrInfo := $C229 +EnterDeskTop := $C22C +StartAppl := $C22F +ExitTurbo := $C232 +PurgeTurbo := $C235 +DeleteFile := $C238 +FindFTypes := $C23B +RstrAppl := $C23E +ToBASIC := $C241 +FastDelFile := $C244 +GetDirHead := $C247 +PutDirHead := $C24A +NxtBlkAlloc := $C24D +ImprintRectangle:= $C250 +i_ImprintRectangle:= $C253 +DoDlgBox := $C256 +RenameFile := $C259 +InitForIO := $C25C +DoneWithIO := $C25F +DShiftRight := $C262 +CopyString := $C265 +CopyFString := $C268 +CmpString := $C26B +CmpFString := $C26E +FirstInit := $C271 +OpenRecordFile := $C274 +CloseRecordFile := $C277 +NextRecord := $C27A +PreviousRecord := $C27D +PointRecord := $C280 +DeleteRecord := $C283 +InsertRecord := $C286 +AppendRecord := $C289 +ReadRecord := $C28C +WriteRecord := $C28F +SetNextFree := $C292 +UpdateRecordFile:= $C295 +GetPtrCurDkNm := $C298 +PromptOn := $C29B +PromptOff := $C29E +OpenDisk := $C2A1 +DoInlineReturn := $C2A4 +GetNextChar := $C2A7 +BitmapClip := $C2AA +FindBAMBit := $C2AD +SetDevice := $C2B0 +IsMseInRegion := $C2B3 +ReadByte := $C2B6 +FreeBlock := $C2B9 +ChangeDiskDevice:= $C2BC +RstrFrmDialogue := $C2BF +Panic := $C2C2 +BitOtherClip := $C2C5 +StashRAM := $C2C8 +FetchRAM := $C2CB +SwapRAM := $C2CE +VerifyRAM := $C2D1 +DoRAMOp := $C2D4 +TempHideMouse := $C2D7 +SetMousePicture := $C2DA +SetNewMode := $C2DD +NormalizeX := $C2E0 +MoveBData := $C2E3 +SwapBData := $C2E6 +VerifyBData := $C2E9 +DoBOp := $C2EC +AccessCache := $C2EF +HideOnlyMouse := $C2F2 +SetColorMode := $C2F5 +ColorCard := $C2F8 +ColorRectangle := $C2FB +vicbase := $D000 +mob0ypos := $D001 +mob1xpos := $D002 +mob1ypos := $D003 +mob2xpos := $D004 +mob2ypos := $D005 +mob3xpos := $D006 +mob3ypos := $D007 +mob4xpos := $D008 +mob4ypos := $D009 +mob5xpos := $D00A +mob5ypos := $D00B +mob6xpos := $D00C +mob6ypos := $D00D +mob7xpos := $D00E +mob7ypos := $D00F +msbxpos := $D010 +grcntrl1 := $D011 +rasreg := $D012 +lpxpos := $D013 +lpypos := $D014 +mobenble := $D015 +grcntrl2 := $D016 +moby2 := $D017 +grmemptr := $D018 +grirq := $D019 +grirqen := $D01A +mobprior := $D01B +mobmcm := $D01C +mobx2 := $D01D +mobmobcol := $D01E +mobbakcol := $D01F +extclr := $D020 +bakclr0 := $D021 +bakclr1 := $D022 +bakclr2 := $D023 +bakclr3 := $D024 +mcmclr0 := $D025 +mcmclr1 := $D026 +mob0clr := $D027 +mob1clr := $D028 +mob2clr := $D029 +mob3clr := $D02A +mob4clr := $D02B +mob5clr := $D02C +mob6clr := $D02D +mob7clr := $D02E +keyreg := $D02F +clkreg := $D030 +sidbase := $D400 +mmu := $D500 +vdcreg := $D600 +vdcdata := $D601 +ctab := $D800 +cia1base := $DC00 +cia2base := $DD00 +RAMC_BASE := $DE00 +EXP_BASE := $DF00 +MOUSE_BASE := $FE80 +config := $FF00 +LFF54 := $FF54 +LFF6C := $FF6C +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +OPEN := $FFC0 +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 +NMI_VECTOR := $FFFA +RESET_VECTOR := $FFFC +IRQ_VECTOR := $FFFE +; ---------------------------------------------------------------------------- + +.segment "record4": absolute + +_InitForIO: + .addr __InitForIO ; 9000 EF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 92 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 F3 96 .. +_PurgeTurbo: + .addr __PurgeTurbo ; 9006 68 97 h. +_EnterTurbo: + .addr __EnterTurbo ; 9008 E8 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 74 97 t. +_NewDisk: + .addr __NewDisk ; 900C E5 97 .. +_ReadBlock: + .addr __ReadBlock ; 900E D6 98 .. +_WriteBlock: + .addr __WriteBlock ; 9010 3A 99 :. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 69 99 i. +_OpenDisk: + .addr __OpenDisk ; 9014 16 91 .. +_GetBlock: + .addr __GetBlock ; 9016 8C 90 .. +_PutBlock: + .addr __PutBlock ; 9018 C4 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 64 90 d. +_PutDirHead: + .addr __PutDirHead ; 901C 9C 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E BC 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 73 94 s. +_FreeBlock: + .addr __FreeBlock ; 9022 29 94 ). +_SetNextFree: + .addr __SetNextFree ; 9024 64 93 d. +_FindBAMBit: + .addr __FindBAMBit ; 9026 31 94 1. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 6A 91 j. +_BlkAlloc: + .addr __BlkAlloc ; 902A 3D 91 =. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 8E 92 .. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E B1 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C 0F 92 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C 1E 92 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 68 92 Lh. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C 1D 93 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 84 90 L.. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C BC 90 L.. + +; ---------------------------------------------------------------------------- + jmp DUNK4_2 ; 9042 4C AB 97 L.. + +; ---------------------------------------------------------------------------- + jmp GetDOSError ; 9045 4C 6C 99 Ll. + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C E8 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C 0E 98 L.. + +; ---------------------------------------------------------------------------- + .byte $03 ; 904E 03 . + .byte "For Noelle & Dylan" ; 904F 46 6F 72 20 4E 6F 65 6C For Noel + ; 9057 6C 65 20 26 20 44 79 6C le & Dyl + ; 905F 61 6E an + .byte $00 ; 9061 00 . +; ---------------------------------------------------------------------------- + bpl __GetDirHead ; 9062 10 00 .. +__GetDirHead: + lda #$FF ; 9064 A9 FF .. + sta L9BFA ; 9066 8D FA 9B ... + jsr EnterTurbo ; 9069 20 14 C2 .. + txa ; 906C 8A . + bne L9083 ; 906D D0 14 .. + jsr InitForIO ; 906F 20 5C C2 \. + jsr SetDirHead_1 ; 9072 20 D4 90 .. + bne L907F ; 9075 D0 08 .. + jsr SetDirHead_2 ; 9077 20 DC 90 .. + bne L907F ; 907A D0 03 .. + jsr SetDirHead_3 ; 907C 20 E4 90 .. +L907F: jsr DoneWithIO ; 907F 20 5F C2 _. + txa ; 9082 8A . +L9083: rts ; 9083 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9084 A9 80 .. + sta r4H ; 9086 85 0B .. + lda #$00 ; 9088 A9 00 .. + sta r4L ; 908A 85 0A .. +__GetBlock: + jsr EnterTurbo ; 908C 20 14 C2 .. + bne L909A ; 908F D0 09 .. + jsr InitForIO ; 9091 20 5C C2 \. + jsr ReadBlock ; 9094 20 1A C2 .. + jsr DoneWithIO ; 9097 20 5F C2 _. +L909A: txa ; 909A 8A . + rts ; 909B 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + lda #$00 ; 909C A9 00 .. + sta L9BFA ; 909E 8D FA 9B ... + jsr EnterTurbo ; 90A1 20 14 C2 .. + txa ; 90A4 8A . + bne L90BB ; 90A5 D0 14 .. + jsr InitForIO ; 90A7 20 5C C2 \. + jsr SetDirHead_1 ; 90AA 20 D4 90 .. + bne L90B7 ; 90AD D0 08 .. + jsr SetDirHead_2 ; 90AF 20 DC 90 .. + bne L90B7 ; 90B2 D0 03 .. + jsr SetDirHead_3 ; 90B4 20 E4 90 .. +L90B7: jsr DoneWithIO ; 90B7 20 5F C2 _. + txa ; 90BA 8A . +L90BB: rts ; 90BB 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90BC A9 80 .. + sta r4H ; 90BE 85 0B .. + lda #$00 ; 90C0 A9 00 .. + sta r4L ; 90C2 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90C4 20 14 C2 .. + bne L90D2 ; 90C7 D0 09 .. + jsr InitForIO ; 90C9 20 5C C2 \. + jsr WriteBlock ; 90CC 20 20 C2 . + jsr DoneWithIO ; 90CF 20 5F C2 _. +L90D2: txa ; 90D2 8A . + rts ; 90D3 60 ` + +; ---------------------------------------------------------------------------- +SetDirHead_1: + ldx #$82 ; 90D4 A2 82 .. + ldy #$00 ; 90D6 A0 00 .. + lda #$00 ; 90D8 A9 00 .. + beq L90EA ; 90DA F0 0E .. +SetDirHead_2: + ldx #$89 ; 90DC A2 89 .. + ldy #$00 ; 90DE A0 00 .. + lda #$01 ; 90E0 A9 01 .. + bne L90EA ; 90E2 D0 06 .. +SetDirHead_3: + ldx #$9C ; 90E4 A2 9C .. + ldy #$80 ; 90E6 A0 80 .. + lda #$02 ; 90E8 A9 02 .. +L90EA: stx r4H ; 90EA 86 0B .. + sty r4L ; 90EC 84 0A .. + sta r1H ; 90EE 85 05 .. + lda #$28 ; 90F0 A9 28 .( + sta r1L ; 90F2 85 04 .. + bit L9BFA ; 90F4 2C FA 9B ,.. + bmi L90FE ; 90F7 30 05 0. + jsr __WriteBlock ; 90F9 20 3A 99 :. + txa ; 90FC 8A . + rts ; 90FD 60 ` + +; ---------------------------------------------------------------------------- +L90FE: jsr __ReadBlock ; 90FE 20 D6 98 .. + txa ; 9101 8A . + rts ; 9102 60 ` + +; ---------------------------------------------------------------------------- +CheckParams_1: + lda #$00 ; 9103 A9 00 .. + sta L9BFC ; 9105 8D FC 9B ... + ldx #$02 ; 9108 A2 02 .. + lda r1L ; 910A A5 04 .. + beq L9114 ; 910C F0 06 .. + cmp #$51 ; 910E C9 51 .Q + bcs L9114 ; 9110 B0 02 .. + sec ; 9112 38 8 + rts ; 9113 60 ` + +; ---------------------------------------------------------------------------- +L9114: clc ; 9114 18 . + rts ; 9115 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9116 20 E1 C1 .. + txa ; 9119 8A . + bne L913C ; 911A D0 20 . + jsr GetDirHead ; 911C 20 47 C2 G. + bne L913C ; 911F D0 1B .. + jsr L9286 ; 9121 20 86 92 .. + lda #$82 ; 9124 A9 82 .. + sta r4H ; 9126 85 0B .. + lda #$90 ; 9128 A9 90 .. + sta r4L ; 912A 85 0A .. + ldx #$0C ; 912C A2 0C .. + jsr GetPtrCurDkNm ; 912E 20 98 C2 .. + ldy #$12 ; 9131 A0 12 .. +L9133: lda (r4L),y ; 9133 B1 0A .. + sta (r5L),y ; 9135 91 0C .. + dey ; 9137 88 . + bpl L9133 ; 9138 10 F9 .. + ldx #$00 ; 913A A2 00 .. +L913C: rts ; 913C 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 913D 68 h + sta r3L ; 913E 85 08 .. + pla ; 9140 68 h + sta r3H ; 9141 85 09 .. + lda r3H ; 9143 A5 09 .. + pha ; 9145 48 H + lda r3L ; 9146 A5 08 .. + pha ; 9148 48 H + lda r3L ; 9149 A5 08 .. + sec ; 914B 38 8 + sbc $C1EE ; 914C ED EE C1 ... + sta r3L ; 914F 85 08 .. + lda r3H ; 9151 A5 09 .. + sbc $C1EF ; 9153 ED EF C1 ... + sta r3H ; 9156 85 09 .. + ldy #$27 ; 9158 A0 27 .' + lda r3H ; 915A A5 09 .. + beq L9160 ; 915C F0 02 .. + ldy #$23 ; 915E A0 23 .# +L9160: sty r3L ; 9160 84 08 .. + ldy #$00 ; 9162 A0 00 .. + sty r3H ; 9164 84 09 .. + lda #$02 ; 9166 A9 02 .. + bne L916C ; 9168 D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 916A A9 00 .. +L916C: sta L9C01 ; 916C 8D 01 9C ... + lda r9H ; 916F A5 15 .. + pha ; 9171 48 H + lda r9L ; 9172 A5 14 .. + pha ; 9174 48 H + lda r3H ; 9175 A5 09 .. + pha ; 9177 48 H + lda r3L ; 9178 A5 08 .. + pha ; 917A 48 H + lda #$00 ; 917B A9 00 .. + sta r3H ; 917D 85 09 .. + lda #$FE ; 917F A9 FE .. + sta r3L ; 9181 85 08 .. + ldx #$06 ; 9183 A2 06 .. + ldy #$08 ; 9185 A0 08 .. + .byte $20 ; 9187 20 +L9188: adc #$C1 ; 9188 69 C1 i. + lda r8L ; 918A A5 12 .. + beq L9194 ; 918C F0 06 .. + inc r2L ; 918E E6 06 .. + bne L9194 ; 9190 D0 02 .. + inc r2H ; 9192 E6 07 .. +L9194: jsr L9286 ; 9194 20 86 92 .. + pla ; 9197 68 h + sta r3L ; 9198 85 08 .. + pla ; 919A 68 h + sta r3H ; 919B 85 09 .. + ldx #$03 ; 919D A2 03 .. + lda r2H ; 919F A5 07 .. + cmp r4H ; 91A1 C5 0B .. + bne L91A9 ; 91A3 D0 04 .. + lda r2L ; 91A5 A5 06 .. + cmp r4L ; 91A7 C5 0A .. +L91A9: beq L91AD ; 91A9 F0 02 .. + bcs L9208 ; 91AB B0 5B .[ +L91AD: lda r6H ; 91AD A5 0F .. + sta r4H ; 91AF 85 0B .. + lda r6L ; 91B1 A5 0E .. + sta r4L ; 91B3 85 0A .. + lda r2H ; 91B5 A5 07 .. + sta r5H ; 91B7 85 0D .. + lda r2L ; 91B9 A5 06 .. + sta r5L ; 91BB 85 0C .. +L91BD: jsr SetNextFree ; 91BD 20 92 C2 .. + txa ; 91C0 8A . + bne L9208 ; 91C1 D0 45 .E + ldy #$00 ; 91C3 A0 00 .. + lda r3L ; 91C5 A5 08 .. + sta (r4L),y ; 91C7 91 0A .. + iny ; 91C9 C8 . + lda r3H ; 91CA A5 09 .. + sta (r4L),y ; 91CC 91 0A .. + clc ; 91CE 18 . + lda #$02 ; 91CF A9 02 .. + adc r4L ; 91D1 65 0A e. + sta r4L ; 91D3 85 0A .. + bcc L91D9 ; 91D5 90 02 .. + inc r4H ; 91D7 E6 0B .. +L91D9: lda L9C01 ; 91D9 AD 01 9C ... + beq L91E7 ; 91DC F0 09 .. + dec L9C01 ; 91DE CE 01 9C ... + bne L91E7 ; 91E1 D0 04 .. + lda #$23 ; 91E3 A9 23 .# + sta r3L ; 91E5 85 08 .. +L91E7: lda r5L ; 91E7 A5 0C .. + bne L91ED ; 91E9 D0 02 .. + dec r5H ; 91EB C6 0D .. +L91ED: dec r5L ; 91ED C6 0C .. + lda r5L ; 91EF A5 0C .. + ora r5H ; 91F1 05 0D .. + bne L91BD ; 91F3 D0 C8 .. + ldy #$00 ; 91F5 A0 00 .. + tya ; 91F7 98 . + sta (r4L),y ; 91F8 91 0A .. + iny ; 91FA C8 . + lda r8L ; 91FB A5 12 .. + bne L9201 ; 91FD D0 02 .. + lda #$FE ; 91FF A9 FE .. +L9201: clc ; 9201 18 . + adc #$01 ; 9202 69 01 i. + sta (r4L),y ; 9204 91 0A .. + ldx #$00 ; 9206 A2 00 .. +L9208: pla ; 9208 68 h + sta r9L ; 9209 85 14 .. + pla ; 920B 68 h + sta r9H ; 920C 85 15 .. + rts ; 920E 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$28 ; 920F A9 28 .( + sta r1L ; 9211 85 04 .. + lda #$03 ; 9213 A9 03 .. + sta r1H ; 9215 85 05 .. + lda #$00 ; 9217 A9 00 .. + sta L9C02 ; 9219 8D 02 9C ... + beq L925A ; 921C F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 921E A2 00 .. + ldy #$00 ; 9220 A0 00 .. + clc ; 9222 18 . + lda #$20 ; 9223 A9 20 . + adc r5L ; 9225 65 0C e. + sta r5L ; 9227 85 0C .. + bcc L922D ; 9229 90 02 .. + inc r5H ; 922B E6 0D .. +L922D: lda r5H ; 922D A5 0D .. + cmp #$80 ; 922F C9 80 .. + bne L9237 ; 9231 D0 04 .. + lda r5L ; 9233 A5 0C .. + cmp #$FF ; 9235 C9 FF .. +L9237: bcc L9267 ; 9237 90 2E .. + ldy #$FF ; 9239 A0 FF .. + lda $8001 ; 923B AD 01 80 ... + sta r1H ; 923E 85 05 .. + lda diskBlkBuf ; 9240 AD 00 80 ... + sta r1L ; 9243 85 04 .. + bne L925A ; 9245 D0 13 .. + lda L9C02 ; 9247 AD 02 9C ... + bne L9267 ; 924A D0 1B .. + lda #$FF ; 924C A9 FF .. + sta L9C02 ; 924E 8D 02 9C ... + jsr GetBorder ; 9251 20 36 90 6. + txa ; 9254 8A . + bne L9267 ; 9255 D0 10 .. + tya ; 9257 98 . + bne L9267 ; 9258 D0 0D .. +L925A: jsr ReadBuff ; 925A 20 3C 90 <. + ldy #$00 ; 925D A0 00 .. + lda #$80 ; 925F A9 80 .. + sta r5H ; 9261 85 0D .. + lda #$02 ; 9263 A9 02 .. + sta r5L ; 9265 85 0C .. +L9267: rts ; 9267 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9268 20 47 C2 G. + txa ; 926B 8A . + bne L9285 ; 926C D0 17 .. + jsr L9286 ; 926E 20 86 92 .. + bne L9277 ; 9271 D0 04 .. + ldy #$FF ; 9273 A0 FF .. + bne L9283 ; 9275 D0 0C .. +L9277: lda $82AC ; 9277 AD AC 82 ... + sta r1H ; 927A 85 05 .. + lda $82AB ; 927C AD AB 82 ... + sta r1L ; 927F 85 04 .. + ldy #$00 ; 9281 A0 00 .. +L9283: ldx #$00 ; 9283 A2 00 .. +L9285: rts ; 9285 60 ` + +; ---------------------------------------------------------------------------- +L9286: lda #$82 ; 9286 A9 82 .. + sta r5H ; 9288 85 0D .. + lda #$00 ; 928A A9 00 .. + sta r5L ; 928C 85 0C .. +__ChkDkGEOS: + ldy #$AD ; 928E A0 AD .. + ldx #$00 ; 9290 A2 00 .. + stx isGEOS ; 9292 8E 8B 84 ... +L9295: lda (r5L),y ; 9295 B1 0C .. + cmp GEOSDiskID,x ; 9297 DD AB 92 ... + bne L92A7 ; 929A D0 0B .. + iny ; 929C C8 . + inx ; 929D E8 . + cpx #$0B ; 929E E0 0B .. + bne L9295 ; 92A0 D0 F3 .. + lda #$FF ; 92A2 A9 FF .. + sta isGEOS ; 92A4 8D 8B 84 ... +L92A7: lda isGEOS ; 92A7 AD 8B 84 ... + rts ; 92AA 60 ` + +; ---------------------------------------------------------------------------- +GEOSDiskID: + .byte "GEOS format V1.0" ; 92AB 47 45 4F 53 20 66 6F 72 GEOS for + ; 92B3 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 92BB 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 92BC 08 . + sei ; 92BD 78 x + lda r6L ; 92BE A5 0E .. + pha ; 92C0 48 H + lda r2H ; 92C1 A5 07 .. + pha ; 92C3 48 H + lda r2L ; 92C4 A5 06 .. + pha ; 92C6 48 H + ldx r10L ; 92C7 A6 16 .. + inx ; 92C9 E8 . + stx r6L ; 92CA 86 0E .. + lda #$28 ; 92CC A9 28 .( + sta r1L ; 92CE 85 04 .. + lda #$03 ; 92D0 A9 03 .. + sta r1H ; 92D2 85 05 .. +L92D4: jsr ReadBuff ; 92D4 20 3C 90 <. +L92D7: txa ; 92D7 8A . + bne L9312 ; 92D8 D0 38 .8 + dec r6L ; 92DA C6 0E .. + beq L92F3 ; 92DC F0 15 .. +L92DE: lda diskBlkBuf ; 92DE AD 00 80 ... + bne L92E9 ; 92E1 D0 06 .. + jsr AddDirBlock ; 92E3 20 39 90 9. + clv ; 92E6 B8 . + bvc L92D7 ; 92E7 50 EE P. +L92E9: sta r1L ; 92E9 85 04 .. + lda $8001 ; 92EB AD 01 80 ... + sta r1H ; 92EE 85 05 .. + clv ; 92F0 B8 . + bvc L92D4 ; 92F1 50 E1 P. +L92F3: ldy #$02 ; 92F3 A0 02 .. + ldx #$00 ; 92F5 A2 00 .. +L92F7: lda diskBlkBuf,y ; 92F7 B9 00 80 ... + beq L9312 ; 92FA F0 16 .. + tya ; 92FC 98 . + clc ; 92FD 18 . + adc #$20 ; 92FE 69 20 i + tay ; 9300 A8 . + bcc L92F7 ; 9301 90 F4 .. + lda #$01 ; 9303 A9 01 .. + sta r6L ; 9305 85 0E .. + ldx #$04 ; 9307 A2 04 .. + ldy r10L ; 9309 A4 16 .. + iny ; 930B C8 . + sty r10L ; 930C 84 16 .. + cpy #$12 ; 930E C0 12 .. + bcc L92DE ; 9310 90 CC .. +L9312: pla ; 9312 68 h + sta r2L ; 9313 85 06 .. + pla ; 9315 68 h + sta r2H ; 9316 85 07 .. + pla ; 9318 68 h + sta r6L ; 9319 85 0E .. + plp ; 931B 28 ( + rts ; 931C 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 931D A5 0F .. + pha ; 931F 48 H + lda r6L ; 9320 A5 0E .. + pha ; 9322 48 H + ldx #$04 ; 9323 A2 04 .. + lda $89FA ; 9325 AD FA 89 ... + beq ClearAndWrite ; 9328 F0 22 ." + lda r1H ; 932A A5 05 .. + sta r3H ; 932C 85 09 .. + lda r1L ; 932E A5 04 .. + sta r3L ; 9330 85 08 .. + jsr SetNextFree ; 9332 20 92 C2 .. + pla ; 9335 68 h + sta r6L ; 9336 85 0E .. + pla ; 9338 68 h + sta r6H ; 9339 85 0F .. + lda r3H ; 933B A5 09 .. + sta $8001 ; 933D 8D 01 80 ... + lda r3L ; 9340 A5 08 .. + sta diskBlkBuf ; 9342 8D 00 80 ... + jsr WriteBuff ; 9345 20 3F 90 ?. + txa ; 9348 8A . + beq ClearAndWrite ; 9349 F0 01 .. + rts ; 934B 60 ` + +; ---------------------------------------------------------------------------- +ClearAndWrite: + lda r3H ; 934C A5 09 .. + sta r1H ; 934E 85 05 .. + lda r3L ; 9350 A5 08 .. + sta r1L ; 9352 85 04 .. +L9354: lda #$00 ; 9354 A9 00 .. + tay ; 9356 A8 . +L9357: sta diskBlkBuf,y ; 9357 99 00 80 ... + iny ; 935A C8 . + bne L9357 ; 935B D0 FA .. + dey ; 935D 88 . + sty $8001 ; 935E 8C 01 80 ... + jmp WriteBuff ; 9361 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L936E ; 9364 20 6E 93 n. + bne L936A ; 9367 D0 01 .. + rts ; 9369 60 ` + +; ---------------------------------------------------------------------------- +L936A: lda #$27 ; 936A A9 27 .' + sta r3L ; 936C 85 08 .. +L936E: ldy r3H ; 936E A4 09 .. + iny ; 9370 C8 . + sty r6H ; 9371 84 0F .. + lda r3L ; 9373 A5 08 .. + sta r6L ; 9375 85 0E .. + cmp #$28 ; 9377 C9 28 .( + beq L9381 ; 9379 F0 06 .. +L937B: lda r6L ; 937B A5 0E .. + cmp #$28 ; 937D C9 28 .( + beq L93B2 ; 937F F0 31 .1 +L9381: cmp #$29 ; 9381 C9 29 .) + bcc L9388 ; 9383 90 03 .. + sec ; 9385 38 8 + sbc #$28 ; 9386 E9 28 .( +L9388: sec ; 9388 38 8 + sbc #$01 ; 9389 E9 01 .. + asl a ; 938B 0A . + sta r7L ; 938C 85 10 .. + asl a ; 938E 0A . + clc ; 938F 18 . + adc r7L ; 9390 65 10 e. + tax ; 9392 AA . + lda r6L ; 9393 A5 0E .. + cmp #$29 ; 9395 C9 29 .) + bcc L939F ; 9397 90 06 .. + lda $9C90,x ; 9399 BD 90 9C ... + clv ; 939C B8 . + bvc L93A2 ; 939D 50 03 P. +L939F: lda $8910,x ; 939F BD 10 89 ... +L93A2: beq L93B2 ; 93A2 F0 0E .. + ldy #$28 ; 93A4 A0 28 .( + sty r7L ; 93A6 84 10 .. +L93A8: jsr SNxtFreeHelp ; 93A8 20 DA 93 .. + beq L93CC ; 93AB F0 1F .. + inc r6H ; 93AD E6 0F .. + dey ; 93AF 88 . + bne L93A8 ; 93B0 D0 F6 .. +L93B2: ldy r6L ; 93B2 A4 0E .. + cpy #$29 ; 93B4 C0 29 .) + bcs L93BF ; 93B6 B0 07 .. + dey ; 93B8 88 . + bne L93C4 ; 93B9 D0 09 .. + ldy #$29 ; 93BB A0 29 .) + bne L93C4 ; 93BD D0 05 .. +L93BF: iny ; 93BF C8 . + cpy #$51 ; 93C0 C0 51 .Q + bcs L93D7 ; 93C2 B0 13 .. +L93C4: sty r6L ; 93C4 84 0E .. + ldy #$00 ; 93C6 A0 00 .. + sty r6H ; 93C8 84 0F .. + beq L937B ; 93CA F0 AF .. +L93CC: lda r6H ; 93CC A5 0F .. + sta r3H ; 93CE 85 09 .. + lda r6L ; 93D0 A5 0E .. + sta r3L ; 93D2 85 08 .. + ldx #$00 ; 93D4 A2 00 .. + rts ; 93D6 60 ` + +; ---------------------------------------------------------------------------- +L93D7: ldx #$03 ; 93D7 A2 03 .. + rts ; 93D9 60 ` + +; ---------------------------------------------------------------------------- +SNxtFreeHelp: + lda r6H ; 93DA A5 0F .. +L93DC: cmp r7L ; 93DC C5 10 .. + bcc L93E6 ; 93DE 90 06 .. + sec ; 93E0 38 8 + sbc r7L ; 93E1 E5 10 .. + clv ; 93E3 B8 . + bvc L93DC ; 93E4 50 F6 P. +L93E6: sta r6H ; 93E6 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93E8 20 AD C2 .. + bne L93F0 ; 93EB D0 03 .. + ldx #$06 ; 93ED A2 06 .. + rts ; 93EF 60 ` + +; ---------------------------------------------------------------------------- +L93F0: php ; 93F0 08 . + lda r6L ; 93F1 A5 0E .. + cmp #$29 ; 93F3 C9 29 .) + bcc L9410 ; 93F5 90 19 .. + lda r8H ; 93F7 A5 13 .. + eor $9C90,x ; 93F9 5D 90 9C ].. + sta $9C90,x ; 93FC 9D 90 9C ... + ldx r7H ; 93FF A6 11 .. + plp ; 9401 28 ( + beq L940A ; 9402 F0 06 .. + dec $9C90,x ; 9404 DE 90 9C ... + ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +L940A: inc $9C90,x ; 940A FE 90 9C ... + ldx #$00 ; 940D A2 00 .. + rts ; 940F 60 ` + +; ---------------------------------------------------------------------------- +L9410: lda r8H ; 9410 A5 13 .. + eor $8910,x ; 9412 5D 10 89 ].. + sta $8910,x ; 9415 9D 10 89 ... + ldx r7H ; 9418 A6 11 .. + plp ; 941A 28 ( + beq L9423 ; 941B F0 06 .. + dec $8910,x ; 941D DE 10 89 ... + ldx #$00 ; 9420 A2 00 .. + rts ; 9422 60 ` + +; ---------------------------------------------------------------------------- +L9423: inc $8910,x ; 9423 FE 10 89 ... + ldx #$00 ; 9426 A2 00 .. + rts ; 9428 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 9429 20 AD C2 .. + beq L93F0 ; 942C F0 C2 .. + ldx #$06 ; 942E A2 06 .. + rts ; 9430 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9431 A5 0F .. + and #$07 ; 9433 29 07 ). + tax ; 9435 AA . + lda FBBBitTab,x ; 9436 BD 6B 94 .k. + sta r8H ; 9439 85 13 .. + lda r6L ; 943B A5 0E .. + cmp #$29 ; 943D C9 29 .) + bcc L9444 ; 943F 90 03 .. + sec ; 9441 38 8 + sbc #$28 ; 9442 E9 28 .( +L9444: sec ; 9444 38 8 + sbc #$01 ; 9445 E9 01 .. + asl a ; 9447 0A . + sta r7H ; 9448 85 11 .. + asl a ; 944A 0A . + clc ; 944B 18 . + adc r7H ; 944C 65 11 e. + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda r6L ; 9459 A5 0E .. + cmp #$29 ; 945B C9 29 .) + bcc L9465 ; 945D 90 06 .. + lda $9C90,x ; 945F BD 90 9C ... + and r8H ; 9462 25 13 %. + rts ; 9464 60 ` + +; ---------------------------------------------------------------------------- +L9465: lda $8910,x ; 9465 BD 10 89 ... + and r8H ; 9468 25 13 %. + rts ; 946A 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 946B 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9473 A9 00 .. + sta r4L ; 9475 85 0A .. + sta r4H ; 9477 85 0B .. + ldy #$10 ; 9479 A0 10 .. +L947B: lda dir2Head,y ; 947B B9 00 89 ... + clc ; 947E 18 . + adc r4L ; 947F 65 0A e. + sta r4L ; 9481 85 0A .. + bcc L9487 ; 9483 90 02 .. + inc r4H ; 9485 E6 0B .. +L9487: tya ; 9487 98 . + clc ; 9488 18 . + adc #$06 ; 9489 69 06 i. + tay ; 948B A8 . + cpy #$FA ; 948C C0 FA .. + beq L9487 ; 948E F0 F7 .. + tay ; 9490 A8 . + bne L947B ; 9491 D0 E8 .. + ldy #$10 ; 9493 A0 10 .. +L9495: lda $9C80,y ; 9495 B9 80 9C ... + clc ; 9498 18 . + adc r4L ; 9499 65 0A e. + sta r4L ; 949B 85 0A .. + bcc L94A1 ; 949D 90 02 .. + inc r4H ; 949F E6 0B .. +L94A1: tya ; 94A1 98 . + clc ; 94A2 18 . + adc #$06 ; 94A3 69 06 i. + tay ; 94A5 A8 . + bne L9495 ; 94A6 D0 ED .. + lda #$0C ; 94A8 A9 0C .. + sta r3H ; 94AA 85 09 .. + lda #$58 ; 94AC A9 58 .X + sta r3L ; 94AE 85 08 .. + rts ; 94B0 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94B1 20 47 C2 G. + txa ; 94B4 8A . + bne L94EE ; 94B5 D0 37 .7 + lda #$28 ; 94B7 A9 28 .( + sta r3L ; 94B9 85 08 .. + lda #$12 ; 94BB A9 12 .. + sta r3H ; 94BD 85 09 .. + jsr SetNextFree ; 94BF 20 92 C2 .. + txa ; 94C2 8A . + bne L94EE ; 94C3 D0 29 .) + lda r3H ; 94C5 A5 09 .. + sta r1H ; 94C7 85 05 .. + lda r3L ; 94C9 A5 08 .. + sta r1L ; 94CB 85 04 .. + jsr L9354 ; 94CD 20 54 93 T. + txa ; 94D0 8A . + bne L94EE ; 94D1 D0 1B .. + lda r1H ; 94D3 A5 05 .. + sta $82AC ; 94D5 8D AC 82 ... + lda r1L ; 94D8 A5 04 .. + sta $82AB ; 94DA 8D AB 82 ... + ldy #$BC ; 94DD A0 BC .. + ldx #$0F ; 94DF A2 0F .. +L94E1: lda GEOSDiskID,x ; 94E1 BD AB 92 ... + sta curDirHead,y ; 94E4 99 00 82 ... + dey ; 94E7 88 . + dex ; 94E8 CA . + bpl L94E1 ; 94E9 10 F6 .. + jmp PutDirHead ; 94EB 4C 4A C2 LJ. + +; ---------------------------------------------------------------------------- +L94EE: rts ; 94EE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + php ; 94EF 08 . + pla ; 94F0 68 h + sta L9BF0 ; 94F1 8D F0 9B ... + sei ; 94F4 78 x + lda CPU_DATA ; 94F5 A5 01 .. + sta L9BF2 ; 94F7 8D F2 9B ... + lda #$36 ; 94FA A9 36 .6 + sta CPU_DATA ; 94FC 85 01 .. + lda grirqen ; 94FE AD 1A D0 ... + sta L9BF1 ; 9501 8D F1 9B ... + lda clkreg ; 9504 AD 30 D0 .0. + sta L9BEF ; 9507 8D EF 9B ... + ldy #$00 ; 950A A0 00 .. + sty clkreg ; 950C 8C 30 D0 .0. + sty grirqen ; 950F 8C 1A D0 ... + lda #$7F ; 9512 A9 7F .. + sta grirq ; 9514 8D 19 D0 ... + sta $DC0D ; 9517 8D 0D DC ... + sta $DD0D ; 951A 8D 0D DD ... + lda #$95 ; 951D A9 95 .. + sta $0315 ; 951F 8D 15 03 ... + lda #$8C ; 9522 A9 8C .. + sta irqvec ; 9524 8D 14 03 ... + lda #$95 ; 9527 A9 95 .. + sta $0319 ; 9529 8D 19 03 ... + lda #$91 ; 952C A9 91 .. + sta nmivec ; 952E 8D 18 03 ... + lda #$3F ; 9531 A9 3F .? + sta $DD02 ; 9533 8D 02 DD ... + lda mobenble ; 9536 AD 15 D0 ... + sta L9BF3 ; 9539 8D F3 9B ... + sty mobenble ; 953C 8C 15 D0 ... + sty $DD05 ; 953F 8C 05 DD ... + iny ; 9542 C8 . + sty $DD04 ; 9543 8C 04 DD ... + lda #$81 ; 9546 A9 81 .. + sta $DD0D ; 9548 8D 0D DD ... + lda #$09 ; 954B A9 09 .. + sta $DD0E ; 954D 8D 0E DD ... + ldy #$2C ; 9550 A0 2C ., +L9552: lda rasreg ; 9552 AD 12 D0 ... + cmp TURBO_DD00_CPY ; 9555 C5 8F .. + beq L9552 ; 9557 F0 F9 .. + sta TURBO_DD00_CPY ; 9559 85 8F .. + dey ; 955B 88 . + bne L9552 ; 955C D0 F4 .. + lda cia2base ; 955E AD 00 DD ... + and #$07 ; 9561 29 07 ). + sta TURBO_DD00 ; 9563 85 8E .. + sta L9870 ; 9565 8D 70 98 .p. + sta L9877 ; 9568 8D 77 98 .w. + ora #$30 ; 956B 09 30 .0 + sta TURBO_DD00_CPY ; 956D 85 8F .. + sta L985C ; 956F 8D 5C 98 .\. + lda TURBO_DD00 ; 9572 A5 8E .. + ora #$10 ; 9574 09 10 .. + sta L9BF9 ; 9576 8D F9 9B ... + sta L9881 ; 9579 8D 81 98 ... + ldy #$1F ; 957C A0 1F .. +L957E: lda L982E,y ; 957E B9 2E 98 ... + and #$F0 ; 9581 29 F0 ). + ora TURBO_DD00 ; 9583 05 8E .. + sta L982E,y ; 9585 99 2E 98 ... + dey ; 9588 88 . + bpl L957E ; 9589 10 F3 .. + rts ; 958B 60 ` + +; ---------------------------------------------------------------------------- +D_IRQHandler: + pla ; 958C 68 h + tay ; 958D A8 . + pla ; 958E 68 h + tax ; 958F AA . + pla ; 9590 68 h +D_NMIHandler: + rti ; 9591 40 @ + +; ---------------------------------------------------------------------------- +__DoneWithIO: + sei ; 9592 78 x + lda L9BEF ; 9593 AD EF 9B ... + sta clkreg ; 9596 8D 30 D0 .0. + lda L9BF3 ; 9599 AD F3 9B ... + sta mobenble ; 959C 8D 15 D0 ... + lda #$7F ; 959F A9 7F .. + sta $DD0D ; 95A1 8D 0D DD ... + lda $DD0D ; 95A4 AD 0D DD ... + lda L9BF1 ; 95A7 AD F1 9B ... + sta grirqen ; 95AA 8D 1A D0 ... + lda L9BF2 ; 95AD AD F2 9B ... + sta CPU_DATA ; 95B0 85 01 .. + lda L9BF0 ; 95B2 AD F0 9B ... + pha ; 95B5 48 H + plp ; 95B6 28 ( + rts ; 95B7 60 ` + +; ---------------------------------------------------------------------------- +SendDOSCmd: + stx $8C ; 95B8 86 8C .. + sta $8B ; 95BA 85 8B .. + lda #$00 ; 95BC A9 00 .. + sta STATUS ; 95BE 85 90 .. + lda curDrive ; 95C0 AD 89 84 ... + jsr LISTEN ; 95C3 20 B1 FF .. + bit STATUS ; 95C6 24 90 $. + bmi L95E2 ; 95C8 30 18 0. + lda #$FF ; 95CA A9 FF .. + jsr SECOND ; 95CC 20 93 FF .. + bit STATUS ; 95CF 24 90 $. + bmi L95E2 ; 95D1 30 0F 0. + ldy #$00 ; 95D3 A0 00 .. +L95D5: lda ($8B),y ; 95D5 B1 8B .. + jsr CIOUT ; 95D7 20 A8 FF .. + iny ; 95DA C8 . + cpy #$05 ; 95DB C0 05 .. + bcc L95D5 ; 95DD 90 F6 .. + ldx #$00 ; 95DF A2 00 .. + rts ; 95E1 60 ` + +; ---------------------------------------------------------------------------- +L95E2: jsr UNLSN ; 95E2 20 AE FF .. + ldx #$0D ; 95E5 A2 0D .. + rts ; 95E7 60 ` + +; ---------------------------------------------------------------------------- +__EnterTurbo: + lda curDrive ; 95E8 AD 89 84 ... + jsr SetDevice ; 95EB 20 B0 C2 .. + ldx curDrive ; 95EE AE 89 84 ... + lda diskOpenFlg,x ; 95F1 BD 8A 84 ... + bmi L9604 ; 95F4 30 0E 0. + jsr SendCODE ; 95F6 20 69 96 i. + txa ; 95F9 8A . + bne L963B ; 95FA D0 3F .? + ldx curDrive ; 95FC AE 89 84 ... + lda #$80 ; 95FF A9 80 .. + sta diskOpenFlg,x ; 9601 9D 8A 84 ... +L9604: and #$40 ; 9604 29 40 )@ + bne L9634 ; 9606 D0 2C ., + jsr InitForIO ; 9608 20 5C C2 \. + ldx #$96 ; 960B A2 96 .. + lda #$3D ; 960D A9 3D .= + jsr SendDOSCmd ; 960F 20 B8 95 .. + txa ; 9612 8A . + bne L9638 ; 9613 D0 23 .# + jsr UNLSN ; 9615 20 AE FF .. + sei ; 9618 78 x + ldy #$21 ; 9619 A0 21 .! +L961B: dey ; 961B 88 . + bne L961B ; 961C D0 FD .. + jsr L9880 ; 961E 20 80 98 .. +L9621: bit cia2base ; 9621 2C 00 DD ,.. + bmi L9621 ; 9624 30 FB 0. + jsr DoneWithIO ; 9626 20 5F C2 _. + ldx curDrive ; 9629 AE 89 84 ... + lda diskOpenFlg,x ; 962C BD 8A 84 ... + ora #$40 ; 962F 09 40 .@ + sta diskOpenFlg,x ; 9631 9D 8A 84 ... +L9634: ldx #$00 ; 9634 A2 00 .. + beq L963B ; 9636 F0 03 .. +L9638: jsr DoneWithIO ; 9638 20 5F C2 _. +L963B: txa ; 963B 8A . + rts ; 963C 60 ` + +; ---------------------------------------------------------------------------- +EnterCommand: + .byte $4D,$2D,$45 ; 963D 4D 2D 45 M-E +; ---------------------------------------------------------------------------- + .word $040F ; 9640 0F 04 .. +; ---------------------------------------------------------------------------- +SendExitTurbo: + jsr InitForIO ; 9642 20 5C C2 \. + ldx #$04 ; 9645 A2 04 .. + lda #$B9 ; 9647 A9 B9 .. + jsr L979F ; 9649 20 9F 97 .. + ldx #$04 ; 964C A2 04 .. + lda #$57 ; 964E A9 57 .W + jsr L979F ; 9650 20 9F 97 .. + jsr L97D9 ; 9653 20 D9 97 .. +L9656: lda curDrive ; 9656 AD 89 84 ... + jsr LISTEN ; 9659 20 B1 FF .. + lda #$EF ; 965C A9 EF .. + jsr SECOND ; 965E 20 93 FF .. + jsr UNLSN ; 9661 20 AE FF .. + ldx #$00 ; 9664 A2 00 .. + jmp DoneWithIO ; 9666 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +SendCODE: + jsr CheckReal1581 ; 9669 20 95 99 .. + txa ; 966C 8A . + beq InitHDCode ; 966D F0 05 .. + bpl L9673 ; 966F 10 02 .. + bmi Init1581Code ; 9671 30 1B 0. +L9673: rts ; 9673 60 ` + +; ---------------------------------------------------------------------------- +InitHDCode: + jsr InitForIO ; 9674 20 5C C2 \. + ldx #$96 ; 9677 A2 96 .. + lda #$89 ; 9679 A9 89 .. + jsr SendDOSCmd ; 967B 20 B8 95 .. + txa ; 967E 8A . + bne L9686 ; 967F D0 05 .. + jsr UNLSN ; 9681 20 AE FF .. + ldx #$00 ; 9684 A2 00 .. +L9686: jmp DoneWithIO ; 9686 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +HDCommand: + .byte "GEOS" ; 9689 47 45 4F 53 GEOS + .byte $00 ; 968D 00 . +; ---------------------------------------------------------------------------- +Init1581Code: + jsr InitForIO ; 968E 20 5C C2 \. + lda #$9A ; 9691 A9 9A .. + sta TURBO_DD00 ; 9693 85 8E .. + lda #$02 ; 9695 A9 02 .. + sta $8D ; 9697 85 8D .. + lda #$03 ; 9699 A9 03 .. + sta L96F1+1 ; 969B 8D F2 96 ... + lda #$00 ; 969E A9 00 .. + sta L96F1 ; 96A0 8D F1 96 ... + lda #$0F ; 96A3 A9 0F .. + sta TURBO_DD00_CPY ; 96A5 85 8F .. +L96A7: jsr SendCHUNK ; 96A7 20 CD 96 .. + txa ; 96AA 8A . + bne L96CA ; 96AB D0 1D .. + clc ; 96AD 18 . + lda #$20 ; 96AE A9 20 . + adc $8D ; 96B0 65 8D e. + sta $8D ; 96B2 85 8D .. + bcc L96B8 ; 96B4 90 02 .. + inc TURBO_DD00 ; 96B6 E6 8E .. +L96B8: clc ; 96B8 18 . + lda #$20 ; 96B9 A9 20 . + adc L96F1 ; 96BB 6D F1 96 m.. + sta L96F1 ; 96BE 8D F1 96 ... + bcc L96C6 ; 96C1 90 03 .. + inc L96F1+1 ; 96C3 EE F2 96 ... +L96C6: dec TURBO_DD00_CPY ; 96C6 C6 8F .. + bpl L96A7 ; 96C8 10 DD .. +L96CA: jmp DoneWithIO ; 96CA 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +SendCHUNK: + ldx #$96 ; 96CD A2 96 .. + lda #$EE ; 96CF A9 EE .. + jsr SendDOSCmd ; 96D1 20 B8 95 .. + txa ; 96D4 8A . + bne L96ED ; 96D5 D0 16 .. + lda #$20 ; 96D7 A9 20 . + jsr CIOUT ; 96D9 20 A8 FF .. + ldy #$00 ; 96DC A0 00 .. +L96DE: lda ($8D),y ; 96DE B1 8D .. + jsr CIOUT ; 96E0 20 A8 FF .. + iny ; 96E3 C8 . + cpy #$20 ; 96E4 C0 20 . + bcc L96DE ; 96E6 90 F6 .. + jsr UNLSN ; 96E8 20 AE FF .. + ldx #$00 ; 96EB A2 00 .. +L96ED: rts ; 96ED 60 ` + +; ---------------------------------------------------------------------------- +WriteCommand: + .byte "M-W" ; 96EE 4D 2D 57 M-W +; ---------------------------------------------------------------------------- +L96F1: .word $0000 ; 96F1 00 00 .. +; ---------------------------------------------------------------------------- +__ExitTurbo: + txa ; 96F3 8A . + pha ; 96F4 48 H + ldx curDrive ; 96F5 AE 89 84 ... + lda diskOpenFlg,x ; 96F8 BD 8A 84 ... + and #$40 ; 96FB 29 40 )@ + beq L975D ; 96FD F0 5E .^ + jsr SendExitTurbo ; 96FF 20 42 96 B. + ldx curDrive ; 9702 AE 89 84 ... + lda diskOpenFlg,x ; 9705 BD 8A 84 ... + and #$BF ; 9708 29 BF ). + sta diskOpenFlg,x ; 970A 9D 8A 84 ... + bit sysRAMFlg ; 970D 2C C4 88 ,.. + bvc L975D ; 9710 50 4B PK + lda r0H ; 9712 A5 03 .. + pha ; 9714 48 H + lda r0L ; 9715 A5 02 .. + pha ; 9717 48 H + lda r1H ; 9718 A5 05 .. + pha ; 971A 48 H + lda r1L ; 971B A5 04 .. + pha ; 971D 48 H + lda r2H ; 971E A5 07 .. + pha ; 9720 48 H + lda r2L ; 9721 A5 06 .. + pha ; 9723 48 H + lda r3L ; 9724 A5 08 .. + pha ; 9726 48 H + ldx curDrive ; 9727 AE 89 84 ... + lda L9758,x ; 972A BD 58 97 .X. + sta r1L ; 972D 85 04 .. + lda L975C,x ; 972F BD 5C 97 .\. + sta r1H ; 9732 85 05 .. + lda #$9C ; 9734 A9 9C .. + sta r0H ; 9736 85 03 .. + lda #$80 ; 9738 A9 80 .. + sta r0L ; 973A 85 02 .. + ldy #$00 ; 973C A0 00 .. + sty r3L ; 973E 84 08 .. + sty r2L ; 9740 84 06 .. + iny ; 9742 C8 . + sty r2H ; 9743 84 07 .. + jsr StashRAM ; 9745 20 C8 C2 .. + pla ; 9748 68 h + sta r3L ; 9749 85 08 .. + pla ; 974B 68 h + sta r2L ; 974C 85 06 .. + pla ; 974E 68 h + sta r2H ; 974F 85 07 .. + pla ; 9751 68 h + sta r1L ; 9752 85 04 .. + pla ; 9754 68 h + sta r1H ; 9755 85 05 .. + pla ; 9757 68 h +L9758: sta r0L ; 9758 85 02 .. + pla ; 975A 68 h + .byte $85 ; 975B 85 . +L975C: .byte $03 ; 975C 03 . +L975D: pla ; 975D 68 h + tax ; 975E AA . + rts ; 975F 60 ` + +; ---------------------------------------------------------------------------- + .byte $80,$00,$80,$00,$8F,$9D,$AA,$B8 ; 9760 80 00 80 00 8F 9D AA B8 ........ +; ---------------------------------------------------------------------------- +__PurgeTurbo: + jsr ExitTurbo ; 9768 20 32 C2 2. + ldy curDrive ; 976B AC 89 84 ... + lda #$00 ; 976E A9 00 .. + sta diskOpenFlg,y ; 9770 99 8A 84 ... + rts ; 9773 60 ` + +; ---------------------------------------------------------------------------- +__ChangeDiskDevice: + sta ChngDskDev_Number ; 9774 8D 9D 97 ... + jsr PurgeTurbo ; 9777 20 35 C2 5. + jsr InitForIO ; 977A 20 5C C2 \. + ldx #$97 ; 977D A2 97 .. + lda #$9A ; 977F A9 9A .. + jsr SendDOSCmd ; 9781 20 B8 95 .. + txa ; 9784 8A . + bne L9797 ; 9785 D0 10 .. + ldy ChngDskDev_Number ; 9787 AC 9D 97 ... + lda #$00 ; 978A A9 00 .. + sta diskOpenFlg,y ; 978C 99 8A 84 ... + sty curDrive ; 978F 8C 89 84 ... + sty curDevice ; 9792 84 BA .. + jmp L9656 ; 9794 4C 56 96 LV. + +; ---------------------------------------------------------------------------- +L9797: jmp DoneWithIO ; 9797 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +ChngDskDev_Command: + .byte "U0>" ; 979A 55 30 3E U0> +; ---------------------------------------------------------------------------- +ChngDskDev_Number: + .byte $08,$00 ; 979D 08 00 .. +; ---------------------------------------------------------------------------- +L979F: stx $8C ; 979F 86 8C .. + sta $8B ; 97A1 85 8B .. + ldy #$02 ; 97A3 A0 02 .. + bne L97B7 ; 97A5 D0 10 .. +L97A7: stx $8C ; 97A7 86 8C .. + sta $8B ; 97A9 85 8B .. +DUNK4_2:ldy #$04 ; 97AB A0 04 .. + lda r1H ; 97AD A5 05 .. + sta L9BF8 ; 97AF 8D F8 9B ... + lda r1L ; 97B2 A5 04 .. + sta L9BF7 ; 97B4 8D F7 9B ... +L97B7: lda $8C ; 97B7 A5 8C .. + sta L9BF6 ; 97B9 8D F6 9B ... + lda $8B ; 97BC A5 8B .. + sta L9BF5 ; 97BE 8D F5 9B ... + lda #$9B ; 97C1 A9 9B .. + sta $8C ; 97C3 85 8C .. + lda #$F5 ; 97C5 A9 F5 .. + sta $8B ; 97C7 85 8B .. + jmp L9886 ; 97C9 4C 86 98 L.. + +; ---------------------------------------------------------------------------- +L97CC: ldy #$01 ; 97CC A0 01 .. + jsr L984E ; 97CE 20 4E 98 N. + pha ; 97D1 48 H + tay ; 97D2 A8 . + jsr L984E ; 97D3 20 4E 98 N. + pla ; 97D6 68 h + tay ; 97D7 A8 . + rts ; 97D8 60 ` + +; ---------------------------------------------------------------------------- +L97D9: sei ; 97D9 78 x + lda TURBO_DD00 ; 97DA A5 8E .. + sta cia2base ; 97DC 8D 00 DD ... +L97DF: bit cia2base ; 97DF 2C 00 DD ,.. + bpl L97DF ; 97E2 10 FB .. + rts ; 97E4 60 ` + +; ---------------------------------------------------------------------------- +__NewDisk: + jsr EnterTurbo ; 97E5 20 14 C2 .. + bne L980D ; 97E8 D0 23 .# + lda #$00 ; 97EA A9 00 .. + sta L9BFC ; 97EC 8D FC 9B ... + sta r1L ; 97EF 85 04 .. + jsr InitForIO ; 97F1 20 5C C2 \. +L97F4: ldx #$04 ; 97F4 A2 04 .. + lda #$9B ; 97F6 A9 9B .. + jsr L97A7 ; 97F8 20 A7 97 .. + jsr GetDOSError ; 97FB 20 6C 99 l. + beq L980A ; 97FE F0 0A .. + inc L9BFC ; 9800 EE FC 9B ... + cpy L9BFC ; 9803 CC FC 9B ... + beq L980A ; 9806 F0 02 .. + bcs L97F4 ; 9808 B0 EA .. +L980A: jsr DoneWithIO ; 980A 20 5F C2 _. +L980D: rts ; 980D 60 ` + +; ---------------------------------------------------------------------------- +_ReadLink: + jsr CheckParams_1 ; 980E 20 03 91 .. + bcc L9822 ; 9811 90 0F .. + lda r1L ; 9813 A5 04 .. + ora #$80 ; 9815 09 80 .. + sta r1L ; 9817 85 04 .. + jsr L98DB ; 9819 20 DB 98 .. + lda r1L ; 981C A5 04 .. + and #$7F ; 981E 29 7F ). + sta r1L ; 9820 85 04 .. +L9822: rts ; 9822 60 ` + +; ---------------------------------------------------------------------------- +DOSErrTab: + .byte $01,$05,$02,$08,$08,$01,$05,$01 ; 9823 01 05 02 08 08 01 05 01 ........ + .byte $05,$05,$05 ; 982B 05 05 05 ... +L982E: .byte $00,$80,$20,$A0,$40,$C0,$60,$E0 ; 982E 00 80 20 A0 40 C0 60 E0 .. .@.`. + .byte $10,$90,$30,$B0,$50,$D0,$70,$F0 ; 9836 10 90 30 B0 50 D0 70 F0 ..0.P.p. +L983E: .byte $00,$20,$00,$20,$10,$30,$10,$30 ; 983E 00 20 00 20 10 30 10 30 . . .0.0 + .byte $00,$20,$00,$20,$10,$30,$10,$30 ; 9846 00 20 00 20 10 30 10 30 . . .0.0 +; ---------------------------------------------------------------------------- +L984E: jsr L97D9 ; 984E 20 D9 97 .. +L9851: sec ; 9851 38 8 +L9852: lda rasreg ; 9852 AD 12 D0 ... + sbc #$32 ; 9855 E9 32 .2 + and #$07 ; 9857 29 07 ). + beq L9852 ; 9859 F0 F7 .. + .byte $A9 ; 985B A9 . +L985C: and $8D,x ; 985C 35 8D 5. + brk ; 985E 00 . + cmp $0F29,x ; 985F DD 29 0F .). + sta cia2base ; 9862 8D 00 DD ... + lda cia2base ; 9865 AD 00 DD ... + lsr a ; 9868 4A J + lsr a ; 9869 4A J + ora cia2base ; 986A 0D 00 DD ... + lsr a ; 986D 4A J + lsr a ; 986E 4A J + .byte $49 ; 986F 49 I +L9870: ora $4D ; 9870 05 4D .M + brk ; 9872 00 . + cmp $4A4A,x ; 9873 DD 4A 4A .JJ + .byte $49 ; 9876 49 I +L9877: ora $4D ; 9877 05 4D .M + brk ; 9879 00 . + cmp L9188,x ; 987A DD 88 91 ... + .byte $8B ; 987D 8B . + bne L9851 ; 987E D0 D1 .. +L9880: .byte $A2 ; 9880 A2 . +L9881: .byte $0F ; 9881 0F . + stx cia2base ; 9882 8E 00 DD ... + rts ; 9885 60 ` + +; ---------------------------------------------------------------------------- +L9886: jsr L97D9 ; 9886 20 D9 97 .. + tya ; 9889 98 . + pha ; 988A 48 H + ldy #$00 ; 988B A0 00 .. + jsr L989D ; 988D 20 9D 98 .. + pla ; 9890 68 h + tay ; 9891 A8 . +L9892: jsr L97D9 ; 9892 20 D9 97 .. +L9895: dey ; 9895 88 . + lda ($8B),y ; 9896 B1 8B .. + ldx TURBO_DD00 ; 9898 A6 8E .. + stx cia2base ; 989A 8E 00 DD ... +L989D: tax ; 989D AA . + and #$0F ; 989E 29 0F ). + sta $8D ; 98A0 85 8D .. + sec ; 98A2 38 8 +L98A3: lda rasreg ; 98A3 AD 12 D0 ... + sbc #$32 ; 98A6 E9 32 .2 + and #$07 ; 98A8 29 07 ). + beq L98A3 ; 98AA F0 F7 .. + txa ; 98AC 8A . + ldx TURBO_DD00_CPY ; 98AD A6 8F .. + stx cia2base ; 98AF 8E 00 DD ... + and #$F0 ; 98B2 29 F0 ). + ora TURBO_DD00 ; 98B4 05 8E .. + sta cia2base ; 98B6 8D 00 DD ... + ror a ; 98B9 6A j + ror a ; 98BA 6A j + and #$F0 ; 98BB 29 F0 ). + ora TURBO_DD00 ; 98BD 05 8E .. + sta cia2base ; 98BF 8D 00 DD ... + ldx $8D ; 98C2 A6 8D .. + lda L982E,x ; 98C4 BD 2E 98 ... + sta cia2base ; 98C7 8D 00 DD ... + lda L983E,x ; 98CA BD 3E 98 .>. + cpy #$00 ; 98CD C0 00 .. + sta cia2base ; 98CF 8D 00 DD ... + bne L9895 ; 98D2 D0 C1 .. + beq L9880 ; 98D4 F0 AA .. +__ReadBlock: + jsr CheckParams_1 ; 98D6 20 03 91 .. + bcc L9937 ; 98D9 90 5C .\ +L98DB: ldx #$04 ; 98DB A2 04 .. + lda #$CC ; 98DD A9 CC .. + jsr L97A7 ; 98DF 20 A7 97 .. + ldx #$03 ; 98E2 A2 03 .. + lda #$1F ; 98E4 A9 1F .. + jsr L979F ; 98E6 20 9F 97 .. + lda r4H ; 98E9 A5 0B .. + sta $8C ; 98EB 85 8C .. + lda r4L ; 98ED A5 0A .. + sta $8B ; 98EF 85 8B .. + ldy #$00 ; 98F1 A0 00 .. + lda r1L ; 98F3 A5 04 .. + bpl L98F9 ; 98F5 10 02 .. + ldy #$02 ; 98F7 A0 02 .. +L98F9: jsr L984E ; 98F9 20 4E 98 N. + jsr L9973 ; 98FC 20 73 99 s. + beq L990B ; 98FF F0 0A .. + inc L9BFC ; 9901 EE FC 9B ... + cpy L9BFC ; 9904 CC FC 9B ... + beq L990B ; 9907 F0 02 .. + bcs L98DB ; 9909 B0 D0 .. +L990B: lda r1L ; 990B A5 04 .. + cmp #$28 ; 990D C9 28 .( + bne L9936 ; 990F D0 25 .% + lda r1H ; 9911 A5 05 .. + bne L9936 ; 9913 D0 21 .! + ldy #$04 ; 9915 A0 04 .. +L9917: lda (r4L),y ; 9917 B1 0A .. + sta L9BFB ; 9919 8D FB 9B ... + tya ; 991C 98 . + clc ; 991D 18 . + adc #$8C ; 991E 69 8C i. + tay ; 9920 A8 . + lda (r4L),y ; 9921 B1 0A .. + pha ; 9923 48 H + lda L9BFB ; 9924 AD FB 9B ... + sta (r4L),y ; 9927 91 0A .. + tya ; 9929 98 . + sec ; 992A 38 8 + sbc #$8C ; 992B E9 8C .. + tay ; 992D A8 . + pla ; 992E 68 h + sta (r4L),y ; 992F 91 0A .. + iny ; 9931 C8 . + cpy #$1D ; 9932 C0 1D .. + bne L9917 ; 9934 D0 E1 .. +L9936: txa ; 9936 8A . +L9937: ldy #$00 ; 9937 A0 00 .. + rts ; 9939 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr CheckParams_1 ; 993A 20 03 91 .. + bcc L9968 ; 993D 90 29 .) + jsr L990B ; 993F 20 0B 99 .. +L9942: ldx #$04 ; 9942 A2 04 .. + lda #$7C ; 9944 A9 7C .| + jsr L97A7 ; 9946 20 A7 97 .. + lda r4H ; 9949 A5 0B .. + sta $8C ; 994B 85 8C .. + lda r4L ; 994D A5 0A .. + sta $8B ; 994F 85 8B .. + ldy #$00 ; 9951 A0 00 .. + jsr L9892 ; 9953 20 92 98 .. + jsr L9973 ; 9956 20 73 99 s. + beq L9965 ; 9959 F0 0A .. + inc L9BFC ; 995B EE FC 9B ... + cpy L9BFC ; 995E CC FC 9B ... + beq L9965 ; 9961 F0 02 .. + bcs L9942 ; 9963 B0 DD .. +L9965: jsr L990B ; 9965 20 0B 99 .. +L9968: rts ; 9968 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + ldx #$00 ; 9969 A2 00 .. + rts ; 996B 60 ` + +; ---------------------------------------------------------------------------- +GetDOSError: + ldx #$03 ; 996C A2 03 .. + lda #$2B ; 996E A9 2B .+ + jsr L979F ; 9970 20 9F 97 .. +L9973: lda #$9B ; 9973 A9 9B .. + sta $8C ; 9975 85 8C .. + lda #$FD ; 9977 A9 FD .. + sta $8B ; 9979 85 8B .. + jsr L97CC ; 997B 20 CC 97 .. + lda L9BFD ; 997E AD FD 9B ... + pha ; 9981 48 H + tay ; 9982 A8 . + lda L9822,y ; 9983 B9 22 98 .". + tay ; 9986 A8 . + pla ; 9987 68 h + cmp #$02 ; 9988 C9 02 .. + bcc L9991 ; 998A 90 05 .. + clc ; 998C 18 . + adc #$1E ; 998D 69 1E i. + bne L9993 ; 998F D0 02 .. +L9991: lda #$00 ; 9991 A9 00 .. +L9993: tax ; 9993 AA . + rts ; 9994 60 ` + +; ---------------------------------------------------------------------------- +CheckReal1581: + jsr InitForIO ; 9995 20 5C C2 \. + lda #$00 ; 9998 A9 00 .. + sta STATUS ; 999A 85 90 .. + lda #$9B ; 999C A9 9B .. + sta TURBO_DD00 ; 999E 85 8E .. + lda #$FF ; 99A0 A9 FF .. + sta $8D ; 99A2 85 8D .. + lda #$FE ; 99A4 A9 FE .. + sta L9A00+1 ; 99A6 8D 01 9A ... + lda #$A0 ; 99A9 A9 A0 .. + sta L9A00 ; 99AB 8D 00 9A ... + jsr ReadDeviceWord ; 99AE 20 CE 99 .. + txa ; 99B1 8A . + bne L99CA ; 99B2 D0 16 .. + lda L9BFF ; 99B4 AD FF 9B ... + cmp #$43 ; 99B7 C9 43 .C + bne L99C8 ; 99B9 D0 0D .. + lda L9C00 ; 99BB AD 00 9C ... + cmp #$4D ; 99BE C9 4D .M + bne L99C8 ; 99C0 D0 06 .. + ldx #$00 ; 99C2 A2 00 .. + jsr DoneWithIO ; 99C4 20 5F C2 _. + rts ; 99C7 60 ` + +; ---------------------------------------------------------------------------- +L99C8: ldx #$FF ; 99C8 A2 FF .. +L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. + rts ; 99CD 60 ` + +; ---------------------------------------------------------------------------- +ReadDeviceWord: + ldx #$99 ; 99CE A2 99 .. + lda #$FD ; 99D0 A9 FD .. + jsr SendDOSCmd ; 99D2 20 B8 95 .. + txa ; 99D5 8A . + bne L99FC ; 99D6 D0 24 .$ + lda #$02 ; 99D8 A9 02 .. + jsr CIOUT ; 99DA 20 A8 FF .. + jsr UNLSN ; 99DD 20 AE FF .. + lda curDrive ; 99E0 AD 89 84 ... + jsr TALK ; 99E3 20 B4 FF .. + lda #$FF ; 99E6 A9 FF .. + jsr TKSA ; 99E8 20 96 FF .. + ldy #$00 ; 99EB A0 00 .. +L99ED: jsr ACPTR ; 99ED 20 A5 FF .. + sta ($8D),y ; 99F0 91 8D .. + iny ; 99F2 C8 . + cpy #$02 ; 99F3 C0 02 .. + bcc L99ED ; 99F5 90 F6 .. + jsr UNTLK ; 99F7 20 AB FF .. + ldx #$00 ; 99FA A2 00 .. +L99FC: rts ; 99FC 60 ` + +; ---------------------------------------------------------------------------- + eor $522D ; 99FD 4D 2D 52 M-R +L9A00: .byte $00 ; 9A00 00 . + .byte $00 ; 9A01 00 . + +; End of "record4" segment +; ---------------------------------------------------------------------------- +.code + + +.segment "drv1581_drvcode": absolute + +DriveCode: + .byte $0F,$07,$0D,$05,$0B,$03,$09,$01 ; 9A02 0F 07 0D 05 0B 03 09 01 ........ + .byte $0E,$06,$0C,$04,$0A,$02,$08,$00 ; 9A0A 0E 06 0C 04 0A 02 08 00 ........ + .byte $80,$20,$A0,$40,$C0,$60,$E0,$10 ; 9A12 80 20 A0 40 C0 60 E0 10 . .@.`.. + .byte $90,$30,$B0,$50,$D0,$70,$F0 ; 9A1A 90 30 B0 50 D0 70 F0 .0.P.p. +; ---------------------------------------------------------------------------- + ldy #$00 ; 9A21 A0 00 .. + lda $04EB ; 9A23 AD EB 04 ... + bpl L9A2A ; 9A26 10 02 .. + ldy #$02 ; 9A28 A0 02 .. +L9A2A: jsr L0362 ; 9A2A 20 62 03 b. + lda #$05 ; 9A2D A9 05 .. + sta a9L ; 9A2F 85 7E .~ + ldy #$00 ; 9A31 A0 00 .. + sty a9H ; 9A33 84 7F .. + iny ; 9A35 C8 . + jsr L0354 ; 9A36 20 54 03 T. + jsr L046A ; 9A39 20 6A 04 j. + cli ; 9A3C 58 X +L9A3D: lda $04E8 ; 9A3D AD E8 04 ... + beq L9A4D ; 9A40 F0 0B .. + dex ; 9A42 CA . + bne L9A4D ; 9A43 D0 08 .. + dec $04E8 ; 9A45 CE E8 04 ... + bne L9A4D ; 9A48 D0 03 .. + jsr L04BE ; 9A4A 20 BE 04 .. +L9A4D: lda #$04 ; 9A4D A9 04 .. + bit $4001 ; 9A4F 2C 01 40 ,.@ + bne L9A3D ; 9A52 D0 E9 .. + sei ; 9A54 78 x + rts ; 9A55 60 ` + +; ---------------------------------------------------------------------------- + sty $42 ; 9A56 84 42 .B + ldy #$00 ; 9A58 A0 00 .. + jsr L0402 ; 9A5A 20 02 04 .. + lda $42 ; 9A5D A5 42 .B + jsr L0368 ; 9A5F 20 68 03 h. + ldy $42 ; 9A62 A4 42 .B + jsr L0402 ; 9A64 20 02 04 .. +L9A67: dey ; 9A67 88 . + lda (a9L),y ; 9A68 B1 7E .~ + sta $41 ; 9A6A 85 41 .A + and #$0F ; 9A6C 29 0F ). + tax ; 9A6E AA . + lda #$04 ; 9A6F A9 04 .. + sta $4001 ; 9A71 8D 01 40 ..@ +L9A74: bit $4001 ; 9A74 2C 01 40 ,.@ + beq L9A74 ; 9A77 F0 FB .. + lda $0300,x ; 9A79 BD 00 03 ... + sta $4001 ; 9A7C 8D 01 40 ..@ + nop ; 9A7F EA . + nop ; 9A80 EA . + ldx $41 ; 9A81 A6 41 .A + rol a ; 9A83 2A * + and #$0F ; 9A84 29 0F ). + sta $4001 ; 9A86 8D 01 40 ..@ + txa ; 9A89 8A . + lsr a ; 9A8A 4A J + lsr a ; 9A8B 4A J + lsr a ; 9A8C 4A J + lsr a ; 9A8D 4A J + tax ; 9A8E AA . + lda $0300,x ; 9A8F BD 00 03 ... + sta $4001 ; 9A92 8D 01 40 ..@ + nop ; 9A95 EA . + nop ; 9A96 EA . + nop ; 9A97 EA . + nop ; 9A98 EA . + rol a ; 9A99 2A * + and #$0F ; 9A9A 29 0F ). + cpy #$00 ; 9A9C C0 00 .. + sta $4001 ; 9A9E 8D 01 40 ..@ + bne L9A67 ; 9AA1 D0 C4 .. + jsr L03FE ; 9AA3 20 FE 03 .. + beq L9AEF ; 9AA6 F0 47 .G + nop ; 9AA8 EA . + nop ; 9AA9 EA . + nop ; 9AAA EA . + nop ; 9AAB EA . + nop ; 9AAC EA . + nop ; 9AAD EA . + nop ; 9AAE EA . + jsr L0402 ; 9AAF 20 02 04 .. + jsr L03FB ; 9AB2 20 FB 03 .. + lda #$00 ; 9AB5 A9 00 .. + sta $41 ; 9AB7 85 41 .A +L9AB9: eor $41 ; 9AB9 45 41 EA + sta $41 ; 9ABB 85 41 .A + jsr L03FC ; 9ABD 20 FC 03 .. + lda #$04 ; 9AC0 A9 04 .. +L9AC2: bit $4001 ; 9AC2 2C 01 40 ,.@ + beq L9AC2 ; 9AC5 F0 FB .. + jsr L03FD ; 9AC7 20 FD 03 .. + lda $4001 ; 9ACA AD 01 40 ..@ + jsr L03FC ; 9ACD 20 FC 03 .. + asl a ; 9AD0 0A . + ora $4001 ; 9AD1 0D 01 40 ..@ + php ; 9AD4 08 . + plp ; 9AD5 28 ( + nop ; 9AD6 EA . + nop ; 9AD7 EA . + and #$0F ; 9AD8 29 0F ). + tax ; 9ADA AA . + lda $4001 ; 9ADB AD 01 40 ..@ + jsr L03FF ; 9ADE 20 FF 03 .. + asl a ; 9AE1 0A . + ora $4001 ; 9AE2 0D 01 40 ..@ + and #$0F ; 9AE5 29 0F ). + ora $030F,x ; 9AE7 1D 0F 03 ... + dey ; 9AEA 88 . + sta (a9L),y ; 9AEB 91 7E .~ + bne L9AB9 ; 9AED D0 CA .. +L9AEF: ldx #$02 ; 9AEF A2 02 .. + stx $4001 ; 9AF1 8E 01 40 ..@ + php ; 9AF4 08 . + plp ; 9AF5 28 ( + php ; 9AF6 08 . + plp ; 9AF7 28 ( + php ; 9AF8 08 . + plp ; 9AF9 28 ( + php ; 9AFA 08 . + plp ; 9AFB 28 ( + nop ; 9AFC EA . + nop ; 9AFD EA . + nop ; 9AFE EA . + nop ; 9AFF EA . + nop ; 9B00 EA . + nop ; 9B01 EA . + nop ; 9B02 EA . + rts ; 9B03 60 ` + +; ---------------------------------------------------------------------------- +L9B04: lda #$04 ; 9B04 A9 04 .. + bit $4001 ; 9B06 2C 01 40 ,.@ + bne L9B04 ; 9B09 D0 F9 .. + lda #$00 ; 9B0B A9 00 .. + sta $4001 ; 9B0D 8D 01 40 ..@ + rts ; 9B10 60 ` + +; ---------------------------------------------------------------------------- + sei ; 9B11 78 x + lda $41 ; 9B12 A5 41 .A + pha ; 9B14 48 H + lda $42 ; 9B15 A5 42 .B + pha ; 9B17 48 H + lda a9H ; 9B18 A5 7F .. + pha ; 9B1A 48 H + lda a9L ; 9B1B A5 7E .~ + pha ; 9B1D 48 H + ldx #$02 ; 9B1E A2 02 .. + ldy #$00 ; 9B20 A0 00 .. +L9B22: dey ; 9B22 88 . + bne L9B22 ; 9B23 D0 FD .. + dex ; 9B25 CA . + bne L9B22 ; 9B26 D0 FA .. + jsr L03ED ; 9B28 20 ED 03 .. + lda #$04 ; 9B2B A9 04 .. +L9B2D: bit $4001 ; 9B2D 2C 01 40 ,.@ + beq L9B2D ; 9B30 F0 FB .. + lda #$04 ; 9B32 A9 04 .. + sta a9H ; 9B34 85 7F .. + lda #$E9 ; 9B36 A9 E9 .. + sta a9L ; 9B38 85 7E .~ + ldy #$01 ; 9B3A A0 01 .. + jsr L03AD ; 9B3C 20 AD 03 .. + sta $42 ; 9B3F 85 42 .B + tay ; 9B41 A8 . + jsr L03AD ; 9B42 20 AD 03 .. + jsr L046E ; 9B45 20 6E 04 n. + lda #$06 ; 9B48 A9 06 .. + sta a9H ; 9B4A 85 7F .. + lda #$00 ; 9B4C A9 00 .. + sta a9L ; 9B4E 85 7E .~ + lda #$04 ; 9B50 A9 04 .. + pha ; 9B52 48 H + lda #$2F ; 9B53 A9 2F ./ + pha ; 9B55 48 H + jmp (L04E9) ; 9B56 6C E9 04 l.. + +; ---------------------------------------------------------------------------- + jsr L0402 ; 9B59 20 02 04 .. + pla ; 9B5C 68 h + pla ; 9B5D 68 h + pla ; 9B5E 68 h + sta a9L ; 9B5F 85 7E .~ + pla ; 9B61 68 h + sta a9H ; 9B62 85 7F .. + pla ; 9B64 68 h + sta $42 ; 9B65 85 42 .B + pla ; 9B67 68 h + sta $41 ; 9B68 85 41 .A + cli ; 9B6A 58 X + rts ; 9B6B 60 ` + +; ---------------------------------------------------------------------------- + lda #$BF ; 9B6C A9 BF .. + bne L9B77 ; 9B6E D0 07 .. + lda #$40 ; 9B70 A9 40 .@ + ora $4000 ; 9B72 0D 00 40 ..@ + bne L9B7A ; 9B75 D0 03 .. +L9B77: and $4000 ; 9B77 2D 00 40 -.@ +L9B7A: sta $4000 ; 9B7A 8D 00 40 ..@ + rts ; 9B7D 60 ` + +; ---------------------------------------------------------------------------- + jsr L04B0 ; 9B7E 20 B0 04 .. + ldy #$00 ; 9B81 A0 00 .. + jsr L03AD ; 9B83 20 AD 03 .. + lda #$B6 ; 9B86 A9 B6 .. + jsr L04D1 ; 9B88 20 D1 04 .. + lda r1H ; 9B8B A5 05 .. + sta $01FA ; 9B8D 8D FA 01 ... + bne L9B9A ; 9B90 D0 08 .. + lda #$90 ; 9B92 A9 90 .. + sta $04E8 ; 9B94 8D E8 04 ... + jsr L04D1 ; 9B97 20 D1 04 .. +L9B9A: jmp L032B ; 9B9A 4C 2B 03 L+. + +; ---------------------------------------------------------------------------- + jsr L04B9 ; 9B9D 20 B9 04 .. + lda #$92 ; 9BA0 A9 92 .. + jsr L04D1 ; 9BA2 20 D1 04 .. + lda r1H ; 9BA5 A5 05 .. + cmp #$02 ; 9BA7 C9 02 .. + bcc L9BAE ; 9BA9 90 03 .. + nop ; 9BAB EA . + nop ; 9BAC EA . + rts ; 9BAD 60 ` + +; ---------------------------------------------------------------------------- +L9BAE: lda #$B0 ; 9BAE A9 B0 .. + bne L9BD3 ; 9BB0 D0 21 .! + lda $04EB ; 9BB2 AD EB 04 ... + and #$7F ; 9BB5 29 7F ). + cmp r7H ; 9BB7 C5 11 .. + beq L9BE8 ; 9BB9 F0 2D .- + lda $04E8 ; 9BBB AD E8 04 ... + beq L9BE8 ; 9BBE F0 28 .( + ldx #$03 ; 9BC0 A2 03 .. + jsr LFF6C ; 9BC2 20 6C FF l. + lda #$00 ; 9BC5 A9 00 .. + sta $04E8 ; 9BC7 8D E8 04 ... + lda #$86 ; 9BCA A9 86 .. + bne L9BD3 ; 9BCC D0 05 .. + jsr L04B0 ; 9BCE 20 B0 04 .. + lda #$80 ; 9BD1 A9 80 .. +L9BD3: sta r1H ; 9BD3 85 05 .. + lda $04EB ; 9BD5 AD EB 04 ... + and #$7F ; 9BD8 29 7F ). + sta r7H ; 9BDA 85 11 .. + lda $04EC ; 9BDC AD EC 04 ... + sta r8L ; 9BDF 85 12 .. + ldx #$03 ; 9BE1 A2 03 .. + lda r0L,x ; 9BE3 B5 02 .. + jsr LFF54 ; 9BE5 20 54 FF T. +L9BE8: rts ; 9BE8 60 ` + +; ---------------------------------------------------------------------------- + brk ; 9BE9 00 . + brk ; 9BEA 00 . + brk ; 9BEB 00 . + brk ; 9BEC 00 . + brk ; 9BED 00 . + brk ; 9BEE 00 . + +; End of "drv1581_drvcode" segment +; ---------------------------------------------------------------------------- +.code + + +.segment "record4": absolute + +L9BEF: brk ; 9BEF 00 . +L9BF0: brk ; 9BF0 00 . +L9BF1: brk ; 9BF1 00 . +L9BF2: brk ; 9BF2 00 . +L9BF3: brk ; 9BF3 00 . + brk ; 9BF4 00 . +L9BF5: brk ; 9BF5 00 . +L9BF6: brk ; 9BF6 00 . +L9BF7: brk ; 9BF7 00 . +L9BF8: brk ; 9BF8 00 . +L9BF9: brk ; 9BF9 00 . +L9BFA: brk ; 9BFA 00 . +L9BFB: brk ; 9BFB 00 . +L9BFC: brk ; 9BFC 00 . +L9BFD: brk ; 9BFD 00 . + brk ; 9BFE 00 . +L9BFF: brk ; 9BFF 00 . +L9C00: brk ; 9C00 00 . +L9C01: brk ; 9C01 00 . +L9C02: brk ; 9C02 00 . + brk ; 9C03 00 . + brk ; 9C04 00 . + brk ; 9C05 00 . + brk ; 9C06 00 . + brk ; 9C07 00 . + .byte $C2 ; 9C08 C2 . diff --git a/_newconf/newconf/r4.info b/_newconf/newconf/r4.info new file mode 100644 index 00000000..25b34d88 --- /dev/null +++ b/_newconf/newconf/r4.info @@ -0,0 +1,59 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r4.asm"; + INPUTNAME "configure.cvt.record.4"; + STARTADDR $9000; + PAGELENGTH 0; # No paging + CPU "6502"; + COMMENTS 4; + + }; + +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/const.inc"; IGNOREUNKNOWN TRUE;}; +#ASMINC { FILE "/cc65/libsrc/geos/inc/diskdrv.inc";}; +#ASMINC { FILE "inc/geossym.inc";}; +ASMINC { FILE "inc/labels.inc";}; +ASMINC { FILE "r4.labels"; }; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/inputdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/printdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/dio.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geosmac.ca65.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geossym.inc";}; +#ASMINC { FILE "/cc65/libsrc/geos/inc/jumptab.inc";}; + +# One segment for the whole stuff +SEGMENT { START $9000; END $9a01; NAME "record4"; }; +SEGMENT { START $9A02; END $9BEE; NAME "drv1581_drvcode"; }; +SEGMENT { START $9BEf; END $ffff; NAME "record4"; }; +RANGE { START $904F; END $9061; TYPE TEXTTABLE; }; +RANGE { START $92AB; END $92BB; TYPE TEXTTABLE; }; +RANGE { START $9000; END $902f; TYPE ADDRTABLE; }; +RANGE { START $946B; END $9472;TYPE BYTETABLE; }; +RANGE { START $963D; END $963F; TYPE BYTETABLE; }; +RANGE { START $9640; END $9641; TYPE WORDTABLE; }; +RANGE { START $9A02; END $9A10; TYPE BYTETABLE; }; +RANGE { START $9A11; END $9A20; TYPE BYTETABLE; }; +RANGE { START $979A; END $979C; TYPE TEXTTABLE; }; +RANGE { START $979D; END $979E; TYPE BYTETABLE; }; +RANGE { START $9823; END $982D; TYPE BYTETABLE; }; +RANGE { START $9760; END $9767; TYPE BYTETABLE; }; +RANGE { START $96EE; END $96F0; TYPE TEXTTABLE; }; +RANGE { START $9689; END $968D; TYPE TEXTTABLE; }; +RANGE { START $96F1; END $96F2; TYPE WORDTABLE; }; +RANGE { START $9A00; END $9A01; TYPE WORDTABLE; }; +RANGE { START $982E; END $984D; TYPE BYTETABLE; }; + + + + + + + + + + + + + + + diff --git a/_newconf/newconf/r4.labels b/_newconf/newconf/r4.labels new file mode 100644 index 00000000..e6584c0e --- /dev/null +++ b/_newconf/newconf/r4.labels @@ -0,0 +1,59 @@ +__GetDirHead = $9064; +__PutDirHead = $909C; +__GetBlock = $908C; +_ReadBuff = $9084; +__PutBlock = $90C4; +_WriteBuff = $90BC; +SetDirHead_1 = $90D4; +SetDirHead_2 = $90DC; +SetDirHead_3 = $90E4; +__OpenDisk = $9116; +__BlkAlloc = $913D; +__NxtBlkAlloc = $916A; +__ChkDkGEOS = $928E; +_GetBorder = $9268; +_GetNxtDirEntry = $921E; +_Get1stDirEntry = $920F; +__GetFreeDirBlk = $92BC; +_AddDirBlock = $931D; +ClearAndWrite = $934C; +__SetNextFree = $9364; +SNxtFreeHelp = $93DA; +_AllocateBlock = $93E8; +__FreeBlock = $9429; +__FindBAMBit = $9431; +FBBBitTab = $946B; +__CalcBlksFree = $9473; +__SetGEOSDisk = $94B1; +GEOSDiskID = $92AB; +__InitForIO = $94EF; +D_IRQHandler = $958C; +D_NMIHandler = $9591; +__DoneWithIO = $9592; +SendDOSCmd = $95B8; +__EnterTurbo = $95E8; +EnterCommand = $963D; +SendExitTurbo = $9642; +SendCODE = $9669; +DriveCode = $9A02; +__ExitTurbo = $96F3; +SendCHUNK = $96CD; +__ChangeDiskDevice = $9774; +ChngDskDev_Command = $979A; +ChngDskDev_Number = $979D; +DOSErrTab = $9823; +__NewDisk = $97E5; +__PurgeTurbo = $9768; +WriteCommand = $96EE; +__ReadBlock = $98D6; +__WriteBlock = $993A; +__VerWriteBlock = $9969; +_ReadLink = $980E; +CheckReal1581 = $9995; +ReadDeviceWord = $99CE; +InitHDCode = $9674; +Init1581Code = $968E; +HDCommand = $9689; +DUNK4_2 = $97AB; +GetDOSError = $996C; +CheckParams_1 = $9103; \ No newline at end of file diff --git a/_newconf/newconf/r5.asm b/_newconf/newconf/r5.asm new file mode 100644 index 00000000..95e26ef5 --- /dev/null +++ b/_newconf/newconf/r5.asm @@ -0,0 +1,1590 @@ +; da65 V2.15 +; Created: 2017-06-30 23:03:11 +; Input file: configure.cvt.record.5 +; Page: 1 + + + .setcpu "6502" + +; ---------------------------------------------------------------------------- +CPU_DDR := $0000 +CPU_DATA := $0001 +r0L := $0002 +r0H := $0003 +r1L := $0004 +r1H := $0005 +r2L := $0006 +r2H := $0007 +r3L := $0008 +r3H := $0009 +r4L := $000A +r4H := $000B +r5L := $000C +r5H := $000D +r6L := $000E +r6H := $000F +r7L := $0010 +r7H := $0011 +r8L := $0012 +r8H := $0013 +r9L := $0014 +r9H := $0015 +r10L := $0016 +r10H := $0017 +r11L := $0018 +r11H := $0019 +r12L := $001A +r12H := $001B +r13L := $001C +r13H := $001D +r14L := $001E +r14H := $001F +r15L := $0020 +r15H := $0021 +curPattern := $0022 +string := $0024 +baselineOffset := $0026 +curSetWidth := $0027 +curHeight := $0029 +curIndexTable := $002A +cardDataPntr := $002C +currentMode := $002E +dispBufferOn := $002F +mouseOn := $0030 +msePicPtr := $0031 +windowTop := $0033 +windowBottom := $0034 +leftMargin := $0035 +rightMargin := $0037 +pressFlag := $0039 +mouseXPos := $003A +mouseYPos := $003C +returnAddress := $003D +graphMode := $003F +a2L := $0070 +a2H := $0071 +a3L := $0072 +a3H := $0073 +a4L := $0074 +a4H := $0075 +a5L := $0076 +a5H := $0077 +a6L := $0078 +a6H := $0079 +a7L := $007A +a7H := $007B +a8L := $007C +a8H := $007D +a9L := $007E +a9H := $007F +TURBO_DD00 := $008E ; from 1541 turbo +TURBO_DD00_CPY := $008F ; from 1541 turbo +STATUS := $0090 +curDevice := $00BA +a0L := $00FB +a0H := $00FC +a1L := $00FD +a1H := $00FE +irqvec := $0314 +bkvec := $0316 +nmivec := $0318 +APP_RAM := $0400 +BACK_SCR_BASE := $6000 +L6216 := $6216 +PRINTBASE := $7900 +diskBlkBuf := $8000 +fileHeader := $8100 +curDirHead := $8200 +fileTrScTab := $8300 +dirEntryBuf := $8400 +DrACurDkNm := $841E +DrBCurDkNm := $8430 +dataFileName := $8442 +dataDiskName := $8453 +PrntFilename := $8465 +PrntDiskName := $8476 +curDrive := $8489 +diskOpenFlg := $848A +isGEOS := $848B +interleave := $848C +NUMDRV := $848D +driveType := $848E +turboFlags := $8492 +curRecord := $8496 +usedRecords := $8497 +fileWritten := $8498 +fileSize := $8499 +appMain := $849B +intTopVector := $849D +intBotVector := $849F +mouseVector := $84A1 +keyVector := $84A3 +inputVector := $84A5 +mouseFaultVec := $84A7 +otherPressVec := $84A9 +StringFaultVec := $84AB +alarmTmtVector := $84AD +BRKVector := $84AF +RecoverVector := $84B1 +selectionFlash := $84B3 +alphaFlag := $84B4 +iconSelFlg := $84B5 +faultData := $84B6 +menuNumber := $84B7 +mouseTop := $84B8 +mouseBottom := $84B9 +mouseLeft := $84BA +mouseRight := $84BC +stringX := $84BE +stringY := $84C0 +mousePicData := $84C1 +maxMouseSpeed := $8501 +minMouseSpeed := $8502 +mouseAccel := $8503 +keyData := $8504 +mouseData := $8505 +inputData := $8506 +mouseSpeed := $8507 +random := $850A +saveFontTab := $850C +dblClickCount := $8515 +year := $8516 +month := $8517 +day := $8518 +hour := $8519 +minutes := $851A +seconds := $851B +alarmSetFlag := $851C +sysDBData := $851D +screencolors := $851E +dlgBoxRamBuf := $851F ; to $8697 +savedmoby2 := $88BB +scr80polar := $88BC +scr80colors := $88BD +vdcClrMode := $88BE +driveData := $88BF +ramExpSize := $88C3 +sysRAMFlg := $88C4 +firstBoot := $88C5 +curType := $88C6 +ramBase := $88C7 +inputDevName := $88CB +memBase := $88CF ; ??? +DrCCurDkNm := $88DC +DrDCurDkNm := $88EE +dir2Head := $8900 +spr0pic := $8A00 +spr1pic := $8A40 +spr2pic := $8A80 +spr3pic := $8AC0 +spr4pic := $8B00 +spr5pic := $8B40 +spr6pic := $8B80 +spr7pic := $8BC0 +COLOR_MATRIX := $8C00 +obj0Pointer := $8FF8 +obj1Pointer := $8FF9 +obj2Pointer := $8FFA +obj3Pointer := $8FFB +obj4Pointer := $8FFC +obj5Pointer := $8FFD +obj6Pointer := $8FFE +obj7Pointer := $8FFF +L971F := $971F +SCREEN_BASE := $A000 +OS_ROM := $C000 +bootName := $C006 +version := $C00F +nationality := $C010 +sysFlgCopy := $C012 +c128Flag := $C013 +dateCopy := $C018 +InterruptMain := $C100 +InitProcesses := $C103 +RestartProcess := $C106 +EnableProcess := $C109 +BlockProcess := $C10C +UnBlockProcess := $C10F +FreezeProcess := $C112 +UnFreezeProcess := $C115 +HorizontalLine := $C118 +InvertLine := $C11B +RecoverLine := $C11E +VerticalLine := $C121 +Rectangle := $C124 +FrameRectangle := $C127 +InvertRectangle := $C12A +RecoverRectangle:= $C12D +DrawLine := $C130 +DrawPoint := $C133 +GraphicsString := $C136 +SetPattern := $C139 +GetScanLine := $C13C +TestPoint := $C13F +BitmapUp := $C142 +PutChar := $C145 +PutString := $C148 +UseSystemFont := $C14B +StartMouseMode := $C14E +DoMenu := $C151 +RecoverMenu := $C154 +RecoverAllMenus := $C157 +DoIcons := $C15A +DShiftLeft := $C15D +BBMult := $C160 +BMult := $C163 +DMult := $C166 +Ddiv := $C169 +DSdiv := $C16C +Dabs := $C16F +Dnegate := $C172 +Ddec := $C175 +ClearRam := $C178 +FillRam := $C17B +MoveData := $C17E +InitRam := $C181 +PutDecimal := $C184 +GetRandom := $C187 +MouseUp := $C18A +MouseOff := $C18D +DoPreviousMenu := $C190 +ReDoMenu := $C193 +GetSerialNumber := $C196 +Sleep := $C199 +ClearMouseMode := $C19C +i_Rectangle := $C19F +i_FrameRectangle:= $C1A2 +i_RecoverRectangle:= $C1A5 +i_GraphicsString:= $C1A8 +i_BitmapUp := $C1AB +i_PutString := $C1AE +GetRealSize := $C1B1 +i_FillRam := $C1B4 +i_MoveData := $C1B7 +GetString := $C1BA +GotoFirstMenu := $C1BD +InitTextPrompt := $C1C0 +MainLoop := $C1C3 +DrawSprite := $C1C6 +GetCharWidth := $C1C9 +LoadCharSet := $C1CC +PosSprite := $C1CF +EnablSprite := $C1D2 +DisablSprite := $C1D5 +CallRoutine := $C1D8 +CalcBlksFree := $C1DB +ChkDkGEOS := $C1DE +NewDisk := $C1E1 +GetBlock := $C1E4 +PutBlock := $C1E7 +SetGEOSDisk := $C1EA +SaveFile := $C1ED +SetGDirEntry := $C1F0 +BldGDirEntry := $C1F3 +GetFreeDirBlk := $C1F6 +WriteFile := $C1F9 +BlkAlloc := $C1FC +ReadFile := $C1FF +SmallPutChar := $C202 +FollowChain := $C205 +GetFile := $C208 +FindFile := $C20B +CRC := $C20E +LdFile := $C211 +EnterTurbo := $C214 +LdDeskAcc := $C217 +ReadBlock := $C21A +LdApplic := $C21D +WriteBlock := $C220 +VerWriteBlock := $C223 +FreeFile := $C226 +GetFHdrInfo := $C229 +EnterDeskTop := $C22C +StartAppl := $C22F +ExitTurbo := $C232 +PurgeTurbo := $C235 +DeleteFile := $C238 +FindFTypes := $C23B +RstrAppl := $C23E +ToBASIC := $C241 +FastDelFile := $C244 +GetDirHead := $C247 +PutDirHead := $C24A +NxtBlkAlloc := $C24D +ImprintRectangle:= $C250 +i_ImprintRectangle:= $C253 +DoDlgBox := $C256 +RenameFile := $C259 +InitForIO := $C25C +DoneWithIO := $C25F +DShiftRight := $C262 +CopyString := $C265 +CopyFString := $C268 +CmpString := $C26B +CmpFString := $C26E +FirstInit := $C271 +OpenRecordFile := $C274 +CloseRecordFile := $C277 +NextRecord := $C27A +PreviousRecord := $C27D +PointRecord := $C280 +DeleteRecord := $C283 +InsertRecord := $C286 +AppendRecord := $C289 +ReadRecord := $C28C +WriteRecord := $C28F +SetNextFree := $C292 +UpdateRecordFile:= $C295 +GetPtrCurDkNm := $C298 +PromptOn := $C29B +PromptOff := $C29E +OpenDisk := $C2A1 +DoInlineReturn := $C2A4 +GetNextChar := $C2A7 +BitmapClip := $C2AA +FindBAMBit := $C2AD +SetDevice := $C2B0 +IsMseInRegion := $C2B3 +ReadByte := $C2B6 +FreeBlock := $C2B9 +ChangeDiskDevice:= $C2BC +RstrFrmDialogue := $C2BF +Panic := $C2C2 +BitOtherClip := $C2C5 +StashRAM := $C2C8 +FetchRAM := $C2CB +SwapRAM := $C2CE +VerifyRAM := $C2D1 +DoRAMOp := $C2D4 +TempHideMouse := $C2D7 +SetMousePicture := $C2DA +SetNewMode := $C2DD +NormalizeX := $C2E0 +MoveBData := $C2E3 +SwapBData := $C2E6 +VerifyBData := $C2E9 +DoBOp := $C2EC +AccessCache := $C2EF +HideOnlyMouse := $C2F2 +SetColorMode := $C2F5 +ColorCard := $C2F8 +ColorRectangle := $C2FB +vicbase := $D000 +mob0ypos := $D001 +mob1xpos := $D002 +mob1ypos := $D003 +mob2xpos := $D004 +mob2ypos := $D005 +mob3xpos := $D006 +mob3ypos := $D007 +mob4xpos := $D008 +mob4ypos := $D009 +mob5xpos := $D00A +mob5ypos := $D00B +mob6xpos := $D00C +mob6ypos := $D00D +mob7xpos := $D00E +mob7ypos := $D00F +msbxpos := $D010 +grcntrl1 := $D011 +rasreg := $D012 +lpxpos := $D013 +lpypos := $D014 +mobenble := $D015 +grcntrl2 := $D016 +moby2 := $D017 +grmemptr := $D018 +grirq := $D019 +grirqen := $D01A +mobprior := $D01B +mobmcm := $D01C +mobx2 := $D01D +mobmobcol := $D01E +mobbakcol := $D01F +extclr := $D020 +bakclr0 := $D021 +bakclr1 := $D022 +bakclr2 := $D023 +bakclr3 := $D024 +mcmclr0 := $D025 +mcmclr1 := $D026 +mob0clr := $D027 +mob1clr := $D028 +mob2clr := $D029 +mob3clr := $D02A +mob4clr := $D02B +mob5clr := $D02C +mob6clr := $D02D +mob7clr := $D02E +keyreg := $D02F +clkreg := $D030 +sidbase := $D400 +mmu := $D500 +vdcreg := $D600 +vdcdata := $D601 +ctab := $D800 +cia1base := $DC00 +cia2base := $DD00 +RAMC_BASE := $DE00 +EXP_BASE := $DF00 +MOUSE_BASE := $FE80 +config := $FF00 +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +OPEN := $FFC0 +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 +NMI_VECTOR := $FFFA +RESET_VECTOR := $FFFC +IRQ_VECTOR := $FFFE +; ---------------------------------------------------------------------------- + +.segment "record5": absolute + +_InitForIO: + .addr __InitForIO ; 9000 37 95 7. +_DoneWithIO: + .addr __DoneWithIO ; 9002 AD 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 DC 95 .. +_PurgeTurbo: + .addr __ExitTurbo ; 9006 DC 95 .. +_EnterTurbo: + .addr __EnterTurbo ; 9008 D3 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A E2 95 .. +_NewDisk: + .addr __NewDisk ; 900C EA 95 .. +_ReadBlock: + .addr __ReadBlock ; 900E EE 95 .. +_WriteBlock: + .addr __WriteBlock ; 9010 04 96 .. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 0D 96 .. +_OpenDisk: + .addr __OpenDisk ; 9014 02 91 .. +_GetBlock: + .addr __GetBlock ; 9016 7D 90 }. +_PutBlock: + .addr __PutBlock ; 9018 B0 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 4F 90 O. +_PutDirHead: + .addr __PutDirHead ; 901C 8A 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E 90 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 90 94 .. +_FreeBlock: + .addr __FreeBlock ; 9022 67 94 g. +_SetNextFree: + .addr __SetNextFree ; 9024 3D 93 =. +_FindBAMBit: + .addr __FindBAMBit ; 9026 1C 94 .. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 39 91 9. +_BlkAlloc: + .addr __BlkAlloc ; 902A 32 91 2. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 60 92 `. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E D6 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C D7 91 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C F0 91 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 3A 92 L:. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C F1 92 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 75 90 Lu. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C A8 90 L.. + +; ---------------------------------------------------------------------------- + nop ; 9042 EA . + nop ; 9043 EA . + rts ; 9044 60 ` + +; ---------------------------------------------------------------------------- + nop ; 9045 EA . + nop ; 9046 EA . + rts ; 9047 60 ` + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C EF 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C F9 95 L.. + +; ---------------------------------------------------------------------------- + .byte $82 ; 904E 82 . +__GetDirHead: + jsr L90C3 ; 904F 20 C3 90 .. + jsr __GetBlock ; 9052 20 7D 90 }. + txa ; 9055 8A . + bne L906F ; 9056 D0 17 .. + ldy curDrive ; 9058 AC 89 84 ... + lda $8203 ; 905B AD 03 82 ... + sta $88B7,y ; 905E 99 B7 88 ... + bpl L906F ; 9061 10 0C .. + jsr L90D2 ; 9063 20 D2 90 .. + jsr __GetBlock ; 9066 20 7D 90 }. + lda #$06 ; 9069 A9 06 .. + sta interleave ; 906B 8D 8C 84 ... + rts ; 906E 60 ` + +; ---------------------------------------------------------------------------- +L906F: lda #$08 ; 906F A9 08 .. + sta interleave ; 9071 8D 8C 84 ... + rts ; 9074 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9075 A9 80 .. + sta r4H ; 9077 85 0B .. + lda #$00 ; 9079 A9 00 .. + sta r4L ; 907B 85 0A .. +__GetBlock: + jsr EnterTurbo ; 907D 20 14 C2 .. + txa ; 9080 8A . + bne L9089 ; 9081 D0 06 .. + php ; 9083 08 . + sei ; 9084 78 x + jsr ReadBlock ; 9085 20 1A C2 .. + plp ; 9088 28 ( +L9089: rts ; 9089 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + php ; 908A 08 . + sei ; 908B 78 x + jsr L90C3 ; 908C 20 C3 90 .. + jsr WriteBlock ; 908F 20 20 C2 . + txa ; 9092 8A . + bne L90A6 ; 9093 D0 11 .. + ldy curDrive ; 9095 AC 89 84 ... + lda $8203 ; 9098 AD 03 82 ... + sta $88B7,y ; 909B 99 B7 88 ... + bpl L90A6 ; 909E 10 06 .. + jsr L90D2 ; 90A0 20 D2 90 .. + jsr WriteBlock ; 90A3 20 20 C2 . +L90A6: plp ; 90A6 28 ( + rts ; 90A7 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90A8 A9 80 .. + sta r4H ; 90AA 85 0B .. + lda #$00 ; 90AC A9 00 .. + sta r4L ; 90AE 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90B0 20 14 C2 .. + txa ; 90B3 8A . + bne L90C2 ; 90B4 D0 0C .. + php ; 90B6 08 . + sei ; 90B7 78 x + jsr WriteBlock ; 90B8 20 20 C2 . + txa ; 90BB 8A . + bne L90C1 ; 90BC D0 03 .. + jsr VerWriteBlock ; 90BE 20 23 C2 #. +L90C1: plp ; 90C1 28 ( +L90C2: rts ; 90C2 60 ` + +; ---------------------------------------------------------------------------- +L90C3: lda #$12 ; 90C3 A9 12 .. + sta r1L ; 90C5 85 04 .. + lda #$00 ; 90C7 A9 00 .. + sta r1H ; 90C9 85 05 .. + sta r4L ; 90CB 85 0A .. + lda #$82 ; 90CD A9 82 .. + sta r4H ; 90CF 85 0B .. + rts ; 90D1 60 ` + +; ---------------------------------------------------------------------------- +L90D2: lda #$35 ; 90D2 A9 35 .5 + sta r1L ; 90D4 85 04 .. + lda #$00 ; 90D6 A9 00 .. + sta r1H ; 90D8 85 05 .. + sta r4L ; 90DA 85 0A .. + lda #$89 ; 90DC A9 89 .. + sta r4H ; 90DE 85 0B .. + rts ; 90E0 60 ` + +; ---------------------------------------------------------------------------- +L90E1: lda #$00 ; 90E1 A9 00 .. + sta L96FC ; 90E3 8D FC 96 ... + ldx #$02 ; 90E6 A2 02 .. + lda r1L ; 90E8 A5 04 .. + beq L9100 ; 90EA F0 14 .. + cmp #$24 ; 90EC C9 24 .$ + bcc L90FE ; 90EE 90 0E .. + ldy curDrive ; 90F0 AC 89 84 ... + lda $88B7,y ; 90F3 B9 B7 88 ... + bpl L9100 ; 90F6 10 08 .. + lda r1L ; 90F8 A5 04 .. + cmp #$47 ; 90FA C9 47 .G + bcs L9100 ; 90FC B0 02 .. +L90FE: sec ; 90FE 38 8 + rts ; 90FF 60 ` + +; ---------------------------------------------------------------------------- +L9100: clc ; 9100 18 . + rts ; 9101 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9102 20 E1 C1 .. + txa ; 9105 8A . + bne L9131 ; 9106 D0 29 .) + jsr GetDirHead ; 9108 20 47 C2 G. + txa ; 910B 8A . + bne L9131 ; 910C D0 23 .# + lda #$82 ; 910E A9 82 .. + sta r5H ; 9110 85 0D .. + lda #$00 ; 9112 A9 00 .. + sta r5L ; 9114 85 0C .. + jsr ChkDkGEOS ; 9116 20 DE C1 .. + lda #$82 ; 9119 A9 82 .. + sta r4H ; 911B 85 0B .. + lda #$90 ; 911D A9 90 .. + sta r4L ; 911F 85 0A .. + ldx #$0C ; 9121 A2 0C .. + jsr GetPtrCurDkNm ; 9123 20 98 C2 .. + ldx #$0A ; 9126 A2 0A .. + ldy #$0C ; 9128 A0 0C .. + lda #$12 ; 912A A9 12 .. + jsr CopyFString ; 912C 20 68 C2 h. + ldx #$00 ; 912F A2 00 .. +L9131: rts ; 9131 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + ldy #$01 ; 9132 A0 01 .. + sty r3L ; 9134 84 08 .. + dey ; 9136 88 . + sty r3H ; 9137 84 09 .. +__NxtBlkAlloc: + lda r9H ; 9139 A5 15 .. + pha ; 913B 48 H + lda r9L ; 913C A5 14 .. + pha ; 913E 48 H + lda r3H ; 913F A5 09 .. + pha ; 9141 48 H + lda r3L ; 9142 A5 08 .. + pha ; 9144 48 H + lda #$00 ; 9145 A9 00 .. + sta r3H ; 9147 85 09 .. + lda #$FE ; 9149 A9 FE .. + sta r3L ; 914B 85 08 .. + ldx #$06 ; 914D A2 06 .. + ldy #$08 ; 914F A0 08 .. + jsr Ddiv ; 9151 20 69 C1 i. + lda r8L ; 9154 A5 12 .. + beq L915E ; 9156 F0 06 .. + inc r2L ; 9158 E6 06 .. + bne L915E ; 915A D0 02 .. + inc r2H ; 915C E6 07 .. +L915E: jsr L91CE ; 915E 20 CE 91 .. + jsr CalcBlksFree ; 9161 20 DB C1 .. + pla ; 9164 68 h + sta r3L ; 9165 85 08 .. + pla ; 9167 68 h + sta r3H ; 9168 85 09 .. + ldx #$03 ; 916A A2 03 .. + lda r2H ; 916C A5 07 .. + cmp r4H ; 916E C5 0B .. + bne L9176 ; 9170 D0 04 .. + lda r2L ; 9172 A5 06 .. + cmp r4L ; 9174 C5 0A .. +L9176: beq L917A ; 9176 F0 02 .. + bcs L91C7 ; 9178 B0 4D .M +L917A: lda r6H ; 917A A5 0F .. + sta r4H ; 917C 85 0B .. + lda r6L ; 917E A5 0E .. + sta r4L ; 9180 85 0A .. + lda r2H ; 9182 A5 07 .. + sta r5H ; 9184 85 0D .. + lda r2L ; 9186 A5 06 .. + sta r5L ; 9188 85 0C .. +L918A: jsr SetNextFree ; 918A 20 92 C2 .. + txa ; 918D 8A . + bne L91C7 ; 918E D0 37 .7 + ldy #$00 ; 9190 A0 00 .. + lda r3L ; 9192 A5 08 .. + sta (r4L),y ; 9194 91 0A .. + iny ; 9196 C8 . + lda r3H ; 9197 A5 09 .. + sta (r4L),y ; 9199 91 0A .. + clc ; 919B 18 . + lda #$02 ; 919C A9 02 .. + adc r4L ; 919E 65 0A e. + sta r4L ; 91A0 85 0A .. + bcc L91A6 ; 91A2 90 02 .. + inc r4H ; 91A4 E6 0B .. +L91A6: lda r5L ; 91A6 A5 0C .. + bne L91AC ; 91A8 D0 02 .. + dec r5H ; 91AA C6 0D .. +L91AC: dec r5L ; 91AC C6 0C .. + lda r5L ; 91AE A5 0C .. + ora r5H ; 91B0 05 0D .. + bne L918A ; 91B2 D0 D6 .. + ldy #$00 ; 91B4 A0 00 .. + tya ; 91B6 98 . + sta (r4L),y ; 91B7 91 0A .. + iny ; 91B9 C8 . + lda r8L ; 91BA A5 12 .. + bne L91C0 ; 91BC D0 02 .. + lda #$FE ; 91BE A9 FE .. +L91C0: clc ; 91C0 18 . + adc #$01 ; 91C1 69 01 i. + sta (r4L),y ; 91C3 91 0A .. + ldx #$00 ; 91C5 A2 00 .. +L91C7: pla ; 91C7 68 h + sta r9L ; 91C8 85 14 .. + pla ; 91CA 68 h + sta r9H ; 91CB 85 15 .. + rts ; 91CD 60 ` + +; ---------------------------------------------------------------------------- +L91CE: lda #$82 ; 91CE A9 82 .. + sta r5H ; 91D0 85 0D .. + lda #$00 ; 91D2 A9 00 .. + sta r5L ; 91D4 85 0C .. + rts ; 91D6 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$12 ; 91D7 A9 12 .. + sta r1L ; 91D9 85 04 .. + lda #$01 ; 91DB A9 01 .. + sta r1H ; 91DD 85 05 .. + jsr ReadBuff ; 91DF 20 3C 90 <. + lda #$80 ; 91E2 A9 80 .. + sta r5H ; 91E4 85 0D .. + lda #$02 ; 91E6 A9 02 .. + sta r5L ; 91E8 85 0C .. + lda #$00 ; 91EA A9 00 .. + sta L96FF ; 91EC 8D FF 96 ... + rts ; 91EF 60 ` + +; ---------------------------------------------------------------------------- +_GetNxtDirEntry: + ldx #$00 ; 91F0 A2 00 .. + ldy #$00 ; 91F2 A0 00 .. + clc ; 91F4 18 . + lda #$20 ; 91F5 A9 20 . + adc r5L ; 91F7 65 0C e. + sta r5L ; 91F9 85 0C .. + bcc L91FF ; 91FB 90 02 .. + inc r5H ; 91FD E6 0D .. +L91FF: lda r5H ; 91FF A5 0D .. + cmp #$80 ; 9201 C9 80 .. + bne L9209 ; 9203 D0 04 .. + lda r5L ; 9205 A5 0C .. + cmp #$FF ; 9207 C9 FF .. +L9209: bcc L9239 ; 9209 90 2E .. + ldy #$FF ; 920B A0 FF .. + lda $8001 ; 920D AD 01 80 ... + sta r1H ; 9210 85 05 .. + lda diskBlkBuf ; 9212 AD 00 80 ... + sta r1L ; 9215 85 04 .. + bne L922C ; 9217 D0 13 .. + lda L96FF ; 9219 AD FF 96 ... + bne L9239 ; 921C D0 1B .. + lda #$FF ; 921E A9 FF .. + sta L96FF ; 9220 8D FF 96 ... + jsr GetBorder ; 9223 20 36 90 6. + txa ; 9226 8A . + bne L9239 ; 9227 D0 10 .. + tya ; 9229 98 . + bne L9239 ; 922A D0 0D .. +L922C: jsr ReadBuff ; 922C 20 3C 90 <. + ldy #$00 ; 922F A0 00 .. + lda #$80 ; 9231 A9 80 .. + sta r5H ; 9233 85 0D .. + lda #$02 ; 9235 A9 02 .. + sta r5L ; 9237 85 0C .. +L9239: rts ; 9239 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 923A 20 47 C2 G. + txa ; 923D 8A . + bne L925F ; 923E D0 1F .. + lda #$82 ; 9240 A9 82 .. + sta r5H ; 9242 85 0D .. + lda #$00 ; 9244 A9 00 .. + sta r5L ; 9246 85 0C .. + jsr ChkDkGEOS ; 9248 20 DE C1 .. + bne L9251 ; 924B D0 04 .. + ldy #$FF ; 924D A0 FF .. + bne L925D ; 924F D0 0C .. +L9251: lda $82AC ; 9251 AD AC 82 ... + sta r1H ; 9254 85 05 .. + lda $82AB ; 9256 AD AB 82 ... + sta r1L ; 9259 85 04 .. + ldy #$00 ; 925B A0 00 .. +L925D: ldx #$00 ; 925D A2 00 .. +L925F: rts ; 925F 60 ` + +; ---------------------------------------------------------------------------- +__ChkDkGEOS: + ldy #$AD ; 9260 A0 AD .. + ldx #$00 ; 9262 A2 00 .. + lda #$00 ; 9264 A9 00 .. + sta isGEOS ; 9266 8D 8B 84 ... +L9269: lda (r5L),y ; 9269 B1 0C .. + cmp L927F,x ; 926B DD 7F 92 ... + bne L927B ; 926E D0 0B .. + iny ; 9270 C8 . + inx ; 9271 E8 . + cpx #$0B ; 9272 E0 0B .. + bne L9269 ; 9274 D0 F3 .. + lda #$FF ; 9276 A9 FF .. + sta isGEOS ; 9278 8D 8B 84 ... +L927B: lda isGEOS ; 927B AD 8B 84 ... + rts ; 927E 60 ` + +; ---------------------------------------------------------------------------- +L927F: .byte "GEOS format V1.0" ; 927F 47 45 4F 53 20 66 6F 72 GEOS for + ; 9287 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 928F 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 9290 08 . + sei ; 9291 78 x + lda r6L ; 9292 A5 0E .. + pha ; 9294 48 H + lda r2H ; 9295 A5 07 .. + pha ; 9297 48 H + lda r2L ; 9298 A5 06 .. + pha ; 929A 48 H + ldx r10L ; 929B A6 16 .. + inx ; 929D E8 . + stx r6L ; 929E 86 0E .. + lda #$12 ; 92A0 A9 12 .. + sta r1L ; 92A2 85 04 .. + lda #$01 ; 92A4 A9 01 .. + sta r1H ; 92A6 85 05 .. +L92A8: jsr ReadBuff ; 92A8 20 3C 90 <. +L92AB: txa ; 92AB 8A . + bne L92E6 ; 92AC D0 38 .8 + dec r6L ; 92AE C6 0E .. + beq L92C7 ; 92B0 F0 15 .. +L92B2: lda diskBlkBuf ; 92B2 AD 00 80 ... + bne L92BD ; 92B5 D0 06 .. + jsr AddDirBlock ; 92B7 20 39 90 9. + clv ; 92BA B8 . + bvc L92AB ; 92BB 50 EE P. +L92BD: sta r1L ; 92BD 85 04 .. + lda $8001 ; 92BF AD 01 80 ... + sta r1H ; 92C2 85 05 .. + clv ; 92C4 B8 . + bvc L92A8 ; 92C5 50 E1 P. +L92C7: ldy #$02 ; 92C7 A0 02 .. + ldx #$00 ; 92C9 A2 00 .. +L92CB: lda diskBlkBuf,y ; 92CB B9 00 80 ... + beq L92E6 ; 92CE F0 16 .. + tya ; 92D0 98 . + clc ; 92D1 18 . + adc #$20 ; 92D2 69 20 i + tay ; 92D4 A8 . + bcc L92CB ; 92D5 90 F4 .. + lda #$01 ; 92D7 A9 01 .. + sta r6L ; 92D9 85 0E .. + ldx #$04 ; 92DB A2 04 .. + ldy r10L ; 92DD A4 16 .. + iny ; 92DF C8 . + sty r10L ; 92E0 84 16 .. + cpy #$12 ; 92E2 C0 12 .. + bcc L92B2 ; 92E4 90 CC .. +L92E6: pla ; 92E6 68 h + sta r2L ; 92E7 85 06 .. + pla ; 92E9 68 h + sta r2H ; 92EA 85 07 .. + pla ; 92EC 68 h + sta r6L ; 92ED 85 0E .. + plp ; 92EF 28 ( + rts ; 92F0 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 92F1 A5 0F .. + pha ; 92F3 48 H + lda r6L ; 92F4 A5 0E .. + pha ; 92F6 48 H + ldy #$48 ; 92F7 A0 48 .H + ldx #$04 ; 92F9 A2 04 .. + lda curDirHead,y ; 92FB B9 00 82 ... + beq L9326 ; 92FE F0 26 .& + lda r1H ; 9300 A5 05 .. + sta r3H ; 9302 85 09 .. + lda r1L ; 9304 A5 04 .. + sta r3L ; 9306 85 08 .. + jsr SetNextFree ; 9308 20 92 C2 .. + lda r3H ; 930B A5 09 .. + sta $8001 ; 930D 8D 01 80 ... + lda r3L ; 9310 A5 08 .. + sta diskBlkBuf ; 9312 8D 00 80 ... + jsr WriteBuff ; 9315 20 3F 90 ?. + txa ; 9318 8A . + bne L9326 ; 9319 D0 0B .. + lda r3H ; 931B A5 09 .. + sta r1H ; 931D 85 05 .. + lda r3L ; 931F A5 08 .. + sta r1L ; 9321 85 04 .. + jsr L932D ; 9323 20 2D 93 -. +L9326: pla ; 9326 68 h + sta r6L ; 9327 85 0E .. + pla ; 9329 68 h + sta r6H ; 932A 85 0F .. + rts ; 932C 60 ` + +; ---------------------------------------------------------------------------- +L932D: lda #$00 ; 932D A9 00 .. + tay ; 932F A8 . +L9330: sta diskBlkBuf,y ; 9330 99 00 80 ... + iny ; 9333 C8 . + bne L9330 ; 9334 D0 FA .. + dey ; 9336 88 . + sty $8001 ; 9337 8C 01 80 ... + jmp WriteBuff ; 933A 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + lda r3H ; 933D A5 09 .. + clc ; 933F 18 . + adc interleave ; 9340 6D 8C 84 m.. + sta r6H ; 9343 85 0F .. + lda r3L ; 9345 A5 08 .. + sta r6L ; 9347 85 0E .. + cmp #$12 ; 9349 C9 12 .. + beq L935B ; 934B F0 0E .. + cmp #$35 ; 934D C9 35 .5 + beq L935B ; 934F F0 0A .. +L9351: lda r6L ; 9351 A5 0E .. + cmp #$12 ; 9353 C9 12 .. + beq L9387 ; 9355 F0 30 .0 + cmp #$35 ; 9357 C9 35 .5 + beq L9387 ; 9359 F0 2C ., +L935B: cmp #$24 ; 935B C9 24 .$ + bcc L936A ; 935D 90 0B .. + clc ; 935F 18 . + adc #$B9 ; 9360 69 B9 i. + tax ; 9362 AA . + lda curDirHead,x ; 9363 BD 00 82 ... + bne L9372 ; 9366 D0 0A .. + beq L9387 ; 9368 F0 1D .. +L936A: asl a ; 936A 0A . + asl a ; 936B 0A . + tax ; 936C AA . + lda curDirHead,x ; 936D BD 00 82 ... + beq L9387 ; 9370 F0 15 .. +L9372: lda r6L ; 9372 A5 0E .. + jsr L93C5 ; 9374 20 C5 93 .. + lda L93DD,x ; 9377 BD DD 93 ... + sta r7L ; 937A 85 10 .. + tay ; 937C A8 . +L937D: jsr L93E1 ; 937D 20 E1 93 .. + beq L93B7 ; 9380 F0 35 .5 + inc r6H ; 9382 E6 0F .. + dey ; 9384 88 . + bne L937D ; 9385 D0 F6 .. +L9387: bit $8203 ; 9387 2C 03 82 ,.. + bpl L93A0 ; 938A 10 14 .. + lda r6L ; 938C A5 0E .. + cmp #$24 ; 938E C9 24 .$ + bcs L9399 ; 9390 B0 07 .. + clc ; 9392 18 . + adc #$23 ; 9393 69 23 i# + sta r6L ; 9395 85 0E .. + bne L93A8 ; 9397 D0 0F .. +L9399: sec ; 9399 38 8 + sbc #$22 ; 939A E9 22 ." + sta r6L ; 939C 85 0E .. + bne L93A4 ; 939E D0 04 .. +L93A0: inc r6L ; 93A0 E6 0E .. + lda r6L ; 93A2 A5 0E .. +L93A4: cmp #$24 ; 93A4 C9 24 .$ + bcs L93C2 ; 93A6 B0 1A .. +L93A8: sec ; 93A8 38 8 + sbc r3L ; 93A9 E5 08 .. + sta r6H ; 93AB 85 0F .. + asl a ; 93AD 0A . + adc #$04 ; 93AE 69 04 i. + adc interleave ; 93B0 6D 8C 84 m.. + sta r6H ; 93B3 85 0F .. + bne L9351 ; 93B5 D0 9A .. +L93B7: lda r6L ; 93B7 A5 0E .. + sta r3L ; 93B9 85 08 .. + lda r6H ; 93BB A5 0F .. + sta r3H ; 93BD 85 09 .. + ldx #$00 ; 93BF A2 00 .. + rts ; 93C1 60 ` + +; ---------------------------------------------------------------------------- +L93C2: ldx #$03 ; 93C2 A2 03 .. + rts ; 93C4 60 ` + +; ---------------------------------------------------------------------------- +L93C5: pha ; 93C5 48 H + cmp #$24 ; 93C6 C9 24 .$ + bcc L93CD ; 93C8 90 03 .. + sec ; 93CA 38 8 + sbc #$23 ; 93CB E9 23 .# +L93CD: ldx #$00 ; 93CD A2 00 .. +L93CF: cmp L93D9,x ; 93CF DD D9 93 ... + bcc L93D7 ; 93D2 90 03 .. + inx ; 93D4 E8 . + bne L93CF ; 93D5 D0 F8 .. +L93D7: pla ; 93D7 68 h + rts ; 93D8 60 ` + +; ---------------------------------------------------------------------------- +L93D9: .byte $12 ; 93D9 12 . + ora $241F,y ; 93DA 19 1F 24 ..$ +L93DD: ora r8H,x ; 93DD 15 13 .. + .byte $12 ; 93DF 12 . + .byte $11 ; 93E0 11 . +L93E1: lda r6H ; 93E1 A5 0F .. +L93E3: cmp r7L ; 93E3 C5 10 .. + bcc L93ED ; 93E5 90 06 .. + sec ; 93E7 38 8 + sbc r7L ; 93E8 E5 10 .. + clv ; 93EA B8 . + bvc L93E3 ; 93EB 50 F6 P. +L93ED: sta r6H ; 93ED 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93EF 20 AD C2 .. + beq L9419 ; 93F2 F0 25 .% + lda r6L ; 93F4 A5 0E .. + cmp #$24 ; 93F6 C9 24 .$ + bcc L9407 ; 93F8 90 0D .. + lda r8H ; 93FA A5 13 .. + eor #$FF ; 93FC 49 FF I. + and dir2Head,x ; 93FE 3D 00 89 =.. + sta dir2Head,x ; 9401 9D 00 89 ... + clv ; 9404 B8 . + bvc L9411 ; 9405 50 0A P. +L9407: lda r8H ; 9407 A5 13 .. + eor #$FF ; 9409 49 FF I. + and curDirHead,x ; 940B 3D 00 82 =.. + sta curDirHead,x ; 940E 9D 00 82 ... +L9411: ldx r7H ; 9411 A6 11 .. + dec curDirHead,x ; 9413 DE 00 82 ... + ldx #$00 ; 9416 A2 00 .. + rts ; 9418 60 ` + +; ---------------------------------------------------------------------------- +L9419: ldx #$06 ; 9419 A2 06 .. + rts ; 941B 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 941C A5 0F .. + and #$07 ; 941E 29 07 ). + tax ; 9420 AA . + lda L945F,x ; 9421 BD 5F 94 ._. + sta r8H ; 9424 85 13 .. + lda r6L ; 9426 A5 0E .. + cmp #$24 ; 9428 C9 24 .$ + bcc L944C ; 942A 90 20 . + sec ; 942C 38 8 + sbc #$24 ; 942D E9 24 .$ + sta r7H ; 942F 85 11 .. + lda r6H ; 9431 A5 0F .. + lsr a ; 9433 4A J + lsr a ; 9434 4A J + lsr a ; 9435 4A J + clc ; 9436 18 . + adc r7H ; 9437 65 11 e. + asl r7H ; 9439 06 11 .. + clc ; 943B 18 . + adc r7H ; 943C 65 11 e. + tax ; 943E AA . + lda r6L ; 943F A5 0E .. + clc ; 9441 18 . + adc #$B9 ; 9442 69 B9 i. + sta r7H ; 9444 85 11 .. + lda dir2Head,x ; 9446 BD 00 89 ... + and r8H ; 9449 25 13 %. + rts ; 944B 60 ` + +; ---------------------------------------------------------------------------- +L944C: asl a ; 944C 0A . + asl a ; 944D 0A . + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda curDirHead,x ; 9459 BD 00 82 ... + and r8H ; 945C 25 13 %. + rts ; 945E 60 ` + +; ---------------------------------------------------------------------------- +L945F: ora (r0L,x) ; 945F 01 02 .. + .byte $04 ; 9461 04 . + php ; 9462 08 . + bpl L9485 ; 9463 10 20 . + rti ; 9465 40 @ + +; ---------------------------------------------------------------------------- + .byte $80 ; 9466 80 . +__FreeBlock: + jsr FindBAMBit ; 9467 20 AD C2 .. + bne L948D ; 946A D0 21 .! + lda r6L ; 946C A5 0E .. + cmp #$24 ; 946E C9 24 .$ + bcc L947D ; 9470 90 0B .. + lda r8H ; 9472 A5 13 .. + eor dir2Head,x ; 9474 5D 00 89 ].. + sta dir2Head,x ; 9477 9D 00 89 ... + clv ; 947A B8 . + bvc L9485 ; 947B 50 08 P. +L947D: lda r8H ; 947D A5 13 .. + eor curDirHead,x ; 947F 5D 00 82 ].. + sta curDirHead,x ; 9482 9D 00 82 ... +L9485: ldx r7H ; 9485 A6 11 .. + inc curDirHead,x ; 9487 FE 00 82 ... + ldx #$00 ; 948A A2 00 .. + rts ; 948C 60 ` + +; ---------------------------------------------------------------------------- +L948D: ldx #$06 ; 948D A2 06 .. + rts ; 948F 60 ` + +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9490 A9 00 .. + sta r4L ; 9492 85 0A .. + sta r4H ; 9494 85 0B .. + ldy #$04 ; 9496 A0 04 .. +L9498: lda (r5L),y ; 9498 B1 0C .. + clc ; 949A 18 . + adc r4L ; 949B 65 0A e. + sta r4L ; 949D 85 0A .. + bcc L94A3 ; 949F 90 02 .. + inc r4H ; 94A1 E6 0B .. +L94A3: tya ; 94A3 98 . + clc ; 94A4 18 . + adc #$04 ; 94A5 69 04 i. + tay ; 94A7 A8 . + cpy #$48 ; 94A8 C0 48 .H + beq L94A3 ; 94AA F0 F7 .. + cpy #$90 ; 94AC C0 90 .. + bne L9498 ; 94AE D0 E8 .. + lda #$02 ; 94B0 A9 02 .. + sta r3H ; 94B2 85 09 .. + lda #$98 ; 94B4 A9 98 .. + sta r3L ; 94B6 85 08 .. + bit $8203 ; 94B8 2C 03 82 ,.. + bpl L94D5 ; 94BB 10 18 .. + ldy #$DD ; 94BD A0 DD .. +L94BF: lda (r5L),y ; 94BF B1 0C .. + clc ; 94C1 18 . + adc r4L ; 94C2 65 0A e. + sta r4L ; 94C4 85 0A .. + bcc L94CA ; 94C6 90 02 .. + inc r4H ; 94C8 E6 0B .. +L94CA: iny ; 94CA C8 . + bne L94BF ; 94CB D0 F2 .. + lda #$05 ; 94CD A9 05 .. + sta r3H ; 94CF 85 09 .. + lda #$30 ; 94D1 A9 30 .0 + sta r3L ; 94D3 85 08 .. +L94D5: rts ; 94D5 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94D6 20 47 C2 G. + txa ; 94D9 8A . + bne L9536 ; 94DA D0 5A .Z + lda #$82 ; 94DC A9 82 .. + sta r5H ; 94DE 85 0D .. + lda #$00 ; 94E0 A9 00 .. + sta r5L ; 94E2 85 0C .. + jsr CalcBlksFree ; 94E4 20 DB C1 .. + ldx #$03 ; 94E7 A2 03 .. + lda r4L ; 94E9 A5 0A .. + ora r4H ; 94EB 05 0B .. + beq L9536 ; 94ED F0 47 .G + lda #$00 ; 94EF A9 00 .. + sta r0L ; 94F1 85 02 .. + lda #$13 ; 94F3 A9 13 .. + sta r3L ; 94F5 85 08 .. +L94F7: lda #$00 ; 94F7 A9 00 .. + sta r3H ; 94F9 85 09 .. + jsr SetNextFree ; 94FB 20 92 C2 .. + txa ; 94FE 8A . + beq L950D ; 94FF F0 0C .. + lda r0L ; 9501 A5 02 .. + bne L9536 ; 9503 D0 31 .1 + lda #$01 ; 9505 A9 01 .. + sta r3L ; 9507 85 08 .. + sta r0L ; 9509 85 02 .. + bne L94F7 ; 950B D0 EA .. +L950D: lda r3H ; 950D A5 09 .. + sta r1H ; 950F 85 05 .. + lda r3L ; 9511 A5 08 .. + sta r1L ; 9513 85 04 .. + jsr L932D ; 9515 20 2D 93 -. + txa ; 9518 8A . + bne L9536 ; 9519 D0 1B .. + lda r1H ; 951B A5 05 .. + sta $82AC ; 951D 8D AC 82 ... + lda r1L ; 9520 A5 04 .. + sta $82AB ; 9522 8D AB 82 ... + ldy #$BC ; 9525 A0 BC .. + ldx #$0F ; 9527 A2 0F .. +L9529: lda L927F,x ; 9529 BD 7F 92 ... + sta curDirHead,y ; 952C 99 00 82 ... + dey ; 952F 88 . + dex ; 9530 CA . + bpl L9529 ; 9531 10 F6 .. + jsr PutDirHead ; 9533 20 4A C2 J. +L9536: rts ; 9536 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + php ; 9537 08 . + pla ; 9538 68 h + sta L96F1 ; 9539 8D F1 96 ... + sei ; 953C 78 x + lda CPU_DATA ; 953D A5 01 .. + sta L96F3 ; 953F 8D F3 96 ... + lda #$36 ; 9542 A9 36 .6 + sta CPU_DATA ; 9544 85 01 .. + lda grirqen ; 9546 AD 1A D0 ... + sta L96F2 ; 9549 8D F2 96 ... + lda clkreg ; 954C AD 30 D0 .0. + sta L96F0 ; 954F 8D F0 96 ... + ldy #$00 ; 9552 A0 00 .. + sty clkreg ; 9554 8C 30 D0 .0. + sty grirqen ; 9557 8C 1A D0 ... + lda #$7F ; 955A A9 7F .. + sta grirq ; 955C 8D 19 D0 ... + sta $DC0D ; 955F 8D 0D DC ... + sta $DD0D ; 9562 8D 0D DD ... + lda #$95 ; 9565 A9 95 .. + sta $0315 ; 9567 8D 15 03 ... + lda #$A7 ; 956A A9 A7 .. + sta irqvec ; 956C 8D 14 03 ... + lda #$95 ; 956F A9 95 .. + sta $0319 ; 9571 8D 19 03 ... + lda #$AC ; 9574 A9 AC .. + sta nmivec ; 9576 8D 18 03 ... + lda #$3F ; 9579 A9 3F .? + sta $DD02 ; 957B 8D 02 DD ... + lda mobenble ; 957E AD 15 D0 ... + sta L96F4 ; 9581 8D F4 96 ... + sty mobenble ; 9584 8C 15 D0 ... + sty $DD05 ; 9587 8C 05 DD ... + iny ; 958A C8 . + sty $DD04 ; 958B 8C 04 DD ... + lda #$81 ; 958E A9 81 .. + sta $DD0D ; 9590 8D 0D DD ... + lda #$09 ; 9593 A9 09 .. + sta $DD0E ; 9595 8D 0E DD ... + ldy #$2C ; 9598 A0 2C ., +L959A: lda rasreg ; 959A AD 12 D0 ... + cmp TURBO_DD00_CPY ; 959D C5 8F .. + beq L959A ; 959F F0 F9 .. + sta TURBO_DD00_CPY ; 95A1 85 8F .. + dey ; 95A3 88 . + bne L959A ; 95A4 D0 F4 .. + rts ; 95A6 60 ` + +; ---------------------------------------------------------------------------- + pla ; 95A7 68 h + tay ; 95A8 A8 . + pla ; 95A9 68 h + tax ; 95AA AA . + pla ; 95AB 68 h + rti ; 95AC 40 @ + +; ---------------------------------------------------------------------------- +__DoneWithIO: + sei ; 95AD 78 x + lda L96F0 ; 95AE AD F0 96 ... + sta clkreg ; 95B1 8D 30 D0 .0. + lda L96F4 ; 95B4 AD F4 96 ... + sta mobenble ; 95B7 8D 15 D0 ... + lda #$7F ; 95BA A9 7F .. + sta $DD0D ; 95BC 8D 0D DD ... + lda $DD0D ; 95BF AD 0D DD ... + lda L96F2 ; 95C2 AD F2 96 ... + sta grirqen ; 95C5 8D 1A D0 ... + lda L96F3 ; 95C8 AD F3 96 ... + sta CPU_DATA ; 95CB 85 01 .. + lda L96F1 ; 95CD AD F1 96 ... + pha ; 95D0 48 H + plp ; 95D1 28 ( + rts ; 95D2 60 ` + +; ---------------------------------------------------------------------------- +__EnterTurbo: + lda curDrive ; 95D3 AD 89 84 ... + jsr SetDevice ; 95D6 20 B0 C2 .. + ldx #$00 ; 95D9 A2 00 .. + rts ; 95DB 60 ` + +; ---------------------------------------------------------------------------- +__ExitTurbo: + lda #$08 ; 95DC A9 08 .. + sta interleave ; 95DE 8D 8C 84 ... + rts ; 95E1 60 ` + +; ---------------------------------------------------------------------------- +__ChangeDiskDevice: + sta curDrive ; 95E2 8D 89 84 ... + sta curDevice ; 95E5 85 BA .. + ldx #$00 ; 95E7 A2 00 .. + rts ; 95E9 60 ` + +; ---------------------------------------------------------------------------- +__NewDisk: + jsr EnterTurbo ; 95EA 20 14 C2 .. + rts ; 95ED 60 ` + +; ---------------------------------------------------------------------------- +__ReadBlock: + jsr L90E1 ; 95EE 20 E1 90 .. + bcc L95F6 ; 95F1 90 03 .. + jsr L9615 ; 95F3 20 15 96 .. +L95F6: ldy #$00 ; 95F6 A0 00 .. + rts ; 95F8 60 ` + +; ---------------------------------------------------------------------------- +_ReadLink: + jsr L90E1 ; 95F9 20 E1 90 .. + bcc L9603 ; 95FC 90 05 .. + ldy #$91 ; 95FE A0 91 .. + jsr L961D ; 9600 20 1D 96 .. +L9603: rts ; 9603 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr L90E1 ; 9604 20 E1 90 .. + bcc L960C ; 9607 90 03 .. + jsr L9619 ; 9609 20 19 96 .. +L960C: rts ; 960C 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + jsr L90E1 ; 960D 20 E1 90 .. + bcc L9614 ; 9610 90 02 .. + ldx #$00 ; 9612 A2 00 .. +L9614: rts ; 9614 60 ` + +; ---------------------------------------------------------------------------- +L9615: ldy #$91 ; 9615 A0 91 .. + bne L962D ; 9617 D0 14 .. +L9619: ldy #$90 ; 9619 A0 90 .. + bne L962D ; 961B D0 10 .. +L961D: lda r2H ; 961D A5 07 .. + pha ; 961F 48 H + lda r2L ; 9620 A5 06 .. + pha ; 9622 48 H + lda #$00 ; 9623 A9 00 .. + sta r2H ; 9625 85 07 .. + lda #$02 ; 9627 A9 02 .. + sta r2L ; 9629 85 06 .. + bne L963B ; 962B D0 0E .. +L962D: lda r2H ; 962D A5 07 .. + pha ; 962F 48 H + lda r2L ; 9630 A5 06 .. + pha ; 9632 48 H + lda #$01 ; 9633 A9 01 .. + sta r2H ; 9635 85 07 .. + lda #$00 ; 9637 A9 00 .. + sta r2L ; 9639 85 06 .. +L963B: lda r0H ; 963B A5 03 .. + pha ; 963D 48 H + lda r0L ; 963E A5 02 .. + pha ; 9640 48 H + lda r1H ; 9641 A5 05 .. + pha ; 9643 48 H + lda r1L ; 9644 A5 04 .. + pha ; 9646 48 H + lda r3L ; 9647 A5 08 .. + pha ; 9649 48 H + tya ; 964A 98 . + pha ; 964B 48 H + lda r1L ; 964C A5 04 .. + cmp #$24 ; 964E C9 24 .$ + bcc L9655 ; 9650 90 03 .. + sec ; 9652 38 8 + sbc #$23 ; 9653 E9 23 .# +L9655: tay ; 9655 A8 . + dey ; 9656 88 . + lda L96A8,y ; 9657 B9 A8 96 ... + clc ; 965A 18 . + adc r1H ; 965B 65 05 e. + sta r1H ; 965D 85 05 .. + lda L96CC,y ; 965F B9 CC 96 ... + ldy curDrive ; 9662 AC 89 84 ... + adc driveData,y ; 9665 79 BF 88 y.. + sta r3L ; 9668 85 08 .. + lda r1L ; 966A A5 04 .. + cmp #$24 ; 966C C9 24 .$ + bcc L967D ; 966E 90 0D .. + lda r1H ; 9670 A5 05 .. + clc ; 9672 18 . + adc #$BC ; 9673 69 BC i. + sta r1H ; 9675 85 05 .. + lda r3L ; 9677 A5 08 .. + adc #$02 ; 9679 69 02 i. + sta r3L ; 967B 85 08 .. +L967D: lda #$00 ; 967D A9 00 .. + sta r1L ; 967F 85 04 .. + lda r4H ; 9681 A5 0B .. + sta r0H ; 9683 85 03 .. + lda r4L ; 9685 A5 0A .. + sta r0L ; 9687 85 02 .. + pla ; 9689 68 h + tay ; 968A A8 . + jsr DoRAMOp ; 968B 20 D4 C2 .. + tax ; 968E AA . + pla ; 968F 68 h + sta r3L ; 9690 85 08 .. + pla ; 9692 68 h + sta r1L ; 9693 85 04 .. + pla ; 9695 68 h + sta r1H ; 9696 85 05 .. + pla ; 9698 68 h + sta r0L ; 9699 85 02 .. + pla ; 969B 68 h + sta r0H ; 969C 85 03 .. + pla ; 969E 68 h + sta r2L ; 969F 85 06 .. + pla ; 96A1 68 h + sta r2H ; 96A2 85 07 .. + txa ; 96A4 8A . + ldx #$00 ; 96A5 A2 00 .. + rts ; 96A7 60 ` + +; ---------------------------------------------------------------------------- +L96A8: brk ; 96A8 00 . + ora curIndexTable,x ; 96A9 15 2A .* + .byte $3F ; 96AB 3F ? + .byte $54 ; 96AC 54 T + adc #$7E ; 96AD 69 7E i~ + .byte $93 ; 96AF 93 . + tay ; 96B0 A8 . + lda $E7D2,x ; 96B1 BD D2 E7 ... + .byte $FC ; 96B4 FC . + ora (baselineOffset),y ; 96B5 11 26 .& + .byte $3B ; 96B7 3B ; + bvc L971F ; 96B8 50 65 Pe + sei ; 96BA 78 x + .byte $8B ; 96BB 8B . + .byte $9E ; 96BC 9E . + lda ($C4),y ; 96BD B1 C4 .. + .byte $D7 ; 96BF D7 . + nop ; 96C0 EA . + .byte $FC ; 96C1 FC . + asl $3220 ; 96C2 0E 20 32 . 2 + .byte $44 ; 96C5 44 D + lsr $67,x ; 96C6 56 67 Vg + sei ; 96C8 78 x + .byte $89 ; 96C9 89 . + txs ; 96CA 9A . + .byte $AB ; 96CB AB . +L96CC: brk ; 96CC 00 . + brk ; 96CD 00 . + brk ; 96CE 00 . + brk ; 96CF 00 . + brk ; 96D0 00 . + brk ; 96D1 00 . + brk ; 96D2 00 . + brk ; 96D3 00 . + brk ; 96D4 00 . + brk ; 96D5 00 . + brk ; 96D6 00 . + brk ; 96D7 00 . + brk ; 96D8 00 . + ora (CPU_DATA,x) ; 96D9 01 01 .. + ora (CPU_DATA,x) ; 96DB 01 01 .. + ora (CPU_DATA,x) ; 96DD 01 01 .. + ora (CPU_DATA,x) ; 96DF 01 01 .. + ora (CPU_DATA,x) ; 96E1 01 01 .. + ora (CPU_DATA,x) ; 96E3 01 01 .. + ora (r0L,x) ; 96E5 01 02 .. + .byte $02 ; 96E7 02 . + .byte $02 ; 96E8 02 . + .byte $02 ; 96E9 02 . + .byte $02 ; 96EA 02 . + .byte $02 ; 96EB 02 . + .byte $02 ; 96EC 02 . + .byte $02 ; 96ED 02 . + .byte $02 ; 96EE 02 . + .byte $02 ; 96EF 02 . +L96F0: brk ; 96F0 00 . +L96F1: brk ; 96F1 00 . +L96F2: brk ; 96F2 00 . +L96F3: brk ; 96F3 00 . +L96F4: brk ; 96F4 00 . + brk ; 96F5 00 . + brk ; 96F6 00 . + brk ; 96F7 00 . + brk ; 96F8 00 . + brk ; 96F9 00 . + brk ; 96FA 00 . + brk ; 96FB 00 . +L96FC: brk ; 96FC 00 . + brk ; 96FD 00 . + brk ; 96FE 00 . +L96FF: brk ; 96FF 00 . + .byte $F2 ; 9700 F2 . diff --git a/_newconf/newconf/r5.info b/_newconf/newconf/r5.info new file mode 100644 index 00000000..73e8c0c7 --- /dev/null +++ b/_newconf/newconf/r5.info @@ -0,0 +1,59 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r5.asm"; + INPUTNAME "configure.cvt.record.5"; + STARTADDR $9000; + PAGELENGTH 0; # No paging + CPU "6502"; + COMMENTS 4; + + }; + +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/const.inc"; IGNOREUNKNOWN TRUE;}; +#ASMINC { FILE "/cc65/libsrc/geos/inc/diskdrv.inc";}; +#ASMINC { FILE "inc/geossym.inc";}; +ASMINC { FILE "inc/labels.inc";}; +ASMINC { FILE "r5.labels"; }; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/inputdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/printdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/dio.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geosmac.ca65.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geossym.inc";}; +#ASMINC { FILE "/cc65/libsrc/geos/inc/jumptab.inc";}; + +# One segment for the whole stuff +SEGMENT { START $9000; END $ffff; NAME "record5"; }; +#SEGMENT { START $9A02; END $9BEE; NAME "drv1581_drvcode"; }; +#SEGMENT { START $9BEf; END $ffff; NAME "record4"; }; +RANGE { START $927F; END $928F; TYPE TEXTTABLE; }; +#RANGE { START $92AB; END $92BB; TYPE TEXTTABLE; }; +RANGE { START $9000; END $902f; TYPE ADDRTABLE; }; +#RANGE { START $946B; END $9472;TYPE BYTETABLE; }; +#RANGE { START $963D; END $963F; TYPE BYTETABLE; }; +#RANGE { START $9640; END $9641; TYPE WORDTABLE; }; +#RANGE { START $9A02; END $9A10; TYPE BYTETABLE; }; +#RANGE { START $9A11; END $9A20; TYPE BYTETABLE; }; +#RANGE { START $979A; END $979C; TYPE TEXTTABLE; }; +#RANGE { START $979D; END $979E; TYPE BYTETABLE; }; +#RANGE { START $9823; END $982D; TYPE BYTETABLE; }; +#RANGE { START $9760; END $9767; TYPE BYTETABLE; }; +#RANGE { START $96EE; END $96F0; TYPE TEXTTABLE; }; +#RANGE { START $9689; END $968D; TYPE TEXTTABLE; }; +#RANGE { START $96F1; END $96F2; TYPE WORDTABLE; }; +#RANGE { START $9A00; END $9A01; TYPE WORDTABLE; }; +#RANGE { START $982E; END $984D; TYPE BYTETABLE; }; + + + + + + + + + + + + + + + diff --git a/_newconf/newconf/r5.labels b/_newconf/newconf/r5.labels new file mode 100644 index 00000000..96f587bd --- /dev/null +++ b/_newconf/newconf/r5.labels @@ -0,0 +1,33 @@ +__InitForIO = $9537; +__DoneWithIO = $95AD; +__ExitTurbo = $95DC; +;__PurgeTurbo = $95DC; +__EnterTurbo = $95D3; +__ChangeDiskDevice = $95E2; +__NewDisk = $95EA; +__ReadBlock = $95EE; +__WriteBlock = $9604; +__VerWriteBlock = $960D; +__OpenDisk = $9102; +__GetBlock = $907D; +__PutBlock = $90B0; +__GetDirHead = $904F; +__PutDirHead = $908A; +__GetFreeDirBlk = $9290; +__CalcBlksFree = $9490; +__FreeBlock = $9467; +__SetNextFree = $933D; +__FindBAMBit = $941C; +__NxtBlkAlloc = $9139; +__BlkAlloc = $9132; +__ChkDkGEOS = $9260; +__SetGEOSDisk = $94D6; +_Get1stDirEntry = $91D7; +_GetNxtDirEntry = $91F0; +_GetBorder = $923A; +_AddDirBlock = $92F1; +_ReadBuff = $9075; +_WriteBuff = $90A8; +_AllocateBlock = $93EF; +_ReadLink = $95F9; + diff --git a/_newconf/newconf/r6.asm b/_newconf/newconf/r6.asm new file mode 100644 index 00000000..e46bc989 --- /dev/null +++ b/_newconf/newconf/r6.asm @@ -0,0 +1,1523 @@ +; da65 V2.15 +; Created: 2017-06-30 23:59:27 +; Input file: configure.cvt.record.6 +; Page: 1 + + + .setcpu "6502" + +; ---------------------------------------------------------------------------- +CPU_DDR := $0000 +CPU_DATA := $0001 +r0L := $0002 +r0H := $0003 +r1L := $0004 +r1H := $0005 +r2L := $0006 +r2H := $0007 +r3L := $0008 +r3H := $0009 +r4L := $000A +r4H := $000B +r5L := $000C +r5H := $000D +r6L := $000E +r6H := $000F +r7L := $0010 +r7H := $0011 +r8L := $0012 +r8H := $0013 +r9L := $0014 +r9H := $0015 +r10L := $0016 +r10H := $0017 +r11L := $0018 +r11H := $0019 +r12L := $001A +r12H := $001B +r13L := $001C +r13H := $001D +r14L := $001E +r14H := $001F +r15L := $0020 +r15H := $0021 +curPattern := $0022 +string := $0024 +baselineOffset := $0026 +curSetWidth := $0027 +curHeight := $0029 +curIndexTable := $002A +cardDataPntr := $002C +currentMode := $002E +dispBufferOn := $002F +mouseOn := $0030 +msePicPtr := $0031 +windowTop := $0033 +windowBottom := $0034 +leftMargin := $0035 +rightMargin := $0037 +pressFlag := $0039 +mouseXPos := $003A +mouseYPos := $003C +returnAddress := $003D +graphMode := $003F +a2L := $0070 +a2H := $0071 +a3L := $0072 +a3H := $0073 +a4L := $0074 +a4H := $0075 +a5L := $0076 +a5H := $0077 +a6L := $0078 +a6H := $0079 +a7L := $007A +a7H := $007B +a8L := $007C +a8H := $007D +a9L := $007E +a9H := $007F +TURBO_DD00 := $008E ; from 1541 turbo +TURBO_DD00_CPY := $008F ; from 1541 turbo +STATUS := $0090 +curDevice := $00BA +a0L := $00FB +a0H := $00FC +a1L := $00FD +a1H := $00FE +irqvec := $0314 +bkvec := $0316 +nmivec := $0318 +APP_RAM := $0400 +BACK_SCR_BASE := $6000 +L6216 := $6216 +PRINTBASE := $7900 +diskBlkBuf := $8000 +fileHeader := $8100 +curDirHead := $8200 +fileTrScTab := $8300 +dirEntryBuf := $8400 +DrACurDkNm := $841E +DrBCurDkNm := $8430 +dataFileName := $8442 +dataDiskName := $8453 +PrntFilename := $8465 +PrntDiskName := $8476 +curDrive := $8489 +diskOpenFlg := $848A +isGEOS := $848B +interleave := $848C +NUMDRV := $848D +driveType := $848E +turboFlags := $8492 +curRecord := $8496 +usedRecords := $8497 +fileWritten := $8498 +fileSize := $8499 +appMain := $849B +intTopVector := $849D +intBotVector := $849F +mouseVector := $84A1 +keyVector := $84A3 +inputVector := $84A5 +mouseFaultVec := $84A7 +otherPressVec := $84A9 +StringFaultVec := $84AB +alarmTmtVector := $84AD +BRKVector := $84AF +RecoverVector := $84B1 +selectionFlash := $84B3 +alphaFlag := $84B4 +iconSelFlg := $84B5 +faultData := $84B6 +menuNumber := $84B7 +mouseTop := $84B8 +mouseBottom := $84B9 +mouseLeft := $84BA +mouseRight := $84BC +stringX := $84BE +stringY := $84C0 +mousePicData := $84C1 +maxMouseSpeed := $8501 +minMouseSpeed := $8502 +mouseAccel := $8503 +keyData := $8504 +mouseData := $8505 +inputData := $8506 +mouseSpeed := $8507 +random := $850A +saveFontTab := $850C +dblClickCount := $8515 +year := $8516 +month := $8517 +day := $8518 +hour := $8519 +minutes := $851A +seconds := $851B +alarmSetFlag := $851C +sysDBData := $851D +screencolors := $851E +dlgBoxRamBuf := $851F ; to $8697 +savedmoby2 := $88BB +scr80polar := $88BC +scr80colors := $88BD +vdcClrMode := $88BE +driveData := $88BF +ramExpSize := $88C3 +sysRAMFlg := $88C4 +firstBoot := $88C5 +curType := $88C6 +ramBase := $88C7 +inputDevName := $88CB +memBase := $88CF ; ??? +DrCCurDkNm := $88DC +DrDCurDkNm := $88EE +dir2Head := $8900 +spr0pic := $8A00 +spr1pic := $8A40 +spr2pic := $8A80 +spr3pic := $8AC0 +spr4pic := $8B00 +spr5pic := $8B40 +spr6pic := $8B80 +spr7pic := $8BC0 +COLOR_MATRIX := $8C00 +obj0Pointer := $8FF8 +obj1Pointer := $8FF9 +obj2Pointer := $8FFA +obj3Pointer := $8FFB +obj4Pointer := $8FFC +obj5Pointer := $8FFD +obj6Pointer := $8FFE +obj7Pointer := $8FFF +SCREEN_BASE := $A000 +OS_ROM := $C000 +bootName := $C006 +version := $C00F +nationality := $C010 +sysFlgCopy := $C012 +c128Flag := $C013 +dateCopy := $C018 +InterruptMain := $C100 +InitProcesses := $C103 +RestartProcess := $C106 +EnableProcess := $C109 +BlockProcess := $C10C +UnBlockProcess := $C10F +FreezeProcess := $C112 +UnFreezeProcess := $C115 +HorizontalLine := $C118 +InvertLine := $C11B +RecoverLine := $C11E +VerticalLine := $C121 +Rectangle := $C124 +FrameRectangle := $C127 +InvertRectangle := $C12A +RecoverRectangle:= $C12D +DrawLine := $C130 +DrawPoint := $C133 +GraphicsString := $C136 +SetPattern := $C139 +GetScanLine := $C13C +TestPoint := $C13F +BitmapUp := $C142 +PutChar := $C145 +PutString := $C148 +UseSystemFont := $C14B +StartMouseMode := $C14E +DoMenu := $C151 +RecoverMenu := $C154 +RecoverAllMenus := $C157 +DoIcons := $C15A +DShiftLeft := $C15D +BBMult := $C160 +BMult := $C163 +DMult := $C166 +Ddiv := $C169 +DSdiv := $C16C +Dabs := $C16F +Dnegate := $C172 +Ddec := $C175 +ClearRam := $C178 +FillRam := $C17B +MoveData := $C17E +InitRam := $C181 +PutDecimal := $C184 +GetRandom := $C187 +MouseUp := $C18A +MouseOff := $C18D +DoPreviousMenu := $C190 +ReDoMenu := $C193 +GetSerialNumber := $C196 +Sleep := $C199 +ClearMouseMode := $C19C +i_Rectangle := $C19F +i_FrameRectangle:= $C1A2 +i_RecoverRectangle:= $C1A5 +i_GraphicsString:= $C1A8 +i_BitmapUp := $C1AB +i_PutString := $C1AE +GetRealSize := $C1B1 +i_FillRam := $C1B4 +i_MoveData := $C1B7 +GetString := $C1BA +GotoFirstMenu := $C1BD +InitTextPrompt := $C1C0 +MainLoop := $C1C3 +DrawSprite := $C1C6 +GetCharWidth := $C1C9 +LoadCharSet := $C1CC +PosSprite := $C1CF +EnablSprite := $C1D2 +DisablSprite := $C1D5 +CallRoutine := $C1D8 +CalcBlksFree := $C1DB +ChkDkGEOS := $C1DE +NewDisk := $C1E1 +GetBlock := $C1E4 +PutBlock := $C1E7 +SetGEOSDisk := $C1EA +SaveFile := $C1ED +SetGDirEntry := $C1F0 +BldGDirEntry := $C1F3 +GetFreeDirBlk := $C1F6 +WriteFile := $C1F9 +BlkAlloc := $C1FC +ReadFile := $C1FF +SmallPutChar := $C202 +FollowChain := $C205 +GetFile := $C208 +FindFile := $C20B +CRC := $C20E +LdFile := $C211 +EnterTurbo := $C214 +LdDeskAcc := $C217 +ReadBlock := $C21A +LdApplic := $C21D +WriteBlock := $C220 +VerWriteBlock := $C223 +FreeFile := $C226 +GetFHdrInfo := $C229 +EnterDeskTop := $C22C +StartAppl := $C22F +ExitTurbo := $C232 +PurgeTurbo := $C235 +DeleteFile := $C238 +FindFTypes := $C23B +RstrAppl := $C23E +ToBASIC := $C241 +FastDelFile := $C244 +GetDirHead := $C247 +PutDirHead := $C24A +NxtBlkAlloc := $C24D +ImprintRectangle:= $C250 +i_ImprintRectangle:= $C253 +DoDlgBox := $C256 +RenameFile := $C259 +InitForIO := $C25C +DoneWithIO := $C25F +DShiftRight := $C262 +CopyString := $C265 +CopyFString := $C268 +CmpString := $C26B +CmpFString := $C26E +FirstInit := $C271 +OpenRecordFile := $C274 +CloseRecordFile := $C277 +NextRecord := $C27A +PreviousRecord := $C27D +PointRecord := $C280 +DeleteRecord := $C283 +InsertRecord := $C286 +AppendRecord := $C289 +ReadRecord := $C28C +WriteRecord := $C28F +SetNextFree := $C292 +UpdateRecordFile:= $C295 +GetPtrCurDkNm := $C298 +PromptOn := $C29B +PromptOff := $C29E +OpenDisk := $C2A1 +DoInlineReturn := $C2A4 +GetNextChar := $C2A7 +BitmapClip := $C2AA +FindBAMBit := $C2AD +SetDevice := $C2B0 +IsMseInRegion := $C2B3 +ReadByte := $C2B6 +FreeBlock := $C2B9 +ChangeDiskDevice:= $C2BC +RstrFrmDialogue := $C2BF +Panic := $C2C2 +BitOtherClip := $C2C5 +StashRAM := $C2C8 +FetchRAM := $C2CB +SwapRAM := $C2CE +VerifyRAM := $C2D1 +DoRAMOp := $C2D4 +TempHideMouse := $C2D7 +SetMousePicture := $C2DA +SetNewMode := $C2DD +NormalizeX := $C2E0 +MoveBData := $C2E3 +SwapBData := $C2E6 +VerifyBData := $C2E9 +DoBOp := $C2EC +AccessCache := $C2EF +HideOnlyMouse := $C2F2 +SetColorMode := $C2F5 +ColorCard := $C2F8 +ColorRectangle := $C2FB +vicbase := $D000 +mob0ypos := $D001 +mob1xpos := $D002 +mob1ypos := $D003 +mob2xpos := $D004 +mob2ypos := $D005 +mob3xpos := $D006 +mob3ypos := $D007 +mob4xpos := $D008 +mob4ypos := $D009 +mob5xpos := $D00A +mob5ypos := $D00B +mob6xpos := $D00C +mob6ypos := $D00D +mob7xpos := $D00E +mob7ypos := $D00F +msbxpos := $D010 +grcntrl1 := $D011 +rasreg := $D012 +lpxpos := $D013 +lpypos := $D014 +mobenble := $D015 +grcntrl2 := $D016 +moby2 := $D017 +grmemptr := $D018 +grirq := $D019 +grirqen := $D01A +mobprior := $D01B +mobmcm := $D01C +mobx2 := $D01D +mobmobcol := $D01E +mobbakcol := $D01F +extclr := $D020 +bakclr0 := $D021 +bakclr1 := $D022 +bakclr2 := $D023 +bakclr3 := $D024 +mcmclr0 := $D025 +mcmclr1 := $D026 +mob0clr := $D027 +mob1clr := $D028 +mob2clr := $D029 +mob3clr := $D02A +mob4clr := $D02B +mob5clr := $D02C +mob6clr := $D02D +mob7clr := $D02E +keyreg := $D02F +clkreg := $D030 +sidbase := $D400 +mmu := $D500 +vdcreg := $D600 +vdcdata := $D601 +ctab := $D800 +cia1base := $DC00 +cia2base := $DD00 +RAMC_BASE := $DE00 +EXP_BASE := $DF00 +MOUSE_BASE := $FE80 +config := $FF00 +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +OPEN := $FFC0 +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 +NMI_VECTOR := $FFFA +RESET_VECTOR := $FFFC +IRQ_VECTOR := $FFFE +; ---------------------------------------------------------------------------- + +.segment "record6": absolute + +_InitForIO: + .addr __InitForIO ; 9000 DF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 55 95 U. +_ExitTurbo: + .addr __ExitTurbo ; 9004 84 95 .. +_PurgeTurbo: + .addr __ExitTurbo ; 9006 84 95 .. +_EnterTurbo: + .addr __EnterTurbo ; 9008 7B 95 {. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 8A 95 .. +_NewDisk: + .addr __NewDisk ; 900C 92 95 .. +_ReadBlock: + .addr __ReadBlock ; 900E 96 95 .. +_WriteBlock: + .addr __WriteBlock ; 9010 AC 95 .. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 B5 95 .. +_OpenDisk: + .addr __OpenDisk ; 9014 E5 90 .. +_GetBlock: + .addr __GetBlock ; 9016 6E 90 n. +_PutBlock: + .addr __PutBlock ; 9018 9E 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 4F 90 O. +_PutDirHead: + .addr __PutDirHead ; 901C 7B 90 {. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E 93 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 54 94 T. +_FreeBlock: + .addr __FreeBlock ; 9022 0A 94 .. +_SetNextFree: + .addr __SetNextFree ; 9024 3E 93 >. +_FindBAMBit: + .addr __FindBAMBit ; 9026 12 94 .. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 3D 91 =. +_BlkAlloc: + .addr __BlkAlloc ; 902A 10 91 .. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 65 92 e. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E 93 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C EE 91 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C FA 91 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 44 92 LD. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C F4 92 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 66 90 Lf. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C 96 90 L.. + +; ---------------------------------------------------------------------------- + nop ; 9042 EA . + nop ; 9043 EA . + rts ; 9044 60 ` + +; ---------------------------------------------------------------------------- + nop ; 9045 EA . + nop ; 9046 EA . + rts ; 9047 60 ` + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C C9 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C A1 95 L.. + +; ---------------------------------------------------------------------------- + .byte $83 ; 904E 83 . +__GetDirHead: + jsr L90B1 ; 904F 20 B1 90 .. + jsr __GetBlock ; 9052 20 6E 90 n. + txa ; 9055 8A . + bne L9065 ; 9056 D0 0D .. + jsr L90B9 ; 9058 20 B9 90 .. + jsr __GetBlock ; 905B 20 6E 90 n. + bne L9065 ; 905E D0 05 .. + jsr L90C1 ; 9060 20 C1 90 .. + bne __GetBlock ; 9063 D0 09 .. +L9065: rts ; 9065 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9066 A9 80 .. + sta r4H ; 9068 85 0B .. + lda #$00 ; 906A A9 00 .. + sta r4L ; 906C 85 0A .. +__GetBlock: + jsr EnterTurbo ; 906E 20 14 C2 .. + txa ; 9071 8A . + bne L907A ; 9072 D0 06 .. + php ; 9074 08 . + sei ; 9075 78 x + jsr ReadBlock ; 9076 20 1A C2 .. + plp ; 9079 28 ( +L907A: rts ; 907A 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + php ; 907B 08 . + sei ; 907C 78 x + jsr L90B1 ; 907D 20 B1 90 .. + jsr WriteBlock ; 9080 20 20 C2 . + txa ; 9083 8A . + bne L9094 ; 9084 D0 0E .. + jsr L90B9 ; 9086 20 B9 90 .. + jsr WriteBlock ; 9089 20 20 C2 . + bne L9094 ; 908C D0 06 .. + jsr L90C1 ; 908E 20 C1 90 .. + jsr WriteBlock ; 9091 20 20 C2 . +L9094: plp ; 9094 28 ( + rts ; 9095 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 9096 A9 80 .. + sta r4H ; 9098 85 0B .. + lda #$00 ; 909A A9 00 .. + sta r4L ; 909C 85 0A .. +__PutBlock: + jsr EnterTurbo ; 909E 20 14 C2 .. + txa ; 90A1 8A . + bne L90B0 ; 90A2 D0 0C .. + php ; 90A4 08 . + sei ; 90A5 78 x + jsr WriteBlock ; 90A6 20 20 C2 . + txa ; 90A9 8A . + bne L90AF ; 90AA D0 03 .. + jsr VerWriteBlock ; 90AC 20 23 C2 #. +L90AF: plp ; 90AF 28 ( +L90B0: rts ; 90B0 60 ` + +; ---------------------------------------------------------------------------- +L90B1: ldx #$82 ; 90B1 A2 82 .. + ldy #$00 ; 90B3 A0 00 .. + lda #$00 ; 90B5 A9 00 .. + beq L90C7 ; 90B7 F0 0E .. +L90B9: ldx #$89 ; 90B9 A2 89 .. + ldy #$00 ; 90BB A0 00 .. + lda #$01 ; 90BD A9 01 .. + bne L90C7 ; 90BF D0 06 .. +L90C1: ldx #$9C ; 90C1 A2 9C .. + ldy #$80 ; 90C3 A0 80 .. + lda #$02 ; 90C5 A9 02 .. +L90C7: stx r4H ; 90C7 86 0B .. + sty r4L ; 90C9 84 0A .. + sta r1H ; 90CB 85 05 .. + lda #$28 ; 90CD A9 28 .( + sta r1L ; 90CF 85 04 .. + rts ; 90D1 60 ` + +; ---------------------------------------------------------------------------- +L90D2: lda #$00 ; 90D2 A9 00 .. + sta L9674 ; 90D4 8D 74 96 .t. + ldx #$02 ; 90D7 A2 02 .. + lda r1L ; 90D9 A5 04 .. + beq L90E3 ; 90DB F0 06 .. + cmp #$51 ; 90DD C9 51 .Q + bcs L90E3 ; 90DF B0 02 .. + sec ; 90E1 38 8 + rts ; 90E2 60 ` + +; ---------------------------------------------------------------------------- +L90E3: clc ; 90E3 18 . + rts ; 90E4 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 90E5 20 E1 C1 .. + txa ; 90E8 8A . + bne L910F ; 90E9 D0 24 .$ + jsr GetDirHead ; 90EB 20 47 C2 G. + txa ; 90EE 8A . + bne L910F ; 90EF D0 1E .. + jsr L91E5 ; 90F1 20 E5 91 .. + jsr ChkDkGEOS ; 90F4 20 DE C1 .. + lda #$82 ; 90F7 A9 82 .. + sta r4H ; 90F9 85 0B .. + lda #$90 ; 90FB A9 90 .. + sta r4L ; 90FD 85 0A .. + ldx #$0C ; 90FF A2 0C .. + jsr GetPtrCurDkNm ; 9101 20 98 C2 .. + ldx #$0A ; 9104 A2 0A .. + ldy #$0C ; 9106 A0 0C .. + lda #$12 ; 9108 A9 12 .. + jsr CopyFString ; 910A 20 68 C2 h. + ldx #$00 ; 910D A2 00 .. +L910F: rts ; 910F 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 9110 68 h + sta r3L ; 9111 85 08 .. + pla ; 9113 68 h + sta r3H ; 9114 85 09 .. + lda r3H ; 9116 A5 09 .. + pha ; 9118 48 H + lda r3L ; 9119 A5 08 .. + pha ; 911B 48 H + lda r3L ; 911C A5 08 .. + sec ; 911E 38 8 + sbc $C1EE ; 911F ED EE C1 ... + sta r3L ; 9122 85 08 .. + lda r3H ; 9124 A5 09 .. + sbc $C1EF ; 9126 ED EF C1 ... + sta r3H ; 9129 85 09 .. + ldy #$27 ; 912B A0 27 .' + lda r3H ; 912D A5 09 .. + beq L9133 ; 912F F0 02 .. + ldy #$23 ; 9131 A0 23 .# +L9133: sty r3L ; 9133 84 08 .. + ldy #$00 ; 9135 A0 00 .. + sty r3H ; 9137 84 09 .. + lda #$02 ; 9139 A9 02 .. + bne L913F ; 913B D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 913D A9 00 .. +L913F: sta L9678 ; 913F 8D 78 96 .x. + lda r9H ; 9142 A5 15 .. + pha ; 9144 48 H + lda r9L ; 9145 A5 14 .. + pha ; 9147 48 H + lda r3H ; 9148 A5 09 .. + pha ; 914A 48 H + lda r3L ; 914B A5 08 .. + pha ; 914D 48 H + lda #$00 ; 914E A9 00 .. + sta r3H ; 9150 85 09 .. + lda #$FE ; 9152 A9 FE .. + sta r3L ; 9154 85 08 .. + ldx #$06 ; 9156 A2 06 .. + ldy #$08 ; 9158 A0 08 .. + jsr Ddiv ; 915A 20 69 C1 i. + lda r8L ; 915D A5 12 .. + beq L9167 ; 915F F0 06 .. + inc r2L ; 9161 E6 06 .. + bne L9167 ; 9163 D0 02 .. + inc r2H ; 9165 E6 07 .. +L9167: jsr L91E5 ; 9167 20 E5 91 .. + jsr CalcBlksFree ; 916A 20 DB C1 .. + pla ; 916D 68 h + sta r3L ; 916E 85 08 .. + pla ; 9170 68 h + sta r3H ; 9171 85 09 .. + ldx #$03 ; 9173 A2 03 .. + lda r2H ; 9175 A5 07 .. + cmp r4H ; 9177 C5 0B .. + bne L917F ; 9179 D0 04 .. + lda r2L ; 917B A5 06 .. + cmp r4L ; 917D C5 0A .. +L917F: beq L9183 ; 917F F0 02 .. + bcs L91DE ; 9181 B0 5B .[ +L9183: lda r6H ; 9183 A5 0F .. + sta r4H ; 9185 85 0B .. + lda r6L ; 9187 A5 0E .. + sta r4L ; 9189 85 0A .. + lda r2H ; 918B A5 07 .. + sta r5H ; 918D 85 0D .. + lda r2L ; 918F A5 06 .. + sta r5L ; 9191 85 0C .. +L9193: jsr SetNextFree ; 9193 20 92 C2 .. + txa ; 9196 8A . + bne L91DE ; 9197 D0 45 .E + ldy #$00 ; 9199 A0 00 .. + lda r3L ; 919B A5 08 .. + sta (r4L),y ; 919D 91 0A .. + iny ; 919F C8 . + lda r3H ; 91A0 A5 09 .. + sta (r4L),y ; 91A2 91 0A .. + clc ; 91A4 18 . + lda #$02 ; 91A5 A9 02 .. + adc r4L ; 91A7 65 0A e. + sta r4L ; 91A9 85 0A .. + bcc L91AF ; 91AB 90 02 .. + inc r4H ; 91AD E6 0B .. +L91AF: lda L9678 ; 91AF AD 78 96 .x. + beq L91BD ; 91B2 F0 09 .. + dec L9678 ; 91B4 CE 78 96 .x. + bne L91BD ; 91B7 D0 04 .. + lda #$23 ; 91B9 A9 23 .# + sta r3L ; 91BB 85 08 .. +L91BD: lda r5L ; 91BD A5 0C .. + bne L91C3 ; 91BF D0 02 .. + dec r5H ; 91C1 C6 0D .. +L91C3: dec r5L ; 91C3 C6 0C .. + lda r5L ; 91C5 A5 0C .. + ora r5H ; 91C7 05 0D .. + bne L9193 ; 91C9 D0 C8 .. + ldy #$00 ; 91CB A0 00 .. + tya ; 91CD 98 . + sta (r4L),y ; 91CE 91 0A .. + iny ; 91D0 C8 . + lda r8L ; 91D1 A5 12 .. + bne L91D7 ; 91D3 D0 02 .. + lda #$FE ; 91D5 A9 FE .. +L91D7: clc ; 91D7 18 . + adc #$01 ; 91D8 69 01 i. + sta (r4L),y ; 91DA 91 0A .. + ldx #$00 ; 91DC A2 00 .. +L91DE: pla ; 91DE 68 h + sta r9L ; 91DF 85 14 .. + pla ; 91E1 68 h + sta r9H ; 91E2 85 15 .. + rts ; 91E4 60 ` + +; ---------------------------------------------------------------------------- +L91E5: lda #$82 ; 91E5 A9 82 .. + sta r5H ; 91E7 85 0D .. + lda #$00 ; 91E9 A9 00 .. + sta r5L ; 91EB 85 0C .. + rts ; 91ED 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + jsr L90C1 ; 91EE 20 C1 90 .. + inc r1H ; 91F1 E6 05 .. + lda #$00 ; 91F3 A9 00 .. + sta L9679 ; 91F5 8D 79 96 .y. + beq L9236 ; 91F8 F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 91FA A2 00 .. + ldy #$00 ; 91FC A0 00 .. + clc ; 91FE 18 . + lda #$20 ; 91FF A9 20 . + adc r5L ; 9201 65 0C e. + sta r5L ; 9203 85 0C .. + bcc L9209 ; 9205 90 02 .. + inc r5H ; 9207 E6 0D .. +L9209: lda r5H ; 9209 A5 0D .. + cmp #$80 ; 920B C9 80 .. + bne L9213 ; 920D D0 04 .. + lda r5L ; 920F A5 0C .. + cmp #$FF ; 9211 C9 FF .. +L9213: bcc L9243 ; 9213 90 2E .. + ldy #$FF ; 9215 A0 FF .. + lda $8001 ; 9217 AD 01 80 ... + sta r1H ; 921A 85 05 .. + lda diskBlkBuf ; 921C AD 00 80 ... + sta r1L ; 921F 85 04 .. + bne L9236 ; 9221 D0 13 .. + lda L9679 ; 9223 AD 79 96 .y. + bne L9243 ; 9226 D0 1B .. + lda #$FF ; 9228 A9 FF .. + sta L9679 ; 922A 8D 79 96 .y. + jsr GetBorder ; 922D 20 36 90 6. + txa ; 9230 8A . + bne L9243 ; 9231 D0 10 .. + tya ; 9233 98 . + bne L9243 ; 9234 D0 0D .. +L9236: jsr ReadBuff ; 9236 20 3C 90 <. + ldy #$00 ; 9239 A0 00 .. + lda #$80 ; 923B A9 80 .. + sta r5H ; 923D 85 0D .. + lda #$02 ; 923F A9 02 .. + sta r5L ; 9241 85 0C .. +L9243: rts ; 9243 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9244 20 47 C2 G. + txa ; 9247 8A . + bne L9264 ; 9248 D0 1A .. + jsr L91E5 ; 924A 20 E5 91 .. + jsr ChkDkGEOS ; 924D 20 DE C1 .. + bne L9256 ; 9250 D0 04 .. + ldy #$FF ; 9252 A0 FF .. + bne L9262 ; 9254 D0 0C .. +L9256: lda $82AC ; 9256 AD AC 82 ... + sta r1H ; 9259 85 05 .. + lda $82AB ; 925B AD AB 82 ... + sta r1L ; 925E 85 04 .. + ldy #$00 ; 9260 A0 00 .. +L9262: ldx #$00 ; 9262 A2 00 .. +L9264: rts ; 9264 60 ` + +; ---------------------------------------------------------------------------- +__ChkDkGEOS: + ldy #$AD ; 9265 A0 AD .. + ldx #$00 ; 9267 A2 00 .. + stx isGEOS ; 9269 8E 8B 84 ... +L926C: lda (r5L),y ; 926C B1 0C .. + cmp L9282,x ; 926E DD 82 92 ... + bne L927E ; 9271 D0 0B .. + iny ; 9273 C8 . + inx ; 9274 E8 . + cpx #$0B ; 9275 E0 0B .. + bne L926C ; 9277 D0 F3 .. + lda #$FF ; 9279 A9 FF .. + sta isGEOS ; 927B 8D 8B 84 ... +L927E: lda isGEOS ; 927E AD 8B 84 ... + rts ; 9281 60 ` + +; ---------------------------------------------------------------------------- +L9282: .byte "GEOS format V1.0" ; 9282 47 45 4F 53 20 66 6F 72 GEOS for + ; 928A 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 9292 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 9293 08 . + sei ; 9294 78 x + lda r6L ; 9295 A5 0E .. + pha ; 9297 48 H + lda r2H ; 9298 A5 07 .. + pha ; 929A 48 H + lda r2L ; 929B A5 06 .. + pha ; 929D 48 H + ldx r10L ; 929E A6 16 .. + inx ; 92A0 E8 . + stx r6L ; 92A1 86 0E .. + lda #$28 ; 92A3 A9 28 .( + sta r1L ; 92A5 85 04 .. + lda #$03 ; 92A7 A9 03 .. + sta r1H ; 92A9 85 05 .. +L92AB: jsr ReadBuff ; 92AB 20 3C 90 <. +L92AE: txa ; 92AE 8A . + bne L92E9 ; 92AF D0 38 .8 + dec r6L ; 92B1 C6 0E .. + beq L92CA ; 92B3 F0 15 .. +L92B5: lda diskBlkBuf ; 92B5 AD 00 80 ... + bne L92C0 ; 92B8 D0 06 .. + jsr AddDirBlock ; 92BA 20 39 90 9. + clv ; 92BD B8 . + bvc L92AE ; 92BE 50 EE P. +L92C0: sta r1L ; 92C0 85 04 .. + lda $8001 ; 92C2 AD 01 80 ... + sta r1H ; 92C5 85 05 .. + clv ; 92C7 B8 . + bvc L92AB ; 92C8 50 E1 P. +L92CA: ldy #$02 ; 92CA A0 02 .. + ldx #$00 ; 92CC A2 00 .. +L92CE: lda diskBlkBuf,y ; 92CE B9 00 80 ... + beq L92E9 ; 92D1 F0 16 .. + tya ; 92D3 98 . + clc ; 92D4 18 . + adc #$20 ; 92D5 69 20 i + tay ; 92D7 A8 . + bcc L92CE ; 92D8 90 F4 .. + lda #$01 ; 92DA A9 01 .. + sta r6L ; 92DC 85 0E .. + ldx #$04 ; 92DE A2 04 .. + ldy r10L ; 92E0 A4 16 .. + iny ; 92E2 C8 . + sty r10L ; 92E3 84 16 .. + cpy #$12 ; 92E5 C0 12 .. + bcc L92B5 ; 92E7 90 CC .. +L92E9: pla ; 92E9 68 h + sta r2L ; 92EA 85 06 .. + pla ; 92EC 68 h + sta r2H ; 92ED 85 07 .. + pla ; 92EF 68 h + sta r6L ; 92F0 85 0E .. + plp ; 92F2 28 ( + rts ; 92F3 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 92F4 A5 0F .. + pha ; 92F6 48 H + lda r6L ; 92F7 A5 0E .. + pha ; 92F9 48 H + ldx #$04 ; 92FA A2 04 .. + lda $89FA ; 92FC AD FA 89 ... + beq L9327 ; 92FF F0 26 .& + lda r1H ; 9301 A5 05 .. + sta r3H ; 9303 85 09 .. + lda r1L ; 9305 A5 04 .. + sta r3L ; 9307 85 08 .. + jsr SetNextFree ; 9309 20 92 C2 .. + lda r3H ; 930C A5 09 .. + sta $8001 ; 930E 8D 01 80 ... + lda r3L ; 9311 A5 08 .. + sta diskBlkBuf ; 9313 8D 00 80 ... + jsr WriteBuff ; 9316 20 3F 90 ?. + txa ; 9319 8A . + bne L9327 ; 931A D0 0B .. + lda r3H ; 931C A5 09 .. + sta r1H ; 931E 85 05 .. + lda r3L ; 9320 A5 08 .. + sta r1L ; 9322 85 04 .. + jsr L932E ; 9324 20 2E 93 .. +L9327: pla ; 9327 68 h + sta r6L ; 9328 85 0E .. + pla ; 932A 68 h + sta r6H ; 932B 85 0F .. + rts ; 932D 60 ` + +; ---------------------------------------------------------------------------- +L932E: lda #$00 ; 932E A9 00 .. + tay ; 9330 A8 . +L9331: sta diskBlkBuf,y ; 9331 99 00 80 ... + iny ; 9334 C8 . + bne L9331 ; 9335 D0 FA .. + dey ; 9337 88 . + sty $8001 ; 9338 8C 01 80 ... + jmp WriteBuff ; 933B 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L9348 ; 933E 20 48 93 H. + bne L9344 ; 9341 D0 01 .. + rts ; 9343 60 ` + +; ---------------------------------------------------------------------------- +L9344: lda #$27 ; 9344 A9 27 .' + sta r3L ; 9346 85 08 .. +L9348: lda r3H ; 9348 A5 09 .. + clc ; 934A 18 . + adc #$01 ; 934B 69 01 i. + sta r6H ; 934D 85 0F .. + lda r3L ; 934F A5 08 .. + sta r6L ; 9351 85 0E .. + cmp #$28 ; 9353 C9 28 .( + beq L935D ; 9355 F0 06 .. +L9357: lda r6L ; 9357 A5 0E .. + cmp #$28 ; 9359 C9 28 .( + beq L938F ; 935B F0 32 .2 +L935D: cmp #$29 ; 935D C9 29 .) + bcc L9364 ; 935F 90 03 .. + sec ; 9361 38 8 + sbc #$28 ; 9362 E9 28 .( +L9364: sec ; 9364 38 8 + sbc #$01 ; 9365 E9 01 .. + asl a ; 9367 0A . + sta r7L ; 9368 85 10 .. + asl a ; 936A 0A . + clc ; 936B 18 . + adc r7L ; 936C 65 10 e. + tax ; 936E AA . + lda r6L ; 936F A5 0E .. + cmp #$29 ; 9371 C9 29 .) + bcc L937B ; 9373 90 06 .. + lda $9C90,x ; 9375 BD 90 9C ... + clv ; 9378 B8 . + bvc L937E ; 9379 50 03 P. +L937B: lda $8910,x ; 937B BD 10 89 ... +L937E: beq L938F ; 937E F0 0F .. + lda #$28 ; 9380 A9 28 .( + sta r7L ; 9382 85 10 .. + tay ; 9384 A8 . +L9385: jsr L93BB ; 9385 20 BB 93 .. + beq L93AD ; 9388 F0 23 .# + inc r6H ; 938A E6 0F .. + dey ; 938C 88 . + bne L9385 ; 938D D0 F6 .. +L938F: lda r6L ; 938F A5 0E .. + cmp #$29 ; 9391 C9 29 .) + bcs L939F ; 9393 B0 0A .. + dec r6L ; 9395 C6 0E .. + bne L93A1 ; 9397 D0 08 .. + lda #$29 ; 9399 A9 29 .) + sta r6L ; 939B 85 0E .. + bne L93A1 ; 939D D0 02 .. +L939F: inc r6L ; 939F E6 0E .. +L93A1: lda r6L ; 93A1 A5 0E .. + cmp #$51 ; 93A3 C9 51 .Q + bcs L93B8 ; 93A5 B0 11 .. + lda #$00 ; 93A7 A9 00 .. + sta r6H ; 93A9 85 0F .. + beq L9357 ; 93AB F0 AA .. +L93AD: lda r6L ; 93AD A5 0E .. + sta r3L ; 93AF 85 08 .. + lda r6H ; 93B1 A5 0F .. + sta r3H ; 93B3 85 09 .. + ldx #$00 ; 93B5 A2 00 .. + rts ; 93B7 60 ` + +; ---------------------------------------------------------------------------- +L93B8: ldx #$03 ; 93B8 A2 03 .. + rts ; 93BA 60 ` + +; ---------------------------------------------------------------------------- +L93BB: lda r6H ; 93BB A5 0F .. +L93BD: cmp r7L ; 93BD C5 10 .. + bcc L93C7 ; 93BF 90 06 .. + sec ; 93C1 38 8 + sbc r7L ; 93C2 E5 10 .. + clv ; 93C4 B8 . + bvc L93BD ; 93C5 50 F6 P. +L93C7: sta r6H ; 93C7 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93C9 20 AD C2 .. + bne L93D1 ; 93CC D0 03 .. + ldx #$06 ; 93CE A2 06 .. + rts ; 93D0 60 ` + +; ---------------------------------------------------------------------------- +L93D1: php ; 93D1 08 . + lda r6L ; 93D2 A5 0E .. + cmp #$29 ; 93D4 C9 29 .) + bcc L93F1 ; 93D6 90 19 .. + lda r8H ; 93D8 A5 13 .. + eor $9C90,x ; 93DA 5D 90 9C ].. + sta $9C90,x ; 93DD 9D 90 9C ... + ldx r7H ; 93E0 A6 11 .. + plp ; 93E2 28 ( + beq L93EB ; 93E3 F0 06 .. + dec $9C90,x ; 93E5 DE 90 9C ... + clv ; 93E8 B8 . + bvc L9407 ; 93E9 50 1C P. +L93EB: inc $9C90,x ; 93EB FE 90 9C ... + clv ; 93EE B8 . + bvc L9407 ; 93EF 50 16 P. +L93F1: lda r8H ; 93F1 A5 13 .. + eor $8910,x ; 93F3 5D 10 89 ].. + sta $8910,x ; 93F6 9D 10 89 ... + ldx r7H ; 93F9 A6 11 .. + plp ; 93FB 28 ( + beq L9404 ; 93FC F0 06 .. + dec $8910,x ; 93FE DE 10 89 ... + clv ; 9401 B8 . + bvc L9407 ; 9402 50 03 P. +L9404: inc $8910,x ; 9404 FE 10 89 ... +L9407: ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 940A 20 AD C2 .. + beq L93D1 ; 940D F0 C2 .. + ldx #$06 ; 940F A2 06 .. + rts ; 9411 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9412 A5 0F .. + and #$07 ; 9414 29 07 ). + tax ; 9416 AA . + lda FBBBitTab,x ; 9417 BD 4C 94 .L. + sta r8H ; 941A 85 13 .. + lda r6L ; 941C A5 0E .. + cmp #$29 ; 941E C9 29 .) + bcc L9425 ; 9420 90 03 .. + sec ; 9422 38 8 + sbc #$28 ; 9423 E9 28 .( +L9425: sec ; 9425 38 8 + sbc #$01 ; 9426 E9 01 .. + asl a ; 9428 0A . + sta r7H ; 9429 85 11 .. + asl a ; 942B 0A . + clc ; 942C 18 . + adc r7H ; 942D 65 11 e. + sta r7H ; 942F 85 11 .. + lda r6H ; 9431 A5 0F .. + lsr a ; 9433 4A J + lsr a ; 9434 4A J + lsr a ; 9435 4A J + sec ; 9436 38 8 + adc r7H ; 9437 65 11 e. + tax ; 9439 AA . + lda r6L ; 943A A5 0E .. + cmp #$29 ; 943C C9 29 .) + bcc L9446 ; 943E 90 06 .. + lda $9C90,x ; 9440 BD 90 9C ... + and r8H ; 9443 25 13 %. + rts ; 9445 60 ` + +; ---------------------------------------------------------------------------- +L9446: lda $8910,x ; 9446 BD 10 89 ... + and r8H ; 9449 25 13 %. + rts ; 944B 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 944C 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9454 A9 00 .. + sta r4L ; 9456 85 0A .. + sta r4H ; 9458 85 0B .. + ldy #$10 ; 945A A0 10 .. +L945C: lda dir2Head,y ; 945C B9 00 89 ... + clc ; 945F 18 . + adc r4L ; 9460 65 0A e. + sta r4L ; 9462 85 0A .. + bcc L9468 ; 9464 90 02 .. + inc r4H ; 9466 E6 0B .. +L9468: tya ; 9468 98 . + clc ; 9469 18 . + adc #$06 ; 946A 69 06 i. + tay ; 946C A8 . + cpy #$FA ; 946D C0 FA .. + beq L9468 ; 946F F0 F7 .. + cpy #$00 ; 9471 C0 00 .. + bne L945C ; 9473 D0 E7 .. + ldy #$10 ; 9475 A0 10 .. +L9477: lda $9C80,y ; 9477 B9 80 9C ... + clc ; 947A 18 . + adc r4L ; 947B 65 0A e. + sta r4L ; 947D 85 0A .. + bcc L9483 ; 947F 90 02 .. + inc r4H ; 9481 E6 0B .. +L9483: tya ; 9483 98 . + clc ; 9484 18 . + adc #$06 ; 9485 69 06 i. + tay ; 9487 A8 . + bne L9477 ; 9488 D0 ED .. + lda #$0C ; 948A A9 0C .. + sta r3H ; 948C 85 09 .. + lda #$58 ; 948E A9 58 .X + sta r3L ; 9490 85 08 .. + rts ; 9492 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 9493 20 47 C2 G. + txa ; 9496 8A . + bne L94DE ; 9497 D0 45 .E + jsr L91E5 ; 9499 20 E5 91 .. + jsr CalcBlksFree ; 949C 20 DB C1 .. + ldx #$03 ; 949F A2 03 .. + lda r4L ; 94A1 A5 0A .. + ora r4H ; 94A3 05 0B .. + beq L94DE ; 94A5 F0 37 .7 + lda #$28 ; 94A7 A9 28 .( + sta r3L ; 94A9 85 08 .. + lda #$12 ; 94AB A9 12 .. + sta r3H ; 94AD 85 09 .. + jsr SetNextFree ; 94AF 20 92 C2 .. + txa ; 94B2 8A . + bne L94DE ; 94B3 D0 29 .) + lda r3H ; 94B5 A5 09 .. + sta r1H ; 94B7 85 05 .. + lda r3L ; 94B9 A5 08 .. + sta r1L ; 94BB 85 04 .. + jsr L932E ; 94BD 20 2E 93 .. + txa ; 94C0 8A . + bne L94DE ; 94C1 D0 1B .. + lda r1H ; 94C3 A5 05 .. + sta $82AC ; 94C5 8D AC 82 ... + lda r1L ; 94C8 A5 04 .. + sta $82AB ; 94CA 8D AB 82 ... + ldy #$BC ; 94CD A0 BC .. + ldx #$0F ; 94CF A2 0F .. +L94D1: lda L9282,x ; 94D1 BD 82 92 ... + sta curDirHead,y ; 94D4 99 00 82 ... + dey ; 94D7 88 . + dex ; 94D8 CA . + bpl L94D1 ; 94D9 10 F6 .. + jsr PutDirHead ; 94DB 20 4A C2 J. +L94DE: rts ; 94DE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + php ; 94DF 08 . + pla ; 94E0 68 h + sta L966A ; 94E1 8D 6A 96 .j. + sei ; 94E4 78 x + lda CPU_DATA ; 94E5 A5 01 .. + sta L966C ; 94E7 8D 6C 96 .l. + lda #$36 ; 94EA A9 36 .6 + sta CPU_DATA ; 94EC 85 01 .. + lda grirqen ; 94EE AD 1A D0 ... + sta L966B ; 94F1 8D 6B 96 .k. + lda clkreg ; 94F4 AD 30 D0 .0. + sta L9669 ; 94F7 8D 69 96 .i. + ldy #$00 ; 94FA A0 00 .. + sty clkreg ; 94FC 8C 30 D0 .0. + sty grirqen ; 94FF 8C 1A D0 ... + lda #$7F ; 9502 A9 7F .. + sta grirq ; 9504 8D 19 D0 ... + sta $DC0D ; 9507 8D 0D DC ... + sta $DD0D ; 950A 8D 0D DD ... + lda #$95 ; 950D A9 95 .. + sta $0315 ; 950F 8D 15 03 ... + lda #$4F ; 9512 A9 4F .O + sta irqvec ; 9514 8D 14 03 ... + lda #$95 ; 9517 A9 95 .. + sta $0319 ; 9519 8D 19 03 ... + lda #$54 ; 951C A9 54 .T + sta nmivec ; 951E 8D 18 03 ... + lda #$3F ; 9521 A9 3F .? + sta $DD02 ; 9523 8D 02 DD ... + lda mobenble ; 9526 AD 15 D0 ... + sta L966D ; 9529 8D 6D 96 .m. + sty mobenble ; 952C 8C 15 D0 ... + sty $DD05 ; 952F 8C 05 DD ... + iny ; 9532 C8 . + sty $DD04 ; 9533 8C 04 DD ... + lda #$81 ; 9536 A9 81 .. + sta $DD0D ; 9538 8D 0D DD ... + lda #$09 ; 953B A9 09 .. + sta $DD0E ; 953D 8D 0E DD ... + ldy #$2C ; 9540 A0 2C ., +L9542: lda rasreg ; 9542 AD 12 D0 ... + cmp TURBO_DD00_CPY ; 9545 C5 8F .. + beq L9542 ; 9547 F0 F9 .. + sta TURBO_DD00_CPY ; 9549 85 8F .. + dey ; 954B 88 . + bne L9542 ; 954C D0 F4 .. + rts ; 954E 60 ` + +; ---------------------------------------------------------------------------- + pla ; 954F 68 h + tay ; 9550 A8 . + pla ; 9551 68 h + tax ; 9552 AA . + pla ; 9553 68 h + rti ; 9554 40 @ + +; ---------------------------------------------------------------------------- +__DoneWithIO: + sei ; 9555 78 x + lda L9669 ; 9556 AD 69 96 .i. + sta clkreg ; 9559 8D 30 D0 .0. + lda L966D ; 955C AD 6D 96 .m. + sta mobenble ; 955F 8D 15 D0 ... + lda #$7F ; 9562 A9 7F .. + sta $DD0D ; 9564 8D 0D DD ... + lda $DD0D ; 9567 AD 0D DD ... + lda L966B ; 956A AD 6B 96 .k. + sta grirqen ; 956D 8D 1A D0 ... + lda L966C ; 9570 AD 6C 96 .l. + sta CPU_DATA ; 9573 85 01 .. + lda L966A ; 9575 AD 6A 96 .j. + pha ; 9578 48 H + plp ; 9579 28 ( + rts ; 957A 60 ` + +; ---------------------------------------------------------------------------- +__EnterTurbo: + lda curDrive ; 957B AD 89 84 ... + jsr SetDevice ; 957E 20 B0 C2 .. + ldx #$00 ; 9581 A2 00 .. + rts ; 9583 60 ` + +; ---------------------------------------------------------------------------- +__ExitTurbo: + lda #$01 ; 9584 A9 01 .. + sta interleave ; 9586 8D 8C 84 ... + rts ; 9589 60 ` + +; ---------------------------------------------------------------------------- +__ChangeDiskDevice: + sta curDrive ; 958A 8D 89 84 ... + sta curDevice ; 958D 85 BA .. + ldx #$00 ; 958F A2 00 .. + rts ; 9591 60 ` + +; ---------------------------------------------------------------------------- +__NewDisk: + jsr EnterTurbo ; 9592 20 14 C2 .. + rts ; 9595 60 ` + +; ---------------------------------------------------------------------------- +__ReadBlock: + jsr L90D2 ; 9596 20 D2 90 .. + bcc L959E ; 9599 90 03 .. + jsr L95BD ; 959B 20 BD 95 .. +L959E: ldy #$00 ; 959E A0 00 .. + rts ; 95A0 60 ` + +; ---------------------------------------------------------------------------- +_ReadLink: + jsr L90D2 ; 95A1 20 D2 90 .. + bcc L95AB ; 95A4 90 05 .. + ldy #$91 ; 95A6 A0 91 .. + jsr L95C5 ; 95A8 20 C5 95 .. +L95AB: rts ; 95AB 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr L90D2 ; 95AC 20 D2 90 .. + bcc L95B4 ; 95AF 90 03 .. + jsr L95C1 ; 95B1 20 C1 95 .. +L95B4: rts ; 95B4 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + jsr L90D2 ; 95B5 20 D2 90 .. + bcc L95BC ; 95B8 90 02 .. + ldx #$00 ; 95BA A2 00 .. +L95BC: rts ; 95BC 60 ` + +; ---------------------------------------------------------------------------- +L95BD: ldy #$91 ; 95BD A0 91 .. + bne L95D5 ; 95BF D0 14 .. +L95C1: ldy #$90 ; 95C1 A0 90 .. + bne L95D5 ; 95C3 D0 10 .. +L95C5: lda r2H ; 95C5 A5 07 .. + pha ; 95C7 48 H + lda r2L ; 95C8 A5 06 .. + pha ; 95CA 48 H + lda #$00 ; 95CB A9 00 .. + sta r2H ; 95CD 85 07 .. + lda #$02 ; 95CF A9 02 .. + sta r2L ; 95D1 85 06 .. + bne L95E3 ; 95D3 D0 0E .. +L95D5: lda r2H ; 95D5 A5 07 .. + pha ; 95D7 48 H + lda r2L ; 95D8 A5 06 .. + pha ; 95DA 48 H + lda #$01 ; 95DB A9 01 .. + sta r2H ; 95DD 85 07 .. + lda #$00 ; 95DF A9 00 .. + sta r2L ; 95E1 85 06 .. +L95E3: lda r0H ; 95E3 A5 03 .. + pha ; 95E5 48 H + lda r0L ; 95E6 A5 02 .. + pha ; 95E8 48 H + lda r1H ; 95E9 A5 05 .. + pha ; 95EB 48 H + lda r1L ; 95EC A5 04 .. + pha ; 95EE 48 H + lda r3L ; 95EF A5 08 .. + pha ; 95F1 48 H + tya ; 95F2 98 . + pha ; 95F3 48 H + lda r2H ; 95F4 A5 07 .. + pha ; 95F6 48 H + lda r2L ; 95F7 A5 06 .. + pha ; 95F9 48 H + lda r7H ; 95FA A5 11 .. + pha ; 95FC 48 H + lda r7L ; 95FD A5 10 .. + pha ; 95FF 48 H + lda r8H ; 9600 A5 13 .. + pha ; 9602 48 H + lda r8L ; 9603 A5 12 .. + pha ; 9605 48 H + dec r1L ; 9606 C6 04 .. + lda r1H ; 9608 A5 05 .. + sta r2H ; 960A 85 07 .. + lda #$28 ; 960C A9 28 .( + sta r2L ; 960E 85 06 .. + ldx #$04 ; 9610 A2 04 .. + ldy #$06 ; 9612 A0 06 .. + jsr BBMult ; 9614 20 60 C1 `. + clc ; 9617 18 . + lda r1L ; 9618 A5 04 .. + adc r2H ; 961A 65 07 e. + sta r1L ; 961C 85 04 .. + lda r1H ; 961E A5 05 .. + ldy curDrive ; 9620 AC 89 84 ... + adc driveData,y ; 9623 79 BF 88 y.. + sta r3L ; 9626 85 08 .. + lda r1L ; 9628 A5 04 .. + sta r1H ; 962A 85 05 .. + pla ; 962C 68 h + sta r8L ; 962D 85 12 .. + pla ; 962F 68 h + sta r8H ; 9630 85 13 .. + pla ; 9632 68 h + sta r7L ; 9633 85 10 .. + pla ; 9635 68 h + sta r7H ; 9636 85 11 .. + pla ; 9638 68 h + sta r2L ; 9639 85 06 .. + pla ; 963B 68 h + sta r2H ; 963C 85 07 .. + lda #$00 ; 963E A9 00 .. + sta r1L ; 9640 85 04 .. + lda r4H ; 9642 A5 0B .. + sta r0H ; 9644 85 03 .. + lda r4L ; 9646 A5 0A .. + sta r0L ; 9648 85 02 .. + pla ; 964A 68 h + tay ; 964B A8 . + jsr DoRAMOp ; 964C 20 D4 C2 .. + tax ; 964F AA . + pla ; 9650 68 h + sta r3L ; 9651 85 08 .. + pla ; 9653 68 h + sta r1L ; 9654 85 04 .. + pla ; 9656 68 h + sta r1H ; 9657 85 05 .. + pla ; 9659 68 h + sta r0L ; 965A 85 02 .. + pla ; 965C 68 h + sta r0H ; 965D 85 03 .. + pla ; 965F 68 h + sta r2L ; 9660 85 06 .. + pla ; 9662 68 h + sta r2H ; 9663 85 07 .. + txa ; 9665 8A . + ldx #$00 ; 9666 A2 00 .. + rts ; 9668 60 ` + +; ---------------------------------------------------------------------------- +L9669: brk ; 9669 00 . +L966A: brk ; 966A 00 . +L966B: brk ; 966B 00 . +L966C: brk ; 966C 00 . +L966D: brk ; 966D 00 . + brk ; 966E 00 . + brk ; 966F 00 . + brk ; 9670 00 . + brk ; 9671 00 . + brk ; 9672 00 . + brk ; 9673 00 . +L9674: brk ; 9674 00 . + brk ; 9675 00 . + brk ; 9676 00 . + brk ; 9677 00 . +L9678: brk ; 9678 00 . +L9679: brk ; 9679 00 . + brk ; 967A 00 . + brk ; 967B 00 . + brk ; 967C 00 . + brk ; 967D 00 . + brk ; 967E 00 . + .byte "RAM 1581 driver Copyright (C) 1"; 967F 52 41 4D 20 31 35 38 31 RAM 1581 + ; 9687 20 64 72 69 76 65 72 20 driver + ; 968F 43 6F 70 79 72 69 67 68 Copyrigh + ; 9697 74 20 28 43 29 20 31 t (C) 1 + .byte "990, Jim Collette & Berkeley So"; 969E 39 39 30 2C 20 4A 69 6D 990, Jim + ; 96A6 20 43 6F 6C 6C 65 74 74 Collett + ; 96AE 65 20 26 20 42 65 72 6B e & Berk + ; 96B6 65 6C 65 79 20 53 6F eley So + .byte "ftworks. Thanks to Matt Lovele"; 96BD 66 74 77 6F 72 6B 73 2E ftworks. + ; 96C5 20 20 54 68 61 6E 6B 73 Thanks + ; 96CD 20 74 6F 20 4D 61 74 74 to Matt + ; 96D5 20 4C 6F 76 65 6C 65 Lovele + .byte "ss and Angie McKenna of BSW for"; 96DC 73 73 20 61 6E 64 20 41 ss and A + ; 96E4 6E 67 69 65 20 4D 63 4B ngie McK + ; 96EC 65 6E 6E 61 20 6F 66 20 enna of + ; 96F4 42 53 57 20 66 6F 72 BSW for + .byte " their help and support. (Q-Li"; 96FB 20 74 68 65 69 72 20 68 their h + ; 9703 65 6C 70 20 61 6E 64 20 elp and + ; 970B 73 75 70 70 6F 72 74 2E support. + ; 9713 20 20 28 51 2D 4C 69 (Q-Li + .byte "nk: GEOREP JIM)" ; 971A 6E 6B 3A 20 47 45 4F 52 nk: GEOR + ; 9722 45 50 20 4A 49 4D 29 EP JIM) + .byte $00 ; 9729 00 . +; ---------------------------------------------------------------------------- + pla ; 972A 68 h diff --git a/_newconf/newconf/r6.info b/_newconf/newconf/r6.info new file mode 100644 index 00000000..79ffb0f7 --- /dev/null +++ b/_newconf/newconf/r6.info @@ -0,0 +1,59 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r6.asm"; + INPUTNAME "configure.cvt.record.6"; + STARTADDR $9000; + PAGELENGTH 0; # No paging + CPU "6502"; + COMMENTS 4; + + }; + +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/const.inc"; IGNOREUNKNOWN TRUE;}; +#ASMINC { FILE "/cc65/libsrc/geos/inc/diskdrv.inc";}; +#ASMINC { FILE "inc/geossym.inc";}; +ASMINC { FILE "inc/labels.inc";}; +ASMINC { FILE "r6.labels"; }; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/inputdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/printdrv.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/dio.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geosmac.ca65.inc";}; +#ASMINC { FILE "/home/petter/build/cc65-2.13.2/libsrc/geos/inc/geossym.inc";}; +#ASMINC { FILE "/cc65/libsrc/geos/inc/jumptab.inc";}; + +# One segment for the whole stuff +SEGMENT { START $9000; END $ffff; NAME "record6"; }; +#SEGMENT { START $9A02; END $9BEE; NAME "drv1581_drvcode"; }; +#SEGMENT { START $9BEf; END $ffff; NAME "record4"; }; +##RANGE { START $927F; END $928F; TYPE TEXTTABLE; }; +#RANGE { START $92AB; END $92BB; TYPE TEXTTABLE; }; +RANGE { START $9000; END $902f; TYPE ADDRTABLE; }; +#RANGE { START $946B; END $9472;TYPE BYTETABLE; }; +#RANGE { START $963D; END $963F; TYPE BYTETABLE; }; +#RANGE { START $9640; END $9641; TYPE WORDTABLE; }; +#RANGE { START $9A02; END $9A10; TYPE BYTETABLE; }; +#RANGE { START $9A11; END $9A20; TYPE BYTETABLE; }; +#RANGE { START $979A; END $979C; TYPE TEXTTABLE; }; +RANGE { START $944C; END $9453; TYPE BYTETABLE; }; +#RANGE { START $9823; END $982D; TYPE BYTETABLE; }; +#RANGE { START $9760; END $9767; TYPE BYTETABLE; }; +RANGE { START $9282; END $9292; TYPE TEXTTABLE; }; +RANGE { START $967F; END $9729; TYPE TEXTTABLE; }; +#RANGE { START $96F1; END $96F2; TYPE WORDTABLE; }; +#RANGE { START $9A00; END $9A01; TYPE WORDTABLE; }; +#RANGE { START $982E; END $984D; TYPE BYTETABLE; }; + + + + + + + + + + + + + + + diff --git a/_newconf/newconf/r6.labels b/_newconf/newconf/r6.labels new file mode 100644 index 00000000..9ea47e8c --- /dev/null +++ b/_newconf/newconf/r6.labels @@ -0,0 +1,33 @@ +__InitForIO = $94DF; +__DoneWithIO = $9555; +__ExitTurbo = $9584; +;__PurgeTurbo = $9584; +__EnterTurbo = $957B; +__ChangeDiskDevice = $958A; +__NewDisk = $9592; +__ReadBlock = $9596; +__WriteBlock = $95AC; +__VerWriteBlock = $95B5; +__OpenDisk = $90E5; +__GetBlock = $906E; +__PutBlock = $909E; +__GetDirHead = $904F; +__PutDirHead = $907B; +__GetFreeDirBlk = $9293; +__CalcBlksFree = $9454; +__FreeBlock = $940A; +__SetNextFree = $933E; +__FindBAMBit = $9412; +__NxtBlkAlloc = $913D; +__BlkAlloc = $9110; +__ChkDkGEOS = $9265; +__SetGEOSDisk = $9493; +_Get1stDirEntry = $91EE; +_GetNxtDirEntry = $91FA; +_GetBorder = $9244; +_AddDirBlock = $92F4; +_ReadBuff = $9066; +_WriteBuff = $9096; +_AllocateBlock = $93C9; +_ReadLink = $95A1; +FBBBitTab = $944C; diff --git a/_newconf/newconf/tmp/configure,prg b/_newconf/newconf/tmp/configure,prg new file mode 100644 index 0000000000000000000000000000000000000000..5322b11e624d4a7915bb5fa529e46ca19af45bfb GIT binary patch literal 22662 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%0AVs6s9qSDmQ~E zlo+t$ZXOL4;gp|}f2UU@P8x6xE+8G|Vf9?bk#1h8*L^TNK-q$_8$WvT7fj3j8QKim z`qRT4SrtXe5A(`qC=++{SeT4@5HTb2S6<8vb3b9pim1Sx`_p%B?|*RLs~RJXujAiu z8~@yRwDDLY-;~zG)_pIqJFqNJ15H+7`vcHqRpj{q`5w-gaD7kqLa0bX7HKD#Fr$^pYdI=+(WUD~`$)gI2tJPEqNLCY@orKKMZ($cPETKc%@t7&Oaqop-b0Q$Ho8Gw#AQ2_d= z2>|qA696ctp~9&uw%AJaWog)O)D_6vfdEIcQAYjIi2EkFO>x)pu?O4>#x)eYp%%bJ zS2MjJ9l?>mh(jrEO9jk_9u()ezmEbs&D z_umOL)UViX+kSmR=JxCA9Cao24ck4(>O3dwJPYbQAJ=>C4|tjq`~5(J=U*E)k*)wK z!+xJey6FSXS-k<(I()ZI+TanI?%U}!H0e`K2>n&N`&Wr9=?1?pw!xbQl7*CsTPW|I z^A^g53M$t(ou8l*xt`_1%7w`)*Ec~{xxVQFWtEBRD`?+CMl{fdrVEi+Ziwyt8_v1& zPat~3jw-Yq5>{6IPZL(2*ZT`I&vtc%xD)b9yva~%5Qj@FFaK(Zr5)lqyw~va25qXo z?^9XeZrg!$z)c=5uCV&Wm790t?HtjrK~f0$G(?wJk}p(jxu-Y>V#__nW6u;@(hDl1 zh%G(;U1G}~Mt$!*u z_vIDI`|`IhWM3}T_vLR7+m|2G_vKY|Uw&}-zHFc5%w zq&N2Px9rRMHZEtlWe2^GjBCjUfYjL3r{jHnUVmTTDf1;}5w1hKHN7C33GJ*`ba=&# z*iMXLdEOiLs5?{aHD>%Gtp1wp+R@&$C&_QxLsvG+oBD*T@UAR-sDi$dxdguhOg#93 zg;gaL74%(PQdIUpX$e{Kt(!{9%2v{!=)h0j(%)ggPj{5y9cgdLs&YMC{D){~l2PC0 GXZ{n4$~K+= literal 0 HcmV?d00001 diff --git a/_newconf/newconf/tmp/configure,prg.head b/_newconf/newconf/tmp/configure,prg.head new file mode 100644 index 0000000000000000000000000000000000000000..75934e9436994fe8c475da57695b12af49e9eaa8 GIT binary patch literal 508 zcmZn`VRrWSbMtf$4RT!o0V3Rtd=czyyv&gd0YUBxY57IDi6teeDGKhc{=o`qnK`Kn zVTO7J42&WS3=9ek3=Ry8Kn4c*z|pahX(G#v3qOuAA7fq0{sCq_TxAr4Gea|@fQxIe zw?c@20Mz;gj2w(C5gfw2$`uSwK90d5u0iU-3P4AOxds8*3SmZirhH875=_#}3;_(y zVvHUxE+P5(ISOVb5EI0>8G!PVf+BK2`6dxYKi6;+FCy8`EV}>y|NjjPjFZY4C$%(A zN@tuT(%AEy5h&9B|8EBa?*sjey^`~Sb58XDTQYIS31C{S-R zA0rzJD+@P^bADc0W_oE+s)7Q@iH1O18k~Z|^}RB46`b>Pa#Ddo2)CIyhGR}netEG% zSz=LTW?s5NN@j7kLNe5v#FEVXykaW_1w&I4LmeP#4kj%O71R`h9DTuxixrAX3kvd! KfN`gX%|-yW#Dnhu literal 0 HcmV?d00001 diff --git a/_newconf/newconf/tmp/configure,prg.record.0 b/_newconf/newconf/tmp/configure,prg.record.0 new file mode 100644 index 0000000000000000000000000000000000000000..0fec0bc74de844e9429cc9f311631ca390610c37 GIT binary patch literal 4012 zcmd^Ce{3699Y5cl@6OJTbCNa<{+g{!DLdj;&Q-JwDHN zlBV4x(D;vM-`#uf`}^0s?*$}D5Xg^Y_qbj5nG}0V?r14=?r=wvj%-Zi_a>d7L4Ko? z!!yFRZH6Gzfa4^|SA(u>kWDHXija)%&f3gyon%=|ecT;OzPc~T z=IN0G~DaP>lY#gsx$%VeKy(pgKQ5lhSnNttA28nomC^0fG;qU>p}%j}&J z^UM+pn16evD6=={-TOt;-7!=a$Rq353Y=97Yja;LT9P|m{c2e@gi-pn&`9@p}wV9DtWFr3afXmfKokAJicq-Ti+Y(BZNG%VeNV$E4Y&iTT6+h z(=%2hZ3I;S)In<%ZL(U)=Rq3*R032aPZg=}Oe!YXP=rG~$qmcVjC0I(nhS2wD2r1e zva=CB7U2!WfP)_jkg4Lrp5UkkC#$F7WxJZeJq^4U6|z+sWnJ(nj1mxq^jI?elVtj+ zojzgPk+;d!psN^UKy_8a3&HDn@|9+Ibzr)Q&#*SRls2k4YYd<}>kLu~UBrBiQLbn2 zn3E$(1l?ORLB1c(y9&FF`e|3m?+jaVejscGX$s~FmPi{cmBuZFJUe4@v4aX*%?0AQ ziVMP1ulUc?$kRpW3(sVQ3Gc2N-!5pW%S2~panMIS{N8|HTe+Kz=md+dwHbYP+On)>a3j#dsKV%>hg5l_2UX#K*}lRLg+@>9T3G@-E~H9 z&2386pZ$1Lcbqxf?1l9mJm7G7zqbiOq}X8@Pa-Ethn8@M zs<_B2eol;r7g#1hkyxTgEKwvrgkl&J!%GyyOBBN&KmkpvGAk#Vr^7aPodHDX_wu$7 z34WpqhCTr0m%L~8lBYxc$gmD0T3~fK5g7wd*RfkT-cdU%n3J=%-5JVv8tm#gmRaBA zCk;=dqeIt{8>;;%)h0ci(4 z9n+)s1S$fIPO>ZK#hh5KPyN}nq-X)TDDf<48wf=8iTrHHlq4n4z;p0+_m~|$T0Lx> zusper*E6{ZPRZLz=!Sl2V_bHD6x5Zw{xTp#nWC_EvBfRc?A&x0=|Mt+ic!!4s;7E zeSh^wy_){ztIhs3wZ->ux|)4o`k<@H_X9Ux+q)ko>o?xBKC?KsZ_aG!=BpO%!7X3> z64~{{;A3BZioX>*tEc9N-&fu^gqF%^u8bx=VETXihdda0(_ey>%l`q`xAoOhypeTW$(KySVwtmhQr0 z2-=08Z z?~w$PyxWML&3*+L#KN(d9-Mf zLq1;KMw8m z`NMZ^N1qL2Qk>Vce@Cjb4g8+x6P$2!2};CnF-`^P)m4s*^zfE z+7V~gc0?ogXz{}Tc2pYKd31JoU!XJuxL$+nPZiOXOLPw$f>!`_@mw@FfN~7Vaka5^i>~_JR zBY?zF%MqAVfJv~U6K6lO8el;^K-G@+G|;+$R!cf=9Rh=wN4&(Yg6Mq1`QTiby@|*` zsEp4Ct)lO@ zqvAXkTycO35W=Z`2ZjYO)R(CK1Dn7BN2U>)4B2tgq!aIxpncirZX3t3fRw zv;yIWKxnNYNQf6)ixhITvyOJQ67Mk}?E%tQ4GG@mna2g3s0lc+9K^GvuSV5Z12rvC zovKltS`Ok=BQ>g#8VIdEWbw+EEwpo4!DjEDWb<<(yNq&1x%SdJXC!I;wo;LJXwGv< ue3IcQ8Iuz4A-zZ;JjJWjl`0==ugzSP49t1&=AG>aGQKZkr#@QAX8#TDrW~69 literal 0 HcmV?d00001 diff --git a/_newconf/newconf/tmp/configure,prg.record.1 b/_newconf/newconf/tmp/configure,prg.record.1 new file mode 100644 index 0000000000000000000000000000000000000000..e3c8bc55dd5d82c4aca94dee05a6a81ee638dcfe GIT binary patch literal 3369 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 literal 0 HcmV?d00001 diff --git a/_newconf/newconf/tmp/configure,prg.record.5 b/_newconf/newconf/tmp/configure,prg.record.5 new file mode 100644 index 0000000000000000000000000000000000000000..5496fffe7eb8c439e1cdbe91b9c0f5f1abd717d0 GIT binary patch literal 1793 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 literal 0 HcmV?d00001 diff --git a/configure/configure.cfg b/configure/configure.cfg new file mode 100644 index 00000000..29292823 --- /dev/null +++ b/configure/configure.cfg @@ -0,0 +1,83 @@ +SYMBOLS { + __BACKBUFSIZE__: type = weak, value = $2000; + __OVERLAYSIZE__: type = weak, value = $0000; + __OVERLAYADDR__: type = weak, value = $8000 - __BACKBUFSIZE__ - __OVERLAYSIZE__; + __STACKSIZE__: type = weak, value = $0400; + __STACKADDR__: type = weak, value = __OVERLAYADDR__ - __STACKSIZE__; + __MODSTART__: type = weak, value = $0000; + __DISPJUMPTABLE__: type = weak, value = $0000; + +} +MEMORY { + CVT: file = %O, start = $0, size = $40000; + ZP: define = yes, start = $58, size = $1A + $06; + VLIR0: define = yes, start = $0406, size = __STACKADDR__ - $0406; + VLIR1: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR2: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR3: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR4: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR5: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; + VLIR6: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; + VLIR7: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR8: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR9: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR10: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; +} +SEGMENTS { + ZEROPAGE: type = zp, load = ZP; + EXTZP: type = zp, load = ZP, optional = yes; + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + RECORDS: type = ro, load = CVT, align = $FE, optional = yes; + STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; + LOWCODE: type = ro, run = VLIR0, load = CVT, optional = yes; + ONCE: type = ro, run = VLIR0, load = CVT, optional = yes; + CODE: type = ro, run = VLIR0, load = CVT; + RODATA: type = ro, run = VLIR0, load = CVT; + DATA: type = rw, run = VLIR0, load = CVT; + INIT: type = bss, load = VLIR0, optional = yes; + BSS: type = bss, load = VLIR0, define = yes; + OVERLAY1: type = ro, run = VLIR1, load = CVT, align_load = $FE, optional = yes; + OVERLAY2: type = ro, run = VLIR2, load = CVT, align_load = $FE, optional = yes; + OVERLAY3: type = ro, run = VLIR3, load = CVT, align_load = $FE, optional = yes; + OVERLAY4: type = ro, run = VLIR4, load = CVT, align_load = $FE, optional = yes; + OVERLAY5: type = ro, run = VLIR5, load = CVT, align_load = $FE, optional = yes; + OVERLAY6: type = ro, run = VLIR6, load = CVT, align_load = $FE, optional = yes; + OVERLAY7: type = ro, run = VLIR7, load = CVT, align_load = $FE, optional = yes; + OVERLAY8: type = ro, run = VLIR8, load = CVT, align_load = $FE, optional = yes; + OVERLAY9: type = ro, run = VLIR9, load = CVT, align_load = $FE, optional = yes; + OVERLAY10: type = ro, run = VLIR10, load = CVT, align_load = $FE, optional = yes; + OVERLAY11: type = ro, run = VLIR11, load = CVT, align_load = $FE, optional = yes; + OVERLAY12: type = ro, run = VLIR12, load = CVT, align_load = $FE, optional = yes; + OVERLAY13: type = ro, run = VLIR13, load = CVT, align_load = $FE, optional = yes; + OVERLAY14: type = ro, run = VLIR14, load = CVT, align_load = $FE, optional = yes; + OVERLAY15: type = ro, run = VLIR15, load = CVT, align_load = $FE, optional = yes; + OVERLAY16: type = ro, run = VLIR16, load = CVT, align_load = $FE, optional = yes; + OVERLAY17: type = ro, run = VLIR17, load = CVT, align_load = $FE, optional = yes; + OVERLAY18: type = ro, run = VLIR18, load = CVT, align_load = $FE, optional = yes; + OVERLAY19: type = ro, run = VLIR19, load = CVT, align_load = $FE, optional = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/configure/configure.grc b/configure/configure.grc new file mode 100644 index 00000000..51a85041 --- /dev/null +++ b/configure/configure.grc @@ -0,0 +1,11 @@ +HEADER APPLICATION "CONFIGURE" "Configure" "V2.1" { + author "BSW/Jim Collette" + info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." + date 23 12 91 22 54 + structure VLIR +} + +MEMORY { + overlaysize 0x1000 + overlaynums 0,1,2,3,4,5,6 +} diff --git a/configure/r0.s b/configure/r0.s new file mode 100644 index 00000000..ecbc6329 --- /dev/null +++ b/configure/r0.s @@ -0,0 +1,1821 @@ +; da65 V2.13.2 - (C) Copyright 2000-2009, Ullrich von Bassewitz +; Created: 2010-05-27 22:45:43 +; Input file: configure.cvt.record.0 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" + + ;.cpu 6502 + ;.to "r0.bin",plain + ;.sl "r0.labels" + ;.source "inc/labels.inc" + ;.initmem $ea + ;.zone r0 +L1466 = $1466 +L1E05 = $1E05 +L3156 = $3156 + + ; *=$406 + +;.import L6216 +L6216 = $6216 + +.segment "STARTUP" + +.export L043E +.export L0616 +.export L0672 +.export L0739 +.export L073E +.export L0911 +.export L0E19 +.export L0FA0 +.export L0FB3 + +;.export L043E ; = $043E; fix! +;.export L0616 ; = $0616; fix! +;.export L0672 ; = $0672; fix! +;.export L0739 ; = $0739; fix! +;.export L073E ; = $073E; fix! +;.export L0911 ; = $0911; fix! +;.export L0E19 ; = $0E19; fix! +;.export L0FA0 ; = $0FA0; fix! +;.export L0FB3 ; = $0FB3; fix! +.export __STARTUP_RUN__ + +; ---------------------------------------------------------------------------- + +; ---------------------------------------------------------------------------- + .byte $01,$03 ; 0406 01 03 .. +L0408: .byte $03,$00 ; 0408 03 00 .. +L040A: .byte $00 ;$E0 ; 040A E0 . +; ---------------------------------------------------------------------------- +__STARTUP_RUN__: + jsr L047C ; 040B 20 7C 04 |. + lda firstBoot ; 040E AD C5 88 ... + cmp #$FF ; 0411 C9 FF .. + bne L0418 ; 0413 D0 03 .. + jmp L04EC ; 0415 4C EC 04 L.. +; ---------------------------------------------------------------------------- +L0418: bit c128Flag ; 0418 2C 13 C0 ,.. + bmi L0479 ; 041B 30 5C 0\ + lda curDrive ; 041D AD 89 84 ... + sta $2104 ; 0420 8D 04 21 ..! + tay ; 0423 A8 . + lda $8486,y ; 0424 B9 86 84 ... + sta $2105 ; 0427 8D 05 21 ..! + jsr L0FB3 ; 042A 20 B3 0F .. + jsr i_MoveData ; 042D 20 B7 C1 .. + brk ; 0430 00 . + bvc L0483 ; 0431 50 50 PP + and ($00,x) ; 0433 21 00 !. + .byte $04 ; 0435 04 . + lda #$01 ; 0436 A9 01 .. + sta NUMDRV ; 0438 8D 8D 84 ... + jsr L0558 ; 043B 20 58 05 X. +L043E: lda $2104 ; 043E AD 04 21 ..! + jsr L073E ; 0441 20 3E 07 >. + jsr L1081 ; 0444 20 81 10 .. + jsr L0FA0 ; 0447 20 A0 0F .. + lda ramExpSize ; 044A AD C3 88 ... + bne L0470 ; 044D D0 21 .! + lda NUMDRV ; 044F AD 8D 84 ... + cmp #$02 ; 0452 C9 02 .. + bcc L0470 ; 0454 90 1A .. + lda driveType ; 0456 AD 8E 84 ... + cmp $848F ; 0459 CD 8F 84 ... + bne L0462 ; 045C D0 04 .. + cmp #$03 ; 045E C9 03 .. + bne L0470 ; 0460 D0 0E .. +L0462: jsr L0739 ; 0462 20 39 07 9. + jsr PurgeTurbo ; 0465 20 35 C2 5. + jsr L0739 ; 0468 20 39 07 9. + lda #$01 ; 046B A9 01 .. + sta NUMDRV ; 046D 8D 8D 84 ... +L0470: jsr i_MoveData ; 0470 20 B7 C1 .. + bvc L0496 ; 0473 50 21 P! + brk ; 0475 00 . + bvc L0478 ; 0476 50 00 P. +L0478: .byte $04 ; 0478 04 . +L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. +; ---------------------------------------------------------------------------- +L047C: bit c128Flag ; 047C 2C 13 C0 ,.. + bmi L048E ; 047F 30 0D 0. + .byte $AD ; 0481 AD . + .byte $0F ; 0482 0F . +L0483: cpy #$C9 ; 0483 C0 C9 .. + .byte $14 ; 0485 14 . + bcs L048E ; 0486 B0 06 .. + jsr L04CC ; 0488 20 CC 04 .. + jsr L048F ; 048B 20 8F 04 .. +L048E: rts ; 048E 60 ` +; ---------------------------------------------------------------------------- +L048F: lda #$C3 ; 048F A9 C3 .. + sta r0H ; 0491 85 03 .. + lda #$10 ; 0493 A9 10 .. + .byte $85 ; 0495 85 . +L0496: .byte $02 ; 0496 02 . + ldy #$00 ; 0497 A0 00 .. + sty r1L ; 0499 84 04 .. + jsr L04A2 ; 049B 20 A2 04 .. + lda #$05 ; 049E A9 05 .. + sta r1L ; 04A0 85 04 .. +L04A2: ldx r1L ; 04A2 A6 04 .. +L04A4: lda (r0L),y ; 04A4 B1 02 .. + cmp L04C2,x ; 04A6 DD C2 04 ... + beq L04B3 ; 04A9 F0 08 .. + cpx r1L ; 04AB E4 04 .. + bne L04A2 ; 04AD D0 F3 .. + iny ; 04AF C8 . + bne L04A2 ; 04B0 D0 F0 .. + rts ; 04B2 60 ` +; ---------------------------------------------------------------------------- +L04B3: iny ; 04B3 C8 . + bne L04B7 ; 04B4 D0 01 .. + rts ; 04B6 60 ` +; ---------------------------------------------------------------------------- +L04B7: inx ; 04B7 E8 . + lda L04C2,x ; 04B8 BD C2 04 ... + bne L04A4 ; 04BB D0 E7 .. + lda #$34 ; 04BD A9 34 .4 + sta (r0L),y ; 04BF 91 02 .. + rts ; 04C1 60 ` +; ---------------------------------------------------------------------------- +L04C2: lda $815C ; 04C2 AD 5C 81 .\. + cmp #$00 ; 04C5 C9 00 .. + jsr L3156 ; 04C7 20 56 31 V1 + .byte $2E ; 04CA 2E . + brk ; 04CB 00 . +L04CC: lda version ; 04CC AD 0F C0 ... + cmp #$13 ; 04CF C9 13 .. + bne L04EB ; 04D1 D0 18 .. + lda $C2B2 ; 04D3 AD B2 C2 ... + sta r0H ; 04D6 85 03 .. + lda $C2B1 ; 04D8 AD B1 C2 ... + sta r0L ; 04DB 85 02 .. + ldy #$00 ; 04DD A0 00 .. + lda (r0L),y ; 04DF B1 02 .. + cmp #$EA ; 04E1 C9 EA .. + beq L04EB ; 04E3 F0 06 .. + ldy #$03 ; 04E5 A0 03 .. + lda #$3D ; 04E7 A9 3D .= + sta (r0L),y ; 04E9 91 02 .. +L04EB: rts ; 04EB 60 ` +; ---------------------------------------------------------------------------- +L04EC: jsr L0522 ; 04EC 20 22 05 ". + txa ; 04EF 8A . + bne L050E ; 04F0 D0 1C .. + lda #$01 ; 04F2 A9 01 .. + jsr PointRecord ; 04F4 20 80 C2 .. + lda #$13 ; 04F7 A9 13 .. + sta r7H ; 04F9 85 11 .. + lda #$B1 ; 04FB A9 B1 .. + sta r7L ; 04FD 85 10 .. + lda #$FF ; 04FF A9 FF .. + sta r2L ; 0501 85 06 .. + sta r2H ; 0503 85 07 .. + jsr ReadRecord ; 0505 20 8C C2 .. + txa ; 0508 8A . + bne L050E ; 0509 D0 03 .. + jmp L1466 ; 050B 4C 66 14 Lf. +; ---------------------------------------------------------------------------- +L050E: jmp EnterDeskTop ; 050E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + .byte "Configure V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur + ; 0519 65 20 20 20 56 32 2E 31 e V2.1 + .byte $00 ; 0521 00 . +; ---------------------------------------------------------------------------- +L0522: ldx #$00 ; 0522 A2 00 .. + lda L06AC ; 0524 AD AC 06 ... + bne L0557 ; 0527 D0 2E .. + lda #$20 ; 0529 A9 20 . + sta r6H ; 052B 85 0F .. + lda #$D9 ; 052D A9 D9 .. + sta r6L ; 052F 85 0E .. + lda #$0E ; 0531 A9 0E .. + sta r7L ; 0533 85 10 .. + lda #$01 ; 0535 A9 01 .. + sta r7H ; 0537 85 11 .. + lda #$05 ; 0539 A9 05 .. + sta r10H ; 053B 85 17 .. + lda #$11 ; 053D A9 11 .. + sta r10L ; 053F 85 16 .. + jsr FindFTypes ; 0541 20 3B C2 ;. + txa ; 0544 8A . + bne L0557 ; 0545 D0 10 .. + lda #$20 ; 0547 A9 20 . + sta r0H ; 0549 85 03 .. + lda #$D9 ; 054B A9 D9 .. + sta r0L ; 054D 85 02 .. + jsr OpenRecordFile ; 054F 20 74 C2 t. + lda #$FF ; 0552 A9 FF .. + sta L06AC ; 0554 8D AC 06 ... +L0557: rts ; 0557 60 ` +; ---------------------------------------------------------------------------- +L0558: jsr ExitTurbo ; 0558 20 32 C2 2. + lda ramExpSize ; 055B AD C3 88 ... + beq L0563 ; 055E F0 03 .. + lda L040A ; 0560 AD 0A 04 ... +L0563: and #$A0 ; 0563 29 A0 ). + sta sysRAMFlg ; 0565 8D C4 88 ... + sta sysFlgCopy ; 0568 8D 12 C0 ... + lda $2105 ; 056B AD 05 21 ..! + cmp #$02 ; 056E C9 02 .. + bcs L057B ; 0570 B0 09 .. + jsr L0E64 ; 0572 20 64 0E d. + cmp #$FF ; 0575 C9 FF .. + bne L057B ; 0577 D0 02 .. + lda #$01 ; 0579 A9 01 .. +L057B: sta $2106 ; 057B 8D 06 21 ..! + lda curDrive ; 057E AD 89 84 ... + eor #$01 ; 0581 49 01 I. + jsr SetDevice ; 0583 20 B0 C2 .. + jsr L0E64 ; 0586 20 64 0E d. + cmp #$FF ; 0589 C9 FF .. + bne L058F ; 058B D0 02 .. + lda #$00 ; 058D A9 00 .. +L058F: sta $2107 ; 058F 8D 07 21 ..! + lda ramExpSize ; 0592 AD C3 88 ... + beq L05A3 ; 0595 F0 0C .. + lda #$0A ; 0597 A9 0A .. + jsr SetDevice ; 0599 20 B0 C2 .. + jsr L0E64 ; 059C 20 64 0E d. + cmp #$FF ; 059F C9 FF .. + bne L05A5 ; 05A1 D0 02 .. +L05A3: lda #$00 ; 05A3 A9 00 .. +L05A5: sta $2108 ; 05A5 8D 08 21 ..! + lda $2104 ; 05A8 AD 04 21 ..! + jsr SetDevice ; 05AB 20 B0 C2 .. + jsr L06B2 ; 05AE 20 B2 06 .. + jsr L064A ; 05B1 20 4A 06 J. + txa ; 05B4 8A . + bne L05F7 ; 05B5 D0 40 .@ + jsr PurgeTurbo ; 05B7 20 35 C2 5. + ldy #$03 ; 05BA A0 03 .. + lda #$00 ; 05BC A9 00 .. + sta NUMDRV ; 05BE 8D 8D 84 ... +L05C1: sta driveType,y ; 05C1 99 8E 84 ... + sta turboFlags,y ; 05C4 99 92 84 ... + sta driveData,y ; 05C7 99 BF 88 ... + sta ramBase,y ; 05CA 99 C7 88 ... + dey ; 05CD 88 . + bpl L05C1 ; 05CE 10 F1 .. + jsr L05F8 ; 05D0 20 F8 05 .. + lda $2106 ; 05D3 AD 06 21 ..! + jsr L0769 ; 05D6 20 69 07 i. + lda $2107 ; 05D9 AD 07 21 ..! + beq L05E7 ; 05DC F0 09 .. + jsr L0739 ; 05DE 20 39 07 9. + lda $2107 ; 05E1 AD 07 21 ..! + jsr L0769 ; 05E4 20 69 07 i. +L05E7: lda $2108 ; 05E7 AD 08 21 ..! + beq L05F7 ; 05EA F0 0B .. + lda #$0A ; 05EC A9 0A .. + jsr L073E ; 05EE 20 3E 07 >. + lda $2108 ; 05F1 AD 08 21 ..! + jsr L0769 ; 05F4 20 69 07 i. +L05F7: rts ; 05F7 60 ` +; ---------------------------------------------------------------------------- +L05F8: lda ramExpSize ; 05F8 AD C3 88 ... + beq L0615 ; 05FB F0 18 .. + lda #$08 ; 05FD A9 08 .. + sta $212B ; 05FF 8D 2B 21 .+! + lda $2106 ; 0602 AD 06 21 ..! + sta $212F ; 0605 8D 2F 21 ./! +L0608: jsr L09C8 ; 0608 20 C8 09 .. + inc $212B ; 060B EE 2B 21 .+! + lda $212B ; 060E AD 2B 21 .+! + cmp #$0C ; 0611 C9 0C .. + bne L0608 ; 0613 D0 F3 .. +L0615: rts ; 0615 60 ` +; ---------------------------------------------------------------------------- +L0616: ldy curDrive ; 0616 AC 89 84 ... + lda $8486,y ; 0619 B9 86 84 ... + beq L0649 ; 061C F0 2B .+ + tay ; 061E A8 . + jsr L0A76 ; 061F 20 76 0A v. + lda L06AD,y ; 0622 B9 AD 06 ... + bne L0649 ; 0625 D0 22 ." + lda #$FF ; 0627 A9 FF .. + sta L06AD,y ; 0629 99 AD 06 ... + lda L0A64,y ; 062C B9 64 0A .d. + sta r1L ; 062F 85 04 .. + lda L0A69,y ; 0631 B9 69 0A .i. + sta r1H ; 0634 85 05 .. + lda #$90 ; 0636 A9 90 .. + sta r0H ; 0638 85 03 .. + lda #$00 ; 063A A9 00 .. + sta r0L ; 063C 85 02 .. + lda #$0D ; 063E A9 0D .. + sta r2H ; 0640 85 07 .. + lda #$80 ; 0642 A9 80 .. + sta r2L ; 0644 85 06 .. + jsr MoveData ; 0646 20 7E C1 ~. +L0649: rts ; 0649 60 ` +; ---------------------------------------------------------------------------- +L064A: lda $2106 ; 064A AD 06 21 ..! + jsr L0672 ; 064D 20 72 06 r. + bne L0671 ; 0650 D0 1F .. + lda $2107 ; 0652 AD 07 21 ..! + jsr L0672 ; 0655 20 72 06 r. + bne L0671 ; 0658 D0 17 .. + lda $2108 ; 065A AD 08 21 ..! + jsr L0672 ; 065D 20 72 06 r. + bne L0671 ; 0660 D0 0F .. + ldx #$00 ; 0662 A2 00 .. + lda L06AC ; 0664 AD AC 06 ... + beq L0671 ; 0667 F0 08 .. + jsr CloseRecordFile ; 0669 20 77 C2 w. + lda #$00 ; 066C A9 00 .. + sta L06AC ; 066E 8D AC 06 ... +L0671: rts ; 0671 60 ` +; ---------------------------------------------------------------------------- +L0672: ldx #$00 ; 0672 A2 00 .. + tay ; 0674 A8 . + beq L06AA ; 0675 F0 33 .3 + jsr L0A76 ; 0677 20 76 0A v. + lda L06AD,y ; 067A B9 AD 06 ... + bne L06AA ; 067D D0 2B .+ + tya ; 067F 98 . + pha ; 0680 48 H + jsr L0522 ; 0681 20 22 05 ". + pla ; 0684 68 h + tay ; 0685 A8 . + txa ; 0686 8A . + bne L06AA ; 0687 D0 21 .! + lda #$FF ; 0689 A9 FF .. + sta L06AD,y ; 068B 99 AD 06 ... + lda L0A64,y ; 068E B9 64 0A .d. + sta r7L ; 0691 85 10 .. + lda L0A69,y ; 0693 B9 69 0A .i. + sta r7H ; 0696 85 11 .. + tya ; 0698 98 . + clc ; 0699 18 . + adc #$02 ; 069A 69 02 i. + jsr PointRecord ; 069C 20 80 C2 .. + lda #$0D ; 069F A9 0D .. + sta r2H ; 06A1 85 07 .. + lda #$80 ; 06A3 A9 80 .. + sta r2L ; 06A5 85 06 .. + jsr ReadRecord ; 06A7 20 8C C2 .. +L06AA: txa ; 06AA 8A . + rts ; 06AB 60 ` +; ---------------------------------------------------------------------------- +L06AC: brk ; 06AC 00 . +L06AD: brk ; 06AD 00 . + brk ; 06AE 00 . + brk ; 06AF 00 . + brk ; 06B0 00 . + brk ; 06B1 00 . +L06B2: lda #$01 ; 06B2 A9 01 .. + sta r0L ; 06B4 85 02 .. + lda $2104 ; 06B6 AD 04 21 ..! + eor #$01 ; 06B9 49 01 I. + tay ; 06BB A8 . + lda $03FE,y ; 06BC B9 FE 03 ... + ldx $2107 ; 06BF AE 07 21 ..! + jsr L06EB ; 06C2 20 EB 06 .. + sta $2107 ; 06C5 8D 07 21 ..! + ldy $2104 ; 06C8 AC 04 21 ..! + lda $03FE,y ; 06CB B9 FE 03 ... + and #$7F ; 06CE 29 7F ). + ldx $2106 ; 06D0 AE 06 21 ..! + jsr L06EB ; 06D3 20 EB 06 .. + sta $2106 ; 06D6 8D 06 21 ..! + lda ramExpSize ; 06D9 AD C3 88 ... + beq L06E7 ; 06DC F0 09 .. + lda L0408 ; 06DE AD 08 04 ... + ldx $2108 ; 06E1 AE 08 21 ..! + jsr L06EB ; 06E4 20 EB 06 .. +L06E7: sta $2108 ; 06E7 8D 08 21 ..! + rts ; 06EA 60 ` +; ---------------------------------------------------------------------------- +L06EB: stx r2L ; 06EB 86 06 .. + sta r2H ; 06ED 85 07 .. + jsr L09AD ; 06EF 20 AD 09 .. + clc ; 06F2 18 . + adc r0L ; 06F3 65 02 e. + cmp ramExpSize ; 06F5 CD C3 88 ... + bcc L0704 ; 06F8 90 0A .. + beq L0704 ; 06FA F0 08 .. + lda r2H ; 06FC A5 07 .. + and #$3F ; 06FE 29 3F )? + sta r2H ; 0700 85 07 .. + lda r0L ; 0702 A5 02 .. +L0704: sta r0H ; 0704 85 03 .. + lda r2H ; 0706 A5 07 .. + bpl L0711 ; 0708 10 07 .. + lda r0H ; 070A A5 03 .. + sta r0L ; 070C 85 02 .. + lda r2H ; 070E A5 07 .. + rts ; 0710 60 ` +; ---------------------------------------------------------------------------- +L0711: and #$0F ; 0711 29 0F ). + cmp #$01 ; 0713 C9 01 .. + bne L0721 ; 0715 D0 0A .. + lda r2L ; 0717 A5 06 .. + cmp #$02 ; 0719 C9 02 .. + bne L0721 ; 071B D0 04 .. + lda #$01 ; 071D A9 01 .. + sta r2L ; 071F 85 06 .. +L0721: lda r2H ; 0721 A5 07 .. + and #$40 ; 0723 29 40 )@ + beq L0736 ; 0725 F0 0F .. + lda r2H ; 0727 A5 07 .. + and #$0F ; 0729 29 0F ). + cmp r2L ; 072B C5 06 .. + bne L0736 ; 072D D0 07 .. + lda r0H ; 072F A5 03 .. + sta r0L ; 0731 85 02 .. + lda r2H ; 0733 A5 07 .. + rts ; 0735 60 ` +; ---------------------------------------------------------------------------- +L0736: lda r2L ; 0736 A5 06 .. + rts ; 0738 60 ` +; ---------------------------------------------------------------------------- +L0739: lda curDrive ; 0739 AD 89 84 ... + eor #$01 ; 073C 49 01 I. +L073E: jsr SetDevice ; 073E 20 B0 C2 .. + txa ; 0741 8A . + bne L0768 ; 0742 D0 24 .$ + lda ramExpSize ; 0744 AD C3 88 ... + bne L075F ; 0747 D0 16 .. + lda $212F ; 0749 AD 2F 21 ./! + pha ; 074C 48 H + ldy curDrive ; 074D AC 89 84 ... + lda $8486,y ; 0750 B9 86 84 ... + beq L075B ; 0753 F0 06 .. + sta $212F ; 0755 8D 2F 21 ./! + jsr L09C8 ; 0758 20 C8 09 .. +L075B: pla ; 075B 68 h + sta $212F ; 075C 8D 2F 21 ./! +L075F: ldy curDrive ; 075F AC 89 84 ... + lda $8486,y ; 0762 B9 86 84 ... + sta curType ; 0765 8D C6 88 ... +L0768: rts ; 0768 60 ` +; ---------------------------------------------------------------------------- +L0769: pha ; 0769 48 H + lda #$00 ; 076A A9 00 .. + sta $212C ; 076C 8D 2C 21 .,! + lda curDrive ; 076F AD 89 84 ... + sta $212B ; 0772 8D 2B 21 .+! + pla ; 0775 68 h + beq L07B6 ; 0776 F0 3E .> + cmp #$01 ; 0778 C9 01 .. + bne L077F ; 077A D0 03 .. + jmp L07B7 ; 077C 4C B7 07 L.. +; ---------------------------------------------------------------------------- +L077F: cmp #$02 ; 077F C9 02 .. + bne L0786 ; 0781 D0 03 .. + jmp L07DF ; 0783 4C DF 07 L.. +; ---------------------------------------------------------------------------- +L0786: cmp #$03 ; 0786 C9 03 .. + bne L078D ; 0788 D0 03 .. + jmp L07EF ; 078A 4C EF 07 L.. +; ---------------------------------------------------------------------------- +L078D: cmp #$41 ; 078D C9 41 .A + bne L0797 ; 078F D0 06 .. + jsr L07B7 ; 0791 20 B7 07 .. + jmp L07FF ; 0794 4C FF 07 L.. +; ---------------------------------------------------------------------------- +L0797: cmp #$43 ; 0797 C9 43 .C + bne L07A1 ; 0799 D0 06 .. + jsr L07EF ; 079B 20 EF 07 .. + jmp L0820 ; 079E 4C 20 08 L . +; ---------------------------------------------------------------------------- +L07A1: cmp #$81 ; 07A1 C9 81 .. + bne L07A8 ; 07A3 D0 03 .. + jmp L0841 ; 07A5 4C 41 08 LA. +; ---------------------------------------------------------------------------- +L07A8: cmp #$82 ; 07A8 C9 82 .. + bne L07AF ; 07AA D0 03 .. + jmp L0873 ; 07AC 4C 73 08 Ls. +; ---------------------------------------------------------------------------- +L07AF: cmp #$83 ; 07AF C9 83 .. + bne L07B6 ; 07B1 D0 03 .. + jmp L08A5 ; 07B3 4C A5 08 L.. +; ---------------------------------------------------------------------------- +L07B6: rts ; 07B6 60 ` +; ---------------------------------------------------------------------------- +L07B7: lda $212C ; 07B7 AD 2C 21 .,! + cmp #$01 ; 07BA C9 01 .. + beq L07DE ; 07BC F0 20 . + cmp #$41 ; 07BE C9 41 .A + bne L07D6 ; 07C0 D0 14 .. + ldy $212B ; 07C2 AC 2B 21 .+! + lda #$01 ; 07C5 A9 01 .. + sta $8486,y ; 07C7 99 86 84 ... + sta $03FE,y ; 07CA 99 FE 03 ... + lda #$00 ; 07CD A9 00 .. + sta driveData,y ; 07CF 99 BF 88 ... + dec $180C ; 07D2 CE 0C 18 ... + rts ; 07D5 60 ` +; ---------------------------------------------------------------------------- +L07D6: lda #$01 ; 07D6 A9 01 .. + sta $212F ; 07D8 8D 2F 21 ./! + jmp L08D7 ; 07DB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07DE: rts ; 07DE 60 ` +; ---------------------------------------------------------------------------- +L07DF: lda $212C ; 07DF AD 2C 21 .,! + cmp #$02 ; 07E2 C9 02 .. + beq L07EE ; 07E4 F0 08 .. + lda #$02 ; 07E6 A9 02 .. + sta $212F ; 07E8 8D 2F 21 ./! + jmp L08D7 ; 07EB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07EE: rts ; 07EE 60 ` +; ---------------------------------------------------------------------------- +L07EF: lda $212C ; 07EF AD 2C 21 .,! + cmp #$03 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$03 ; 07F6 A9 03 .. + sta $212F ; 07F8 8D 2F 21 ./! + jmp L08D7 ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07FE: rts ; 07FE 60 ` +; ---------------------------------------------------------------------------- +L07FF: lda $212C ; 07FF AD 2C 21 .,! + cmp #$41 ; 0802 C9 41 .A + beq L081F ; 0804 F0 19 .. + lda #$41 ; 0806 A9 41 .A + jsr L0911 ; 0808 20 11 09 .. + ldy $212B ; 080B AC 2B 21 .+! + sta driveData,y ; 080E 99 BF 88 ... + lda #$41 ; 0811 A9 41 .A + sta $8486,y ; 0813 99 86 84 ... + sta $03FE,y ; 0816 99 FE 03 ... + jsr NewDisk ; 0819 20 E1 C1 .. + dec $180C ; 081C CE 0C 18 ... +L081F: rts ; 081F 60 ` +; ---------------------------------------------------------------------------- +L0820: lda $212C ; 0820 AD 2C 21 .,! + cmp #$43 ; 0823 C9 43 .C + beq L0840 ; 0825 F0 19 .. + lda #$43 ; 0827 A9 43 .C + jsr L0911 ; 0829 20 11 09 .. + ldy $212B ; 082C AC 2B 21 .+! + sta driveData,y ; 082F 99 BF 88 ... + lda #$43 ; 0832 A9 43 .C + sta $8486,y ; 0834 99 86 84 ... + sta $03FE,y ; 0837 99 FE 03 ... + jsr NewDisk ; 083A 20 E1 C1 .. + dec $180C ; 083D CE 0C 18 ... +L0840: rts ; 0840 60 ` +; ---------------------------------------------------------------------------- +L0841: lda $212C ; 0841 AD 2C 21 .,! + cmp #$81 ; 0844 C9 81 .. + beq L0872 ; 0846 F0 2A .* + lda #$81 ; 0848 A9 81 .. + sta $212F ; 084A 8D 2F 21 ./! + jsr L09C8 ; 084D 20 C8 09 .. + inc NUMDRV ; 0850 EE 8D 84 ... + lda #$81 ; 0853 A9 81 .. + jsr L0911 ; 0855 20 11 09 .. + ldy $212B ; 0858 AC 2B 21 .+! + sta driveData,y ; 085B 99 BF 88 ... + lda #$81 ; 085E A9 81 .. + sta $8486,y ; 0860 99 86 84 ... + sta $03FE,y ; 0863 99 FE 03 ... + lda $212B ; 0866 AD 2B 21 .+! + jsr L073E ; 0869 20 3E 07 >. + jsr L0A8A ; 086C 20 8A 0A .. + dec $180C ; 086F CE 0C 18 ... +L0872: rts ; 0872 60 ` +; ---------------------------------------------------------------------------- +L0873: lda $212C ; 0873 AD 2C 21 .,! + cmp #$82 ; 0876 C9 82 .. + beq L08A4 ; 0878 F0 2A .* + lda #$82 ; 087A A9 82 .. + sta $212F ; 087C 8D 2F 21 ./! + jsr L09C8 ; 087F 20 C8 09 .. + inc NUMDRV ; 0882 EE 8D 84 ... + lda #$82 ; 0885 A9 82 .. + jsr L0911 ; 0887 20 11 09 .. + ldy $212B ; 088A AC 2B 21 .+! + sta driveData,y ; 088D 99 BF 88 ... + lda #$82 ; 0890 A9 82 .. + sta $8486,y ; 0892 99 86 84 ... + sta $03FE,y ; 0895 99 FE 03 ... + lda $212B ; 0898 AD 2B 21 .+! + jsr L073E ; 089B 20 3E 07 >. + jsr L0A8A ; 089E 20 8A 0A .. + dec $180C ; 08A1 CE 0C 18 ... +L08A4: rts ; 08A4 60 ` +; ---------------------------------------------------------------------------- +L08A5: lda $212C ; 08A5 AD 2C 21 .,! + cmp #$83 ; 08A8 C9 83 .. + beq L08D6 ; 08AA F0 2A .* + lda #$83 ; 08AC A9 83 .. + sta $212F ; 08AE 8D 2F 21 ./! + jsr L09C8 ; 08B1 20 C8 09 .. + inc NUMDRV ; 08B4 EE 8D 84 ... + lda #$83 ; 08B7 A9 83 .. + jsr L0911 ; 08B9 20 11 09 .. + ldy $212B ; 08BC AC 2B 21 .+! + sta driveData,y ; 08BF 99 BF 88 ... + lda #$83 ; 08C2 A9 83 .. + sta $8486,y ; 08C4 99 86 84 ... + sta $03FE,y ; 08C7 99 FE 03 ... + lda $212B ; 08CA AD 2B 21 .+! + jsr L073E ; 08CD 20 3E 07 >. + jsr L0A8A ; 08D0 20 8A 0A .. + dec $180C ; 08D3 CE 0C 18 ... +L08D6: rts ; 08D6 60 ` +; ---------------------------------------------------------------------------- +L08D7: jsr L09C8 ; 08D7 20 C8 09 .. + lda $212B ; 08DA AD 2B 21 .+! + jsr L073E ; 08DD 20 3E 07 >. + lda firstBoot ; 08E0 AD C5 88 ... + cmp #$FF ; 08E3 C9 FF .. + beq L08F6 ; 08E5 F0 0F .. + ldy $212B ; 08E7 AC 2B 21 .+! + lda $212F ; 08EA AD 2F 21 ./! + sta $8486,y ; 08ED 99 86 84 ... + inc NUMDRV ; 08F0 EE 8D 84 ... + clv ; 08F3 B8 . + bvc L08FF ; 08F4 50 09 P. +L08F6: jsr L1E05 ; 08F6 20 05 1E .. + lda $212B ; 08F9 AD 2B 21 .+! + jsr L073E ; 08FC 20 3E 07 >. +L08FF: dec $180C ; 08FF CE 0C 18 ... + ldy $212B ; 0902 AC 2B 21 .+! + lda $8486,y ; 0905 B9 86 84 ... + sta $03FE,y ; 0908 99 FE 03 ... + lda #$00 ; 090B A9 00 .. + sta driveData,y ; 090D 99 BF 88 ... + rts ; 0910 60 ` +; ---------------------------------------------------------------------------- +L0911: pha ; 0911 48 H + jsr L0977 ; 0912 20 77 09 w. + pla ; 0915 68 h + sta r0L ; 0916 85 02 .. + lda $212C ; 0918 AD 2C 21 .,! + and #$C0 ; 091B 29 C0 ). + bne L092A ; 091D D0 0B .. + lda r0L ; 091F A5 02 .. + jsr L09AD ; 0921 20 AD 09 .. + cmp #$01 ; 0924 C9 01 .. + beq L0933 ; 0926 F0 0B .. + bne L0945 ; 0928 D0 1B .. +L092A: ldy $212B ; 092A AC 2B 21 .+! + lda driveData,y ; 092D B9 BF 88 ... + ldx #$00 ; 0930 A2 00 .. + rts ; 0932 60 ` +; ---------------------------------------------------------------------------- +L0933: ldy ramExpSize ; 0933 AC C3 88 ... +L0936: dey ; 0936 88 . + bmi L0942 ; 0937 30 09 0. + lda $2130,y ; 0939 B9 30 21 .0! + bne L0936 ; 093C D0 F8 .. + tya ; 093E 98 . + ldx #$00 ; 093F A2 00 .. + rts ; 0941 60 ` +; ---------------------------------------------------------------------------- +L0942: ldx #$FF ; 0942 A2 FF .. + rts ; 0944 60 ` +; ---------------------------------------------------------------------------- +L0945: sta r0L ; 0945 85 02 .. + ldy #$00 ; 0947 A0 00 .. +L0949: lda r0L ; 0949 A5 02 .. + sta r0H ; 094B 85 03 .. +L094D: sty r1L ; 094D 84 04 .. + cpy ramExpSize ; 094F CC C3 88 ... + bcs L0974 ; 0952 B0 20 . + lda $2130,y ; 0954 B9 30 21 .0! + iny ; 0957 C8 . + cmp #$00 ; 0958 C9 00 .. + bne L094D ; 095A D0 F1 .. +L095C: dec r0H ; 095C C6 03 .. + beq L096F ; 095E F0 0F .. + cpy ramExpSize ; 0960 CC C3 88 ... + bcs L0974 ; 0963 B0 0F .. + lda $2130,y ; 0965 B9 30 21 .0! + iny ; 0968 C8 . + cmp #$00 ; 0969 C9 00 .. + bne L0949 ; 096B D0 DC .. + beq L095C ; 096D F0 ED .. +L096F: lda r1L ; 096F A5 04 .. + ldx #$00 ; 0971 A2 00 .. + rts ; 0973 60 ` +; ---------------------------------------------------------------------------- +L0974: ldx #$FF ; 0974 A2 FF .. + rts ; 0976 60 ` +; ---------------------------------------------------------------------------- +L0977: ldy #$1F ; 0977 A0 1F .. + lda #$00 ; 0979 A9 00 .. +L097B: sta $2130,y ; 097B 99 30 21 .0! + dey ; 097E 88 . + bpl L097B ; 097F 10 FA .. + lda #$FF ; 0981 A9 FF .. + sta $2130 ; 0983 8D 30 21 .0! + lda #$08 ; 0986 A9 08 .. + sta r0L ; 0988 85 02 .. +L098A: ldy r0L ; 098A A4 02 .. + lda $8486,y ; 098C B9 86 84 ... + jsr L09AD ; 098F 20 AD 09 .. + tax ; 0992 AA . + beq L09A4 ; 0993 F0 0F .. + ldy r0L ; 0995 A4 02 .. + lda driveData,y ; 0997 B9 BF 88 ... + tay ; 099A A8 . +L099B: lda #$FF ; 099B A9 FF .. + sta $2130,y ; 099D 99 30 21 .0! + iny ; 09A0 C8 . + dex ; 09A1 CA . + bne L099B ; 09A2 D0 F7 .. +L09A4: inc r0L ; 09A4 E6 02 .. + lda r0L ; 09A6 A5 02 .. + cmp #$0C ; 09A8 C9 0C .. + bcc L098A ; 09AA 90 DE .. + rts ; 09AC 60 ` +; ---------------------------------------------------------------------------- +L09AD: sta r0H ; 09AD 85 03 .. + and #$C0 ; 09AF 29 C0 ). + beq L09C2 ; 09B1 F0 0F .. + lda r0H ; 09B3 A5 03 .. + cmp #$83 ; 09B5 C9 83 .. + bne L09BC ; 09B7 D0 03 .. + clc ; 09B9 18 . + adc #$01 ; 09BA 69 01 i. +L09BC: and #$0F ; 09BC 29 0F ). + tay ; 09BE A8 . + lda L09C3,y ; 09BF B9 C3 09 ... +L09C2: rts ; 09C2 60 ` +; ---------------------------------------------------------------------------- +L09C3: .byte $03 ; 09C3 03 . + .byte $03 ; 09C4 03 . + asl CPU_DATA ; 09C5 06 01 .. + .byte $0D ; 09C7 0D . +L09C8: lda ramExpSize ; 09C8 AD C3 88 ... + bne L09F0 ; 09CB D0 23 .# + lda sysRAMFlg ; 09CD AD C4 88 ... + and #$BF ; 09D0 29 BF ). + sta sysRAMFlg ; 09D2 8D C4 88 ... + sta sysFlgCopy ; 09D5 8D 12 C0 ... + sta L040A ; 09D8 8D 0A 04 ... + ldy $212F ; 09DB AC 2F 21 ./! + lda $212B ; 09DE AD 2B 21 .+! + jsr L0A3D ; 09E1 20 3D 0A =. + lda #$90 ; 09E4 A9 90 .. + sta r1H ; 09E6 85 05 .. + lda #$00 ; 09E8 A9 00 .. + sta r1L ; 09EA 85 04 .. + jsr MoveData ; 09EC 20 7E C1 ~. + rts ; 09EF 60 ` +; ---------------------------------------------------------------------------- +L09F0: lda sysRAMFlg ; 09F0 AD C4 88 ... + ora #$40 ; 09F3 09 40 .@ + sta sysRAMFlg ; 09F5 8D C4 88 ... + sta sysFlgCopy ; 09F8 8D 12 C0 ... + sta L040A ; 09FB 8D 0A 04 ... + ldy driveType ; 09FE AC 8E 84 ... + beq L0A0B ; 0A01 F0 08 .. + lda #$08 ; 0A03 A9 08 .. + jsr L0A3D ; 0A05 20 3D 0A =. + jsr StashRAM ; 0A08 20 C8 C2 .. +L0A0B: ldy $848F ; 0A0B AC 8F 84 ... + beq L0A18 ; 0A0E F0 08 .. + lda #$09 ; 0A10 A9 09 .. + .byte $20 ; 0A12 20 +L0A13: and $200A,x ; 0A13 3D 0A 20 =. + iny ; 0A16 C8 . + .byte $C2 ; 0A17 C2 . +L0A18: ldy $8490 ; 0A18 AC 90 84 ... + beq L0A25 ; 0A1B F0 08 .. + lda #$0A ; 0A1D A9 0A .. + jsr L0A3D ; 0A1F 20 3D 0A =. + jsr StashRAM ; 0A22 20 C8 C2 .. +L0A25: ldy $212F ; 0A25 AC 2F 21 ./! + lda $212B ; 0A28 AD 2B 21 .+! + jsr L0A3D ; 0A2B 20 3D 0A =. + jsr StashRAM ; 0A2E 20 C8 C2 .. + lda #$90 ; 0A31 A9 90 .. + sta r1H ; 0A33 85 05 .. + lda #$00 ; 0A35 A9 00 .. + sta r1L ; 0A37 85 04 .. + jsr MoveData ; 0A39 20 7E C1 ~. + rts ; 0A3C 60 ` +; ---------------------------------------------------------------------------- +L0A3D: pha ; 0A3D 48 H + jsr L0A76 ; 0A3E 20 76 0A v. + lda L0A64,y ; 0A41 B9 64 0A .d. + sta r0L ; 0A44 85 02 .. + lda L0A69,y ; 0A46 B9 69 0A .i. + sta r0H ; 0A49 85 03 .. + pla ; 0A4B 68 h + tay ; 0A4C A8 . + lda L0A66,y ; 0A4D B9 66 0A .f. + sta r1L ; 0A50 85 04 .. + lda L0A6A,y ; 0A52 B9 6A 0A .j. + sta r1H ; 0A55 85 05 .. + lda #$0D ; 0A57 A9 0D .. + sta r2H ; 0A59 85 07 .. + lda #$80 ; 0A5B A9 80 .. + sta r2L ; 0A5D 85 06 .. + lda #$00 ; 0A5F A9 00 .. + sta r3L ; 0A61 85 08 .. + rts ; 0A63 60 ` +; ---------------------------------------------------------------------------- +L0A64: .byte $80 ; 0A64 80 . + brk ; 0A65 00 . +L0A66: .byte $80 ; 0A66 80 . + brk ; 0A67 00 . + .byte $80 ; 0A68 80 . +L0A69: .byte $3C ; 0A69 3C < +L0A6A: lsr ; 0A6A 4A J + .byte $57 ; 0A6B 57 W + adc a3L ; 0A6C 65 72 er + brk ; 0A6E 00 . + .byte $80 ; 0A6F 80 . + brk ; 0A70 00 . + .byte $80 ; 0A71 80 . + .byte $83 ; 0A72 83 . + bcc L0A13 ; 0A73 90 9E .. + .byte $AB ; 0A75 AB . +L0A76: tya ; 0A76 98 . + bpl L0A85 ; 0A77 10 0C .. + cmp #$83 ; 0A79 C9 83 .. + beq L0A81 ; 0A7B F0 04 .. + ldy #$03 ; 0A7D A0 03 .. + bne L0A89 ; 0A7F D0 08 .. +L0A81: ldy #$04 ; 0A81 A0 04 .. + bne L0A89 ; 0A83 D0 04 .. +L0A85: and #$0F ; 0A85 29 0F ). + tay ; 0A87 A8 . + dey ; 0A88 88 . +L0A89: rts ; 0A89 60 ` +; ---------------------------------------------------------------------------- +L0A8A: ldy $212B ; 0A8A AC 2B 21 .+! + lda $8486,y ; 0A8D B9 86 84 ... + and #$0F ; 0A90 29 0F ). + cmp #$03 ; 0A92 C9 03 .. + bcc L0A99 ; 0A94 90 03 .. + jmp L0C8E ; 0A96 4C 8E 0C L.. +; ---------------------------------------------------------------------------- +L0A99: ldy #$00 ; 0A99 A0 00 .. + tya ; 0A9B 98 . +L0A9C: sta curDirHead,y ; 0A9C 99 00 82 ... + iny ; 0A9F C8 . + bne L0A9C ; 0AA0 D0 FA .. + lda #$34 ; 0AA2 A9 34 .4 + sta L0BBB ; 0AA4 8D BB 0B ... + lda #$00 ; 0AA7 A9 00 .. + sta L0B28 ; 0AA9 8D 28 0B .(. + ldy curDrive ; 0AAC AC 89 84 ... + lda $8486,y ; 0AAF B9 86 84 ... + and #$0F ; 0AB2 29 0F ). + ldy #$BD ; 0AB4 A0 BD .. + cmp #$01 ; 0AB6 C9 01 .. + beq L0AC6 ; 0AB8 F0 0C .. + ldy #$00 ; 0ABA A0 00 .. + lda #$37 ; 0ABC A9 37 .7 + sta L0BBB ; 0ABE 8D BB 0B ... + lda #$80 ; 0AC1 A9 80 .. + sta L0B28 ; 0AC3 8D 28 0B .(. +L0AC6: dey ; 0AC6 88 . + lda L0B25,y ; 0AC7 B9 25 0B .%. + sta curDirHead,y ; 0ACA 99 00 82 ... + tya ; 0ACD 98 . + bne L0AC6 ; 0ACE D0 F6 .. + ldy curDrive ; 0AD0 AC 89 84 ... + lda $8486,y ; 0AD3 B9 86 84 ... + and #$0F ; 0AD6 29 0F ). + cmp #$01 ; 0AD8 C9 01 .. + beq L0AF1 ; 0ADA F0 15 .. + ldy #$00 ; 0ADC A0 00 .. + tya ; 0ADE 98 . +L0ADF: sta dir2Head,y ; 0ADF 99 00 89 ... + iny ; 0AE2 C8 . + bne L0ADF ; 0AE3 D0 FA .. + ldy #$69 ; 0AE5 A0 69 .i +L0AE7: dey ; 0AE7 88 . + lda L0C25,y ; 0AE8 B9 25 0C .%. + sta dir2Head,y ; 0AEB 99 00 89 ... + tya ; 0AEE 98 . + bne L0AE7 ; 0AEF D0 F6 .. +L0AF1: jsr PutDirHead ; 0AF1 20 4A C2 J. + jsr L0B1B ; 0AF4 20 1B 0B .. + lda #$FF ; 0AF7 A9 FF .. + sta $8001 ; 0AF9 8D 01 80 ... + lda #$80 ; 0AFC A9 80 .. + sta r4H ; 0AFE 85 0B .. + lda #$00 ; 0B00 A9 00 .. + sta r4L ; 0B02 85 0A .. + lda #$12 ; 0B04 A9 12 .. + sta r1L ; 0B06 85 04 .. + lda #$01 ; 0B08 A9 01 .. + sta r1H ; 0B0A 85 05 .. + jsr PutBlock ; 0B0C 20 E7 C1 .. + inc r1L ; 0B0F E6 04 .. + lda #$08 ; 0B11 A9 08 .. + sta r1H ; 0B13 85 05 .. + jsr PutBlock ; 0B15 20 E7 C1 .. + lda #$00 ; 0B18 A9 00 .. + rts ; 0B1A 60 ` +; ---------------------------------------------------------------------------- +L0B1B: ldy #$00 ; 0B1B A0 00 .. + tya ; 0B1D 98 . +L0B1E: sta diskBlkBuf,y ; 0B1E 99 00 80 ... + dey ; 0B21 88 . + bne L0B1E ; 0B22 D0 FA .. + rts ; 0B24 60 ` +; ---------------------------------------------------------------------------- +L0B25: .byte $12,$01,$41 ; 0B25 12 01 41 ..A +L0B28: .byte $00,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B28 00 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B30 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B38 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B40 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B48 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B50 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B58 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$15,$FF,$FF ; 0B60 1F 15 FF FF 1F 15 FF FF ........ + .byte $1F,$15,$FF,$FF,$1F,$11,$FC,$FF ; 0B68 1F 15 FF FF 1F 11 FC FF ........ + .byte $07,$12,$FF,$FE,$07,$13,$FF,$FF ; 0B70 07 12 FF FE 07 13 FF FF ........ + .byte $07,$13,$FF,$FF,$07,$13,$FF,$FF ; 0B78 07 13 FF FF 07 13 FF FF ........ + .byte $07,$13,$FF,$FF,$07,$13,$FF,$FF ; 0B80 07 13 FF FF 07 13 FF FF ........ + .byte $07,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B88 07 12 FF FF 03 12 FF FF ........ + .byte $03,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B90 03 12 FF FF 03 12 FF FF ........ + .byte $03,$12,$FF,$FF,$03,$12,$FF,$FF ; 0B98 03 12 FF FF 03 12 FF FF ........ + .byte $03,$11,$FF,$FF,$01,$11,$FF,$FF ; 0BA0 03 11 FF FF 01 11 FF FF ........ + .byte $01,$11,$FF,$FF,$01,$11,$FF,$FF ; 0BA8 01 11 FF FF 01 11 FF FF ........ + .byte $01,$11,$FF,$FF ; 0BB0 01 11 FF FF .... +; ---------------------------------------------------------------------------- + .byte $01 ; 0BB4 01 . + .byte "RAM 15" ; 0BB5 52 41 4D 20 31 35 RAM 15 +L0BBB: .byte "71" ; 0BBB 37 31 71 + .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 ; 0BBD A0 A0 A0 A0 A0 A0 A0 A0 ........ + .byte $A0,$A0 ; 0BC5 A0 A0 .. + .byte "RD" ; 0BC7 52 44 RD + .byte $A0 ; 0BC9 A0 . + .byte "2A" ; 0BCA 32 41 2A + .byte $A0,$A0,$A0,$A0,$13,$08 ; 0BCC A0 A0 A0 A0 13 08 ...... + .byte "GEOS format V1.0" ; 0BD2 47 45 4F 53 20 66 6F 72 GEOS for + ; 0BDA 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BE2 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BEA 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BF2 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0BFA 00 00 00 00 00 00 00 00 ........ + .byte $15,$15,$15,$15,$15,$15,$15,$15 ; 0C02 15 15 15 15 15 15 15 15 ........ + .byte $15,$15,$15,$15,$15,$15,$15,$15 ; 0C0A 15 15 15 15 15 15 15 15 ........ + .byte $15,$00,$13,$13,$13,$13,$13,$13 ; 0C12 15 00 13 13 13 13 13 13 ........ + .byte $12,$12,$12,$12,$12,$12,$11,$11 ; 0C1A 12 12 12 12 12 12 11 11 ........ + .byte $11,$11,$11 ; 0C22 11 11 11 ... +L0C25: .byte $FF,$FF,$1F,$FF,$FF,$1F,$FF,$FF ; 0C25 FF FF 1F FF FF 1F FF FF ........ + .byte $1F,$FF,$FF,$1F,$FF,$FF,$1F,$FF ; 0C2D 1F FF FF 1F FF FF 1F FF ........ + .byte $FF,$1F,$FF,$FF,$1F,$FF,$FF,$1F ; 0C35 FF 1F FF FF 1F FF FF 1F ........ + .byte $FF,$FF,$1F,$FF,$FF,$1F,$FF,$FF ; 0C3D FF FF 1F FF FF 1F FF FF ........ + .byte $1F,$FF,$FF,$1F,$FF,$FF,$1F,$FF ; 0C45 1F FF FF 1F FF FF 1F FF ........ + .byte $FF,$1F,$FF,$FF,$1F,$FF,$FF,$1F ; 0C4D FF 1F FF FF 1F FF FF 1F ........ + .byte $FF,$FF,$1F,$00,$00,$00,$FF,$FF ; 0C55 FF FF 1F 00 00 00 FF FF ........ + .byte $07,$FF,$FF,$07,$FF,$FF,$07,$FF ; 0C5D 07 FF FF 07 FF FF 07 FF ........ + .byte $FF,$07,$FF,$FF,$07,$FF,$FF,$07 ; 0C65 FF 07 FF FF 07 FF FF 07 ........ + .byte $FF,$FF,$03,$FF,$FF,$03,$FF,$FF ; 0C6D FF FF 03 FF FF 03 FF FF ........ + .byte $03,$FF,$FF,$03,$FF,$FF,$03,$FF ; 0C75 03 FF FF 03 FF FF 03 FF ........ + .byte $FF,$03,$FF,$FF,$01,$FF,$FF,$01 ; 0C7D FF 03 FF FF 01 FF FF 01 ........ + .byte $FF,$FF,$01,$FF,$FF,$01,$FF,$FF ; 0C85 FF FF 01 FF FF 01 FF FF ........ + .byte $01 ; 0C8D 01 . +; ---------------------------------------------------------------------------- +L0C8E: ldy #$00 ; 0C8E A0 00 .. + tya ; 0C90 98 . +L0C91: sta curDirHead,y ; 0C91 99 00 82 ... + iny ; 0C94 C8 . + bne L0C91 ; 0C95 D0 FA .. + lda #$28 ; 0C97 A9 28 .( + sta curDirHead ; 0C99 8D 00 82 ... + lda #$03 ; 0C9C A9 03 .. + sta $8201 ; 0C9E 8D 01 82 ... + lda #$44 ; 0CA1 A9 44 .D + sta $8202 ; 0CA3 8D 02 82 ... + ldy #$2D ; 0CA6 A0 2D .- +L0CA8: lda L0D36,y ; 0CA8 B9 36 0D .6. + sta $8290,y ; 0CAB 99 90 82 ... + dey ; 0CAE 88 . + bpl L0CA8 ; 0CAF 10 F7 .. + lda #$28 ; 0CB1 A9 28 .( + sta r1L ; 0CB3 85 04 .. + lda #$00 ; 0CB5 A9 00 .. + sta r1H ; 0CB7 85 05 .. + lda #$82 ; 0CB9 A9 82 .. + sta r4H ; 0CBB 85 0B .. + lda #$00 ; 0CBD A9 00 .. + sta r4L ; 0CBF 85 0A .. + jsr PutBlock ; 0CC1 20 E7 C1 .. + ldy #$00 ; 0CC4 A0 00 .. +L0CC6: lda L0D64,y ; 0CC6 B9 64 0D .d. + sta dir2Head,y ; 0CC9 99 00 89 ... + iny ; 0CCC C8 . + bne L0CC6 ; 0CCD D0 F7 .. + lda #$28 ; 0CCF A9 28 .( + sta r1L ; 0CD1 85 04 .. + lda #$01 ; 0CD3 A9 01 .. + sta r1H ; 0CD5 85 05 .. + lda #$89 ; 0CD7 A9 89 .. + sta r4H ; 0CD9 85 0B .. + lda #$00 ; 0CDB A9 00 .. + sta r4L ; 0CDD 85 0A .. + jsr PutBlock ; 0CDF 20 E7 C1 .. + lda #$FF ; 0CE2 A9 FF .. + sta $8901 ; 0CE4 8D 01 89 ... + lda #$00 ; 0CE7 A9 00 .. + sta dir2Head ; 0CE9 8D 00 89 ... + lda #$28 ; 0CEC A9 28 .( + sta $89FA ; 0CEE 8D FA 89 ... + lda #$FF ; 0CF1 A9 FF .. + sta $89FB ; 0CF3 8D FB 89 ... + lda #$FF ; 0CF6 A9 FF .. + sta $89FD ; 0CF8 8D FD 89 ... + lda #$28 ; 0CFB A9 28 .( + sta r1L ; 0CFD 85 04 .. + lda #$02 ; 0CFF A9 02 .. + sta r1H ; 0D01 85 05 .. + lda #$89 ; 0D03 A9 89 .. + sta r4H ; 0D05 85 0B .. + lda #$00 ; 0D07 A9 00 .. + sta r4L ; 0D09 85 0A .. + jsr PutBlock ; 0D0B 20 E7 C1 .. + jsr GetDirHead ; 0D0E 20 47 C2 G. + jsr L0B1B ; 0D11 20 1B 0B .. + lda #$FF ; 0D14 A9 FF .. + sta $8001 ; 0D16 8D 01 80 ... + lda #$80 ; 0D19 A9 80 .. + sta r4H ; 0D1B 85 0B .. + lda #$00 ; 0D1D A9 00 .. + sta r4L ; 0D1F 85 0A .. + lda #$28 ; 0D21 A9 28 .( + sta r1L ; 0D23 85 04 .. + lda #$03 ; 0D25 A9 03 .. + sta r1H ; 0D27 85 05 .. + jsr PutBlock ; 0D29 20 E7 C1 .. + lda #$13 ; 0D2C A9 13 .. + sta r1H ; 0D2E 85 05 .. + jsr PutBlock ; 0D30 20 E7 C1 .. + lda #$00 ; 0D33 A9 00 .. + rts ; 0D35 60 ` +; ---------------------------------------------------------------------------- +L0D36: .byte "RAM 1581" ; 0D36 52 41 4D 20 31 35 38 31 RAM 1581 + .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 ; 0D3E A0 A0 A0 A0 A0 A0 A0 A0 ........ + .byte $A0,$A0 ; 0D46 A0 A0 .. + .byte "RD" ; 0D48 52 44 RD + .byte $A0 ; 0D4A A0 . + .byte "3D" ; 0D4B 33 44 3D + .byte $A0,$A0,$00,$00 ; 0D4D A0 A0 00 00 .... + .byte "(" ; 0D51 28 ( + .byte $13 ; 0D52 13 . + .byte "GEOS format V1.0" ; 0D53 47 45 4F 53 20 66 6F 72 GEOS for + ; 0D5B 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 0D63 00 . +L0D64: .byte "(" ; 0D64 28 ( + .byte $02 ; 0D65 02 . + .byte "D" ; 0D66 44 D + .byte $BB ; 0D67 BB . + .byte "EA" ; 0D68 45 41 EA + .byte $C0,$00,$00,$00,$00,$00,$00,$00 ; 0D6A C0 00 00 00 00 00 00 00 ........ + .byte $00,$00 ; 0D72 00 00 .. + .byte "(" ; 0D74 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D75 FF FF FF FF FF ..... + .byte "(" ; 0D7A 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D7B FF FF FF FF FF ..... + .byte "(" ; 0D80 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D81 FF FF FF FF FF ..... + .byte "(" ; 0D86 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D87 FF FF FF FF FF ..... + .byte "(" ; 0D8C 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D8D FF FF FF FF FF ..... + .byte "(" ; 0D92 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D93 FF FF FF FF FF ..... + .byte "(" ; 0D98 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D99 FF FF FF FF FF ..... + .byte "(" ; 0D9E 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0D9F FF FF FF FF FF ..... + .byte "(" ; 0DA4 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DA5 FF FF FF FF FF ..... + .byte "(" ; 0DAA 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DAB FF FF FF FF FF ..... + .byte "(" ; 0DB0 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DB1 FF FF FF FF FF ..... + .byte "(" ; 0DB6 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DB7 FF FF FF FF FF ..... + .byte "(" ; 0DBC 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DBD FF FF FF FF FF ..... + .byte "(" ; 0DC2 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DC3 FF FF FF FF FF ..... + .byte "(" ; 0DC8 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DC9 FF FF FF FF FF ..... + .byte "(" ; 0DCE 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DCF FF FF FF FF FF ..... + .byte "(" ; 0DD4 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DD5 FF FF FF FF FF ..... + .byte "(" ; 0DDA 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DDB FF FF FF FF FF ..... + .byte "(" ; 0DE0 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DE1 FF FF FF FF FF ..... + .byte "(" ; 0DE6 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DE7 FF FF FF FF FF ..... + .byte "(" ; 0DEC 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DED FF FF FF FF FF ..... + .byte "(" ; 0DF2 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DF3 FF FF FF FF FF ..... + .byte "(" ; 0DF8 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DF9 FF FF FF FF FF ..... + .byte "(" ; 0DFE 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0DFF FF FF FF FF FF ..... + .byte "(" ; 0E04 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E05 FF FF FF FF FF ..... + .byte "(" ; 0E0A 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E0B FF FF FF FF FF ..... + .byte "(" ; 0E10 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E11 FF FF FF FF FF ..... + .byte "(" ; 0E16 28 ( + .byte $FF,$FF ; 0E17 FF FF FF FF FF ..... +L0E19: .byte $FF,$FF,$FF + .byte "(" ; 0E1C 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E1D FF FF FF FF FF ..... + .byte "(" ; 0E22 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E23 FF FF FF FF FF ..... + .byte "(" ; 0E28 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E29 FF FF FF FF FF ..... + .byte "(" ; 0E2E 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E2F FF FF FF FF FF ..... + .byte "(" ; 0E34 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E35 FF FF FF FF FF ..... + .byte "(" ; 0E3A 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E3B FF FF FF FF FF ..... + .byte "(" ; 0E40 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E41 FF FF FF FF FF ..... + .byte "(" ; 0E46 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E47 FF FF FF FF FF ..... + .byte "(" ; 0E4C 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E4D FF FF FF FF FF ..... + .byte "(" ; 0E52 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E53 FF FF FF FF FF ..... + .byte "(" ; 0E58 28 ( + .byte $FF,$FF,$FF,$FF,$FF ; 0E59 FF FF FF FF FF ..... + .byte "#" ; 0E5E 23 # + .byte $F0,$FF,$F7,$FF,$FF ; 0E5F F0 FF F7 FF FF ..... +; ---------------------------------------------------------------------------- +L0E64: lda #$E5 ; 0E64 A9 E5 .. + sta r0H ; 0E66 85 03 .. + lda #$80 ; 0E68 A9 80 .. + sta r0L ; 0E6A 85 02 .. + jsr L0EA0 ; 0E6C 20 A0 0E .. + cpx #$00 ; 0E6F E0 00 .. + bne L0E82 ; 0E71 D0 0F .. + cmp #$00 ; 0E73 C9 00 .. + bne L0E82 ; 0E75 D0 0B .. + lda #$A6 ; 0E77 A9 A6 .. + sta r0H ; 0E79 85 03 .. + lda #$C0 ; 0E7B A9 C0 .. + sta r0L ; 0E7D 85 02 .. + jsr L0EA0 ; 0E7F 20 A0 0E .. +L0E82: cpx #$00 ; 0E82 E0 00 .. + bne L0E9D ; 0E84 D0 17 .. + tax ; 0E86 AA . + lda #$01 ; 0E87 A9 01 .. + cpx #$41 ; 0E89 E0 41 .A + beq L0E9F ; 0E8B F0 12 .. + lda #$02 ; 0E8D A9 02 .. + cpx #$71 ; 0E8F E0 71 .q + beq L0E9F ; 0E91 F0 0C .. + lda #$03 ; 0E93 A9 03 .. + ldx #$81 ; 0E95 A2 81 .. + bne L0E9F ; 0E97 D0 06 .. + lda #$FF ; 0E99 A9 FF .. + bne L0E9F ; 0E9B D0 02 .. +L0E9D: lda #$00 ; 0E9D A9 00 .. +L0E9F: rts ; 0E9F 60 ` +; ---------------------------------------------------------------------------- +L0EA0: jsr L0EF5 ; 0EA0 20 F5 0E .. + lda #$01 ; 0EA3 A9 01 .. + sta r2H ; 0EA5 85 07 .. + lda #$00 ; 0EA7 A9 00 .. + sta r2L ; 0EA9 85 06 .. +L0EAB: jsr L0F05 ; 0EAB 20 05 0F .. + cpx #$00 ; 0EAE E0 00 .. + bne L0EF4 ; 0EB0 D0 42 .B + cmp #$31 ; 0EB2 C9 31 .1 + bne L0EE4 ; 0EB4 D0 2E .. + jsr L0F05 ; 0EB6 20 05 0F .. + cmp #$35 ; 0EB9 C9 35 .5 + bne L0EE4 ; 0EBB D0 27 .' + jsr L0F05 ; 0EBD 20 05 0F .. + sta r1L ; 0EC0 85 04 .. + and #$70 ; 0EC2 29 70 )p + cmp #$30 ; 0EC4 C9 30 .0 + bne L0EE4 ; 0EC6 D0 1C .. + lda r1L ; 0EC8 A5 04 .. + asl ; 0ECA 0A . + asl ; 0ECB 0A . + asl ; 0ECC 0A . + asl ; 0ECD 0A . + sta r1L ; 0ECE 85 04 .. + jsr L0F05 ; 0ED0 20 05 0F .. + sta r1H ; 0ED3 85 05 .. + and #$70 ; 0ED5 29 70 )p + cmp #$30 ; 0ED7 C9 30 .0 + bne L0EE4 ; 0ED9 D0 09 .. + lda r1H ; 0EDB A5 05 .. + and #$0F ; 0EDD 29 0F ). + ora r1L ; 0EDF 05 04 .. + ldx #$00 ; 0EE1 A2 00 .. + rts ; 0EE3 60 ` +; ---------------------------------------------------------------------------- +L0EE4: lda r2L ; 0EE4 A5 06 .. + bne L0EEA ; 0EE6 D0 02 .. + dec r2H ; 0EE8 C6 07 .. +L0EEA: dec r2L ; 0EEA C6 06 .. + lda r2L ; 0EEC A5 06 .. + ora r2H ; 0EEE 05 07 .. + bne L0EAB ; 0EF0 D0 B9 .. + ldx #$00 ; 0EF2 A2 00 .. +L0EF4: rts ; 0EF4 60 ` +; ---------------------------------------------------------------------------- +L0EF5: lda r0H ; 0EF5 A5 03 .. + sta L0F72 ; 0EF7 8D 72 0F .r. + lda r0L ; 0EFA A5 02 .. + sta L0F71 ; 0EFC 8D 71 0F .q. + lda #$20 ; 0EFF A9 20 . + sta $2109 ; 0F01 8D 09 21 ..! + rts ; 0F04 60 ` +; ---------------------------------------------------------------------------- +L0F05: ldy $2109 ; 0F05 AC 09 21 ..! + cpy #$20 ; 0F08 C0 20 . + bcs L0F15 ; 0F0A B0 09 .. + lda $210A,y ; 0F0C B9 0A 21 ..! + inc $2109 ; 0F0F EE 09 21 ..! + ldx #$00 ; 0F12 A2 00 .. + rts ; 0F14 60 ` +; ---------------------------------------------------------------------------- +L0F15: jsr InitForIO ; 0F15 20 5C C2 \. + lda #$0F ; 0F18 A9 0F .. + sta r0H ; 0F1A 85 03 .. + lda #$6E ; 0F1C A9 6E .n + sta r0L ; 0F1E 85 02 .. + jsr L0F74 ; 0F20 20 74 0F t. + beq L0F29 ; 0F23 F0 04 .. + jsr DoneWithIO ; 0F25 20 5F C2 _. + rts ; 0F28 60 ` +; ---------------------------------------------------------------------------- +L0F29: jsr UNLSN ; 0F29 20 AE FF .. + lda curDrive ; 0F2C AD 89 84 ... + jsr TALK ; 0F2F 20 B4 FF .. + lda #$FF ; 0F32 A9 FF .. + jsr TKSA ; 0F34 20 96 FF .. + ldy #$00 ; 0F37 A0 00 .. +L0F39: jsr ACPTR ; 0F39 20 A5 FF .. + sta $210A,y ; 0F3C 99 0A 21 ..! + iny ; 0F3F C8 . + cpy #$20 ; 0F40 C0 20 . + bcc L0F39 ; 0F42 90 F5 .. + jsr UNTLK ; 0F44 20 AB FF .. + lda curDrive ; 0F47 AD 89 84 ... + jsr LISTEN ; 0F4A 20 B1 FF .. + lda #$EF ; 0F4D A9 EF .. + jsr SECOND ; 0F4F 20 93 FF .. + jsr UNLSN ; 0F52 20 AE FF .. + jsr DoneWithIO ; 0F55 20 5F C2 _. + lda #$00 ; 0F58 A9 00 .. + sta $2109 ; 0F5A 8D 09 21 ..! + clc ; 0F5D 18 . + lda #$20 ; 0F5E A9 20 . + adc L0F71 ; 0F60 6D 71 0F mq. + sta L0F71 ; 0F63 8D 71 0F .q. + bcc L0F6B ; 0F66 90 03 .. + inc L0F72 ; 0F68 EE 72 0F .r. +L0F6B: clv ; 0F6B B8 . + bvc L0F05 ; 0F6C 50 97 P. + eor $522D ; 0F6E 4D 2D 52 M-R +L0F71: brk ; 0F71 00 . +L0F72: brk ; 0F72 00 . + .byte $20 ; 0F73 20 +L0F74: lda #$00 ; 0F74 A9 00 .. + sta STATUS ; 0F76 85 90 .. + lda curDrive ; 0F78 AD 89 84 ... + jsr LISTEN ; 0F7B 20 B1 FF .. + bit STATUS ; 0F7E 24 90 $. + bmi L0F9A ; 0F80 30 18 0. + lda #$FF ; 0F82 A9 FF .. + jsr SECOND ; 0F84 20 93 FF .. + bit STATUS ; 0F87 24 90 $. + bmi L0F9A ; 0F89 30 0F 0. + ldy #$00 ; 0F8B A0 00 .. +L0F8D: lda (r0L),y ; 0F8D B1 02 .. + jsr CIOUT ; 0F8F 20 A8 FF .. + iny ; 0F92 C8 . + cpy #$06 ; 0F93 C0 06 .. + bcc L0F8D ; 0F95 90 F6 .. + ldx #$00 ; 0F97 A2 00 .. + rts ; 0F99 60 ` +; ---------------------------------------------------------------------------- +L0F9A: jsr UNLSN ; 0F9A 20 AE FF .. + ldx #$0D ; 0F9D A2 0D .. + rts ; 0F9F 60 ` +; ---------------------------------------------------------------------------- +L0FA0: lda #$00 ; 0FA0 A9 00 .. + sta NUMDRV ; 0FA2 8D 8D 84 ... + ldy #$01 ; 0FA5 A0 01 .. +L0FA7: lda driveType,y ; 0FA7 B9 8E 84 ... + beq L0FAF ; 0FAA F0 03 .. + inc NUMDRV ; 0FAC EE 8D 84 ... +L0FAF: dey ; 0FAF 88 . + bpl L0FA7 ; 0FB0 10 F5 .. + rts ; 0FB2 60 ` +; ---------------------------------------------------------------------------- +L0FB3: jsr InitForIO ; 0FB3 20 5C C2 \. + lda #$00 ; 0FB6 A9 00 .. + sta ramExpSize ; 0FB8 8D C3 88 ... + lda #$02 ; 0FBB A9 02 .. + sta $2102 ; 0FBD 8D 02 21 ..! + ;rts + lda EXP_BASE ; 0FC0 AD 00 DF ... + and #$10 ; 0FC3 29 10 ). + beq L0FCC ; 0FC5 F0 05 .. + lda #$20 ; 0FC7 A9 20 . + sta $2102 ; 0FC9 8D 02 21 ..! +L0FCC: lda EXP_BASE ; 0FCC AD 00 DF ... + and #$E0 ; 0FCF 29 E0 ). + bne L100D ; 0FD1 D0 3A .: + lda #$55 ; 0FD3 A9 55 .U + sta $DF02 ; 0FD5 8D 02 DF ... + cmp $DF02 ; 0FD8 CD 02 DF ... + bne L100D ; 0FDB D0 30 .0 + lda #$AA ; 0FDD A9 AA .. + sta $DF02 ; 0FDF 8D 02 DF ... + ldy #$00 ; 0FE2 A0 00 .. +L0FE4: dey ; 0FE4 88 . + bne L0FE4 ; 0FE5 D0 FD .. + cmp $DF02 ; 0FE7 CD 02 DF ... + bne L100D ; 0FEA D0 21 .! + lda #$01 ; 0FEC A9 01 .. + sta ramExpSize ; 0FEE 8D C3 88 ... + lda #$00 ; 0FF1 A9 00 .. + sta r3L ; 0FF3 85 08 .. +L0FF5: jsr L1010 ; 0FF5 20 10 10 .. + bcc L100A ; 0FF8 90 10 .. + lda ramExpSize ; 0FFA AD C3 88 ... + cmp $2102 ; 0FFD CD 02 21 ..! + beq L100D ; 1000 F0 0B .. + inc ramExpSize ; 1002 EE C3 88 ... + inc r3L ; 1005 E6 08 .. + clv ; 1007 B8 . + bvc L0FF5 ; 1008 50 EB P. +L100A: dec ramExpSize ; 100A CE C3 88 ... +L100D: jmp DoneWithIO ; 100D 4C 5F C2 L_. +; ---------------------------------------------------------------------------- + ;*=$1010 +L1010: lda #$20 ; 1010 A9 20 . + sta r0H ; 1012 85 03 .. + lda #$FA ; 1014 A9 FA .. + sta r0L ; 1016 85 02 .. + lda #$00 ; 1018 A9 00 .. + sta r1L ; 101A 85 04 .. + sta r1H ; 101C 85 05 .. + lda #$00 ; 101E A9 00 .. + sta r2H ; 1020 85 07 .. + lda #$08 ; 1022 A9 08 .. + sta r2L ; 1024 85 06 .. + jsr FetchRAM ; 1026 20 CB C2 .. + lda #$10 ; 1029 A9 10 .. + sta r0H ; 102B 85 03 .. + lda #$79 ; 102D A9 79 .y + sta r0L ; 102F 85 02 .. + jsr StashRAM ; 1031 20 C8 C2 .. + lda #$20 ; 1034 A9 20 . + sta r0H ; 1036 85 03 .. + lda #$EA ; 1038 A9 EA .. + sta r0L ; 103A 85 02 .. + jsr FetchRAM ; 103C 20 CB C2 .. + lda r3L ; 103F A5 08 .. + pha ; 1041 48 H + lda #$00 ; 1042 A9 00 .. + sta r3L ; 1044 85 08 .. + lda #$20 ; 1046 A9 20 . + sta r0H ; 1048 85 03 .. + lda #$F2 ; 104A A9 F2 .. + sta r0L ; 104C 85 02 .. + jsr FetchRAM ; 104E 20 CB C2 .. + pla ; 1051 68 h + sta r3L ; 1052 85 08 .. + lda #$20 ; 1054 A9 20 . + sta r0H ; 1056 85 03 .. + lda #$FA ; 1058 A9 FA .. + sta r0L ; 105A 85 02 .. + jsr StashRAM ; 105C 20 C8 C2 .. + ldy #$07 ; 105F A0 07 .. +L1061: lda L1079,y ; 1061 B9 79 10 .y. + cmp $20EA,y ; 1064 D9 EA 20 .. + bne L1077 ; 1067 D0 0E .. + ldx r3L ; 1069 A6 08 .. + beq L1072 ; 106B F0 05 .. + cmp $20F2,y ; 106D D9 F2 20 .. + beq L1077 ; 1070 F0 05 .. +L1072: dey ; 1072 88 . + bpl L1061 ; 1073 10 EC .. + sec ; 1075 38 8 + rts ; 1076 60 ` +; ---------------------------------------------------------------------------- +L1077: clc ; 1077 18 . + rts ; 1078 60 ` +; ---------------------------------------------------------------------------- +L1079: .byte "RAMCheck" ; 1079 52 41 4D 43 68 65 63 6B RAMCheck +; ---------------------------------------------------------------------------- +L1081: lda sysRAMFlg ; 1081 AD C4 88 ... + and #$20 ; 1084 29 20 ) + beq L1094 ; 1086 F0 0C .. + lda $2104 ; 1088 AD 04 21 ..! + jsr L073E ; 108B 20 3E 07 >. + jsr L1095 ; 108E 20 95 10 .. + jsr L1145 ; 1091 20 45 11 E. +L1094: rts ; 1094 60 ` +; ---------------------------------------------------------------------------- +L1095: jsr L113A ; 1095 20 3A 11 :. + lda #$84 ; 1098 A9 84 .. + sta r0H ; 109A 85 03 .. + lda #$79 ; 109C A9 79 .y + sta r1H ; 109E 85 05 .. + lda #$05 ; 10A0 A9 05 .. + sta r2H ; 10A2 85 07 .. + jsr StashRAM ; 10A4 20 C8 C2 .. + bit sysRAMFlg ; 10A7 2C C4 88 ,.. + bvs L10C2 ; 10AA 70 16 p. + jsr L113A ; 10AC 20 3A 11 :. + lda #$90 ; 10AF A9 90 .. + sta r0H ; 10B1 85 03 .. + lda #$83 ; 10B3 A9 83 .. + sta r1H ; 10B5 85 05 .. + lda #$0D ; 10B7 A9 0D .. + sta r2H ; 10B9 85 07 .. + lda #$80 ; 10BB A9 80 .. + sta r2L ; 10BD 85 06 .. + jsr StashRAM ; 10BF 20 C8 C2 .. +L10C2: jsr L113A ; 10C2 20 3A 11 :. + lda #$80 ; 10C5 A9 80 .. + sta r0L ; 10C7 85 02 .. + sta r2L ; 10C9 85 06 .. + lda #$9D ; 10CB A9 9D .. + sta r0H ; 10CD 85 03 .. + lda #$B9 ; 10CF A9 B9 .. + sta r1H ; 10D1 85 05 .. + lda #$00 ; 10D3 A9 00 .. + sta r3L ; 10D5 85 08 .. + lda #$02 ; 10D7 A9 02 .. + sta r2H ; 10D9 85 07 .. + jsr StashRAM ; 10DB 20 C8 C2 .. + jsr L113A ; 10DE 20 3A 11 :. + lda #$BF ; 10E1 A9 BF .. + sta r0H ; 10E3 85 03 .. + lda #$40 ; 10E5 A9 40 .@ + sta r0L ; 10E7 85 02 .. + lda #$BB ; 10E9 A9 BB .. + sta r1H ; 10EB 85 05 .. + lda #$80 ; 10ED A9 80 .. + sta r1L ; 10EF 85 04 .. + lda #$10 ; 10F1 A9 10 .. + sta r2H ; 10F3 85 07 .. + lda #$C0 ; 10F5 A9 C0 .. + sta r2L ; 10F7 85 06 .. + jsr StashRAM ; 10F9 20 C8 C2 .. + lda #$30 ; 10FC A9 30 .0 + sta r4L ; 10FE 85 0A .. + lda #$D0 ; 1100 A9 D0 .. + sta r5H ; 1102 85 0D .. + lda #$00 ; 1104 A9 00 .. + sta r5L ; 1106 85 0C .. + lda #$80 ; 1108 A9 80 .. + sta r0H ; 110A 85 03 .. + lda #$00 ; 110C A9 00 .. + sta r0L ; 110E 85 02 .. + lda #$CC ; 1110 A9 CC .. + sta r1H ; 1112 85 05 .. + lda #$40 ; 1114 A9 40 .@ + sta r1L ; 1116 85 04 .. + lda #$01 ; 1118 A9 01 .. + sta r2H ; 111A 85 07 .. + lda #$00 ; 111C A9 00 .. + sta r2L ; 111E 85 06 .. + lda #$00 ; 1120 A9 00 .. + sta r3L ; 1122 85 08 .. +L1124: ldy #$00 ; 1124 A0 00 .. +L1126: lda (r5L),y ; 1126 B1 0C .. + sta diskBlkBuf,y ; 1128 99 00 80 ... + iny ; 112B C8 . + bne L1126 ; 112C D0 F8 .. + jsr StashRAM ; 112E 20 C8 C2 .. + inc r5H ; 1131 E6 0D .. + inc r1H ; 1133 E6 05 .. + dec r4L ; 1135 C6 0A .. + bne L1124 ; 1137 D0 EB .. + rts ; 1139 60 ` +; ---------------------------------------------------------------------------- +L113A: lda #$00 ; 113A A9 00 .. + sta r0L ; 113C 85 02 .. + sta r1L ; 113E 85 04 .. + sta r2L ; 1140 85 06 .. + sta r3L ; 1142 85 08 .. + rts ; 1144 60 ` +; ---------------------------------------------------------------------------- +L1145: jsr L113A ; 1145 20 3A 11 :. + lda #$7E ; 1148 A9 7E .~ + sta r1H ; 114A 85 05 .. + lda #$05 ; 114C A9 05 .. + sta r2H ; 114E 85 07 .. + lda #$11 ; 1150 A9 11 .. + sta r0H ; 1152 85 03 .. + lda #$5B ; 1154 A9 5B .[ + sta r0L ; 1156 85 02 .. + jmp StashRAM ; 1158 4C C8 C2 L.. +; ---------------------------------------------------------------------------- + sei ; 115B 78 x + cld ; 115C D8 . + ldx #$FF ; 115D A2 FF .. + txs ; 115F 9A . + lda #$30 ; 1160 A9 30 .0 + sta CPU_DATA ; 1162 85 01 .. + lda #$90 ; 1164 A9 90 .. + sta r0H ; 1166 85 03 .. + lda #$00 ; 1168 A9 00 .. + sta r0L ; 116A 85 02 .. + lda #$83 ; 116C A9 83 .. + sta r1H ; 116E 85 05 .. + lda #$00 ; 1170 A9 00 .. + sta r1L ; 1172 85 04 .. + lda #$0D ; 1174 A9 0D .. + sta r2H ; 1176 85 07 .. + lda #$80 ; 1178 A9 80 .. + sta r2L ; 117A 85 06 .. + jsr L6216 ; 117C 20 16 62 .b + lda #$9D ; 117F A9 9D .. + sta r0H ; 1181 85 03 .. + lda #$80 ; 1183 A9 80 .. + sta r0L ; 1185 85 02 .. + lda #$B9 ; 1187 A9 B9 .. + sta r1H ; 1189 85 05 .. + lda #$00 ; 118B A9 00 .. + sta r1L ; 118D 85 04 .. + lda #$02 ; 118F A9 02 .. + sta r2H ; 1191 85 07 .. + lda #$80 ; 1193 A9 80 .. + sta r2L ; 1195 85 06 .. + jsr L6216 ; 1197 20 16 62 .b + lda #$BF ; 119A A9 BF .. + sta r0H ; 119C 85 03 .. + lda #$40 ; 119E A9 40 .@ + sta r0L ; 11A0 85 02 .. + lda #$BB ; 11A2 A9 BB .. + sta r1H ; 11A4 85 05 .. + lda #$80 ; 11A6 A9 80 .. + sta r1L ; 11A8 85 04 .. + lda #$00 ; 11AA A9 00 .. + sta r2H ; 11AC 85 07 .. + lda #$C0 ; 11AE A9 C0 .. + sta r2L ; 11B0 85 06 .. + jsr L6216 ; 11B2 20 16 62 .b + lda #$C0 ; 11B5 A9 C0 .. + sta r0H ; 11B7 85 03 .. + lda #$80 ; 11B9 A9 80 .. + sta r0L ; 11BB 85 02 .. + lda #$BC ; 11BD A9 BC .. + sta r1H ; 11BF 85 05 .. + lda #$C0 ; 11C1 A9 C0 .. + sta r1L ; 11C3 85 04 .. + lda #$0F ; 11C5 A9 0F .. + sta r2H ; 11C7 85 07 .. + lda #$80 ; 11C9 A9 80 .. + sta r2L ; 11CB 85 06 .. + jsr L6216 ; 11CD 20 16 62 .b + lda #$30 ; 11D0 A9 30 .0 + sta r4L ; 11D2 85 0A .. + lda #$D0 ; 11D4 A9 D0 .. + sta r5H ; 11D6 85 0D .. + lda #$00 ; 11D8 A9 00 .. + sta r5L ; 11DA 85 0C .. + lda #$80 ; 11DC A9 80 .. + sta r0H ; 11DE 85 03 .. + lda #$00 ; 11E0 A9 00 .. + sta r0L ; 11E2 85 02 .. + lda #$CC ; 11E4 A9 CC .. + sta r1H ; 11E6 85 05 .. + lda #$40 ; 11E8 A9 40 .@ + sta r1L ; 11EA 85 04 .. + lda #$01 ; 11EC A9 01 .. + sta r2H ; 11EE 85 07 .. + lda #$00 ; 11F0 A9 00 .. + sta r2L ; 11F2 85 06 .. +L11F4: jsr L6216 ; 11F4 20 16 62 .b + ldy #$00 ; 11F7 A0 00 .. +L11F9: lda diskBlkBuf,y ; 11F9 B9 00 80 ... + sta (r5L),y ; 11FC 91 0C .. + iny ; 11FE C8 . + bne L11F9 ; 11FF D0 F8 .. + inc r5H ; 1201 E6 0D .. + inc r1H ; 1203 E6 05 .. + dec r4L ; 1205 C6 0A .. + bne L11F4 ; 1207 D0 EB .. + jsr i_FillRam ; 1209 20 B4 C1 .. + brk ; 120C 00 . + ora CPU_DDR ; 120D 05 00 .. + sty CPU_DDR ; 120F 84 00 .. + lda #$00 ; 1211 A9 00 .. + sta r0L ; 1213 85 02 .. + lda #$A0 ; 1215 A9 A0 .. + sta r0H ; 1217 85 03 .. + ldx #$7D ; 1219 A2 7D .} +L121B: ldy #$3F ; 121B A0 3F .? +L121D: lda #$55 ; 121D A9 55 .U + sta (r0L),y ; 121F 91 02 .. + dey ; 1221 88 . + lda #$AA ; 1222 A9 AA .. + sta (r0L),y ; 1224 91 02 .. + dey ; 1226 88 . + bpl L121D ; 1227 10 F4 .. + lda r0L ; 1229 A5 02 .. + clc ; 122B 18 . + adc #$40 ; 122C 69 40 i@ + sta r0L ; 122E 85 02 .. + bcc L1234 ; 1230 90 02 .. + inc r0H ; 1232 E6 03 .. +L1234: dex ; 1234 CA . + bne L121B ; 1235 D0 E4 .. + jsr FirstInit ; 1237 20 71 C2 q. + lda #$FF ; 123A A9 FF .. + sta firstBoot ; 123C 8D C5 88 ... + jsr MOUSE_BASE ; 123F 20 80 FE .. + lda #$88 ; 1242 A9 88 .. + sta r0H ; 1244 85 03 .. + lda #$C3 ; 1246 A9 C3 .. + sta r0L ; 1248 85 02 .. + lda #$7D ; 124A A9 7D .} + sta r1H ; 124C 85 05 .. + lda #$C3 ; 124E A9 C3 .. + sta r1L ; 1250 85 04 .. + lda #$00 ; 1252 A9 00 .. + sta r2H ; 1254 85 07 .. + lda #$02 ; 1256 A9 02 .. + sta r2L ; 1258 85 06 .. + jsr L6216 ; 125A 20 16 62 .b + lda sysFlgCopy ; 125D AD 12 C0 ... + sta sysRAMFlg ; 1260 8D C4 88 ... + lda #$85 ; 1263 A9 85 .. + sta r0H ; 1265 85 03 .. + lda #$16 ; 1267 A9 16 .. + sta r0L ; 1269 85 02 .. + lda #$7A ; 126B A9 7A .z + sta r1H ; 126D 85 05 .. + lda #$16 ; 126F A9 16 .. + sta r1L ; 1271 85 04 .. + lda #$00 ; 1273 A9 00 .. + sta r2H ; 1275 85 07 .. + lda #$03 ; 1277 A9 03 .. + sta r2L ; 1279 85 06 .. + lda #$00 ; 127B A9 00 .. + sta r3L ; 127D 85 08 .. + jsr FetchRAM ; 127F 20 CB C2 .. + lda $DC08 ; 1282 AD 08 DC ... + sta $DC08 ; 1285 8D 08 DC ... + lda #$84 ; 1288 A9 84 .. + sta r0H ; 128A 85 03 .. + lda #$8E ; 128C A9 8E .. + sta r0L ; 128E 85 02 .. + lda #$79 ; 1290 A9 79 .y + sta r1H ; 1292 85 05 .. + lda #$8E ; 1294 A9 8E .. + sta r1L ; 1296 85 04 .. + lda #$00 ; 1298 A9 00 .. + sta r2H ; 129A 85 07 .. + lda #$04 ; 129C A9 04 .. + sta r2L ; 129E 85 06 .. + jsr FetchRAM ; 12A0 20 CB C2 .. + lda #$88 ; 12A3 A9 88 .. + sta r0H ; 12A5 85 03 .. + lda #$C7 ; 12A7 A9 C7 .. + sta r0L ; 12A9 85 02 .. + lda #$7D ; 12AB A9 7D .} + sta r1H ; 12AD 85 05 .. + lda #$C7 ; 12AF A9 C7 .. + sta r1L ; 12B1 85 04 .. + lda #$00 ; 12B3 A9 00 .. + sta r2H ; 12B5 85 07 .. + lda #$04 ; 12B7 A9 04 .. + sta r2L ; 12B9 85 06 .. + jsr FetchRAM ; 12BB 20 CB C2 .. + lda #$84 ; 12BE A9 84 .. + sta r0H ; 12C0 85 03 .. + lda #$65 ; 12C2 A9 65 .e + sta r0L ; 12C4 85 02 .. + lda #$79 ; 12C6 A9 79 .y + sta r1H ; 12C8 85 05 .. + lda #$65 ; 12CA A9 65 .e + sta r1L ; 12CC 85 04 .. + lda #$00 ; 12CE A9 00 .. + sta r2H ; 12D0 85 07 .. + lda #$11 ; 12D2 A9 11 .. + sta r2L ; 12D4 85 06 .. + jsr FetchRAM ; 12D6 20 CB C2 .. + lda #$88 ; 12D9 A9 88 .. + sta r0H ; 12DB 85 03 .. + lda #$CB ; 12DD A9 CB .. + sta r0L ; 12DF 85 02 .. + lda #$7D ; 12E1 A9 7D .} + sta r1H ; 12E3 85 05 .. + lda #$CB ; 12E5 A9 CB .. + sta r1L ; 12E7 85 04 .. + lda #$00 ; 12E9 A9 00 .. + sta r2H ; 12EB 85 07 .. + lda #$11 ; 12ED A9 11 .. + sta r2L ; 12EF 85 06 .. + jsr FetchRAM ; 12F1 20 CB C2 .. + lda #$84 ; 12F4 A9 84 .. + sta r0H ; 12F6 85 03 .. + lda #$89 ; 12F8 A9 89 .. + sta r0L ; 12FA 85 02 .. + lda #$79 ; 12FC A9 79 .y + sta r1H ; 12FE 85 05 .. + lda #$89 ; 1300 A9 89 .. + sta r1L ; 1302 85 04 .. + lda #$00 ; 1304 A9 00 .. + sta r2H ; 1306 85 07 .. + lda #$01 ; 1308 A9 01 .. + sta r2L ; 130A 85 06 .. + jsr FetchRAM ; 130C 20 CB C2 .. + jsr InitForIO ; 130F 20 5C C2 \. + lda #$04 ; 1312 A9 04 .. + sta r0L ; 1314 85 02 .. +L1316: ldy #$00 ; 1316 A0 00 .. + ldx #$00 ; 1318 A2 00 .. +L131A: dey ; 131A 88 . + bne L131A ; 131B D0 FD .. + dex ; 131D CA . + bne L131A ; 131E D0 FA .. + dec r0L ; 1320 C6 02 .. + bne L1316 ; 1322 D0 F2 .. + jsr DoneWithIO ; 1324 20 5F C2 _. + lda curDrive ; 1327 AD 89 84 ... + pha ; 132A 48 H + lda #$0B ; 132B A9 0B .. + sta curDrive ; 132D 8D 89 84 ... + sta curDevice ; 1330 85 BA .. + lda #$00 ; 1332 A9 00 .. + sta NUMDRV ; 1334 8D 8D 84 ... + sta curDevice ; 1337 85 BA .. + lda #$08 ; 1339 A9 08 .. + sta interleave ; 133B 8D 8C 84 ... + jsr SetDevice ; 133E 20 B0 C2 .. + lda #$08 ; 1341 A9 08 .. + sta $2103 ; 1343 8D 03 21 ..! +L1346: ldy $2103 ; 1346 AC 03 21 ..! + lda $8486,y ; 1349 B9 86 84 ... + beq L135E ; 134C F0 10 .. + cpy #$0A ; 134E C0 0A .. + bcs L1355 ; 1350 B0 03 .. + inc NUMDRV ; 1352 EE 8D 84 ... +L1355: lda $2103 ; 1355 AD 03 21 ..! + jsr SetDevice ; 1358 20 B0 C2 .. + jsr NewDisk ; 135B 20 E1 C1 .. +L135E: inc $2103 ; 135E EE 03 21 ..! + lda $2103 ; 1361 AD 03 21 ..! + cmp #$0C ; 1364 C9 0C .. + bcc L1346 ; 1366 90 DE .. + beq L1346 ; 1368 F0 DC .. + pla ; 136A 68 h + jsr SetDevice ; 136B 20 B0 C2 .. + jmp EnterDeskTop ; 136E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + ;*=$1371 + ;jmp FetchRAM + ldy #$91 ; 1371 A0 91 .. + ldx CPU_DATA ; 1373 A6 01 .. + lda #$35 ; 1375 A9 35 .5 + sta CPU_DATA ; 1377 85 01 .. + lda r0H ; 1379 A5 03 .. + sta $DF03 ; 137B 8D 03 DF ... + lda r0L ; 137E A5 02 .. + sta $DF02 ; 1380 8D 02 DF ... + lda r1H ; 1383 A5 05 .. + sta $DF05 ; 1385 8D 05 DF ... + lda r1L ; 1388 A5 04 .. + sta $DF04 ; 138A 8D 04 DF ... + lda #$00 ; 138D A9 00 .. + sta $DF06 ; 138F 8D 06 DF ... + lda r2H ; 1392 A5 07 .. + sta $DF08 ; 1394 8D 08 DF ... + lda r2L ; 1397 A5 06 .. + sta $DF07 ; 1399 8D 07 DF ... + lda #$00 ; 139C A9 00 .. + sta $DF09 ; 139E 8D 09 DF ... + sta $DF0A ; 13A1 8D 0A DF ... + sty $DF01 ; 13A4 8C 01 DF ... +L13A7: lda EXP_BASE ; 13A7 AD 00 DF ... + and #$60 ; 13AA 29 60 )` + beq L13A7 ; 13AC F0 F9 .. + stx CPU_DATA ; 13AE 86 01 .. + rts ; 13B0 60 ` +; ---------------------------------------------------------------------------- + ;*=$13b1 +; .byte $A2 ; 13B1 A2 . + +ModStart: + +.export __MODSTART__ := ModStart diff --git a/configure/r1.s b/configure/r1.s new file mode 100644 index 00000000..301ec0d6 --- /dev/null +++ b/configure/r1.s @@ -0,0 +1,1633 @@ +; da65 V2.13.2 - (C) Copyright 2000-2009, Ullrich von Bassewitz +; Created: 2010-05-27 22:22:16 +; Input file: configure.cvt.record.1 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" + + +.segment "OVERLAY1" + + ;!cpu 6502 + ;!to "r1.bin",plain + ;!sl "r1.labels" + ;!source "inc/labels.inc" + ;!source "inc/r0.inc" + ;*=$13b1 + ;!zone r1 +; ---------------------------------------------------------------------------- + +; fix! +;L043E = $043E; fix! +;L0616 = $0616; fix! +;L0672 = $0672; fix! +;L0739 = $0739; fix! +;L073E = $073E; fix! +;L0911 = $0911; fix! +;L0E19 = $0E19; fix! +;L0FA0 = $0FA0; fix! +;L0FB3 = $0FB3; fix! + +.import L043E +.import L0616 +.import L0672 +.import L0739 +.import L073E +.import L0911 +.import L0E19 +.import L0FA0 +.import L0FB3 + +L6819 = $6819 + +; ---------------------------------------------------------------------------- + adc #$C4 ; 13B1 69 C4 i. + ldy CPU_DDR,x ; 13B3 B4 00 .. + rol CPU_DATA,x ; 13B5 36 01 6. + sta TURBO_DD00_CPY ; 13B7 85 8F .. + asl $3001,x ; 13B9 1E 01 30 ..0 + ora ($A1,x) ; 13BC 01 A1 .. + .byte $AB ; 13BE AB . + asl $3001,x ; 13BF 1E 01 30 ..0 + ora (r2H,x) ; 13C2 01 07 .. + .byte $62 ; 13C4 62 b + asl SCREEN_BASE,x ; 13C5 1E 00 A0 ... + brk ; 13C8 00 . + .byte $07 ; 13C9 07 . + .byte $62 ; 13CA 62 b + ldy CPU_DDR,x ; 13CB B4 00 .. + rol CPU_DATA,x ; 13CD 36 01 6. + adc #$C4 ; 13CF 69 C4 i. + asl SCREEN_BASE,x ; 13D1 1E 00 A0 ... + brk ; 13D4 00 . + .byte $17 ; 13D5 17 . + and ($88,x) ; 13D6 21 88 !. + brk ; 13D8 00 . + txs ; 13D9 9A . + brk ; 13DA 00 . + .byte $23 ; 13DB 23 # + ;and $0088 ; 13DC 2D 88 00 -.. + .byte $2d + .byte $88 + .byte $00 + txs ; 13DF 9A . + brk ; 13E0 00 . + .byte $2F ; 13E1 2F / + ;and $0088,y ; 13E2 39 88 00 9.. + .byte $39 + .byte $88 + .byte $00 + + txs ; 13E5 9A . + brk ; 13E6 00 . + .byte $3B ; 13E7 3B ; + eor $88 ; 13E8 45 88 E. + brk ; 13EA 00 . + txs ; 13EB 9A . + brk ; 13EC 00 . + .byte $47 ; 13ED 47 G + eor ($88),y ; 13EE 51 88 Q. + brk ; 13F0 00 . + txs ; 13F1 9A . + brk ; 13F2 00 . + .byte $53 ; 13F3 53 S + ;eor $0088,x ; 13F4 5D 88 00 ].. + .byte $5d + .byte $88 + .byte $00 + txs ; 13F7 9A . + brk ; 13F8 00 . + .byte $17 ; 13F9 17 . + and (r14L,x) ; 13FA 21 1E !. + ora (mouseOn,x) ; 13FC 01 30 .0 + ora ($23,x) ; 13FE 01 23 .# + and $011E ; 1400 2D 1E 01 -.. + bmi L1406 ; 1403 30 01 0. + .byte $2F ; 1405 2F / +L1406: and $011E,y ; 1406 39 1E 01 9.. + bmi L140C ; 1409 30 01 0. + .byte $3B ; 140B 3B ; +L140C: eor r14L ; 140C 45 1E E. + ora (mouseOn,x) ; 140E 01 30 .0 + ora ($47,x) ; 1410 01 47 .G + eor (r14L),y ; 1412 51 1E Q. + ora (mouseOn,x) ; 1414 01 30 .0 + ora ($53,x) ; 1416 01 53 .S + eor $011E,x ; 1418 5D 1E 01 ].. + bmi L141E ; 141B 30 01 0. + .byte $79 ; 141D 79 y +L141E: .byte $83 ; 141E 83 . + dey ; 141F 88 . + brk ; 1420 00 . + txs ; 1421 9A . + brk ; 1422 00 . + sta TURBO_DD00_CPY ; 1423 85 8F .. + dey ; 1425 88 . + brk ; 1426 00 . + txs ; 1427 9A . + brk ; 1428 00 . + sta ($9B),y ; 1429 91 9B .. + dey ; 142B 88 . + brk ; 142C 00 . + txs ; 142D 9A . + brk ; 142E 00 . + sta $88A7,x ; 142F 9D A7 88 ... + brk ; 1432 00 . + txs ; 1433 9A . + brk ; 1434 00 . + lda #$B3 ; 1435 A9 B3 .. + dey ; 1437 88 . + brk ; 1438 00 . + txs ; 1439 9A . + brk ; 143A 00 . + lda $BF,x ; 143B B5 BF .. + dey ; 143D 88 . + brk ; 143E 00 . + txs ; 143F 9A . + brk ; 1440 00 . +L1441: lda #$13 ; 1441 A9 13 .. + sta r0H ; 1443 85 03 .. + lda #$B1 ; 1445 A9 B1 .. + sta r0L ; 1447 85 02 .. + cpy #$00 ; 1449 C0 00 .. + beq L145B ; 144B F0 0E .. +L144D: clc ; 144D 18 . + lda #$06 ; 144E A9 06 .. + adc r0L ; 1450 65 02 e. + sta r0L ; 1452 85 02 .. + bcc L1458 ; 1454 90 02 .. + inc r0H ; 1456 E6 03 .. +L1458: dey ; 1458 88 . + bne L144D ; 1459 D0 F2 .. +L145B: ldy #$05 ; 145B A0 05 .. +L145D: lda (r0L),y ; 145D B1 02 .. + sta r2L,y ; 145F 99 06 00 ... + dey ; 1462 88 . + bpl L145D ; 1463 10 F8 .. + rts ; 1465 60 ` +; ---------------------------------------------------------------------------- + lda version ; 1466 AD 0F C0 ... + cmp #$13 ; 1469 C9 13 .. + bcc L1472 ; 146B 90 05 .. + bit c128Flag ; 146D 2C 13 C0 ,.. + bpl L147F ; 1470 10 0D .. +L1472: jsr CloseRecordFile ; 1472 20 77 C2 w. + ldx #$15 ; 1475 A2 15 .. + lda #$42 ; 1477 A9 42 .B + jsr L2022 ; 1479 20 22 20 " +L147C: jmp EnterDeskTop ; 147C 4C 2C C2 L,. +; ---------------------------------------------------------------------------- +L147F: lda #$80 ; 147F A9 80 .. + sta dispBufferOn ; 1481 85 2F ./ + lda curDrive ; 1483 AD 89 84 ... + sta $2104 ; 1486 8D 04 21 ..! + tay ; 1489 A8 . + lda $8486,y ; 148A B9 86 84 ... + sta $2105 ; 148D 8D 05 21 ..! + jsr L0FB3 ; check for reu ; 1490 20 B3 0F .. + lda #$01 ; 1493 A9 01 .. + sta NUMDRV ; 1495 8D 8D 84 ... + jsr L14FC ; 1498 20 FC 14 .. + txa ; 149B 8A . + bne L147C ; 149C D0 DE .. + lda sysRAMFlg ; 149E AD C4 88 ... + sta $040A ; 14A1 8D 0A 04 ... + ldy #$03 ; 14A4 A0 03 .. +L14A6: lda driveType,y ; 14A6 B9 8E 84 ... + sta $0406,y ; 14A9 99 06 04 ... + dey ; 14AC 88 . + bpl L14A6 ; 14AD 10 F7 .. + jsr L0FA0 ; 14AF 20 A0 0F .. + jsr i_GraphicsString ; 14B2 20 A8 C1 .. + ora r0L ; 14B5 05 02 .. + ora (CPU_DDR,x) ; 14B7 01 00 .. + brk ; 14B9 00 . + brk ; 14BA 00 . + .byte $03 ; 14BB 03 . + .byte $3F ; 14BC 3F ? + ora ($C7,x) ; 14BD 01 C7 .. + brk ; 14BF 00 . + lda #$14 ; 14C0 A9 14 .. + sta r0H ; 14C2 85 03 .. + lda #$F0 ; 14C4 A9 F0 .. + sta r0L ; 14C6 85 02 .. + jsr DoIcons ; 14C8 20 5A C1 Z. + lda #$1A ; 14CB A9 1A .. + sta r0H ; 14CD 85 03 .. + lda #$21 ; 14CF A9 21 .! + sta r0L ; 14D1 85 02 .. + lda #$00 ; 14D3 A9 00 .. + jsr DoMenu ; 14D5 20 51 C1 Q. + jsr L1590 ; 14D8 20 90 15 .. + lda #$17 ; 14DB A9 17 .. + sta $84AA ; 14DD 8D AA 84 ... + lda #$E4 ; 14E0 A9 E4 .. + sta otherPressVec ; 14E2 8D A9 84 ... + lda #$20 ; 14E5 A9 20 . + sta $84B2 ; 14E7 8D B2 84 ... + lda #$54 ; 14EA A9 54 .T + sta RecoverVector ; 14EC 8D B1 84 ... + rts ; 14EF 60 ` +; ---------------------------------------------------------------------------- + ora (r1H,x) ; 14F0 01 05 .. + brk ; 14F2 00 . + ora CPU_DDR ; 14F3 05 00 .. + brk ; 14F5 00 . + .byte $27 ; 14F6 27 ' + brk ; 14F7 00 . + ora (CPU_DATA,x) ; 14F8 01 01 .. + brk ; 14FA 00 . + brk ; 14FB 00 . +L14FC: jsr L0616 ; 14FC 20 16 06 .. + lda ramExpSize ; 14FF AD C3 88 ... + beq L1518 ; 1502 F0 14 .. + lda curDrive ; 1504 AD 89 84 ... + eor #$01 ; 1507 49 01 I. + tay ; 1509 A8 . + lda $8486,y ; 150A B9 86 84 ... + beq L1518 ; 150D F0 09 .. + jsr L0739 ; 150F 20 39 07 9. + jsr L0616 ; 1512 20 16 06 .. + jsr L0739 ; 1515 20 39 07 9. +L1518: lda #$01 ; 1518 A9 01 .. + jsr L0672 ; 151A 20 72 06 r. + bne L1541 ; 151D D0 22 ." + lda #$02 ; 151F A9 02 .. + jsr L0672 ; 1521 20 72 06 r. + bne L1541 ; 1524 D0 1B .. + lda #$03 ; 1526 A9 03 .. + jsr L0672 ; 1528 20 72 06 r. + bne L1541 ; 152B D0 14 .. + lda ramExpSize ; 152D AD C3 88 ... + beq L153E ; 1530 F0 0C .. + lda #$81 ; 1532 A9 81 .. + jsr L0672 ; 1534 20 72 06 r. + lda #$83 ; 1537 A9 83 .. + jsr L0672 ; 1539 20 72 06 r. + bne L1541 ; 153C D0 03 .. +L153E: jsr CloseRecordFile ; 153E 20 77 C2 w. +L1541: rts ; 1541 60 ` +; ---------------------------------------------------------------------------- + sta (r4H,x) ; 1542 81 0B .. + .byte $0C ; 1544 0C . + jsr L1551 ; 1545 20 51 15 Q. + .byte $0B ; 1548 0B . + .byte $0C ; 1549 0C . + bmi L15BC ; 154A 30 70 0p + ora CPU_DATA,x ; 154C 15 01 .. + ora ($48,x) ; 154E 01 48 .H + brk ; 1550 00 . +L1551: clc ; 1551 18 . + .byte $22 ; 1552 22 " + .byte "CONFIGURE" ; 1553 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 155B 45 E + .byte $22 ; 155C 22 " + .byte " is not applicable" ; 155D 20 69 73 20 6E 6F 74 20 is not + ; 1565 61 70 70 6C 69 63 61 62 applicab + ; 156D 6C 65 le + .byte $00,$18 ; 156F 00 18 .. + .byte "to this version of GEOS KERNAL"; 1571 74 6F 20 74 68 69 73 20 to this + ; 1579 76 65 72 73 69 6F 6E 20 version + ; 1581 6F 66 20 47 45 4F 53 20 of GEOS + ; 1589 4B 45 52 4E 41 4C KERNAL + .byte $00 ; 158F 00 . +; ---------------------------------------------------------------------------- +L1590: jsr L16A2 ; 1590 20 A2 16 .. + jsr L16CC ; 1593 20 CC 16 .. + lda ramExpSize ; 1596 AD C3 88 ... + beq L159E ; 1599 F0 03 .. + jsr L16F6 ; 159B 20 F6 16 .. +L159E: ldy #$00 ; 159E A0 00 .. + jsr L15AA ; 15A0 20 AA 15 .. + jsr L1752 ; 15A3 20 52 17 R. + jsr ExitTurbo ; 15A6 20 32 C2 2. + rts ; 15A9 60 ` +; ---------------------------------------------------------------------------- +L15AA: jsr L1441 ; 15AA 20 41 14 A. + lda #$00 ; 15AD A9 00 .. + jsr SetPattern ; 15AF 20 39 C1 9. + jsr Rectangle ; 15B2 20 24 C1 $. + lda #$FF ; 15B5 A9 FF .. + jsr FrameRectangle ; 15B7 20 27 C1 '. + inc r2H ; 15BA E6 07 .. +L15BC: inc r4L ; 15BC E6 0A .. + bne L15C2 ; 15BE D0 02 .. + inc r4H ; 15C0 E6 0B .. +L15C2: lda #$FF ; 15C2 A9 FF .. + jsr FrameRectangle ; 15C4 20 27 C1 '. + dec r2H ; 15C7 C6 07 .. + ldx #$0A ; 15C9 A2 0A .. + jsr Ddec ; 15CB 20 75 C1 u. + rts ; 15CE 60 ` +; ---------------------------------------------------------------------------- +L15CF: pha ; 15CF 48 H + jsr L1441 ; 15D0 20 41 14 A. + pla ; 15D3 68 h + jsr SetPattern ; 15D4 20 39 C1 9. + jsr Rectangle ; 15D7 20 24 C1 $. + lda #$FF ; 15DA A9 FF .. + jmp FrameRectangle ; 15DC 4C 27 C1 L'. +; ---------------------------------------------------------------------------- +L15DF: lda $212E ; 15DF AD 2E 21 ..! + sta r15H ; 15E2 85 21 .! + lda $212D ; 15E4 AD 2D 21 .-! + sta r15L ; 15E7 85 20 . + ldy #$00 ; 15E9 A0 00 .. + lda (r15L),y ; 15EB B1 20 . + sta $212B ; 15ED 8D 2B 21 .+! + jsr L073E ; 15F0 20 3E 07 >. + ldy $212B ; 15F3 AC 2B 21 .+! + lda $8486,y ; 15F6 B9 86 84 ... + sta $212C ; 15F9 8D 2C 21 .,! + jmp L161C ; 15FC 4C 1C 16 L.. +; ---------------------------------------------------------------------------- +L15FF: lda $212E ; 15FF AD 2E 21 ..! + sta r15H ; 1602 85 21 .! + lda $212D ; 1604 AD 2D 21 .-! + sta r15L ; 1607 85 20 . + ldy #$00 ; 1609 A0 00 .. + lda (r15L),y ; 160B B1 20 . + sta $212B ; 160D 8D 2B 21 .+! + jsr L073E ; 1610 20 3E 07 >. + ldy $212B ; 1613 AC 2B 21 .+! + lda $8486,y ; 1616 B9 86 84 ... + sta $212C ; 1619 8D 2C 21 .,! +L161C: ldy #$01 ; 161C A0 01 .. + lda (r15L),y ; 161E B1 20 . + sta $212A ; 1620 8D 2A 21 .*! +L1623: clc ; 1623 18 . + lda #$02 ; 1624 A9 02 .. + adc r15L ; 1626 65 20 e + sta r15L ; 1628 85 20 . + bcc L162E ; 162A 90 02 .. + inc r15H ; 162C E6 21 .! +L162E: ldy #$00 ; 162E A0 00 .. + lda (r15L),y ; 1630 B1 20 . + sta r13L ; 1632 85 1C .. + iny ; 1634 C8 . + lda (r15L),y ; 1635 B1 20 . + sta r13H ; 1637 85 1D .. + beq L165D ; 1639 F0 22 ." + ldy $212A ; 163B AC 2A 21 .*! + jsr L1441 ; 163E 20 41 14 A. + jsr IsMseInRegion ; 1641 20 B3 C2 .. + beq L1657 ; 1644 F0 11 .. + ldy #$03 ; 1646 A0 03 .. + lda (r13L),y ; 1648 B1 1C .. + sta r0L ; 164A 85 02 .. + iny ; 164C C8 . + lda (r13L),y ; 164D B1 1C .. + sta r0H ; 164F 85 03 .. + jsr L165E ; 1651 20 5E 16 ^. + clv ; 1654 B8 . + bvc L165D ; 1655 50 06 P. +L1657: inc $212A ; 1657 EE 2A 21 .*! + clv ; 165A B8 . + bvc L1623 ; 165B 50 C6 P. +L165D: rts ; 165D 60 ` +; ---------------------------------------------------------------------------- +L165E: jmp (r0L) ; 165E 6C 02 00 l.. +; ---------------------------------------------------------------------------- + clc ; 1661 18 . + .byte "Drive A" ; 1662 44 72 69 76 65 20 41 Drive A + .byte $00,$18 ; 1669 00 18 .. + .byte "Drive B" ; 166B 44 72 69 76 65 20 42 Drive B + .byte $00,$18 ; 1672 00 18 .. + .byte "Drive C" ; 1674 44 72 69 76 65 20 43 Drive C + .byte $00 ; 167B 00 . +; ---------------------------------------------------------------------------- +L167C: ldy #$03 ; 167C A0 03 .. + jsr L1720 ; 167E 20 20 17 . + ldy #$04 ; 1681 A0 04 .. + jsr L1720 ; 1683 20 20 17 . + lda ramExpSize ; 1686 AD C3 88 ... + beq L1690 ; 1689 F0 05 .. + ldy #$05 ; 168B A0 05 .. + jsr L1720 ; 168D 20 20 17 . +L1690: jsr L16BE ; 1690 20 BE 16 .. + jsr L16E8 ; 1693 20 E8 16 .. + lda ramExpSize ; 1696 AD C3 88 ... + beq L169E ; 1699 F0 03 .. + jsr L1712 ; 169B 20 12 17 .. +L169E: jsr ExitTurbo ; 169E 20 32 C2 2. + rts ; 16A1 60 ` +; ---------------------------------------------------------------------------- +L16A2: ldy #$03 ; 16A2 A0 03 .. + jsr L15AA ; 16A4 20 AA 15 .. + lda #$16 ; 16A7 A9 16 .. + sta r0H ; 16A9 85 03 .. + lda #$61 ; 16AB A9 61 .a + sta r0L ; 16AD 85 02 .. + lda #$13 ; 16AF A9 13 .. + sta r1H ; 16B1 85 05 .. + lda #$00 ; 16B3 A9 00 .. + sta r11H ; 16B5 85 19 .. + lda #$4F ; 16B7 A9 4F .O + sta r11L ; 16B9 85 18 .. + jsr PutString ; 16BB 20 48 C1 H. +L16BE: lda #$1B ; 16BE A9 1B .. + sta $212E ; 16C0 8D 2E 21 ..! + lda #$79 ; 16C3 A9 79 .y + sta $212D ; 16C5 8D 2D 21 .-! + jsr L1A74 ; 16C8 20 74 1A t. + rts ; 16CB 60 ` +; ---------------------------------------------------------------------------- +L16CC: ldy #$04 ; 16CC A0 04 .. + jsr L15AA ; 16CE 20 AA 15 .. + lda #$16 ; 16D1 A9 16 .. + sta r0H ; 16D3 85 03 .. + lda #$6A ; 16D5 A9 6A .j + sta r0L ; 16D7 85 02 .. + lda #$13 ; 16D9 A9 13 .. + sta r1H ; 16DB 85 05 .. + lda #$00 ; 16DD A9 00 .. + sta r11H ; 16DF 85 19 .. + lda #$E5 ; 16E1 A9 E5 .. + sta r11L ; 16E3 85 18 .. + jsr PutString ; 16E5 20 48 C1 H. +L16E8: lda #$1B ; 16E8 A9 1B .. + sta $212E ; 16EA 8D 2E 21 ..! + lda #$89 ; 16ED A9 89 .. + sta $212D ; 16EF 8D 2D 21 .-! + jsr L1A74 ; 16F2 20 74 1A t. + rts ; 16F5 60 ` +; ---------------------------------------------------------------------------- +L16F6: ldy #$05 ; 16F6 A0 05 .. + jsr L15AA ; 16F8 20 AA 15 .. + lda #$16 ; 16FB A9 16 .. + sta r0H ; 16FD 85 03 .. + lda #$73 ; 16FF A9 73 .s + sta r0L ; 1701 85 02 .. + lda #$75 ; 1703 A9 75 .u + sta r1H ; 1705 85 05 .. + lda #$00 ; 1707 A9 00 .. + sta r11H ; 1709 85 19 .. + lda #$4F ; 170B A9 4F .O + sta r11L ; 170D 85 18 .. + jsr PutString ; 170F 20 48 C1 H. +L1712: lda #$1B ; 1712 A9 1B .. + sta $212E ; 1714 8D 2E 21 ..! + lda #$99 ; 1717 A9 99 .. + sta $212D ; 1719 8D 2D 21 .-! + jsr L1A74 ; 171C 20 74 1A t. + rts ; 171F 60 ` +; ---------------------------------------------------------------------------- +L1720: jsr L1441 ; 1720 20 41 14 A. + clc ; 1723 18 . + lda #$02 ; 1724 A9 02 .. + adc r3L ; 1726 65 08 e. + sta r3L ; 1728 85 08 .. + bcc L172E ; 172A 90 02 .. + inc r3H ; 172C E6 09 .. +L172E: sec ; 172E 38 8 + lda r4L ; 172F A5 0A .. + sbc #$02 ; 1731 E9 02 .. + sta r4L ; 1733 85 0A .. + lda r4H ; 1735 A5 0B .. + sbc #$00 ; 1737 E9 00 .. + sta r4H ; 1739 85 0B .. + lda r2L ; 173B A5 06 .. + clc ; 173D 18 . + adc #$0F ; 173E 69 0F i. + sta r2L ; 1740 85 06 .. + lda r2H ; 1742 A5 07 .. + sec ; 1744 38 8 + sbc #$02 ; 1745 E9 02 .. + sta r2H ; 1747 85 07 .. + lda #$00 ; 1749 A9 00 .. + jsr SetPattern ; 174B 20 39 C1 9. + jsr Rectangle ; 174E 20 24 C1 $. + rts ; 1751 60 ` +; ---------------------------------------------------------------------------- +L1752: jsr L1873 ; 1752 20 73 18 s. + lda ramExpSize ; 1755 AD C3 88 ... + beq L1760 ; 1758 F0 06 .. + jsr L1761 ; 175A 20 61 17 a. + jsr L17B2 ; 175D 20 B2 17 .. +L1760: rts ; 1760 60 ` +; ---------------------------------------------------------------------------- +L1761: lda #$17 ; 1761 A9 17 .. + sta r0H ; 1763 85 03 .. + lda #$9E ; 1765 A9 9E .. + sta r0L ; 1767 85 02 .. + lda #$A4 ; 1769 A9 A4 .. + sta r1H ; 176B 85 05 .. + lda #$00 ; 176D A9 00 .. + sta r11H ; 176F 85 19 .. + lda #$BE ; 1771 A9 BE .. + sta r11L ; 1773 85 18 .. + jsr PutString ; 1775 20 48 C1 H. + lda #$17 ; 1778 A9 17 .. + sta r0H ; 177A 85 03 .. + lda #$A7 ; 177C A9 A7 .. + sta r0L ; 177E 85 02 .. + lda #$B2 ; 1780 A9 B2 .. + sta r1H ; 1782 85 05 .. + lda #$00 ; 1784 A9 00 .. + sta r11H ; 1786 85 19 .. + lda #$BE ; 1788 A9 BE .. + sta r11L ; 178A 85 18 .. + jsr PutString ; 178C 20 48 C1 H. +L178F: lda sysRAMFlg ; 178F AD C4 88 ... + and #$80 ; 1792 29 80 ). + beq L1798 ; 1794 F0 02 .. + lda #$02 ; 1796 A9 02 .. +L1798: ldy #$01 ; 1798 A0 01 .. + jsr L15CF ; 179A 20 CF 15 .. + rts ; 179D 60 ` +; ---------------------------------------------------------------------------- + clc ; 179E 18 . + .byte "DMA for" ; 179F 44 4D 41 20 66 6F 72 DMA for + .byte $00,$22 ; 17A6 00 22 ." + .byte "MoveData" ; 17A8 4D 6F 76 65 44 61 74 61 MoveData + .byte $22,$00 ; 17B0 22 00 ". +L17B2: .byte $A9 ; 17B2 A9 . +; ---------------------------------------------------------------------------- + .byte $17 ; 17B3 17 . + sta r0H ; 17B4 85 03 .. + lda #$D8 ; 17B6 A9 D8 .. + sta r0L ; 17B8 85 02 .. + lda #$8D ; 17BA A9 8D .. + sta r1H ; 17BC 85 05 .. + lda #$00 ; 17BE A9 00 .. + sta r11H ; 17C0 85 19 .. + lda #$BE ; 17C2 A9 BE .. + sta r11L ; 17C4 85 18 .. + jsr PutString ; 17C6 20 48 C1 H. +L17C9: lda sysRAMFlg ; 17C9 AD C4 88 ... + and #$20 ; 17CC 29 20 ) + beq L17D2 ; 17CE F0 02 .. + lda #$02 ; 17D0 A9 02 .. +L17D2: ldy #$02 ; 17D2 A0 02 .. + jsr L15CF ; 17D4 20 CF 15 .. + rts ; 17D7 60 ` +; ---------------------------------------------------------------------------- + .byte $18 ; 17D8 18 . + .byte "RAM Reboot" ; 17D9 52 41 4D 20 52 65 62 6F RAM Rebo + ; 17E1 6F 74 ot + .byte $00 ; 17E3 00 . +; ---------------------------------------------------------------------------- + lda mouseData ; 17E4 AD 05 85 ... + bpl L17EA ; 17E7 10 01 .. + rts ; 17E9 60 ` +; ---------------------------------------------------------------------------- +L17EA: lda #$00 ; 17EA A9 00 .. + sta L180C ; 17EC 8D 0C 18 ... + jsr L1837 ; 17EF 20 37 18 7. + jsr L180D ; 17F2 20 0D 18 .. + jsr L181B ; 17F5 20 1B 18 .. + lda ramExpSize ; 17F8 AD C3 88 ... + beq L1800 ; 17FB F0 03 .. + jsr L1829 ; 17FD 20 29 18 ). +L1800: lda L180C ; 1800 AD 0C 18 ... + beq L180B ; 1803 F0 06 .. + jsr L0FA0 ; 1805 20 A0 0F .. + jsr L167C ; 1808 20 7C 16 |. +L180B: rts ; 180B 60 ` +; ---------------------------------------------------------------------------- +L180C: brk ; 180C 00 . +L180D: lda #$1B ; 180D A9 1B .. + sta $212E ; 180F 8D 2E 21 ..! + lda #$79 ; 1812 A9 79 .y + sta $212D ; 1814 8D 2D 21 .-! + jsr L15FF ; 1817 20 FF 15 .. + rts ; 181A 60 ` +; ---------------------------------------------------------------------------- +L181B: lda #$1B ; 181B A9 1B .. + sta $212E ; 181D 8D 2E 21 ..! + lda #$89 ; 1820 A9 89 .. + sta $212D ; 1822 8D 2D 21 .-! + jsr L15FF ; 1825 20 FF 15 .. + rts ; 1828 60 ` +; ---------------------------------------------------------------------------- +L1829: lda #$1B ; 1829 A9 1B .. + sta $212E ; 182B 8D 2E 21 ..! + lda #$99 ; 182E A9 99 .. + sta $212D ; 1830 8D 2D 21 .-! + jsr L15DF ; 1833 20 DF 15 .. + rts ; 1836 60 ` +; ---------------------------------------------------------------------------- +L1837: lda ramExpSize ; 1837 AD C3 88 ... + beq L1872 ; 183A F0 36 .6 + ldy #$01 ; 183C A0 01 .. + jsr L1441 ; 183E 20 41 14 A. + jsr IsMseInRegion ; 1841 20 B3 C2 .. + beq L1857 ; 1844 F0 11 .. + lda sysRAMFlg ; 1846 AD C4 88 ... + eor #$80 ; 1849 49 80 I. + sta sysRAMFlg ; 184B 8D C4 88 ... + sta sysFlgCopy ; 184E 8D 12 C0 ... + sta $040A ; 1851 8D 0A 04 ... + jmp L178F ; 1854 4C 8F 17 L.. +; ---------------------------------------------------------------------------- +L1857: ldy #$02 ; 1857 A0 02 .. + jsr L1441 ; 1859 20 41 14 A. + jsr IsMseInRegion ; 185C 20 B3 C2 .. + beq L1872 ; 185F F0 11 .. + lda sysRAMFlg ; 1861 AD C4 88 ... + eor #$20 ; 1864 49 20 I + sta sysRAMFlg ; 1866 8D C4 88 ... + sta sysFlgCopy ; 1869 8D 12 C0 ... + sta $040A ; 186C 8D 0A 04 ... + jmp L17C9 ; 186F 4C C9 17 L.. +; ---------------------------------------------------------------------------- +L1872: rts ; 1872 60 ` +; ---------------------------------------------------------------------------- +L1873: lda #$18 ; 1873 A9 18 .. + sta r0H ; 1875 85 03 .. + lda #$A5 ; 1877 A9 A5 .. + sta r0L ; 1879 85 02 .. + lda #$75 ; 187B A9 75 .u + sta r1H ; 187D 85 05 .. + lda #$00 ; 187F A9 00 .. + sta r11H ; 1881 85 19 .. + lda #$BE ; 1883 A9 BE .. + sta r11L ; 1885 85 18 .. + jsr PutString ; 1887 20 48 C1 H. + lda ramExpSize ; 188A AD C3 88 ... + sta r0L ; 188D 85 02 .. + lda #$40 ; 188F A9 40 .@ + sta r2L ; 1891 85 06 .. + ldx #$02 ; 1893 A2 02 .. + ldy #$06 ; 1895 A0 06 .. + jsr BBMult ; 1897 20 60 C1 `. + lda #$C0 ; 189A A9 C0 .. + jsr PutDecimal ; 189C 20 84 C1 .. + lda #$4B ; 189F A9 4B .K + jsr PutChar ; 18A1 20 45 C1 E. + rts ; 18A4 60 ` +; ---------------------------------------------------------------------------- + .byte $18 ; 18A5 18 . + .byte "RAM expansion: " ; 18A6 52 41 4D 20 65 78 70 61 RAM expa + ; 18AE 6E 73 69 6F 6E 3A 20 nsion: + .byte $00 ; 18B5 00 . +; ---------------------------------------------------------------------------- + jsr DoPreviousMenu ; 18B6 20 90 C1 .. + lda driveType ; 18B9 AD 8E 84 ... + beq L18C0 ; 18BC F0 02 .. + bpl L18C8 ; 18BE 10 08 .. +L18C0: lda $848F ; 18C0 AD 8F 84 ... + beq L18C7 ; 18C3 F0 02 .. + bpl L18C8 ; 18C5 10 01 .. +L18C7: rts ; 18C7 60 ` +; ---------------------------------------------------------------------------- +L18C8: ldy $2104 ; 18C8 AC 04 21 ..! + lda $8486,y ; 18CB B9 86 84 ... + bne L18D6 ; 18CE D0 06 .. + tya ; 18D0 98 . + eor #$01 ; 18D1 49 01 I. + sta $2104 ; 18D3 8D 04 21 ..! +L18D6: jmp L043E ; 18D6 4C 3E 04 L>. +; ---------------------------------------------------------------------------- + ldx #$18 ; 18D9 A2 18 .. + lda #$E0 ; 18DB A9 E0 .. + jmp L2022 ; 18DD 4C 22 20 L" +; ---------------------------------------------------------------------------- + sta (r5L,x) ; 18E0 81 0C .. + bpl L1904 ; 18E2 10 20 . + .byte $0C ; 18E4 0C . + ora (CPU_DATA,x) ; 18E5 01 01 .. + pha ; 18E7 48 H + brk ; 18E8 00 . + jsr DoPreviousMenu ; 18E9 20 90 C1 .. + ldx #$18 ; 18EC A2 18 .. + lda #$F4 ; 18EE A9 F4 .. + jsr L2022 ; 18F0 20 22 20 " + rts ; 18F3 60 ` +; ---------------------------------------------------------------------------- + sta (r4H,x) ; 18F4 81 0B .. + php ; 18F6 08 . + bpl L1909 ; 18F7 10 10 .. + ora $080B,y ; 18F9 19 0B 08 ... + jsr L1921 ; 18FC 20 21 19 !. + .byte $0B ; 18FF 0B . + php ; 1900 08 . + bit L193B ; 1901 2C 3B 19 ,;. +L1904: .byte $0B ; 1904 0B . + php ; 1905 08 . + rol L194F,x ; 1906 3E 4F 19 >O. +L1909: .byte $0B ; 1909 0B . + php ; 190A 08 . + lsr ; 190B 4A J + jmp (L0E19) ; 190C 6C 19 0E l.. +; ---------------------------------------------------------------------------- + .byte $00,$18,$1A ; 190F 00 18 1A ... + .byte "CONFIGURE 2.1" ; 1912 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 191A 45 20 32 2E 31 E 2.1 + .byte $1B,$00 ; 191F 1B 00 .. +L1921: .byte $18 ; 1921 18 . + .byte "Copyright (C) 1986-1990," ; 1922 43 6F 70 79 72 69 67 68 Copyrigh + ; 192A 74 20 28 43 29 20 31 39 t (C) 19 + ; 1932 38 36 2D 31 39 39 30 2C 86-1990, + .byte $00 ; 193A 00 . +L193B: .byte "Berkeley Softworks." ; 193B 42 65 72 6B 65 6C 65 79 Berkeley + ; 1943 20 53 6F 66 74 77 6F 72 Softwor + ; 194B 6B 73 2E ks. + .byte $00 ; 194E 00 . +L194F: .byte "Portions Copyright (C) 1990," ; 194F 50 6F 72 74 69 6F 6E 73 Portions + ; 1957 20 43 6F 70 79 72 69 67 Copyrig + ; 195F 68 74 20 28 43 29 20 31 ht (C) 1 + ; 1967 39 39 30 2C 990, + .byte $00 ; 196B 00 . + .byte "Jim Collette. (Q-Link: GEOREP J"; 196C 4A 69 6D 20 43 6F 6C 6C Jim Coll + ; 1974 65 74 74 65 2E 20 28 51 ette. (Q + ; 197C 2D 4C 69 6E 6B 3A 20 47 -Link: G + ; 1984 45 4F 52 45 50 20 4A EOREP J + .byte "IM)" ; 198B 49 4D 29 IM) + .byte $1B,$00 ; 198E 1B 00 .. +; ---------------------------------------------------------------------------- + jsr DoPreviousMenu ; 1990 20 90 C1 .. + lda $2104 ; 1993 AD 04 21 ..! + jsr L073E ; 1996 20 3E 07 >. + lda #$20 ; 1999 A9 20 . + sta r0H ; 199B 85 03 .. + lda #$D9 ; 199D A9 D9 .. + sta r0L ; 199F 85 02 .. + jsr OpenRecordFile ; 19A1 20 74 C2 t. + txa ; 19A4 8A . + bne L19CE ; 19A5 D0 27 .' + lda #$00 ; 19A7 A9 00 .. + jsr PointRecord ; 19A9 20 80 C2 .. + lda #$80 ; 19AC A9 80 .. + sta r4H ; 19AE 85 0B .. + lda #$00 ; 19B0 A9 00 .. + sta r4L ; 19B2 85 0A .. + jsr GetBlock ; 19B4 20 E4 C1 .. + txa ; 19B7 8A . + bne L19CE ; 19B8 D0 14 .. + ldy #$04 ; 19BA A0 04 .. +L19BC: lda $0406,y ; 19BC B9 06 04 ... + sta $8002,y ; 19BF 99 02 80 ... + dey ; 19C2 88 . + bpl L19BC ; 19C3 10 F7 .. + jsr PutBlock ; 19C5 20 E7 C1 .. + txa ; 19C8 8A . + bne L19CE ; 19C9 D0 03 .. + jmp CloseRecordFile ; 19CB 4C 77 C2 Lw. +; ---------------------------------------------------------------------------- +L19CE: ldx #$19 ; 19CE A2 19 .. + lda #$D5 ; 19D0 A9 D5 .. + jmp L2022 ; 19D2 4C 22 20 L" +; ---------------------------------------------------------------------------- + sta (r4H,x) ; 19D5 81 0B .. + .byte $0C ; 19D7 0C . + jsr L19E4 ; 19D8 20 E4 19 .. + .byte $0B ; 19DB 0B . + .byte $0C ; 19DC 0C . + bmi L19E2 ; 19DD 30 03 0. + .byte $1A ; 19DF 1A . + ora (CPU_DATA,x) ; 19E0 01 01 .. +L19E2: pha ; 19E2 48 H + brk ; 19E3 00 . +L19E4: .byte $18 ; 19E4 18 . + .byte "Unable to save configuration:" ; 19E5 55 6E 61 62 6C 65 20 74 Unable t + ; 19ED 6F 20 73 61 76 65 20 63 o save c + ; 19F5 6F 6E 66 69 67 75 72 61 onfigura + ; 19FD 74 69 6F 6E 3A tion: + .byte $00,$18 ; 1A02 00 18 .. + .byte "Can't find " ; 1A04 43 61 6E 27 74 20 66 69 Can't fi + ; 1A0C 6E 64 20 nd + .byte $22 ; 1A0F 22 " + .byte "CONFIGURE" ; 1A10 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 1A18 45 E + .byte $22 ; 1A19 22 " + .byte " file." ; 1A1A 20 66 69 6C 65 2E file. + .byte $00,$00,$0E,$00,$00,$15,$00,$01 ; 1A20 00 00 0E 00 00 15 00 01 ........ + .byte "-" ; 1A28 2D - + .byte $1A ; 1A29 1A . + .byte "@= file" ; 1A2A 40 3D 20 66 69 6C 65 @= file + .byte $00 ; 1A31 00 . + .byte "disk" ; 1A32 64 69 73 6B disk + .byte $00 ; 1A36 00 . +; ---------------------------------------------------------------------------- + ;asl $0038 ; 1A37 0E 38 00 .8. + .byte $0e + .byte $38 + .byte $00 + + brk ; 1A3A 00 . + .byte $62 ; 1A3B 62 b + brk ; 1A3C 00 . + .byte $83 ; 1A3D 83 . + ;eor $001a ;r12L ; 1A3E 4D 1A 00 M.. + .byte $4d + .byte $1a + .byte $00 + + bcc L1A5C ; 1A41 90 19 .. + rts ; 1A43 60 ` +; ---------------------------------------------------------------------------- + .byte $1A ; 1A44 1A . + brk ; 1A45 00 . + sbc #$18 ; 1A46 E9 18 .. + .byte $6F ; 1A48 6F o + .byte $1A ; 1A49 1A . + brk ; 1A4A 00 . + .byte $B6,$18 ; 1A4B B6 18 .. + .byte "save configurat" ; 1A4D 73 61 76 65 20 63 6F 6E save con + ; 1A55 66 69 67 75 72 61 74 figurat +L1A5C: .byte "ion" ; 1A5C 69 6F 6E ion + .byte $00 ; 1A5F 00 . + .byte "CONFIGURE info" ; 1A60 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 1A68 45 20 69 6E 66 6F E info + .byte $00 ; 1A6E 00 . + .byte "quit" ; 1A6F 71 75 69 74 quit + .byte $00 ; 1A73 00 . +; ---------------------------------------------------------------------------- +L1A74: lda $212E ; 1A74 AD 2E 21 ..! + sta r15H ; 1A77 85 21 .! + lda $212D ; 1A79 AD 2D 21 .-! + sta r15L ; 1A7C 85 20 . + ldy #$00 ; 1A7E A0 00 .. + lda (r15L),y ; 1A80 B1 20 . + sta $212B ; 1A82 8D 2B 21 .+! + tay ; 1A85 A8 . + lda $8486,y ; 1A86 B9 86 84 ... + sta $212C ; 1A89 8D 2C 21 .,! + ldy #$01 ; 1A8C A0 01 .. + lda (r15L),y ; 1A8E B1 20 . + sta $212A ; 1A90 8D 2A 21 .*! + clc ; 1A93 18 . + lda #$02 ; 1A94 A9 02 .. + adc r15L ; 1A96 65 20 e + sta r15L ; 1A98 85 20 . + bcc L1A9E ; 1A9A 90 02 .. + inc r15H ; 1A9C E6 21 .! +L1A9E: ldy #$0B ; 1A9E A0 0B .. +L1AA0: lda #$00 ; 1AA0 A9 00 .. + sta (r15L),y ; 1AA2 91 20 . + dey ; 1AA4 88 . + bpl L1AA0 ; 1AA5 10 F9 .. + jsr L1C39 ; 1AA7 20 39 1C 9. + jsr L1B5B ; 1AAA 20 5B 1B [. + jsr L1C41 ; 1AAD 20 41 1C A. + jsr L1B5B ; 1AB0 20 5B 1B [. + jsr L1C56 ; 1AB3 20 56 1C V. + jsr L1B5B ; 1AB6 20 5B 1B [. + jsr L1C88 ; 1AB9 20 88 1C .. + jsr L1B5B ; 1ABC 20 5B 1B [. + jsr L1C99 ; 1ABF 20 99 1C .. + jsr L1B5B ; 1AC2 20 5B 1B [. + jsr L1CAA ; 1AC5 20 AA 1C .. + jsr L1B5B ; 1AC8 20 5B 1B [. + jsr L1C6F ; 1ACB 20 6F 1C o. + jsr L1B5B ; 1ACE 20 5B 1B [. + jsr L1CC3 ; 1AD1 20 C3 1C .. + jsr L1B5B ; 1AD4 20 5B 1B [. + jsr L1CDC ; 1AD7 20 DC 1C .. + jsr L1B5B ; 1ADA 20 5B 1B [. + lda $212E ; 1ADD AD 2E 21 ..! + sta r15H ; 1AE0 85 21 .! + lda $212D ; 1AE2 AD 2D 21 .-! + sta r15L ; 1AE5 85 20 . + clc ; 1AE7 18 . + lda #$02 ; 1AE8 A9 02 .. + adc r15L ; 1AEA 65 20 e + sta r15L ; 1AEC 85 20 . + bcc L1AF2 ; 1AEE 90 02 .. + inc r15H ; 1AF0 E6 21 .! +L1AF2: ldy #$00 ; 1AF2 A0 00 .. + lda (r15L),y ; 1AF4 B1 20 . + sta r13L ; 1AF6 85 1C .. + iny ; 1AF8 C8 . + lda (r15L),y ; 1AF9 B1 20 . + sta r13H ; 1AFB 85 1D .. + beq L1B5A ; 1AFD F0 5B .[ + ldy $212A ; 1AFF AC 2A 21 .*! + jsr L1441 ; 1B02 20 41 14 A. + lda r2L ; 1B05 A5 06 .. + clc ; 1B07 18 . + adc #$08 ; 1B08 69 08 i. + sta r1H ; 1B0A 85 05 .. + sec ; 1B0C 38 8 + lda r3L ; 1B0D A5 08 .. + sbc #$5A ; 1B0F E9 5A .Z + sta r11L ; 1B11 85 18 .. + lda r3H ; 1B13 A5 09 .. + sbc #$00 ; 1B15 E9 00 .. + sta r11H ; 1B17 85 19 .. + ldy #$00 ; 1B19 A0 00 .. + lda (r13L),y ; 1B1B B1 1C .. + pha ; 1B1D 48 H + iny ; 1B1E C8 . + lda (r13L),y ; 1B1F B1 1C .. + sta r0L ; 1B21 85 02 .. + iny ; 1B23 C8 . + lda (r13L),y ; 1B24 B1 1C .. + sta r0H ; 1B26 85 03 .. + lda r15H ; 1B28 A5 21 .! + pha ; 1B2A 48 H + lda r15L ; 1B2B A5 20 . + pha ; 1B2D 48 H + jsr PutString ; 1B2E 20 48 C1 H. + pla ; 1B31 68 h + sta r15L ; 1B32 85 20 . + pla ; 1B34 68 h + sta r15H ; 1B35 85 21 .! + ldy $212A ; 1B37 AC 2A 21 .*! + pla ; 1B3A 68 h + cmp $212C ; 1B3B CD 2C 21 .,! + bne L1B44 ; 1B3E D0 04 .. + lda #$02 ; 1B40 A9 02 .. + bne L1B46 ; 1B42 D0 02 .. +L1B44: lda #$00 ; 1B44 A9 00 .. +L1B46: jsr L15CF ; 1B46 20 CF 15 .. + clc ; 1B49 18 . + lda #$02 ; 1B4A A9 02 .. + adc r15L ; 1B4C 65 20 e + sta r15L ; 1B4E 85 20 . + bcc L1B54 ; 1B50 90 02 .. + inc r15H ; 1B52 E6 21 .! +L1B54: inc $212A ; 1B54 EE 2A 21 .*! + clv ; 1B57 B8 . + bvc L1AF2 ; 1B58 50 98 P. +L1B5A: rts ; 1B5A 60 ` +; ---------------------------------------------------------------------------- +L1B5B: dey ; 1B5B 88 . + bmi L1B78 ; 1B5C 30 1A 0. + lda L1BB2,y ; 1B5E B9 B2 1B ... + tax ; 1B61 AA . + lda L1BA9,y ; 1B62 B9 A9 1B ... + ldy #$00 ; 1B65 A0 00 .. + sta (r15L),y ; 1B67 91 20 . + iny ; 1B69 C8 . + txa ; 1B6A 8A . + sta (r15L),y ; 1B6B 91 20 . + clc ; 1B6D 18 . + lda #$02 ; 1B6E A9 02 .. + adc r15L ; 1B70 65 20 e + sta r15L ; 1B72 85 20 . + bcc L1B78 ; 1B74 90 02 .. + inc r15H ; 1B76 E6 21 .! +L1B78: rts ; 1B78 60 ` +; ---------------------------------------------------------------------------- + php ; 1B79 08 . + asl CPU_DDR ; 1B7A 06 00 .. + brk ; 1B7C 00 . + brk ; 1B7D 00 . + brk ; 1B7E 00 . + brk ; 1B7F 00 . + brk ; 1B80 00 . + brk ; 1B81 00 . + brk ; 1B82 00 . + brk ; 1B83 00 . + brk ; 1B84 00 . + brk ; 1B85 00 . + brk ; 1B86 00 . + brk ; 1B87 00 . + brk ; 1B88 00 . + ora #$0C ; 1B89 09 0C .. + brk ; 1B8B 00 . + brk ; 1B8C 00 . + brk ; 1B8D 00 . + brk ; 1B8E 00 . + brk ; 1B8F 00 . + brk ; 1B90 00 . + brk ; 1B91 00 . + brk ; 1B92 00 . + brk ; 1B93 00 . + brk ; 1B94 00 . + brk ; 1B95 00 . + brk ; 1B96 00 . + brk ; 1B97 00 . + brk ; 1B98 00 . + asl ; 1B99 0A . + .byte $12 ; 1B9A 12 . + brk ; 1B9B 00 . + brk ; 1B9C 00 . + brk ; 1B9D 00 . + brk ; 1B9E 00 . + brk ; 1B9F 00 . + brk ; 1BA0 00 . + brk ; 1BA1 00 . + brk ; 1BA2 00 . + brk ; 1BA3 00 . + brk ; 1BA4 00 . + brk ; 1BA5 00 . + brk ; 1BA6 00 . + brk ; 1BA7 00 . + brk ; 1BA8 00 . +L1BA9: .byte $BB ; 1BA9 BB . + cmp #$D3 ; 1BAA C9 D3 .. + inc $F4 ; 1BAC E6 F4 .. + inc L1D08,x ; 1BAE FE 08 1D ... + .byte $2B ; 1BB1 2B + +L1BB2: .byte $1B ; 1BB2 1B . + .byte $1B ; 1BB3 1B . + .byte $1B ; 1BB4 1B . + .byte $1B ; 1BB5 1B . + .byte $1B ; 1BB6 1B . + .byte $1B ; 1BB7 1B . + .byte $1C ; 1BB8 1C . + .byte $1C ; 1BB9 1C . + .byte $1C ; 1BBA 1C . + brk ; 1BBB 00 . + cpy #$1B ; 1BBC C0 1B .. + sbc r13L,x ; 1BBE F5 1C .. + .byte "No Drive" ; 1BC0 4E 6F 20 44 72 69 76 65 No Drive + .byte $00,$01,$CE,$1B,$B7,$07 ; 1BC8 00 01 CE 1B B7 07 ...... + .byte "1541" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + .byte "A" ; 1BD3 41 A + .byte $D8,$1B,$FF,$07 ; 1BD4 D8 1B FF 07 .... + .byte "Shadowed 1541" ; 1BD8 53 68 61 64 6F 77 65 64 Shadowed + ; 1BE0 20 31 35 34 31 1541 + .byte $00,$81,$EB,$1B ; 1BE5 00 81 EB 1B .... + .byte "A" ; 1BE9 41 A + .byte $08 ; 1BEA 08 . + .byte "RAM 1541" ; 1BEB 52 41 4D 20 31 35 34 31 RAM 1541 + .byte $00,$02,$F9,$1B,$DF,$07 ; 1BF3 00 02 F9 1B DF 07 ...... + .byte "1571" ; 1BF9 31 35 37 31 1571 + .byte $00,$03,$03,$1C,$EF,$07 ; 1BFD 00 03 03 1C EF 07 ...... + .byte "1581" ; 1C03 31 35 38 31 1581 + .byte $00 ; 1C07 00 . + .byte "C" ; 1C08 43 C + .byte $0D,$1C ; 1C09 0D 1C .. + .byte " " ; 1C0B 20 + .byte $08 ; 1C0C 08 . + .byte "Dir Shadow 1581" ; 1C0D 44 69 72 20 53 68 61 64 Dir Shad + ; 1C15 6F 77 20 31 35 38 31 ow 1581 + .byte $00,$82,$22,$1C ; 1C1C 00 82 22 1C ..". + .byte "s" ; 1C20 73 s + .byte $08 ; 1C21 08 . + .byte "RAM 1571" ; 1C22 52 41 4D 20 31 35 37 31 RAM 1571 + .byte $00,$83 ; 1C2A 00 83 .. + .byte "0" ; 1C2C 30 0 + .byte $1C,$A5,$08 ; 1C2D 1C A5 08 ... + .byte "RAM 1581" ; 1C30 52 41 4D 20 31 35 38 31 RAM 1581 +; ---------------------------------------------------------------------------- + brk ; 1C38 00 . +L1C39: ldy $212C ; 1C39 AC 2C 21 .,! + beq L1C40 ; 1C3C F0 02 .. + ldy #$01 ; 1C3E A0 01 .. +L1C40: rts ; 1C40 60 ` +; ---------------------------------------------------------------------------- +L1C41: lda $212C ; 1C41 AD 2C 21 .,! + cmp #$01 ; 1C44 C9 01 .. + beq L1C50 ; 1C46 F0 08 .. + cmp #$41 ; 1C48 C9 41 .A + beq L1C50 ; 1C4A F0 04 .. + cmp #$00 ; 1C4C C9 00 .. + bne L1C53 ; 1C4E D0 03 .. +L1C50: ldy #$02 ; 1C50 A0 02 .. + rts ; 1C52 60 ` +; ---------------------------------------------------------------------------- +L1C53: ldy #$00 ; 1C53 A0 00 .. + rts ; 1C55 60 ` +; ---------------------------------------------------------------------------- +L1C56: lda $212C ; 1C56 AD 2C 21 .,! + cmp #$41 ; 1C59 C9 41 .A + beq L1C69 ; 1C5B F0 0C .. + cmp #$01 ; 1C5D C9 01 .. + bne L1C6C ; 1C5F D0 0B .. + lda #$41 ; 1C61 A9 41 .A + jsr L0911 ; 1C63 20 11 09 .. + txa ; 1C66 8A . + bne L1C6C ; 1C67 D0 03 .. +L1C69: ldy #$03 ; 1C69 A0 03 .. + rts ; 1C6B 60 ` +; ---------------------------------------------------------------------------- +L1C6C: ldy #$00 ; 1C6C A0 00 .. + rts ; 1C6E 60 ` +; ---------------------------------------------------------------------------- +L1C6F: lda $212C ; 1C6F AD 2C 21 .,! + cmp #$81 ; 1C72 C9 81 .. + beq L1C82 ; 1C74 F0 0C .. + cmp #$00 ; 1C76 C9 00 .. + bne L1C85 ; 1C78 D0 0B .. + lda #$81 ; 1C7A A9 81 .. + jsr L0911 ; 1C7C 20 11 09 .. + txa ; 1C7F 8A . + bne L1C85 ; 1C80 D0 03 .. +L1C82: ldy #$04 ; 1C82 A0 04 .. + rts ; 1C84 60 ` +; ---------------------------------------------------------------------------- +L1C85: ldy #$00 ; 1C85 A0 00 .. + rts ; 1C87 60 ` +; ---------------------------------------------------------------------------- +L1C88: lda $212C ; 1C88 AD 2C 21 .,! + cmp #$02 ; 1C8B C9 02 .. + beq L1C93 ; 1C8D F0 04 .. + cmp #$00 ; 1C8F C9 00 .. + bne L1C96 ; 1C91 D0 03 .. +L1C93: ldy #$05 ; 1C93 A0 05 .. + rts ; 1C95 60 ` +; ---------------------------------------------------------------------------- +L1C96: ldy #$00 ; 1C96 A0 00 .. + rts ; 1C98 60 ` +; ---------------------------------------------------------------------------- +L1C99: lda $212C ; 1C99 AD 2C 21 .,! + cmp #$03 ; 1C9C C9 03 .. + beq L1CA4 ; 1C9E F0 04 .. + cmp #$00 ; 1CA0 C9 00 .. + bne L1CA7 ; 1CA2 D0 03 .. +L1CA4: ldy #$06 ; 1CA4 A0 06 .. + rts ; 1CA6 60 ` +; ---------------------------------------------------------------------------- +L1CA7: ldy #$00 ; 1CA7 A0 00 .. + rts ; 1CA9 60 ` +; ---------------------------------------------------------------------------- +L1CAA: lda $212C ; 1CAA AD 2C 21 .,! + cmp #$43 ; 1CAD C9 43 .C + beq L1CBD ; 1CAF F0 0C .. + cmp #$03 ; 1CB1 C9 03 .. + bne L1CC0 ; 1CB3 D0 0B .. + lda #$43 ; 1CB5 A9 43 .C + jsr L0911 ; 1CB7 20 11 09 .. + txa ; 1CBA 8A . + bne L1CC0 ; 1CBB D0 03 .. +L1CBD: ldy #$07 ; 1CBD A0 07 .. + rts ; 1CBF 60 ` +; ---------------------------------------------------------------------------- +L1CC0: ldy #$00 ; 1CC0 A0 00 .. + rts ; 1CC2 60 ` +; ---------------------------------------------------------------------------- +L1CC3: lda $212C ; 1CC3 AD 2C 21 .,! + cmp #$82 ; 1CC6 C9 82 .. + beq L1CD6 ; 1CC8 F0 0C .. + cmp #$00 ; 1CCA C9 00 .. + bne L1CD9 ; 1CCC D0 0B .. + lda #$82 ; 1CCE A9 82 .. + jsr L0911 ; 1CD0 20 11 09 .. + txa ; 1CD3 8A . + bne L1CD9 ; 1CD4 D0 03 .. +L1CD6: ldy #$08 ; 1CD6 A0 08 .. + rts ; 1CD8 60 ` +; ---------------------------------------------------------------------------- +L1CD9: ldy #$00 ; 1CD9 A0 00 .. + rts ; 1CDB 60 ` +; ---------------------------------------------------------------------------- +L1CDC: lda $212C ; 1CDC AD 2C 21 .,! + cmp #$83 ; 1CDF C9 83 .. + beq L1CEF ; 1CE1 F0 0C .. + cmp #$00 ; 1CE3 C9 00 .. + bne L1CF2 ; 1CE5 D0 0B .. + lda #$83 ; 1CE7 A9 83 .. + jsr L0911 ; 1CE9 20 11 09 .. + txa ; 1CEC 8A . + bne L1CF2 ; 1CED D0 03 .. +L1CEF: ldy #$09 ; 1CEF A0 09 .. + rts ; 1CF1 60 ` +; ---------------------------------------------------------------------------- +L1CF2: ldy #$00 ; 1CF2 A0 00 .. + rts ; 1CF4 60 ` +; ---------------------------------------------------------------------------- + lda $212C ; 1CF5 AD 2C 21 .,! + beq L1D27 ; 1CF8 F0 2D .- + jsr PurgeTurbo ; 1CFA 20 35 C2 5. + lda $212C ; 1CFD AD 2C 21 .,! + bmi L1D1B ; 1D00 30 19 0. + lda $212B ; 1D02 AD 2B 21 .+! + clc ; 1D05 18 . + adc #$39 ; 1D06 69 39 i9 +L1D08: sta L1D9A ; 1D08 8D 9A 1D ... + ldx #$1D ; 1D0B A2 1D .. + lda #$9D ; 1D0D A9 9D .. + jsr L2022 ; 1D0F 20 22 20 " + lda r0L ; 1D12 A5 02 .. + cmp #$02 ; 1D14 C9 02 .. + beq L1D27 ; 1D16 F0 0F .. + jsr L1D28 ; 1D18 20 28 1D (. +L1D1B: lda $212B ; 1D1B AD 2B 21 .+! + jsr L1DF2 ; 1D1E 20 F2 1D .. + jsr L1DB0 ; 1D21 20 B0 1D .. + dec L180C ; 1D24 CE 0C 18 ... +L1D27: rts ; 1D27 60 ` +; ---------------------------------------------------------------------------- +L1D28: php ; 1D28 08 . + sei ; 1D29 78 x + lda #$1D ; 1D2A A9 1D .. + sta $84A0 ; 1D2C 8D A0 84 ... + lda #$53 ; 1D2F A9 53 .S + sta intBotVector ; 1D31 8D 9F 84 ... + lda #$00 ; 1D34 A9 00 .. + sta L1D60 ; 1D36 8D 60 1D .`. + lda #$78 ; 1D39 A9 78 .x + sta L1D5F ; 1D3B 8D 5F 1D ._. + plp ; 1D3E 28 ( +L1D3F: lda L1D5F ; 1D3F AD 5F 1D ._. + ora L1D60 ; 1D42 0D 60 1D .`. + bne L1D3F ; 1D45 D0 F8 .. + php ; 1D47 08 . + sei ; 1D48 78 x + lda #$00 ; 1D49 A9 00 .. + sta intBotVector ; 1D4B 8D 9F 84 ... + sta $84A0 ; 1D4E 8D A0 84 ... + plp ; 1D51 28 ( + rts ; 1D52 60 ` +; ---------------------------------------------------------------------------- + lda L1D5F ; 1D53 AD 5F 1D ._. + bne L1D5B ; 1D56 D0 03 .. + dec L1D60 ; 1D58 CE 60 1D .`. +L1D5B: dec L1D5F ; 1D5B CE 5F 1D ._. + rts ; 1D5E 60 ` +; ---------------------------------------------------------------------------- +L1D5F: brk ; 1D5F 00 . +L1D60: brk ; 1D60 00 . +L1D61: .byte $18 ; 1D61 18 . + .byte "If you are able to, please" ; 1D62 49 66 20 79 6F 75 20 61 If you a + ; 1D6A 72 65 20 61 62 6C 65 20 re able + ; 1D72 74 6F 2C 20 70 6C 65 61 to, plea + ; 1D7A 73 65 se + .byte $00 ; 1D7C 00 . + .byte "turn OFF and/or unplug drive " ; 1D7D 74 75 72 6E 20 4F 46 46 turn OFF + ; 1D85 20 61 6E 64 2F 6F 72 20 and/or + ; 1D8D 75 6E 70 6C 75 67 20 64 unplug d + ; 1D95 72 69 76 65 20 rive +L1D9A: .byte "x." ; 1D9A 78 2E x. +; ---------------------------------------------------------------------------- + brk ; 1D9C 00 . + sta (r4H,x) ; 1D9D 81 0B .. + .byte $0C ; 1D9F 0C . + jsr L1D61 ; 1DA0 20 61 1D a. + .byte $0B ; 1DA3 0B . + .byte $0C ; 1DA4 0C . + bmi L1E24 ; 1DA5 30 7D 0} + ora $0101,x ; 1DA7 1D 01 01 ... + pha ; 1DAA 48 H + .byte $02 ; 1DAB 02 . + ora ($48),y ; 1DAC 11 48 .H + brk ; 1DAE 00 . +L1DAF: brk ; 1DAF 00 . +L1DB0: lda #$00 ; 1DB0 A9 00 .. + sta L1DAF ; 1DB2 8D AF 1D ... + lda #$08 ; 1DB5 A9 08 .. + jsr L1DCB ; 1DB7 20 CB 1D .. + lda #$09 ; 1DBA A9 09 .. + jsr L1DCB ; 1DBC 20 CB 1D .. + lda #$0A ; 1DBF A9 0A .. + jsr L1DCB ; 1DC1 20 CB 1D .. + lda L1DAF ; 1DC4 AD AF 1D ... + sta NUMDRV ; 1DC7 8D 8D 84 ... + rts ; 1DCA 60 ` +; ---------------------------------------------------------------------------- +L1DCB: tay ; 1DCB A8 . + lda $8486,y ; 1DCC B9 86 84 ... + beq L1DE0 ; 1DCF F0 0F .. + bmi L1DDD ; 1DD1 30 0A 0. + tya ; 1DD3 98 . + jsr L1DE1 ; 1DD4 20 E1 1D .. + bne L1DDD ; 1DD7 D0 04 .. + jsr L1DF2 ; 1DD9 20 F2 1D .. + rts ; 1DDC 60 ` +; ---------------------------------------------------------------------------- +L1DDD: inc L1DAF ; 1DDD EE AF 1D ... +L1DE0: rts ; 1DE0 60 ` +; ---------------------------------------------------------------------------- +L1DE1: jsr L073E ; 1DE1 20 3E 07 >. + lda NUMDRV ; 1DE4 AD 8D 84 ... + bne L1DEC ; 1DE7 D0 03 .. + inc NUMDRV ; 1DE9 EE 8D 84 ... +L1DEC: jsr NewDisk ; 1DEC 20 E1 C1 .. + cpx #$0D ; 1DEF E0 0D .. + rts ; 1DF1 60 ` +; ---------------------------------------------------------------------------- +L1DF2: ldy curDrive ; 1DF2 AC 89 84 ... + lda #$00 ; 1DF5 A9 00 .. + sta $8486,y ; 1DF7 99 86 84 ... + sta driveData,y ; 1DFA 99 BF 88 ... + sta $03FE,y ; 1DFD 99 FE 03 ... + sta diskOpenFlg,y ; 1E00 99 8A 84 ... + rts ; 1E03 60 ` +; ---------------------------------------------------------------------------- +L1E04: brk ; 1E04 00 . + lda #$00 ; 1E05 A9 00 .. + sta L1E04 ; 1E07 8D 04 1E ... + lda $212B ; 1E0A AD 2B 21 .+! + cmp #$0A ; 1E0D C9 0A .. + bcc L1E14 ; 1E0F 90 03 .. + jmp L1EB4 ; 1E11 4C B4 1E L.. +; ---------------------------------------------------------------------------- +L1E14: lda #$00 ; 1E14 A9 00 .. + sta L1E04 ; 1E16 8D 04 1E ... + ldy $212B ; 1E19 AC 2B 21 .+! + lda $212F ; 1E1C AD 2F 21 ./! + sta $8486,y ; 1E1F 99 86 84 ... + .byte $EE ; 1E22 EE . + .byte $8D ; 1E23 8D . +L1E24: sty $AD ; 1E24 84 AD .. + .byte $2B ; 1E26 2B + + and (r15L,x) ; 1E27 21 20 ! + sbc (r13H,x) ; 1E29 E1 1D .. + bne L1E48 ; 1E2B D0 1B .. + lda $212B ; 1E2D AD 2B 21 .+! + eor #$01 ; 1E30 49 01 I. + tay ; 1E32 A8 . + lda $8486,y ; 1E33 B9 86 84 ... + beq L1E59 ; 1E36 F0 21 .! + tya ; 1E38 98 . + ldy #$0B ; 1E39 A0 0B .. + bit sysRAMFlg ; 1E3B 2C C4 88 ,.. + bvs L1E43 ; 1E3E 70 03 p. + eor #$02 ; 1E40 49 02 I. + tay ; 1E42 A8 . +L1E43: lda $8486,y ; 1E43 B9 86 84 ... + beq L1E4A ; 1E46 F0 02 .. +L1E48: bne L1EB0 ; 1E48 D0 66 .f +L1E4A: sty L1E04 ; 1E4A 8C 04 1E ... + jsr L0739 ; 1E4D 20 39 07 9. + lda L1E04 ; 1E50 AD 04 1E ... + jsr L1FC5 ; 1E53 20 C5 1F .. + jsr PurgeTurbo ; 1E56 20 35 C2 5. +L1E59: ldx #$1F ; 1E59 A2 1F .. + lda #$A1 ; 1E5B A9 A1 .. + jsr L2022 ; 1E5D 20 22 20 " + lda r0L ; 1E60 A5 02 .. + cmp #$02 ; 1E62 C9 02 .. + beq L1E98 ; 1E64 F0 32 .2 + lda $212B ; 1E66 AD 2B 21 .+! + jsr L1DE1 ; 1E69 20 E1 1D .. + bne L1E98 ; 1E6C D0 2A .* + lda $212B ; 1E6E AD 2B 21 .+! + eor #$01 ; 1E71 49 01 I. + sta curDevice ; 1E73 85 BA .. + sta curDrive ; 1E75 8D 89 84 ... + tay ; 1E78 A8 . + lda $212F ; 1E79 AD 2F 21 ./! + sta $8486,y ; 1E7C 99 86 84 ... + lda $212B ; 1E7F AD 2B 21 .+! + jsr L1FC5 ; 1E82 20 C5 1F .. + lda $212B ; 1E85 AD 2B 21 .+! + sta curDevice ; 1E88 85 BA .. + sta curDrive ; 1E8A 8D 89 84 ... + eor #$01 ; 1E8D 49 01 I. + tay ; 1E8F A8 . + lda #$00 ; 1E90 A9 00 .. + sta $8486,y ; 1E92 99 86 84 ... + txa ; 1E95 8A . + bne L1E59 ; 1E96 D0 C1 .. +L1E98: lda L1E04 ; 1E98 AD 04 1E ... + beq L1EB0 ; 1E9B F0 13 .. + jsr L1DE1 ; 1E9D 20 E1 1D .. + bne L1EA8 ; 1EA0 D0 06 .. + jsr L1DF2 ; 1EA2 20 F2 1D .. + clv ; 1EA5 B8 . + bvc L1EB0 ; 1EA6 50 08 P. +L1EA8: lda $212B ; 1EA8 AD 2B 21 .+! + eor #$01 ; 1EAB 49 01 I. + jsr L1FC5 ; 1EAD 20 C5 1F .. +L1EB0: jsr L1DB0 ; 1EB0 20 B0 1D .. + rts ; 1EB3 60 ` +; ---------------------------------------------------------------------------- +L1EB4: lda #$00 ; 1EB4 A9 00 .. + sta L1E04 ; 1EB6 8D 04 1E ... + ldy $212B ; 1EB9 AC 2B 21 .+! + lda $212F ; 1EBC AD 2F 21 ./! + sta $8486,y ; 1EBF 99 86 84 ... + inc NUMDRV ; 1EC2 EE 8D 84 ... + lda $212B ; 1EC5 AD 2B 21 .+! + jsr L1DE1 ; 1EC8 20 E1 1D .. + bne L1EDB ; 1ECB D0 0E .. + ldy #$08 ; 1ECD A0 08 .. + lda $8486,y ; 1ECF B9 86 84 ... + beq L1EEE ; 1ED2 F0 1A .. + ldy #$0B ; 1ED4 A0 0B .. + lda $8486,y ; 1ED6 B9 86 84 ... + beq L1EDD ; 1ED9 F0 02 .. +L1EDB: bne L1F3E ; 1EDB D0 61 .a +L1EDD: sty L1E04 ; 1EDD 8C 04 1E ... + lda #$08 ; 1EE0 A9 08 .. + jsr L073E ; 1EE2 20 3E 07 >. + lda L1E04 ; 1EE5 AD 04 1E ... + jsr L1FC5 ; 1EE8 20 C5 1F .. + jsr PurgeTurbo ; 1EEB 20 35 C2 5. +L1EEE: ldx #$1F ; 1EEE A2 1F .. + lda #$B3 ; 1EF0 A9 B3 .. + jsr L2022 ; 1EF2 20 22 20 " + lda r0L ; 1EF5 A5 02 .. + cmp #$02 ; 1EF7 C9 02 .. + beq L1F29 ; 1EF9 F0 2E .. + lda $212B ; 1EFB AD 2B 21 .+! + jsr L1DE1 ; 1EFE 20 E1 1D .. + bne L1F29 ; 1F01 D0 26 .& + lda #$08 ; 1F03 A9 08 .. + sta curDevice ; 1F05 85 BA .. + sta curDrive ; 1F07 8D 89 84 ... + tay ; 1F0A A8 . + lda $212F ; 1F0B AD 2F 21 ./! + sta $8486,y ; 1F0E 99 86 84 ... + lda $212B ; 1F11 AD 2B 21 .+! + jsr L1FC5 ; 1F14 20 C5 1F .. + lda $212B ; 1F17 AD 2B 21 .+! + sta curDevice ; 1F1A 85 BA .. + sta curDrive ; 1F1C 8D 89 84 ... + ldy #$08 ; 1F1F A0 08 .. + lda #$00 ; 1F21 A9 00 .. + sta $8486,y ; 1F23 99 86 84 ... + txa ; 1F26 8A . + bne L1EEE ; 1F27 D0 C5 .. +L1F29: lda L1E04 ; 1F29 AD 04 1E ... + beq L1F3E ; 1F2C F0 10 .. + jsr L1DE1 ; 1F2E 20 E1 1D .. + bne L1F39 ; 1F31 D0 06 .. + jsr L1DF2 ; 1F33 20 F2 1D .. + clv ; 1F36 B8 . + bvc L1F3E ; 1F37 50 05 P. +L1F39: lda #$08 ; 1F39 A9 08 .. + jsr L1FC5 ; 1F3B 20 C5 1F .. +L1F3E: jsr L1DB0 ; 1F3E 20 B0 1D .. + rts ; 1F41 60 ` +; ---------------------------------------------------------------------------- + .byte $18 ; 1F42 18 . + .byte "Plug in & turn ON new drive." ; 1F43 50 6C 75 67 20 69 6E 20 Plug in + ; 1F4B 26 20 74 75 72 6E 20 4F & turn O + ; 1F53 4E 20 6E 65 77 20 64 72 N new dr + ; 1F5B 69 76 65 2E ive. + .byte $00 ; 1F5F 00 . +L1F60: .byte $18 ; 1F60 18 . + .byte "(Must be set to device 8 or 9)"; 1F61 28 4D 75 73 74 20 62 65 (Must be + ; 1F69 20 73 65 74 20 74 6F 20 set to + ; 1F71 64 65 76 69 63 65 20 38 device 8 + ; 1F79 20 6F 72 20 39 29 or 9) + .byte $00 ; 1F7F 00 . +L1F80: .byte $18 ; 1F80 18 . + .byte "(Must be set to device 8 or 10)"; 1F81 28 4D 75 73 74 20 62 65 (Must be + ; 1F89 20 73 65 74 20 74 6F 20 set to + ; 1F91 64 65 76 69 63 65 20 38 device 8 + ; 1F99 20 6F 72 20 31 30 29 or 10) + .byte $00,$81 ; 1FA0 00 81 .. +; ---------------------------------------------------------------------------- + .byte $0B ; 1FA2 0B . + .byte $0C ; 1FA3 0C . + bpl L1FE8 ; 1FA4 10 42 .B + .byte $1F ; 1FA6 1F . + .byte $0B ; 1FA7 0B . + .byte $0C ; 1FA8 0C . + jsr L1F60 ; 1FA9 20 60 1F `. + ora (CPU_DATA,x) ; 1FAC 01 01 .. + pha ; 1FAE 48 H + .byte $02 ; 1FAF 02 . + ora ($48),y ; 1FB0 11 48 .H + brk ; 1FB2 00 . + sta (r4H,x) ; 1FB3 81 0B .. + .byte $0C ; 1FB5 0C . + bpl L1FFA ; 1FB6 10 42 .B + .byte $1F ; 1FB8 1F . + .byte $0B ; 1FB9 0B . + .byte $0C ; 1FBA 0C . + jsr L1F80 ; 1FBB 20 80 1F .. + ora (CPU_DATA,x) ; 1FBE 01 01 .. + pha ; 1FC0 48 H + .byte $02 ; 1FC1 02 . + ora ($48),y ; 1FC2 11 48 .H + brk ; 1FC4 00 . +L1FC5: bit sysRAMFlg ; 1FC5 2C C4 88 ,.. + bvc L1FEE ; 1FC8 50 24 P$ + pha ; 1FCA 48 H + tay ; 1FCB A8 . + lda $0A66,y ; 1FCC B9 66 0A .f. + sta r1L ; 1FCF 85 04 .. + lda $0A6A,y ; 1FD1 B9 6A 0A .j. + sta r1H ; 1FD4 85 05 .. + lda #$90 ; 1FD6 A9 90 .. + sta r0H ; 1FD8 85 03 .. + lda #$00 ; 1FDA A9 00 .. + sta r0L ; 1FDC 85 02 .. + lda #$0D ; 1FDE A9 0D .. + sta r2H ; 1FE0 85 07 .. + lda #$80 ; 1FE2 A9 80 .. + sta r2L ; 1FE4 85 06 .. + lda #$00 ; 1FE6 A9 00 .. +L1FE8: sta r3L ; 1FE8 85 08 .. + jsr StashRAM ; 1FEA 20 C8 C2 .. + pla ; 1FED 68 h +L1FEE: sta r0L ; 1FEE 85 02 .. + lda curDrive ; 1FF0 AD 89 84 ... + pha ; 1FF3 48 H + tay ; 1FF4 A8 . + lda driveData,y ; 1FF5 B9 BF 88 ... + pha ; 1FF8 48 H + .byte $B9 ; 1FF9 B9 . +L1FFA: stx $84 ; 1FFA 86 84 .. + pha ; 1FFC 48 H + bpl L2007 ; 1FFD 10 08 .. + lda r0L ; 1FFF A5 02 .. + jsr L073E ; 2001 20 3E 07 >. + clv ; 2004 B8 . + bvc L200C ; 2005 50 05 P. +L2007: lda r0L ; 2007 A5 02 .. + jsr ChangeDiskDevice ; 2009 20 BC C2 .. +L200C: ldy curDrive ; 200C AC 89 84 ... + pla ; 200F 68 h + sta $8486,y ; 2010 99 86 84 ... + pla ; 2013 68 h + sta driveData,y ; 2014 99 BF 88 ... + pla ; 2017 68 h + tay ; 2018 A8 . + lda #$00 ; 2019 A9 00 .. + sta driveData,y ; 201B 99 BF 88 ... + sta $8486,y ; 201E 99 86 84 ... + rts ; 2021 60 ` +; ---------------------------------------------------------------------------- +L2022: stx r0H ; 2022 86 03 .. + sta r0L ; 2024 85 02 .. + ldx #$00 ; 2026 A2 00 .. + stx $2550 ; 2028 8E 50 25 .P% + lda r5H ; 202B A5 0D .. + pha ; 202D 48 H + lda r5L ; 202E A5 0C .. + pha ; 2030 48 H + jsr L205B ; 2031 20 5B 20 [ + pla ; 2034 68 h + sta r5L ; 2035 85 0C .. + pla ; 2037 68 h + sta r5H ; 2038 85 0D .. + jmp DoDlgBox ; 203A 4C 56 C2 LV. +; ---------------------------------------------------------------------------- + ldx #$04 ; 203D A2 04 .. + jsr L204B ; 203F 20 4B 20 K + lda #$1A ; 2042 A9 1A .. + sta r0H ; 2044 85 03 .. + lda #$37 ; 2046 A9 37 .7 + sta r0L ; 2048 85 02 .. + rts ; 204A 60 ` +; ---------------------------------------------------------------------------- +L204B: stx $2550 ; 204B 8E 50 25 .P% + ldx $2550 ; 204E AE 50 25 .P% + jmp L205B ; 2051 4C 5B 20 L[ +; ---------------------------------------------------------------------------- + ldx $2550 ; 2054 AE 50 25 .P% + jsr L2060 ; 2057 20 60 20 ` + rts ; 205A 60 ` +; ---------------------------------------------------------------------------- +L205B: lda #$00 ; 205B A9 00 .. + clv ; 205D B8 . + bvc L2062 ; 205E 50 02 P. +L2060: lda #$FF ; 2060 A9 FF .. +L2062: sta r4H ; 2062 85 0B .. + jsr L20BA ; 2064 20 BA 20 . +L2067: ldx r2H ; 2067 A6 07 .. + jsr GetScanLine ; 2069 20 3C C1 <. + lda r2L ; 206C A5 06 .. + asl ; 206E 0A . + asl ; 206F 0A . + asl ; 2070 0A . + bcc L2075 ; 2071 90 02 .. + inc r5H ; 2073 E6 0D .. +L2075: tay ; 2075 A8 . + lda r3L ; 2076 A5 08 .. + sta r4L ; 2078 85 0A .. +L207A: bit r4H ; 207A 24 0B $. + bpl L2084 ; 207C 10 06 .. + jsr L20AC ; 207E 20 AC 20 . + clv ; 2081 B8 . + bvc L2087 ; 2082 50 03 P. +L2084: jsr L20A0 ; 2084 20 A0 20 . +L2087: inc r1L ; 2087 E6 04 .. + bne L208D ; 2089 D0 02 .. + inc r1H ; 208B E6 05 .. +L208D: clc ; 208D 18 . + adc #$08 ; 208E 69 08 i. + bcc L2094 ; 2090 90 02 .. + inc r5H ; 2092 E6 0D .. +L2094: tay ; 2094 A8 . + dec r4L ; 2095 C6 0A .. + bne L207A ; 2097 D0 E1 .. + inc r2H ; 2099 E6 07 .. + dec r3H ; 209B C6 09 .. + bne L2067 ; 209D D0 C8 .. + rts ; 209F 60 ` +; ---------------------------------------------------------------------------- +L20A0: lda (r5L),y ; 20A0 B1 0C .. + tax ; 20A2 AA . + tya ; 20A3 98 . + pha ; 20A4 48 H + ldy #$00 ; 20A5 A0 00 .. + txa ; 20A7 8A . + sta (r1L),y ; 20A8 91 04 .. + pla ; 20AA 68 h + rts ; 20AB 60 ` +; ---------------------------------------------------------------------------- +L20AC: tya ; 20AC 98 . + pha ; 20AD 48 H + ldy #$00 ; 20AE A0 00 .. + lda (r1L),y ; 20B0 B1 04 .. + tax ; 20B2 AA . + pla ; 20B3 68 h + tay ; 20B4 A8 . + txa ; 20B5 8A . + sta (r5L),y ; 20B6 91 0C .. + tya ; 20B8 98 . + rts ; 20B9 60 ` +; ---------------------------------------------------------------------------- +L20BA: lda #$25 ; 20BA A9 25 .% + sta r1H ; 20BC 85 05 .. + lda #$51 ; 20BE A9 51 .Q + sta r1L ; 20C0 85 04 .. + ldy #$00 ; 20C2 A0 00 .. +L20C4: lda L20D1,x ; 20C4 BD D1 20 .. + sta r2L,y ; 20C7 99 06 00 ... + inx ; 20CA E8 . + iny ; 20CB C8 . + cpy #$04 ; 20CC C0 04 .. + bne L20C4 ; 20CE D0 F4 .. + rts ; 20D0 60 ` +; ---------------------------------------------------------------------------- +L20D1: php ; 20D1 08 . + jsr L6819 ; 20D2 20 19 68 .h + brk ; 20D5 00 . + asl $2C0E ; 20D6 0E 0E 2C .., +; .byte $C2 ; 20D9 C2 . diff --git a/configure/r2.s b/configure/r2.s new file mode 100644 index 00000000..97b21cc4 --- /dev/null +++ b/configure/r2.s @@ -0,0 +1,2 @@ +.SEGMENT "OVERLAY2" +.INCBIN "build/mega65/drv/drv1541.bin" diff --git a/configure/r3.s b/configure/r3.s new file mode 100644 index 00000000..62f71be1 --- /dev/null +++ b/configure/r3.s @@ -0,0 +1,2 @@ +.SEGMENT "OVERLAY3" +.INCBIN "build/mega65/drv/drv1571.bin" \ No newline at end of file diff --git a/configure/r4.s b/configure/r4.s new file mode 100644 index 00000000..9a9c02be --- /dev/null +++ b/configure/r4.s @@ -0,0 +1,2 @@ +.SEGMENT "OVERLAY4" +.INCBIN "build/mega65/drv/drv1581-21hd.bin" \ No newline at end of file diff --git a/configure/r5.s b/configure/r5.s new file mode 100644 index 00000000..0dfa862e --- /dev/null +++ b/configure/r5.s @@ -0,0 +1,2 @@ +.SEGMENT "OVERLAY5" +.INCBIN "build/mega65/drv/drv1571ram.bin" \ No newline at end of file diff --git a/configure/r6.s b/configure/r6.s new file mode 100644 index 00000000..99fb2b25 --- /dev/null +++ b/configure/r6.s @@ -0,0 +1,2 @@ +.SEGMENT "OVERLAY6" +.INCBIN "build/mega65/drv/drv1581ram.bin" \ No newline at end of file diff --git a/drv/drv1541.s b/drv/drv1541.s index 82f7affd..ecc605f9 100644 --- a/drv/drv1541.s +++ b/drv/drv1541.s @@ -324,11 +324,11 @@ GFDirBlk11: lda diskBlkBuf bne GFDirBlk2 jsr AddDirBlock - bra GFDirBlk1 + bra_ GFDirBlk1 GFDirBlk2: sta r1L MoveB diskBlkBuf+1, r1H - bra GFDirBlk0 + bra_ GFDirBlk0 GFDirBlk3: ldy #FRST_FILE_ENTRY ldx #0 @@ -422,7 +422,7 @@ SNxtFree3: adc #4 adc interleave sta r6H - bra SNxtFree00 + bra_ SNxtFree00 SNxtFree4: MoveW_ r6, r3 ldx #0 @@ -452,7 +452,7 @@ SNFHlp2_1: cmp r7L bcc SNFHlp2_2 sub r7L - bra SNFHlp2_1 + bra_ SNFHlp2_1 SNFHlp2_2: sta r6H @@ -1039,7 +1039,7 @@ RdBlock1: bnex RdBlock2 bbrf 6, curType, RdBlock2 jsr DoCacheWrite - bra RdBlock2 + bra_ RdBlock2 RdBlock2: ldy #0 rts diff --git a/drv/drv1571.s b/drv/drv1571.s index e3509c33..0b9b00c4 100644 --- a/drv/drv1571.s +++ b/drv/drv1571.s @@ -132,6 +132,7 @@ PDH_0: bbrf 7, curDirHead+3, PDH_1 jsr SetDirHead_2 jsr VerWriteBlock + bnex PDH_1 PDH_1: jmp DoneWithIO @@ -357,11 +358,11 @@ GFDirBlk11: lda diskBlkBuf bne GFDirBlk2 jsr AddDirBlock - bra GFDirBlk1 + bra_ GFDirBlk1 GFDirBlk2: sta r1L MoveB diskBlkBuf+1, r1H - bra GFDirBlk0 + bra_ GFDirBlk0 GFDirBlk3: ldy #FRST_FILE_ENTRY ldx #0 @@ -478,9 +479,9 @@ SNxtFree7: adc #4 adc interleave sta r6H - bra SNxtFree00 + bra_ SNxtFree00 SNxtFreeEnd_OK: - MoveW r6, r3 + MoveW_ r6, r3 ldx #0 rts SNxtFreeEnd_Err: @@ -514,7 +515,7 @@ SNFHlp2_1: cmp r7L bcc SNFHlp2_2 sub r7L - bra SNFHlp2_1 + bra_ SNFHlp2_1 SNFHlp2_2: sta r6H @@ -530,7 +531,7 @@ AllBlk0: lda r8H eor dir2Head,x sta dir2Head,x - bra AllBlk2 + bra_ AllBlk2 AllBlk1: lda r8H eor curDirHead,x @@ -540,7 +541,7 @@ AllBlk2: plp beq AllBlk3 dec curDirHead,x - bra AllBlk4 + bra_ AllBlk4 AllBlk3: inc curDirHead,x AllBlk4: @@ -598,7 +599,7 @@ FBBBitTab: .byte $10, $20, $40, $80 __CalcBlksFree: - LoadW r4, 0 + LoadW_ r4, 0 ldy #OFF_TO_BAM CBlksFre0: lda (r5),y @@ -640,8 +641,8 @@ __SetGEOSDisk: lda r4L ora r4H beq SetGDisk2 - LoadB r3L, DIR_TRACK+1 LoadB r3H, 0 + LoadB r3L, DIR_TRACK+1 jsr SetNextFree beqx SetGDisk0 LoadB r3L, 1 @@ -889,17 +890,24 @@ SndCHNK2: WriteCommand: .byte "M-W" WriteAddy: - .word $0300 +;XXX .word $0300 + .word $0000 NibbleTab: .byte $0f, $07, $0d, $05, $0b, $03, $09, $01 .byte $0e, $06, $0c, $04, $0a, $02, $08, $00 NibbleTab2: - .byte $05, $85, $25, $a5, $45, $c5, $65, $e5 - .byte $15, $95, $35, $b5, $55, $d5, $75, $f5 +;XXX .byte $05, $85, $25, $a5, $45, $c5, $65, $e5 + .byte $00, $80, $20, $a0, $40, $c0, $60, $e0 +;XXX .byte $15, $95, $35, $b5, $55, $d5, $75, $f5 + .byte $10, $90, $30, $b0, $50, $d0, $70, $f0 + + E96F8: - .byte $05, $25, $05, $25, $15, $35, $15, $35 - .byte $05, $25, $05, $25, $15, $35, $15, $35 +;XXX .byte $05, $25, $05, $25, $15, $35, $15, $35 + .byte $00, $20, $00, $20, $10, $30, $10, $30 +;XXX .byte $05, $25, $05, $25, $15, $35, $15, $35 + .byte $00, $20, $00, $20, $10, $30, $10, $30 Hst_RecvByte: PushB r0L diff --git a/drv/drv1571ram.cfg b/drv/drv1571ram.cfg new file mode 100644 index 00000000..130ca6d9 --- /dev/null +++ b/drv/drv1571ram.cfg @@ -0,0 +1,8 @@ +MEMORY { + DISK_BASE: start = $9000, size = $0D80 file = %O; + +} + +SEGMENTS { + drv1571ram: load = DISK_BASE, type = ro; +} diff --git a/drv/drv1571ram.s b/drv/drv1571ram.s new file mode 100644 index 00000000..22dda011 --- /dev/null +++ b/drv/drv1571ram.s @@ -0,0 +1,1131 @@ +; da65 V2.15 +; Created: 2017-06-30 23:03:11 +; Input file: configure.cvt.record.5 +; Page: 1 + + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + +.segment "drv1571ram": absolute + +_InitForIO: + .addr __InitForIO ; 9000 37 95 7. +_DoneWithIO: + .addr __DoneWithIO ; 9002 AD 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 DC 95 .. +_PurgeTurbo: + .addr __ExitTurbo ; 9006 DC 95 .. +_EnterTurbo: + .addr __EnterTurbo ; 9008 D3 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A E2 95 .. +_NewDisk: + .addr __NewDisk ; 900C EA 95 .. +_ReadBlock: + .addr __ReadBlock ; 900E EE 95 .. +_WriteBlock: + .addr __WriteBlock ; 9010 04 96 .. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 0D 96 .. +_OpenDisk: + .addr __OpenDisk ; 9014 02 91 .. +_GetBlock: + .addr __GetBlock ; 9016 7D 90 }. +_PutBlock: + .addr __PutBlock ; 9018 B0 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 4F 90 O. +_PutDirHead: + .addr __PutDirHead ; 901C 8A 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E 90 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 90 94 .. +_FreeBlock: + .addr __FreeBlock ; 9022 67 94 g. +_SetNextFree: + .addr __SetNextFree ; 9024 3D 93 =. +_FindBAMBit: + .addr __FindBAMBit ; 9026 1C 94 .. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 39 91 9. +_BlkAlloc: + .addr __BlkAlloc ; 902A 32 91 2. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 60 92 `. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E D6 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C D7 91 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C F0 91 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 3A 92 L:. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C F1 92 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 75 90 Lu. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C A8 90 L.. + +; ---------------------------------------------------------------------------- + nop ; 9042 EA . + nop ; 9043 EA . + rts ; 9044 60 ` + +; ---------------------------------------------------------------------------- + nop ; 9045 EA . + nop ; 9046 EA . + rts ; 9047 60 ` + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C EF 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C F9 95 L.. + +; ---------------------------------------------------------------------------- + .byte $82 ; 904E 82 . +__GetDirHead: + jsr L90C3 ; 904F 20 C3 90 .. + jsr __GetBlock ; 9052 20 7D 90 }. + txa ; 9055 8A . + bne L906F ; 9056 D0 17 .. + ldy curDrive ; 9058 AC 89 84 ... + lda $8203 ; 905B AD 03 82 ... + sta $88B7,y ; 905E 99 B7 88 ... + bpl L906F ; 9061 10 0C .. + jsr L90D2 ; 9063 20 D2 90 .. + jsr __GetBlock ; 9066 20 7D 90 }. + lda #$06 ; 9069 A9 06 .. + sta interleave ; 906B 8D 8C 84 ... + rts ; 906E 60 ` + +; ---------------------------------------------------------------------------- +L906F: lda #$08 ; 906F A9 08 .. + sta interleave ; 9071 8D 8C 84 ... + rts ; 9074 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9075 A9 80 .. + sta r4H ; 9077 85 0B .. + lda #$00 ; 9079 A9 00 .. + sta r4L ; 907B 85 0A .. +__GetBlock: + jsr EnterTurbo ; 907D 20 14 C2 .. + txa ; 9080 8A . + bne L9089 ; 9081 D0 06 .. + php ; 9083 08 . + sei ; 9084 78 x + jsr ReadBlock ; 9085 20 1A C2 .. + plp ; 9088 28 ( +L9089: rts ; 9089 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + php ; 908A 08 . + sei ; 908B 78 x + jsr L90C3 ; 908C 20 C3 90 .. + jsr WriteBlock ; 908F 20 20 C2 . + txa ; 9092 8A . + bne L90A6 ; 9093 D0 11 .. + ldy curDrive ; 9095 AC 89 84 ... + lda $8203 ; 9098 AD 03 82 ... + sta $88B7,y ; 909B 99 B7 88 ... + bpl L90A6 ; 909E 10 06 .. + jsr L90D2 ; 90A0 20 D2 90 .. + jsr WriteBlock ; 90A3 20 20 C2 . +L90A6: plp ; 90A6 28 ( + rts ; 90A7 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90A8 A9 80 .. + sta r4H ; 90AA 85 0B .. + lda #$00 ; 90AC A9 00 .. + sta r4L ; 90AE 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90B0 20 14 C2 .. + txa ; 90B3 8A . + bne L90C2 ; 90B4 D0 0C .. + php ; 90B6 08 . + sei ; 90B7 78 x + jsr WriteBlock ; 90B8 20 20 C2 . + txa ; 90BB 8A . + bne L90C1 ; 90BC D0 03 .. + jsr VerWriteBlock ; 90BE 20 23 C2 #. +L90C1: plp ; 90C1 28 ( +L90C2: rts ; 90C2 60 ` + +; ---------------------------------------------------------------------------- +L90C3: lda #$12 ; 90C3 A9 12 .. + sta r1L ; 90C5 85 04 .. + lda #$00 ; 90C7 A9 00 .. + sta r1H ; 90C9 85 05 .. + sta r4L ; 90CB 85 0A .. + lda #$82 ; 90CD A9 82 .. + sta r4H ; 90CF 85 0B .. + rts ; 90D1 60 ` + +; ---------------------------------------------------------------------------- +L90D2: lda #$35 ; 90D2 A9 35 .5 + sta r1L ; 90D4 85 04 .. + lda #$00 ; 90D6 A9 00 .. + sta r1H ; 90D8 85 05 .. + sta r4L ; 90DA 85 0A .. + lda #$89 ; 90DC A9 89 .. + sta r4H ; 90DE 85 0B .. + rts ; 90E0 60 ` + +; ---------------------------------------------------------------------------- +L90E1: lda #$00 ; 90E1 A9 00 .. + sta L96FC ; 90E3 8D FC 96 ... + ldx #$02 ; 90E6 A2 02 .. + lda r1L ; 90E8 A5 04 .. + beq L9100 ; 90EA F0 14 .. + cmp #$24 ; 90EC C9 24 .$ + bcc L90FE ; 90EE 90 0E .. + ldy curDrive ; 90F0 AC 89 84 ... + lda $88B7,y ; 90F3 B9 B7 88 ... + bpl L9100 ; 90F6 10 08 .. + lda r1L ; 90F8 A5 04 .. + cmp #$47 ; 90FA C9 47 .G + bcs L9100 ; 90FC B0 02 .. +L90FE: sec ; 90FE 38 8 + rts ; 90FF 60 ` + +; ---------------------------------------------------------------------------- +L9100: clc ; 9100 18 . + rts ; 9101 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9102 20 E1 C1 .. + txa ; 9105 8A . + bne L9131 ; 9106 D0 29 .) + jsr GetDirHead ; 9108 20 47 C2 G. + txa ; 910B 8A . + bne L9131 ; 910C D0 23 .# + lda #$82 ; 910E A9 82 .. + sta r5H ; 9110 85 0D .. + lda #$00 ; 9112 A9 00 .. + sta r5L ; 9114 85 0C .. + jsr ChkDkGEOS ; 9116 20 DE C1 .. + lda #$82 ; 9119 A9 82 .. + sta r4H ; 911B 85 0B .. + lda #$90 ; 911D A9 90 .. + sta r4L ; 911F 85 0A .. + ldx #$0C ; 9121 A2 0C .. + jsr GetPtrCurDkNm ; 9123 20 98 C2 .. + ldx #$0A ; 9126 A2 0A .. + ldy #$0C ; 9128 A0 0C .. + lda #$12 ; 912A A9 12 .. + jsr CopyFString ; 912C 20 68 C2 h. + ldx #$00 ; 912F A2 00 .. +L9131: rts ; 9131 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + ldy #$01 ; 9132 A0 01 .. + sty r3L ; 9134 84 08 .. + dey ; 9136 88 . + sty r3H ; 9137 84 09 .. +__NxtBlkAlloc: + lda r9H ; 9139 A5 15 .. + pha ; 913B 48 H + lda r9L ; 913C A5 14 .. + pha ; 913E 48 H + lda r3H ; 913F A5 09 .. + pha ; 9141 48 H + lda r3L ; 9142 A5 08 .. + pha ; 9144 48 H + lda #$00 ; 9145 A9 00 .. + sta r3H ; 9147 85 09 .. + lda #$FE ; 9149 A9 FE .. + sta r3L ; 914B 85 08 .. + ldx #$06 ; 914D A2 06 .. + ldy #$08 ; 914F A0 08 .. + jsr Ddiv ; 9151 20 69 C1 i. + lda r8L ; 9154 A5 12 .. + beq L915E ; 9156 F0 06 .. + inc r2L ; 9158 E6 06 .. + bne L915E ; 915A D0 02 .. + inc r2H ; 915C E6 07 .. +L915E: jsr L91CE ; 915E 20 CE 91 .. + jsr CalcBlksFree ; 9161 20 DB C1 .. + pla ; 9164 68 h + sta r3L ; 9165 85 08 .. + pla ; 9167 68 h + sta r3H ; 9168 85 09 .. + ldx #$03 ; 916A A2 03 .. + lda r2H ; 916C A5 07 .. + cmp r4H ; 916E C5 0B .. + bne L9176 ; 9170 D0 04 .. + lda r2L ; 9172 A5 06 .. + cmp r4L ; 9174 C5 0A .. +L9176: beq L917A ; 9176 F0 02 .. + bcs L91C7 ; 9178 B0 4D .M +L917A: lda r6H ; 917A A5 0F .. + sta r4H ; 917C 85 0B .. + lda r6L ; 917E A5 0E .. + sta r4L ; 9180 85 0A .. + lda r2H ; 9182 A5 07 .. + sta r5H ; 9184 85 0D .. + lda r2L ; 9186 A5 06 .. + sta r5L ; 9188 85 0C .. +L918A: jsr SetNextFree ; 918A 20 92 C2 .. + txa ; 918D 8A . + bne L91C7 ; 918E D0 37 .7 + ldy #$00 ; 9190 A0 00 .. + lda r3L ; 9192 A5 08 .. + sta (r4L),y ; 9194 91 0A .. + iny ; 9196 C8 . + lda r3H ; 9197 A5 09 .. + sta (r4L),y ; 9199 91 0A .. + clc ; 919B 18 . + lda #$02 ; 919C A9 02 .. + adc r4L ; 919E 65 0A e. + sta r4L ; 91A0 85 0A .. + bcc L91A6 ; 91A2 90 02 .. + inc r4H ; 91A4 E6 0B .. +L91A6: lda r5L ; 91A6 A5 0C .. + bne L91AC ; 91A8 D0 02 .. + dec r5H ; 91AA C6 0D .. +L91AC: dec r5L ; 91AC C6 0C .. + lda r5L ; 91AE A5 0C .. + ora r5H ; 91B0 05 0D .. + bne L918A ; 91B2 D0 D6 .. + ldy #$00 ; 91B4 A0 00 .. + tya ; 91B6 98 . + sta (r4L),y ; 91B7 91 0A .. + iny ; 91B9 C8 . + lda r8L ; 91BA A5 12 .. + bne L91C0 ; 91BC D0 02 .. + lda #$FE ; 91BE A9 FE .. +L91C0: clc ; 91C0 18 . + adc #$01 ; 91C1 69 01 i. + sta (r4L),y ; 91C3 91 0A .. + ldx #$00 ; 91C5 A2 00 .. +L91C7: pla ; 91C7 68 h + sta r9L ; 91C8 85 14 .. + pla ; 91CA 68 h + sta r9H ; 91CB 85 15 .. + rts ; 91CD 60 ` + +; ---------------------------------------------------------------------------- +L91CE: lda #$82 ; 91CE A9 82 .. + sta r5H ; 91D0 85 0D .. + lda #$00 ; 91D2 A9 00 .. + sta r5L ; 91D4 85 0C .. + rts ; 91D6 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$12 ; 91D7 A9 12 .. + sta r1L ; 91D9 85 04 .. + lda #$01 ; 91DB A9 01 .. + sta r1H ; 91DD 85 05 .. + jsr ReadBuff ; 91DF 20 3C 90 <. + lda #$80 ; 91E2 A9 80 .. + sta r5H ; 91E4 85 0D .. + lda #$02 ; 91E6 A9 02 .. + sta r5L ; 91E8 85 0C .. + lda #$00 ; 91EA A9 00 .. + sta L96FF ; 91EC 8D FF 96 ... + rts ; 91EF 60 ` + +; ---------------------------------------------------------------------------- +_GetNxtDirEntry: + ldx #$00 ; 91F0 A2 00 .. + ldy #$00 ; 91F2 A0 00 .. + clc ; 91F4 18 . + lda #$20 ; 91F5 A9 20 . + adc r5L ; 91F7 65 0C e. + sta r5L ; 91F9 85 0C .. + bcc L91FF ; 91FB 90 02 .. + inc r5H ; 91FD E6 0D .. +L91FF: lda r5H ; 91FF A5 0D .. + cmp #$80 ; 9201 C9 80 .. + bne L9209 ; 9203 D0 04 .. + lda r5L ; 9205 A5 0C .. + cmp #$FF ; 9207 C9 FF .. +L9209: bcc L9239 ; 9209 90 2E .. + ldy #$FF ; 920B A0 FF .. + lda $8001 ; 920D AD 01 80 ... + sta r1H ; 9210 85 05 .. + lda diskBlkBuf ; 9212 AD 00 80 ... + sta r1L ; 9215 85 04 .. + bne L922C ; 9217 D0 13 .. + lda L96FF ; 9219 AD FF 96 ... + bne L9239 ; 921C D0 1B .. + lda #$FF ; 921E A9 FF .. + sta L96FF ; 9220 8D FF 96 ... + jsr GetBorder ; 9223 20 36 90 6. + txa ; 9226 8A . + bne L9239 ; 9227 D0 10 .. + tya ; 9229 98 . + bne L9239 ; 922A D0 0D .. +L922C: jsr ReadBuff ; 922C 20 3C 90 <. + ldy #$00 ; 922F A0 00 .. + lda #$80 ; 9231 A9 80 .. + sta r5H ; 9233 85 0D .. + lda #$02 ; 9235 A9 02 .. + sta r5L ; 9237 85 0C .. +L9239: rts ; 9239 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 923A 20 47 C2 G. + txa ; 923D 8A . + bne L925F ; 923E D0 1F .. + lda #$82 ; 9240 A9 82 .. + sta r5H ; 9242 85 0D .. + lda #$00 ; 9244 A9 00 .. + sta r5L ; 9246 85 0C .. + jsr ChkDkGEOS ; 9248 20 DE C1 .. + bne L9251 ; 924B D0 04 .. + ldy #$FF ; 924D A0 FF .. + bne L925D ; 924F D0 0C .. +L9251: lda $82AC ; 9251 AD AC 82 ... + sta r1H ; 9254 85 05 .. + lda $82AB ; 9256 AD AB 82 ... + sta r1L ; 9259 85 04 .. + ldy #$00 ; 925B A0 00 .. +L925D: ldx #$00 ; 925D A2 00 .. +L925F: rts ; 925F 60 ` + +; ---------------------------------------------------------------------------- +__ChkDkGEOS: + ldy #$AD ; 9260 A0 AD .. + ldx #$00 ; 9262 A2 00 .. + lda #$00 ; 9264 A9 00 .. + sta isGEOS ; 9266 8D 8B 84 ... +L9269: lda (r5L),y ; 9269 B1 0C .. + cmp L927F,x ; 926B DD 7F 92 ... + bne L927B ; 926E D0 0B .. + iny ; 9270 C8 . + inx ; 9271 E8 . + cpx #$0B ; 9272 E0 0B .. + bne L9269 ; 9274 D0 F3 .. + lda #$FF ; 9276 A9 FF .. + sta isGEOS ; 9278 8D 8B 84 ... +L927B: lda isGEOS ; 927B AD 8B 84 ... + rts ; 927E 60 ` + +; ---------------------------------------------------------------------------- +L927F: .byte "GEOS format V1.0" ; 927F 47 45 4F 53 20 66 6F 72 GEOS for + ; 9287 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 928F 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 9290 08 . + sei ; 9291 78 x + lda r6L ; 9292 A5 0E .. + pha ; 9294 48 H + lda r2H ; 9295 A5 07 .. + pha ; 9297 48 H + lda r2L ; 9298 A5 06 .. + pha ; 929A 48 H + ldx r10L ; 929B A6 16 .. + inx ; 929D E8 . + stx r6L ; 929E 86 0E .. + lda #$12 ; 92A0 A9 12 .. + sta r1L ; 92A2 85 04 .. + lda #$01 ; 92A4 A9 01 .. + sta r1H ; 92A6 85 05 .. +L92A8: jsr ReadBuff ; 92A8 20 3C 90 <. +L92AB: txa ; 92AB 8A . + bne L92E6 ; 92AC D0 38 .8 + dec r6L ; 92AE C6 0E .. + beq L92C7 ; 92B0 F0 15 .. +L92B2: lda diskBlkBuf ; 92B2 AD 00 80 ... + bne L92BD ; 92B5 D0 06 .. + jsr AddDirBlock ; 92B7 20 39 90 9. + clv ; 92BA B8 . + bvc L92AB ; 92BB 50 EE P. +L92BD: sta r1L ; 92BD 85 04 .. + lda $8001 ; 92BF AD 01 80 ... + sta r1H ; 92C2 85 05 .. + clv ; 92C4 B8 . + bvc L92A8 ; 92C5 50 E1 P. +L92C7: ldy #$02 ; 92C7 A0 02 .. + ldx #$00 ; 92C9 A2 00 .. +L92CB: lda diskBlkBuf,y ; 92CB B9 00 80 ... + beq L92E6 ; 92CE F0 16 .. + tya ; 92D0 98 . + clc ; 92D1 18 . + adc #$20 ; 92D2 69 20 i + tay ; 92D4 A8 . + bcc L92CB ; 92D5 90 F4 .. + lda #$01 ; 92D7 A9 01 .. + sta r6L ; 92D9 85 0E .. + ldx #$04 ; 92DB A2 04 .. + ldy r10L ; 92DD A4 16 .. + iny ; 92DF C8 . + sty r10L ; 92E0 84 16 .. + cpy #$12 ; 92E2 C0 12 .. + bcc L92B2 ; 92E4 90 CC .. +L92E6: pla ; 92E6 68 h + sta r2L ; 92E7 85 06 .. + pla ; 92E9 68 h + sta r2H ; 92EA 85 07 .. + pla ; 92EC 68 h + sta r6L ; 92ED 85 0E .. + plp ; 92EF 28 ( + rts ; 92F0 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 92F1 A5 0F .. + pha ; 92F3 48 H + lda r6L ; 92F4 A5 0E .. + pha ; 92F6 48 H + ldy #$48 ; 92F7 A0 48 .H + ldx #$04 ; 92F9 A2 04 .. + lda curDirHead,y ; 92FB B9 00 82 ... + beq L9326 ; 92FE F0 26 .& + lda r1H ; 9300 A5 05 .. + sta r3H ; 9302 85 09 .. + lda r1L ; 9304 A5 04 .. + sta r3L ; 9306 85 08 .. + jsr SetNextFree ; 9308 20 92 C2 .. + lda r3H ; 930B A5 09 .. + sta $8001 ; 930D 8D 01 80 ... + lda r3L ; 9310 A5 08 .. + sta diskBlkBuf ; 9312 8D 00 80 ... + jsr WriteBuff ; 9315 20 3F 90 ?. + txa ; 9318 8A . + bne L9326 ; 9319 D0 0B .. + lda r3H ; 931B A5 09 .. + sta r1H ; 931D 85 05 .. + lda r3L ; 931F A5 08 .. + sta r1L ; 9321 85 04 .. + jsr L932D ; 9323 20 2D 93 -. +L9326: pla ; 9326 68 h + sta r6L ; 9327 85 0E .. + pla ; 9329 68 h + sta r6H ; 932A 85 0F .. + rts ; 932C 60 ` + +; ---------------------------------------------------------------------------- +L932D: lda #$00 ; 932D A9 00 .. + tay ; 932F A8 . +L9330: sta diskBlkBuf,y ; 9330 99 00 80 ... + iny ; 9333 C8 . + bne L9330 ; 9334 D0 FA .. + dey ; 9336 88 . + sty $8001 ; 9337 8C 01 80 ... + jmp WriteBuff ; 933A 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + lda r3H ; 933D A5 09 .. + clc ; 933F 18 . + adc interleave ; 9340 6D 8C 84 m.. + sta r6H ; 9343 85 0F .. + lda r3L ; 9345 A5 08 .. + sta r6L ; 9347 85 0E .. + cmp #$12 ; 9349 C9 12 .. + beq L935B ; 934B F0 0E .. + cmp #$35 ; 934D C9 35 .5 + beq L935B ; 934F F0 0A .. +L9351: lda r6L ; 9351 A5 0E .. + cmp #$12 ; 9353 C9 12 .. + beq L9387 ; 9355 F0 30 .0 + cmp #$35 ; 9357 C9 35 .5 + beq L9387 ; 9359 F0 2C ., +L935B: cmp #$24 ; 935B C9 24 .$ + bcc L936A ; 935D 90 0B .. + clc ; 935F 18 . + adc #$B9 ; 9360 69 B9 i. + tax ; 9362 AA . + lda curDirHead,x ; 9363 BD 00 82 ... + bne L9372 ; 9366 D0 0A .. + beq L9387 ; 9368 F0 1D .. +L936A: asl a ; 936A 0A . + asl a ; 936B 0A . + tax ; 936C AA . + lda curDirHead,x ; 936D BD 00 82 ... + beq L9387 ; 9370 F0 15 .. +L9372: lda r6L ; 9372 A5 0E .. + jsr L93C5 ; 9374 20 C5 93 .. + lda L93DD,x ; 9377 BD DD 93 ... + sta r7L ; 937A 85 10 .. + tay ; 937C A8 . +L937D: jsr L93E1 ; 937D 20 E1 93 .. + beq L93B7 ; 9380 F0 35 .5 + inc r6H ; 9382 E6 0F .. + dey ; 9384 88 . + bne L937D ; 9385 D0 F6 .. +L9387: bit $8203 ; 9387 2C 03 82 ,.. + bpl L93A0 ; 938A 10 14 .. + lda r6L ; 938C A5 0E .. + cmp #$24 ; 938E C9 24 .$ + bcs L9399 ; 9390 B0 07 .. + clc ; 9392 18 . + adc #$23 ; 9393 69 23 i# + sta r6L ; 9395 85 0E .. + bne L93A8 ; 9397 D0 0F .. +L9399: sec ; 9399 38 8 + sbc #$22 ; 939A E9 22 ." + sta r6L ; 939C 85 0E .. + bne L93A4 ; 939E D0 04 .. +L93A0: inc r6L ; 93A0 E6 0E .. + lda r6L ; 93A2 A5 0E .. +L93A4: cmp #$24 ; 93A4 C9 24 .$ + bcs L93C2 ; 93A6 B0 1A .. +L93A8: sec ; 93A8 38 8 + sbc r3L ; 93A9 E5 08 .. + sta r6H ; 93AB 85 0F .. + asl a ; 93AD 0A . + adc #$04 ; 93AE 69 04 i. + adc interleave ; 93B0 6D 8C 84 m.. + sta r6H ; 93B3 85 0F .. + bne L9351 ; 93B5 D0 9A .. +L93B7: lda r6L ; 93B7 A5 0E .. + sta r3L ; 93B9 85 08 .. + lda r6H ; 93BB A5 0F .. + sta r3H ; 93BD 85 09 .. + ldx #$00 ; 93BF A2 00 .. + rts ; 93C1 60 ` + +; ---------------------------------------------------------------------------- +L93C2: ldx #$03 ; 93C2 A2 03 .. + rts ; 93C4 60 ` + +; ---------------------------------------------------------------------------- +L93C5: pha ; 93C5 48 H + cmp #$24 ; 93C6 C9 24 .$ + bcc L93CD ; 93C8 90 03 .. + sec ; 93CA 38 8 + sbc #$23 ; 93CB E9 23 .# +L93CD: ldx #$00 ; 93CD A2 00 .. +L93CF: cmp L93D9,x ; 93CF DD D9 93 ... + bcc L93D7 ; 93D2 90 03 .. + inx ; 93D4 E8 . + bne L93CF ; 93D5 D0 F8 .. +L93D7: pla ; 93D7 68 h + rts ; 93D8 60 ` + +; ---------------------------------------------------------------------------- +L93D9: .byte $12 ; 93D9 12 . + ora $241F,y ; 93DA 19 1F 24 ..$ +L93DD: ora r8H,x ; 93DD 15 13 .. + .byte $12 ; 93DF 12 . + .byte $11 ; 93E0 11 . +L93E1: lda r6H ; 93E1 A5 0F .. +L93E3: cmp r7L ; 93E3 C5 10 .. + bcc L93ED ; 93E5 90 06 .. + sec ; 93E7 38 8 + sbc r7L ; 93E8 E5 10 .. + clv ; 93EA B8 . + bvc L93E3 ; 93EB 50 F6 P. +L93ED: sta r6H ; 93ED 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93EF 20 AD C2 .. + beq L9419 ; 93F2 F0 25 .% + lda r6L ; 93F4 A5 0E .. + cmp #$24 ; 93F6 C9 24 .$ + bcc L9407 ; 93F8 90 0D .. + lda r8H ; 93FA A5 13 .. + eor #$FF ; 93FC 49 FF I. + and dir2Head,x ; 93FE 3D 00 89 =.. + sta dir2Head,x ; 9401 9D 00 89 ... + clv ; 9404 B8 . + bvc L9411 ; 9405 50 0A P. +L9407: lda r8H ; 9407 A5 13 .. + eor #$FF ; 9409 49 FF I. + and curDirHead,x ; 940B 3D 00 82 =.. + sta curDirHead,x ; 940E 9D 00 82 ... +L9411: ldx r7H ; 9411 A6 11 .. + dec curDirHead,x ; 9413 DE 00 82 ... + ldx #$00 ; 9416 A2 00 .. + rts ; 9418 60 ` + +; ---------------------------------------------------------------------------- +L9419: ldx #$06 ; 9419 A2 06 .. + rts ; 941B 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 941C A5 0F .. + and #$07 ; 941E 29 07 ). + tax ; 9420 AA . + lda L945F,x ; 9421 BD 5F 94 ._. + sta r8H ; 9424 85 13 .. + lda r6L ; 9426 A5 0E .. + cmp #$24 ; 9428 C9 24 .$ + bcc L944C ; 942A 90 20 . + sec ; 942C 38 8 + sbc #$24 ; 942D E9 24 .$ + sta r7H ; 942F 85 11 .. + lda r6H ; 9431 A5 0F .. + lsr a ; 9433 4A J + lsr a ; 9434 4A J + lsr a ; 9435 4A J + clc ; 9436 18 . + adc r7H ; 9437 65 11 e. + asl r7H ; 9439 06 11 .. + clc ; 943B 18 . + adc r7H ; 943C 65 11 e. + tax ; 943E AA . + lda r6L ; 943F A5 0E .. + clc ; 9441 18 . + adc #$B9 ; 9442 69 B9 i. + sta r7H ; 9444 85 11 .. + lda dir2Head,x ; 9446 BD 00 89 ... + and r8H ; 9449 25 13 %. + rts ; 944B 60 ` + +; ---------------------------------------------------------------------------- +L944C: asl a ; 944C 0A . + asl a ; 944D 0A . + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda curDirHead,x ; 9459 BD 00 82 ... + and r8H ; 945C 25 13 %. + rts ; 945E 60 ` + +; ---------------------------------------------------------------------------- +L945F: ora (r0L,x) ; 945F 01 02 .. + .byte $04 ; 9461 04 . + php ; 9462 08 . + bpl L9485 ; 9463 10 20 . + rti ; 9465 40 @ + +; ---------------------------------------------------------------------------- + .byte $80 ; 9466 80 . +__FreeBlock: + jsr FindBAMBit ; 9467 20 AD C2 .. + bne L948D ; 946A D0 21 .! + lda r6L ; 946C A5 0E .. + cmp #$24 ; 946E C9 24 .$ + bcc L947D ; 9470 90 0B .. + lda r8H ; 9472 A5 13 .. + eor dir2Head,x ; 9474 5D 00 89 ].. + sta dir2Head,x ; 9477 9D 00 89 ... + clv ; 947A B8 . + bvc L9485 ; 947B 50 08 P. +L947D: lda r8H ; 947D A5 13 .. + eor curDirHead,x ; 947F 5D 00 82 ].. + sta curDirHead,x ; 9482 9D 00 82 ... +L9485: ldx r7H ; 9485 A6 11 .. + inc curDirHead,x ; 9487 FE 00 82 ... + ldx #$00 ; 948A A2 00 .. + rts ; 948C 60 ` + +; ---------------------------------------------------------------------------- +L948D: ldx #$06 ; 948D A2 06 .. + rts ; 948F 60 ` + +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9490 A9 00 .. + sta r4L ; 9492 85 0A .. + sta r4H ; 9494 85 0B .. + ldy #$04 ; 9496 A0 04 .. +L9498: lda (r5L),y ; 9498 B1 0C .. + clc ; 949A 18 . + adc r4L ; 949B 65 0A e. + sta r4L ; 949D 85 0A .. + bcc L94A3 ; 949F 90 02 .. + inc r4H ; 94A1 E6 0B .. +L94A3: tya ; 94A3 98 . + clc ; 94A4 18 . + adc #$04 ; 94A5 69 04 i. + tay ; 94A7 A8 . + cpy #$48 ; 94A8 C0 48 .H + beq L94A3 ; 94AA F0 F7 .. + cpy #$90 ; 94AC C0 90 .. + bne L9498 ; 94AE D0 E8 .. + lda #$02 ; 94B0 A9 02 .. + sta r3H ; 94B2 85 09 .. + lda #$98 ; 94B4 A9 98 .. + sta r3L ; 94B6 85 08 .. + bit $8203 ; 94B8 2C 03 82 ,.. + bpl L94D5 ; 94BB 10 18 .. + ldy #$DD ; 94BD A0 DD .. +L94BF: lda (r5L),y ; 94BF B1 0C .. + clc ; 94C1 18 . + adc r4L ; 94C2 65 0A e. + sta r4L ; 94C4 85 0A .. + bcc L94CA ; 94C6 90 02 .. + inc r4H ; 94C8 E6 0B .. +L94CA: iny ; 94CA C8 . + bne L94BF ; 94CB D0 F2 .. + lda #$05 ; 94CD A9 05 .. + sta r3H ; 94CF 85 09 .. + lda #$30 ; 94D1 A9 30 .0 + sta r3L ; 94D3 85 08 .. +L94D5: rts ; 94D5 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94D6 20 47 C2 G. + txa ; 94D9 8A . + bne L9536 ; 94DA D0 5A .Z + lda #$82 ; 94DC A9 82 .. + sta r5H ; 94DE 85 0D .. + lda #$00 ; 94E0 A9 00 .. + sta r5L ; 94E2 85 0C .. + jsr CalcBlksFree ; 94E4 20 DB C1 .. + ldx #$03 ; 94E7 A2 03 .. + lda r4L ; 94E9 A5 0A .. + ora r4H ; 94EB 05 0B .. + beq L9536 ; 94ED F0 47 .G + lda #$00 ; 94EF A9 00 .. + sta r0L ; 94F1 85 02 .. + lda #$13 ; 94F3 A9 13 .. + sta r3L ; 94F5 85 08 .. +L94F7: lda #$00 ; 94F7 A9 00 .. + sta r3H ; 94F9 85 09 .. + jsr SetNextFree ; 94FB 20 92 C2 .. + txa ; 94FE 8A . + beq L950D ; 94FF F0 0C .. + lda r0L ; 9501 A5 02 .. + bne L9536 ; 9503 D0 31 .1 + lda #$01 ; 9505 A9 01 .. + sta r3L ; 9507 85 08 .. + sta r0L ; 9509 85 02 .. + bne L94F7 ; 950B D0 EA .. +L950D: lda r3H ; 950D A5 09 .. + sta r1H ; 950F 85 05 .. + lda r3L ; 9511 A5 08 .. + sta r1L ; 9513 85 04 .. + jsr L932D ; 9515 20 2D 93 -. + txa ; 9518 8A . + bne L9536 ; 9519 D0 1B .. + lda r1H ; 951B A5 05 .. + sta $82AC ; 951D 8D AC 82 ... + lda r1L ; 9520 A5 04 .. + sta $82AB ; 9522 8D AB 82 ... + ldy #$BC ; 9525 A0 BC .. + ldx #$0F ; 9527 A2 0F .. +L9529: lda L927F,x ; 9529 BD 7F 92 ... + sta curDirHead,y ; 952C 99 00 82 ... + dey ; 952F 88 . + dex ; 9530 CA . + bpl L9529 ; 9531 10 F6 .. + jsr PutDirHead ; 9533 20 4A C2 J. +L9536: rts ; 9536 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + php ; 9537 08 . + pla ; 9538 68 h + sta L96F1 ; 9539 8D F1 96 ... + sei ; 953C 78 x + lda CPU_DATA ; 953D A5 01 .. + sta L96F3 ; 953F 8D F3 96 ... + lda #$36 ; 9542 A9 36 .6 + sta CPU_DATA ; 9544 85 01 .. + lda grirqen ; 9546 AD 1A D0 ... + sta L96F2 ; 9549 8D F2 96 ... + lda clkreg ; 954C AD 30 D0 .0. + sta L96F0 ; 954F 8D F0 96 ... + ldy #$00 ; 9552 A0 00 .. + sty clkreg ; 9554 8C 30 D0 .0. + sty grirqen ; 9557 8C 1A D0 ... + lda #$7F ; 955A A9 7F .. + sta grirq ; 955C 8D 19 D0 ... + sta $DC0D ; 955F 8D 0D DC ... + sta $DD0D ; 9562 8D 0D DD ... + lda #$95 ; 9565 A9 95 .. + sta $0315 ; 9567 8D 15 03 ... + lda #$A7 ; 956A A9 A7 .. + sta irqvec ; 956C 8D 14 03 ... + lda #$95 ; 956F A9 95 .. + sta $0319 ; 9571 8D 19 03 ... + lda #$AC ; 9574 A9 AC .. + sta nmivec ; 9576 8D 18 03 ... + lda #$3F ; 9579 A9 3F .? + sta $DD02 ; 957B 8D 02 DD ... + lda mobenble ; 957E AD 15 D0 ... + sta L96F4 ; 9581 8D F4 96 ... + sty mobenble ; 9584 8C 15 D0 ... + sty $DD05 ; 9587 8C 05 DD ... + iny ; 958A C8 . + sty $DD04 ; 958B 8C 04 DD ... + lda #$81 ; 958E A9 81 .. + sta $DD0D ; 9590 8D 0D DD ... + lda #$09 ; 9593 A9 09 .. + sta $DD0E ; 9595 8D 0E DD ... + ldy #$2C ; 9598 A0 2C ., +L959A: lda rasreg ; 959A AD 12 D0 ... + cmp TURBO_DD00_CPY ; 959D C5 8F .. + beq L959A ; 959F F0 F9 .. + sta TURBO_DD00_CPY ; 95A1 85 8F .. + dey ; 95A3 88 . + bne L959A ; 95A4 D0 F4 .. + rts ; 95A6 60 ` + +; ---------------------------------------------------------------------------- + pla ; 95A7 68 h + tay ; 95A8 A8 . + pla ; 95A9 68 h + tax ; 95AA AA . + pla ; 95AB 68 h + rti ; 95AC 40 @ + +; ---------------------------------------------------------------------------- +__DoneWithIO: + sei ; 95AD 78 x + lda L96F0 ; 95AE AD F0 96 ... + sta clkreg ; 95B1 8D 30 D0 .0. + lda L96F4 ; 95B4 AD F4 96 ... + sta mobenble ; 95B7 8D 15 D0 ... + lda #$7F ; 95BA A9 7F .. + sta $DD0D ; 95BC 8D 0D DD ... + lda $DD0D ; 95BF AD 0D DD ... + lda L96F2 ; 95C2 AD F2 96 ... + sta grirqen ; 95C5 8D 1A D0 ... + lda L96F3 ; 95C8 AD F3 96 ... + sta CPU_DATA ; 95CB 85 01 .. + lda L96F1 ; 95CD AD F1 96 ... + pha ; 95D0 48 H + plp ; 95D1 28 ( + rts ; 95D2 60 ` + +; ---------------------------------------------------------------------------- +__EnterTurbo: + lda curDrive ; 95D3 AD 89 84 ... + jsr SetDevice ; 95D6 20 B0 C2 .. + ldx #$00 ; 95D9 A2 00 .. + rts ; 95DB 60 ` + +; ---------------------------------------------------------------------------- +__ExitTurbo: + lda #$08 ; 95DC A9 08 .. + sta interleave ; 95DE 8D 8C 84 ... + rts ; 95E1 60 ` + +; ---------------------------------------------------------------------------- +__ChangeDiskDevice: + sta curDrive ; 95E2 8D 89 84 ... + sta curDevice ; 95E5 85 BA .. + ldx #$00 ; 95E7 A2 00 .. + rts ; 95E9 60 ` + +; ---------------------------------------------------------------------------- +__NewDisk: + jsr EnterTurbo ; 95EA 20 14 C2 .. + rts ; 95ED 60 ` + +; ---------------------------------------------------------------------------- +__ReadBlock: + jsr L90E1 ; 95EE 20 E1 90 .. + bcc L95F6 ; 95F1 90 03 .. + jsr L9615 ; 95F3 20 15 96 .. +L95F6: ldy #$00 ; 95F6 A0 00 .. + rts ; 95F8 60 ` + +; ---------------------------------------------------------------------------- +_ReadLink: + jsr L90E1 ; 95F9 20 E1 90 .. + bcc L9603 ; 95FC 90 05 .. + ldy #$91 ; 95FE A0 91 .. + jsr L961D ; 9600 20 1D 96 .. +L9603: rts ; 9603 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr L90E1 ; 9604 20 E1 90 .. + bcc L960C ; 9607 90 03 .. + jsr L9619 ; 9609 20 19 96 .. +L960C: rts ; 960C 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + jsr L90E1 ; 960D 20 E1 90 .. + bcc L9614 ; 9610 90 02 .. + ldx #$00 ; 9612 A2 00 .. +L9614: rts ; 9614 60 ` + +; ---------------------------------------------------------------------------- +L9615: ldy #$91 ; 9615 A0 91 .. + bne L962D ; 9617 D0 14 .. +L9619: ldy #$90 ; 9619 A0 90 .. + bne L962D ; 961B D0 10 .. +L961D: lda r2H ; 961D A5 07 .. + pha ; 961F 48 H + lda r2L ; 9620 A5 06 .. + pha ; 9622 48 H + lda #$00 ; 9623 A9 00 .. + sta r2H ; 9625 85 07 .. + lda #$02 ; 9627 A9 02 .. + sta r2L ; 9629 85 06 .. + bne L963B ; 962B D0 0E .. +L962D: lda r2H ; 962D A5 07 .. + pha ; 962F 48 H + lda r2L ; 9630 A5 06 .. + pha ; 9632 48 H + lda #$01 ; 9633 A9 01 .. + sta r2H ; 9635 85 07 .. + lda #$00 ; 9637 A9 00 .. + sta r2L ; 9639 85 06 .. +L963B: lda r0H ; 963B A5 03 .. + pha ; 963D 48 H + lda r0L ; 963E A5 02 .. + pha ; 9640 48 H + lda r1H ; 9641 A5 05 .. + pha ; 9643 48 H + lda r1L ; 9644 A5 04 .. + pha ; 9646 48 H + lda r3L ; 9647 A5 08 .. + pha ; 9649 48 H + tya ; 964A 98 . + pha ; 964B 48 H + lda r1L ; 964C A5 04 .. + cmp #$24 ; 964E C9 24 .$ + bcc L9655 ; 9650 90 03 .. + sec ; 9652 38 8 + sbc #$23 ; 9653 E9 23 .# +L9655: tay ; 9655 A8 . + dey ; 9656 88 . + lda L96A8,y ; 9657 B9 A8 96 ... + clc ; 965A 18 . + adc r1H ; 965B 65 05 e. + sta r1H ; 965D 85 05 .. + lda L96CC,y ; 965F B9 CC 96 ... + ldy curDrive ; 9662 AC 89 84 ... + adc driveData,y ; 9665 79 BF 88 y.. + sta r3L ; 9668 85 08 .. + lda r1L ; 966A A5 04 .. + cmp #$24 ; 966C C9 24 .$ + bcc L967D ; 966E 90 0D .. + lda r1H ; 9670 A5 05 .. + clc ; 9672 18 . + adc #$BC ; 9673 69 BC i. + sta r1H ; 9675 85 05 .. + lda r3L ; 9677 A5 08 .. + adc #$02 ; 9679 69 02 i. + sta r3L ; 967B 85 08 .. +L967D: lda #$00 ; 967D A9 00 .. + sta r1L ; 967F 85 04 .. + lda r4H ; 9681 A5 0B .. + sta r0H ; 9683 85 03 .. + lda r4L ; 9685 A5 0A .. + sta r0L ; 9687 85 02 .. + pla ; 9689 68 h + tay ; 968A A8 . + jsr DoRAMOp ; 968B 20 D4 C2 .. + tax ; 968E AA . + pla ; 968F 68 h + sta r3L ; 9690 85 08 .. + pla ; 9692 68 h + sta r1L ; 9693 85 04 .. + pla ; 9695 68 h + sta r1H ; 9696 85 05 .. + pla ; 9698 68 h + sta r0L ; 9699 85 02 .. + pla ; 969B 68 h + sta r0H ; 969C 85 03 .. + pla ; 969E 68 h + sta r2L ; 969F 85 06 .. + pla ; 96A1 68 h + sta r2H ; 96A2 85 07 .. + txa ; 96A4 8A . + ldx #$00 ; 96A5 A2 00 .. + rts ; 96A7 60 ` + +; ---------------------------------------------------------------------------- +L96A8: brk ; 96A8 00 . + ora curIndexTable,x ; 96A9 15 2A .* + .byte $3F ; 96AB 3F ? + .byte $54 ; 96AC 54 T + adc #$7E ; 96AD 69 7E i~ + .byte $93 ; 96AF 93 . + tay ; 96B0 A8 . + lda $E7D2,x ; 96B1 BD D2 E7 ... + .byte $FC ; 96B4 FC . + ora (baselineOffset),y ; 96B5 11 26 .& + .byte $3B ; 96B7 3B ; + ;bvc L971F ; 96B8 50 65 Pe + .byte $50 + .byte $65 + sei ; 96BA 78 x + .byte $8B ; 96BB 8B . + .byte $9E ; 96BC 9E . + lda ($C4),y ; 96BD B1 C4 .. + .byte $D7 ; 96BF D7 . + nop ; 96C0 EA . + .byte $FC ; 96C1 FC . + asl $3220 ; 96C2 0E 20 32 . 2 + .byte $44 ; 96C5 44 D + lsr $67,x ; 96C6 56 67 Vg + sei ; 96C8 78 x + .byte $89 ; 96C9 89 . + txs ; 96CA 9A . + .byte $AB ; 96CB AB . +L96CC: brk ; 96CC 00 . + brk ; 96CD 00 . + brk ; 96CE 00 . + brk ; 96CF 00 . + brk ; 96D0 00 . + brk ; 96D1 00 . + brk ; 96D2 00 . + brk ; 96D3 00 . + brk ; 96D4 00 . + brk ; 96D5 00 . + brk ; 96D6 00 . + brk ; 96D7 00 . + brk ; 96D8 00 . + ora (CPU_DATA,x) ; 96D9 01 01 .. + ora (CPU_DATA,x) ; 96DB 01 01 .. + ora (CPU_DATA,x) ; 96DD 01 01 .. + ora (CPU_DATA,x) ; 96DF 01 01 .. + ora (CPU_DATA,x) ; 96E1 01 01 .. + ora (CPU_DATA,x) ; 96E3 01 01 .. + ora (r0L,x) ; 96E5 01 02 .. + .byte $02 ; 96E7 02 . + .byte $02 ; 96E8 02 . + .byte $02 ; 96E9 02 . + .byte $02 ; 96EA 02 . + .byte $02 ; 96EB 02 . + .byte $02 ; 96EC 02 . + .byte $02 ; 96ED 02 . + .byte $02 ; 96EE 02 . + .byte $02 ; 96EF 02 . +L96F0: brk ; 96F0 00 . +L96F1: brk ; 96F1 00 . +L96F2: brk ; 96F2 00 . +L96F3: brk ; 96F3 00 . +L96F4: brk ; 96F4 00 . + brk ; 96F5 00 . + brk ; 96F6 00 . + brk ; 96F7 00 . + brk ; 96F8 00 . + brk ; 96F9 00 . + brk ; 96FA 00 . + brk ; 96FB 00 . +L96FC: brk ; 96FC 00 . + brk ; 96FD 00 . + brk ; 96FE 00 . +L96FF: brk ; 96FF 00 . +; .byte $F2 ; 9700 F2 . diff --git a/drv/drv1581-21hd.cfg b/drv/drv1581-21hd.cfg new file mode 100644 index 00000000..e43a060a --- /dev/null +++ b/drv/drv1581-21hd.cfg @@ -0,0 +1,11 @@ +MEMORY { + DISK_BASE: start = $9000, size = $0D80 file = %O; + + DRIVE0300: start = $0300, size = $0500; +} + +SEGMENTS { + drv1581_21hd: load = DISK_BASE, type = ro; + drv1581_21hd_drivecode: load = DISK_BASE, run = DRIVE0300, type = ro; + drv1581_21hd_b: load = DISK_BASE, type = ro; +} diff --git a/drv/drv1581-21hd.s b/drv/drv1581-21hd.s new file mode 100644 index 00000000..97f091ca --- /dev/null +++ b/drv/drv1581-21hd.s @@ -0,0 +1,1859 @@ +; da65 V2.15 +; Created: 2017-06-30 19:08:50 +; Input file: configure.cvt.record.4 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + +LFF54 := $FF54 +LFF6C := $FF6C +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 + +L04B9 := $04B9 +L032B := $032B +L04D1 := $04D1 +L04B0 := $04B0 +L04E9 := $04E9 +L046E := $046E +L03AD := $03AD +L03ED := $03ED +L03FF := $03FF +L03FD := $03FD +L03FC := $03FC +L03FB := $03FB +L03FE := $03FE +L0368 := $0368 +L0402 := $0402 +L04BE := $04BE +L046A := $046A +L0354 := $0354 +L0362 := $0362 + + + + + + + + + + + + +; ---------------------------------------------------------------------------- + +.segment "drv1581_21hd": absolute + +_InitForIO: + .addr __InitForIO ; 9000 EF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 92 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 F3 96 .. +_PurgeTurbo: + .addr __PurgeTurbo ; 9006 68 97 h. +_EnterTurbo: + .addr __EnterTurbo ; 9008 E8 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 74 97 t. +_NewDisk: + .addr __NewDisk ; 900C E5 97 .. +_ReadBlock: + .addr __ReadBlock ; 900E D6 98 .. +_WriteBlock: + .addr __WriteBlock ; 9010 3A 99 :. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 69 99 i. +_OpenDisk: + .addr __OpenDisk ; 9014 16 91 .. +_GetBlock: + .addr __GetBlock ; 9016 8C 90 .. +_PutBlock: + .addr __PutBlock ; 9018 C4 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 64 90 d. +_PutDirHead: + .addr __PutDirHead ; 901C 9C 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E BC 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 73 94 s. +_FreeBlock: + .addr __FreeBlock ; 9022 29 94 ). +_SetNextFree: + .addr __SetNextFree ; 9024 64 93 d. +_FindBAMBit: + .addr __FindBAMBit ; 9026 31 94 1. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 6A 91 j. +_BlkAlloc: + .addr __BlkAlloc ; 902A 3D 91 =. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 8E 92 .. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E B1 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C 0F 92 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C 1E 92 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 68 92 Lh. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C 1D 93 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 84 90 L.. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C BC 90 L.. + +; ---------------------------------------------------------------------------- + jmp DUNK4_2 ; 9042 4C AB 97 L.. + +; ---------------------------------------------------------------------------- + jmp GetDOSError ; 9045 4C 6C 99 Ll. + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C E8 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C 0E 98 L.. + +; ---------------------------------------------------------------------------- + .byte $03 ; 904E 03 . + .byte "For Noelle & Dylan" ; 904F 46 6F 72 20 4E 6F 65 6C For Noel + ; 9057 6C 65 20 26 20 44 79 6C le & Dyl + ; 905F 61 6E an + .byte $00 ; 9061 00 . +; ---------------------------------------------------------------------------- + bpl __GetDirHead ; 9062 10 00 .. +__GetDirHead: + lda #$FF ; 9064 A9 FF .. + sta L9BFA ; 9066 8D FA 9B ... + jsr EnterTurbo ; 9069 20 14 C2 .. + txa ; 906C 8A . + bne L9083 ; 906D D0 14 .. + jsr InitForIO ; 906F 20 5C C2 \. + jsr SetDirHead_1 ; 9072 20 D4 90 .. + bne L907F ; 9075 D0 08 .. + jsr SetDirHead_2 ; 9077 20 DC 90 .. + bne L907F ; 907A D0 03 .. + jsr SetDirHead_3 ; 907C 20 E4 90 .. +L907F: jsr DoneWithIO ; 907F 20 5F C2 _. + txa ; 9082 8A . +L9083: rts ; 9083 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9084 A9 80 .. + sta r4H ; 9086 85 0B .. + lda #$00 ; 9088 A9 00 .. + sta r4L ; 908A 85 0A .. +__GetBlock: + jsr EnterTurbo ; 908C 20 14 C2 .. + bne L909A ; 908F D0 09 .. + jsr InitForIO ; 9091 20 5C C2 \. + jsr ReadBlock ; 9094 20 1A C2 .. + jsr DoneWithIO ; 9097 20 5F C2 _. +L909A: txa ; 909A 8A . + rts ; 909B 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + lda #$00 ; 909C A9 00 .. + sta L9BFA ; 909E 8D FA 9B ... + jsr EnterTurbo ; 90A1 20 14 C2 .. + txa ; 90A4 8A . + bne L90BB ; 90A5 D0 14 .. + jsr InitForIO ; 90A7 20 5C C2 \. + jsr SetDirHead_1 ; 90AA 20 D4 90 .. + bne L90B7 ; 90AD D0 08 .. + jsr SetDirHead_2 ; 90AF 20 DC 90 .. + bne L90B7 ; 90B2 D0 03 .. + jsr SetDirHead_3 ; 90B4 20 E4 90 .. +L90B7: jsr DoneWithIO ; 90B7 20 5F C2 _. + txa ; 90BA 8A . +L90BB: rts ; 90BB 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90BC A9 80 .. + sta r4H ; 90BE 85 0B .. + lda #$00 ; 90C0 A9 00 .. + sta r4L ; 90C2 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90C4 20 14 C2 .. + bne L90D2 ; 90C7 D0 09 .. + jsr InitForIO ; 90C9 20 5C C2 \. + jsr WriteBlock ; 90CC 20 20 C2 . + jsr DoneWithIO ; 90CF 20 5F C2 _. +L90D2: txa ; 90D2 8A . + rts ; 90D3 60 ` + +; ---------------------------------------------------------------------------- +SetDirHead_1: + ldx #$82 ; 90D4 A2 82 .. + ldy #$00 ; 90D6 A0 00 .. + lda #$00 ; 90D8 A9 00 .. + beq L90EA ; 90DA F0 0E .. +SetDirHead_2: + ldx #$89 ; 90DC A2 89 .. + ldy #$00 ; 90DE A0 00 .. + lda #$01 ; 90E0 A9 01 .. + bne L90EA ; 90E2 D0 06 .. +SetDirHead_3: + ldx #$9C ; 90E4 A2 9C .. + ldy #$80 ; 90E6 A0 80 .. + lda #$02 ; 90E8 A9 02 .. +L90EA: stx r4H ; 90EA 86 0B .. + sty r4L ; 90EC 84 0A .. + sta r1H ; 90EE 85 05 .. + lda #$28 ; 90F0 A9 28 .( + sta r1L ; 90F2 85 04 .. + bit L9BFA ; 90F4 2C FA 9B ,.. + bmi L90FE ; 90F7 30 05 0. + jsr __WriteBlock ; 90F9 20 3A 99 :. + txa ; 90FC 8A . + rts ; 90FD 60 ` + +; ---------------------------------------------------------------------------- +L90FE: jsr __ReadBlock ; 90FE 20 D6 98 .. + txa ; 9101 8A . + rts ; 9102 60 ` + +; ---------------------------------------------------------------------------- +CheckParams_1: + lda #$00 ; 9103 A9 00 .. + sta L9BFC ; 9105 8D FC 9B ... + ldx #$02 ; 9108 A2 02 .. + lda r1L ; 910A A5 04 .. + beq L9114 ; 910C F0 06 .. + cmp #$51 ; 910E C9 51 .Q + bcs L9114 ; 9110 B0 02 .. + sec ; 9112 38 8 + rts ; 9113 60 ` + +; ---------------------------------------------------------------------------- +L9114: clc ; 9114 18 . + rts ; 9115 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9116 20 E1 C1 .. + txa ; 9119 8A . + bne L913C ; 911A D0 20 . + jsr GetDirHead ; 911C 20 47 C2 G. + bne L913C ; 911F D0 1B .. + jsr L9286 ; 9121 20 86 92 .. + lda #$82 ; 9124 A9 82 .. + sta r4H ; 9126 85 0B .. + lda #$90 ; 9128 A9 90 .. + sta r4L ; 912A 85 0A .. + ldx #$0C ; 912C A2 0C .. + jsr GetPtrCurDkNm ; 912E 20 98 C2 .. + ldy #$12 ; 9131 A0 12 .. +L9133: lda (r4L),y ; 9133 B1 0A .. + sta (r5L),y ; 9135 91 0C .. + dey ; 9137 88 . + bpl L9133 ; 9138 10 F9 .. + ldx #$00 ; 913A A2 00 .. +L913C: rts ; 913C 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 913D 68 h + sta r3L ; 913E 85 08 .. + pla ; 9140 68 h + sta r3H ; 9141 85 09 .. + lda r3H ; 9143 A5 09 .. + pha ; 9145 48 H + lda r3L ; 9146 A5 08 .. + pha ; 9148 48 H + lda r3L ; 9149 A5 08 .. + sec ; 914B 38 8 + sbc $C1EE ; 914C ED EE C1 ... + sta r3L ; 914F 85 08 .. + lda r3H ; 9151 A5 09 .. + sbc $C1EF ; 9153 ED EF C1 ... + sta r3H ; 9156 85 09 .. + ldy #$27 ; 9158 A0 27 .' + lda r3H ; 915A A5 09 .. + beq L9160 ; 915C F0 02 .. + ldy #$23 ; 915E A0 23 .# +L9160: sty r3L ; 9160 84 08 .. + ldy #$00 ; 9162 A0 00 .. + sty r3H ; 9164 84 09 .. + lda #$02 ; 9166 A9 02 .. + bne L916C ; 9168 D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 916A A9 00 .. +L916C: sta L9C01 ; 916C 8D 01 9C ... + lda r9H ; 916F A5 15 .. + pha ; 9171 48 H + lda r9L ; 9172 A5 14 .. + pha ; 9174 48 H + lda r3H ; 9175 A5 09 .. + pha ; 9177 48 H + lda r3L ; 9178 A5 08 .. + pha ; 917A 48 H + lda #$00 ; 917B A9 00 .. + sta r3H ; 917D 85 09 .. + lda #$FE ; 917F A9 FE .. + sta r3L ; 9181 85 08 .. + ldx #$06 ; 9183 A2 06 .. + ldy #$08 ; 9185 A0 08 .. + .byte $20 ; 9187 20 +L9188: adc #$C1 ; 9188 69 C1 i. + lda r8L ; 918A A5 12 .. + beq L9194 ; 918C F0 06 .. + inc r2L ; 918E E6 06 .. + bne L9194 ; 9190 D0 02 .. + inc r2H ; 9192 E6 07 .. +L9194: jsr L9286 ; 9194 20 86 92 .. + pla ; 9197 68 h + sta r3L ; 9198 85 08 .. + pla ; 919A 68 h + sta r3H ; 919B 85 09 .. + ldx #$03 ; 919D A2 03 .. + lda r2H ; 919F A5 07 .. + cmp r4H ; 91A1 C5 0B .. + bne L91A9 ; 91A3 D0 04 .. + lda r2L ; 91A5 A5 06 .. + cmp r4L ; 91A7 C5 0A .. +L91A9: beq L91AD ; 91A9 F0 02 .. + bcs L9208 ; 91AB B0 5B .[ +L91AD: lda r6H ; 91AD A5 0F .. + sta r4H ; 91AF 85 0B .. + lda r6L ; 91B1 A5 0E .. + sta r4L ; 91B3 85 0A .. + lda r2H ; 91B5 A5 07 .. + sta r5H ; 91B7 85 0D .. + lda r2L ; 91B9 A5 06 .. + sta r5L ; 91BB 85 0C .. +L91BD: jsr SetNextFree ; 91BD 20 92 C2 .. + txa ; 91C0 8A . + bne L9208 ; 91C1 D0 45 .E + ldy #$00 ; 91C3 A0 00 .. + lda r3L ; 91C5 A5 08 .. + sta (r4L),y ; 91C7 91 0A .. + iny ; 91C9 C8 . + lda r3H ; 91CA A5 09 .. + sta (r4L),y ; 91CC 91 0A .. + clc ; 91CE 18 . + lda #$02 ; 91CF A9 02 .. + adc r4L ; 91D1 65 0A e. + sta r4L ; 91D3 85 0A .. + bcc L91D9 ; 91D5 90 02 .. + inc r4H ; 91D7 E6 0B .. +L91D9: lda L9C01 ; 91D9 AD 01 9C ... + beq L91E7 ; 91DC F0 09 .. + dec L9C01 ; 91DE CE 01 9C ... + bne L91E7 ; 91E1 D0 04 .. + lda #$23 ; 91E3 A9 23 .# + sta r3L ; 91E5 85 08 .. +L91E7: lda r5L ; 91E7 A5 0C .. + bne L91ED ; 91E9 D0 02 .. + dec r5H ; 91EB C6 0D .. +L91ED: dec r5L ; 91ED C6 0C .. + lda r5L ; 91EF A5 0C .. + ora r5H ; 91F1 05 0D .. + bne L91BD ; 91F3 D0 C8 .. + ldy #$00 ; 91F5 A0 00 .. + tya ; 91F7 98 . + sta (r4L),y ; 91F8 91 0A .. + iny ; 91FA C8 . + lda r8L ; 91FB A5 12 .. + bne L9201 ; 91FD D0 02 .. + lda #$FE ; 91FF A9 FE .. +L9201: clc ; 9201 18 . + adc #$01 ; 9202 69 01 i. + sta (r4L),y ; 9204 91 0A .. + ldx #$00 ; 9206 A2 00 .. +L9208: pla ; 9208 68 h + sta r9L ; 9209 85 14 .. + pla ; 920B 68 h + sta r9H ; 920C 85 15 .. + rts ; 920E 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$28 ; 920F A9 28 .( + sta r1L ; 9211 85 04 .. + lda #$03 ; 9213 A9 03 .. + sta r1H ; 9215 85 05 .. + lda #$00 ; 9217 A9 00 .. + sta L9C02 ; 9219 8D 02 9C ... + beq L925A ; 921C F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 921E A2 00 .. + ldy #$00 ; 9220 A0 00 .. + clc ; 9222 18 . + lda #$20 ; 9223 A9 20 . + adc r5L ; 9225 65 0C e. + sta r5L ; 9227 85 0C .. + bcc L922D ; 9229 90 02 .. + inc r5H ; 922B E6 0D .. +L922D: lda r5H ; 922D A5 0D .. + cmp #$80 ; 922F C9 80 .. + bne L9237 ; 9231 D0 04 .. + lda r5L ; 9233 A5 0C .. + cmp #$FF ; 9235 C9 FF .. +L9237: bcc L9267 ; 9237 90 2E .. + ldy #$FF ; 9239 A0 FF .. + lda $8001 ; 923B AD 01 80 ... + sta r1H ; 923E 85 05 .. + lda diskBlkBuf ; 9240 AD 00 80 ... + sta r1L ; 9243 85 04 .. + bne L925A ; 9245 D0 13 .. + lda L9C02 ; 9247 AD 02 9C ... + bne L9267 ; 924A D0 1B .. + lda #$FF ; 924C A9 FF .. + sta L9C02 ; 924E 8D 02 9C ... + jsr GetBorder ; 9251 20 36 90 6. + txa ; 9254 8A . + bne L9267 ; 9255 D0 10 .. + tya ; 9257 98 . + bne L9267 ; 9258 D0 0D .. +L925A: jsr ReadBuff ; 925A 20 3C 90 <. + ldy #$00 ; 925D A0 00 .. + lda #$80 ; 925F A9 80 .. + sta r5H ; 9261 85 0D .. + lda #$02 ; 9263 A9 02 .. + sta r5L ; 9265 85 0C .. +L9267: rts ; 9267 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9268 20 47 C2 G. + txa ; 926B 8A . + bne L9285 ; 926C D0 17 .. + jsr L9286 ; 926E 20 86 92 .. + bne L9277 ; 9271 D0 04 .. + ldy #$FF ; 9273 A0 FF .. + bne L9283 ; 9275 D0 0C .. +L9277: lda $82AC ; 9277 AD AC 82 ... + sta r1H ; 927A 85 05 .. + lda $82AB ; 927C AD AB 82 ... + sta r1L ; 927F 85 04 .. + ldy #$00 ; 9281 A0 00 .. +L9283: ldx #$00 ; 9283 A2 00 .. +L9285: rts ; 9285 60 ` + +; ---------------------------------------------------------------------------- +L9286: lda #$82 ; 9286 A9 82 .. + sta r5H ; 9288 85 0D .. + lda #$00 ; 928A A9 00 .. + sta r5L ; 928C 85 0C .. +__ChkDkGEOS: + ldy #$AD ; 928E A0 AD .. + ldx #$00 ; 9290 A2 00 .. + stx isGEOS ; 9292 8E 8B 84 ... +L9295: lda (r5L),y ; 9295 B1 0C .. + cmp GEOSDiskID,x ; 9297 DD AB 92 ... + bne L92A7 ; 929A D0 0B .. + iny ; 929C C8 . + inx ; 929D E8 . + cpx #$0B ; 929E E0 0B .. + bne L9295 ; 92A0 D0 F3 .. + lda #$FF ; 92A2 A9 FF .. + sta isGEOS ; 92A4 8D 8B 84 ... +L92A7: lda isGEOS ; 92A7 AD 8B 84 ... + rts ; 92AA 60 ` + +; ---------------------------------------------------------------------------- +GEOSDiskID: + .byte "GEOS format V1.0" ; 92AB 47 45 4F 53 20 66 6F 72 GEOS for + ; 92B3 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 92BB 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 92BC 08 . + sei ; 92BD 78 x + lda r6L ; 92BE A5 0E .. + pha ; 92C0 48 H + lda r2H ; 92C1 A5 07 .. + pha ; 92C3 48 H + lda r2L ; 92C4 A5 06 .. + pha ; 92C6 48 H + ldx r10L ; 92C7 A6 16 .. + inx ; 92C9 E8 . + stx r6L ; 92CA 86 0E .. + lda #$28 ; 92CC A9 28 .( + sta r1L ; 92CE 85 04 .. + lda #$03 ; 92D0 A9 03 .. + sta r1H ; 92D2 85 05 .. +L92D4: jsr ReadBuff ; 92D4 20 3C 90 <. +L92D7: txa ; 92D7 8A . + bne L9312 ; 92D8 D0 38 .8 + dec r6L ; 92DA C6 0E .. + beq L92F3 ; 92DC F0 15 .. +L92DE: lda diskBlkBuf ; 92DE AD 00 80 ... + bne L92E9 ; 92E1 D0 06 .. + jsr AddDirBlock ; 92E3 20 39 90 9. + clv ; 92E6 B8 . + bvc L92D7 ; 92E7 50 EE P. +L92E9: sta r1L ; 92E9 85 04 .. + lda $8001 ; 92EB AD 01 80 ... + sta r1H ; 92EE 85 05 .. + clv ; 92F0 B8 . + bvc L92D4 ; 92F1 50 E1 P. +L92F3: ldy #$02 ; 92F3 A0 02 .. + ldx #$00 ; 92F5 A2 00 .. +L92F7: lda diskBlkBuf,y ; 92F7 B9 00 80 ... + beq L9312 ; 92FA F0 16 .. + tya ; 92FC 98 . + clc ; 92FD 18 . + adc #$20 ; 92FE 69 20 i + tay ; 9300 A8 . + bcc L92F7 ; 9301 90 F4 .. + lda #$01 ; 9303 A9 01 .. + sta r6L ; 9305 85 0E .. + ldx #$04 ; 9307 A2 04 .. + ldy r10L ; 9309 A4 16 .. + iny ; 930B C8 . + sty r10L ; 930C 84 16 .. + cpy #$12 ; 930E C0 12 .. + bcc L92DE ; 9310 90 CC .. +L9312: pla ; 9312 68 h + sta r2L ; 9313 85 06 .. + pla ; 9315 68 h + sta r2H ; 9316 85 07 .. + pla ; 9318 68 h + sta r6L ; 9319 85 0E .. + plp ; 931B 28 ( + rts ; 931C 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 931D A5 0F .. + pha ; 931F 48 H + lda r6L ; 9320 A5 0E .. + pha ; 9322 48 H + ldx #$04 ; 9323 A2 04 .. + lda $89FA ; 9325 AD FA 89 ... + beq ClearAndWrite ; 9328 F0 22 ." + lda r1H ; 932A A5 05 .. + sta r3H ; 932C 85 09 .. + lda r1L ; 932E A5 04 .. + sta r3L ; 9330 85 08 .. + jsr SetNextFree ; 9332 20 92 C2 .. + pla ; 9335 68 h + sta r6L ; 9336 85 0E .. + pla ; 9338 68 h + sta r6H ; 9339 85 0F .. + lda r3H ; 933B A5 09 .. + sta $8001 ; 933D 8D 01 80 ... + lda r3L ; 9340 A5 08 .. + sta diskBlkBuf ; 9342 8D 00 80 ... + jsr WriteBuff ; 9345 20 3F 90 ?. + txa ; 9348 8A . + beq ClearAndWrite ; 9349 F0 01 .. + rts ; 934B 60 ` + +; ---------------------------------------------------------------------------- +ClearAndWrite: + lda r3H ; 934C A5 09 .. + sta r1H ; 934E 85 05 .. + lda r3L ; 9350 A5 08 .. + sta r1L ; 9352 85 04 .. +L9354: lda #$00 ; 9354 A9 00 .. + tay ; 9356 A8 . +L9357: sta diskBlkBuf,y ; 9357 99 00 80 ... + iny ; 935A C8 . + bne L9357 ; 935B D0 FA .. + dey ; 935D 88 . + sty $8001 ; 935E 8C 01 80 ... + jmp WriteBuff ; 9361 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L936E ; 9364 20 6E 93 n. + bne L936A ; 9367 D0 01 .. + rts ; 9369 60 ` + +; ---------------------------------------------------------------------------- +L936A: lda #$27 ; 936A A9 27 .' + sta r3L ; 936C 85 08 .. +L936E: ldy r3H ; 936E A4 09 .. + iny ; 9370 C8 . + sty r6H ; 9371 84 0F .. + lda r3L ; 9373 A5 08 .. + sta r6L ; 9375 85 0E .. + cmp #$28 ; 9377 C9 28 .( + beq L9381 ; 9379 F0 06 .. +L937B: lda r6L ; 937B A5 0E .. + cmp #$28 ; 937D C9 28 .( + beq L93B2 ; 937F F0 31 .1 +L9381: cmp #$29 ; 9381 C9 29 .) + bcc L9388 ; 9383 90 03 .. + sec ; 9385 38 8 + sbc #$28 ; 9386 E9 28 .( +L9388: sec ; 9388 38 8 + sbc #$01 ; 9389 E9 01 .. + asl a ; 938B 0A . + sta r7L ; 938C 85 10 .. + asl a ; 938E 0A . + clc ; 938F 18 . + adc r7L ; 9390 65 10 e. + tax ; 9392 AA . + lda r6L ; 9393 A5 0E .. + cmp #$29 ; 9395 C9 29 .) + bcc L939F ; 9397 90 06 .. + lda $9C90,x ; 9399 BD 90 9C ... + clv ; 939C B8 . + bvc L93A2 ; 939D 50 03 P. +L939F: lda $8910,x ; 939F BD 10 89 ... +L93A2: beq L93B2 ; 93A2 F0 0E .. + ldy #$28 ; 93A4 A0 28 .( + sty r7L ; 93A6 84 10 .. +L93A8: jsr SNxtFreeHelp ; 93A8 20 DA 93 .. + beq L93CC ; 93AB F0 1F .. + inc r6H ; 93AD E6 0F .. + dey ; 93AF 88 . + bne L93A8 ; 93B0 D0 F6 .. +L93B2: ldy r6L ; 93B2 A4 0E .. + cpy #$29 ; 93B4 C0 29 .) + bcs L93BF ; 93B6 B0 07 .. + dey ; 93B8 88 . + bne L93C4 ; 93B9 D0 09 .. + ldy #$29 ; 93BB A0 29 .) + bne L93C4 ; 93BD D0 05 .. +L93BF: iny ; 93BF C8 . + cpy #$51 ; 93C0 C0 51 .Q + bcs L93D7 ; 93C2 B0 13 .. +L93C4: sty r6L ; 93C4 84 0E .. + ldy #$00 ; 93C6 A0 00 .. + sty r6H ; 93C8 84 0F .. + beq L937B ; 93CA F0 AF .. +L93CC: lda r6H ; 93CC A5 0F .. + sta r3H ; 93CE 85 09 .. + lda r6L ; 93D0 A5 0E .. + sta r3L ; 93D2 85 08 .. + ldx #$00 ; 93D4 A2 00 .. + rts ; 93D6 60 ` + +; ---------------------------------------------------------------------------- +L93D7: ldx #$03 ; 93D7 A2 03 .. + rts ; 93D9 60 ` + +; ---------------------------------------------------------------------------- +SNxtFreeHelp: + lda r6H ; 93DA A5 0F .. +L93DC: cmp r7L ; 93DC C5 10 .. + bcc L93E6 ; 93DE 90 06 .. + sec ; 93E0 38 8 + sbc r7L ; 93E1 E5 10 .. + clv ; 93E3 B8 . + bvc L93DC ; 93E4 50 F6 P. +L93E6: sta r6H ; 93E6 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93E8 20 AD C2 .. + bne L93F0 ; 93EB D0 03 .. + ldx #$06 ; 93ED A2 06 .. + rts ; 93EF 60 ` + +; ---------------------------------------------------------------------------- +L93F0: php ; 93F0 08 . + lda r6L ; 93F1 A5 0E .. + cmp #$29 ; 93F3 C9 29 .) + bcc L9410 ; 93F5 90 19 .. + lda r8H ; 93F7 A5 13 .. + eor $9C90,x ; 93F9 5D 90 9C ].. + sta $9C90,x ; 93FC 9D 90 9C ... + ldx r7H ; 93FF A6 11 .. + plp ; 9401 28 ( + beq L940A ; 9402 F0 06 .. + dec $9C90,x ; 9404 DE 90 9C ... + ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +L940A: inc $9C90,x ; 940A FE 90 9C ... + ldx #$00 ; 940D A2 00 .. + rts ; 940F 60 ` + +; ---------------------------------------------------------------------------- +L9410: lda r8H ; 9410 A5 13 .. + eor $8910,x ; 9412 5D 10 89 ].. + sta $8910,x ; 9415 9D 10 89 ... + ldx r7H ; 9418 A6 11 .. + plp ; 941A 28 ( + beq L9423 ; 941B F0 06 .. + dec $8910,x ; 941D DE 10 89 ... + ldx #$00 ; 9420 A2 00 .. + rts ; 9422 60 ` + +; ---------------------------------------------------------------------------- +L9423: inc $8910,x ; 9423 FE 10 89 ... + ldx #$00 ; 9426 A2 00 .. + rts ; 9428 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 9429 20 AD C2 .. + beq L93F0 ; 942C F0 C2 .. + ldx #$06 ; 942E A2 06 .. + rts ; 9430 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9431 A5 0F .. + and #$07 ; 9433 29 07 ). + tax ; 9435 AA . + lda FBBBitTab,x ; 9436 BD 6B 94 .k. + sta r8H ; 9439 85 13 .. + lda r6L ; 943B A5 0E .. + cmp #$29 ; 943D C9 29 .) + bcc L9444 ; 943F 90 03 .. + sec ; 9441 38 8 + sbc #$28 ; 9442 E9 28 .( +L9444: sec ; 9444 38 8 + sbc #$01 ; 9445 E9 01 .. + asl a ; 9447 0A . + sta r7H ; 9448 85 11 .. + asl a ; 944A 0A . + clc ; 944B 18 . + adc r7H ; 944C 65 11 e. + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda r6L ; 9459 A5 0E .. + cmp #$29 ; 945B C9 29 .) + bcc L9465 ; 945D 90 06 .. + lda $9C90,x ; 945F BD 90 9C ... + and r8H ; 9462 25 13 %. + rts ; 9464 60 ` + +; ---------------------------------------------------------------------------- +L9465: lda $8910,x ; 9465 BD 10 89 ... + and r8H ; 9468 25 13 %. + rts ; 946A 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 946B 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9473 A9 00 .. + sta r4L ; 9475 85 0A .. + sta r4H ; 9477 85 0B .. + ldy #$10 ; 9479 A0 10 .. +L947B: lda dir2Head,y ; 947B B9 00 89 ... + clc ; 947E 18 . + adc r4L ; 947F 65 0A e. + sta r4L ; 9481 85 0A .. + bcc L9487 ; 9483 90 02 .. + inc r4H ; 9485 E6 0B .. +L9487: tya ; 9487 98 . + clc ; 9488 18 . + adc #$06 ; 9489 69 06 i. + tay ; 948B A8 . + cpy #$FA ; 948C C0 FA .. + beq L9487 ; 948E F0 F7 .. + tay ; 9490 A8 . + bne L947B ; 9491 D0 E8 .. + ldy #$10 ; 9493 A0 10 .. +L9495: lda $9C80,y ; 9495 B9 80 9C ... + clc ; 9498 18 . + adc r4L ; 9499 65 0A e. + sta r4L ; 949B 85 0A .. + bcc L94A1 ; 949D 90 02 .. + inc r4H ; 949F E6 0B .. +L94A1: tya ; 94A1 98 . + clc ; 94A2 18 . + adc #$06 ; 94A3 69 06 i. + tay ; 94A5 A8 . + bne L9495 ; 94A6 D0 ED .. + lda #$0C ; 94A8 A9 0C .. + sta r3H ; 94AA 85 09 .. + lda #$58 ; 94AC A9 58 .X + sta r3L ; 94AE 85 08 .. + rts ; 94B0 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94B1 20 47 C2 G. + txa ; 94B4 8A . + bne L94EE ; 94B5 D0 37 .7 + lda #$28 ; 94B7 A9 28 .( + sta r3L ; 94B9 85 08 .. + lda #$12 ; 94BB A9 12 .. + sta r3H ; 94BD 85 09 .. + jsr SetNextFree ; 94BF 20 92 C2 .. + txa ; 94C2 8A . + bne L94EE ; 94C3 D0 29 .) + lda r3H ; 94C5 A5 09 .. + sta r1H ; 94C7 85 05 .. + lda r3L ; 94C9 A5 08 .. + sta r1L ; 94CB 85 04 .. + jsr L9354 ; 94CD 20 54 93 T. + txa ; 94D0 8A . + bne L94EE ; 94D1 D0 1B .. + lda r1H ; 94D3 A5 05 .. + sta $82AC ; 94D5 8D AC 82 ... + lda r1L ; 94D8 A5 04 .. + sta $82AB ; 94DA 8D AB 82 ... + ldy #$BC ; 94DD A0 BC .. + ldx #$0F ; 94DF A2 0F .. +L94E1: lda GEOSDiskID,x ; 94E1 BD AB 92 ... + sta curDirHead,y ; 94E4 99 00 82 ... + dey ; 94E7 88 . + dex ; 94E8 CA . + bpl L94E1 ; 94E9 10 F6 .. + jmp PutDirHead ; 94EB 4C 4A C2 LJ. + +; ---------------------------------------------------------------------------- +L94EE: rts ; 94EE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + php ; 94EF 08 . + pla ; 94F0 68 h + sta L9BF0 ; 94F1 8D F0 9B ... + sei ; 94F4 78 x + lda CPU_DATA ; 94F5 A5 01 .. + sta L9BF2 ; 94F7 8D F2 9B ... + lda #$36 ; 94FA A9 36 .6 + sta CPU_DATA ; 94FC 85 01 .. + lda grirqen ; 94FE AD 1A D0 ... + sta L9BF1 ; 9501 8D F1 9B ... + lda clkreg ; 9504 AD 30 D0 .0. + sta L9BEF ; 9507 8D EF 9B ... + ldy #$00 ; 950A A0 00 .. + sty clkreg ; 950C 8C 30 D0 .0. + sty grirqen ; 950F 8C 1A D0 ... + lda #$7F ; 9512 A9 7F .. + sta grirq ; 9514 8D 19 D0 ... + sta $DC0D ; 9517 8D 0D DC ... + sta $DD0D ; 951A 8D 0D DD ... + lda #$95 ; 951D A9 95 .. + sta $0315 ; 951F 8D 15 03 ... + lda #$8C ; 9522 A9 8C .. + sta irqvec ; 9524 8D 14 03 ... + lda #$95 ; 9527 A9 95 .. + sta $0319 ; 9529 8D 19 03 ... + lda #$91 ; 952C A9 91 .. + sta nmivec ; 952E 8D 18 03 ... + lda #$3F ; 9531 A9 3F .? + sta $DD02 ; 9533 8D 02 DD ... + lda mobenble ; 9536 AD 15 D0 ... + sta L9BF3 ; 9539 8D F3 9B ... + sty mobenble ; 953C 8C 15 D0 ... + sty $DD05 ; 953F 8C 05 DD ... + iny ; 9542 C8 . + sty $DD04 ; 9543 8C 04 DD ... + lda #$81 ; 9546 A9 81 .. + sta $DD0D ; 9548 8D 0D DD ... + lda #$09 ; 954B A9 09 .. + sta $DD0E ; 954D 8D 0E DD ... + ldy #$2C ; 9550 A0 2C ., +L9552: lda rasreg ; 9552 AD 12 D0 ... + cmp TURBO_DD00_CPY ; 9555 C5 8F .. + beq L9552 ; 9557 F0 F9 .. + sta TURBO_DD00_CPY ; 9559 85 8F .. + dey ; 955B 88 . + bne L9552 ; 955C D0 F4 .. + lda cia2base ; 955E AD 00 DD ... + and #$07 ; 9561 29 07 ). + sta TURBO_DD00 ; 9563 85 8E .. + sta L9870 ; 9565 8D 70 98 .p. + sta L9877 ; 9568 8D 77 98 .w. + ora #$30 ; 956B 09 30 .0 + sta TURBO_DD00_CPY ; 956D 85 8F .. + sta L985C ; 956F 8D 5C 98 .\. + lda TURBO_DD00 ; 9572 A5 8E .. + ora #$10 ; 9574 09 10 .. + sta L9BF9 ; 9576 8D F9 9B ... + sta L9881 ; 9579 8D 81 98 ... + ldy #$1F ; 957C A0 1F .. +L957E: lda L982E,y ; 957E B9 2E 98 ... + and #$F0 ; 9581 29 F0 ). + ora TURBO_DD00 ; 9583 05 8E .. + sta L982E,y ; 9585 99 2E 98 ... + dey ; 9588 88 . + bpl L957E ; 9589 10 F3 .. + rts ; 958B 60 ` + +; ---------------------------------------------------------------------------- +D_IRQHandler: + pla ; 958C 68 h + tay ; 958D A8 . + pla ; 958E 68 h + tax ; 958F AA . + pla ; 9590 68 h +D_NMIHandler: + rti ; 9591 40 @ + +; ---------------------------------------------------------------------------- +__DoneWithIO: + sei ; 9592 78 x + lda L9BEF ; 9593 AD EF 9B ... + sta clkreg ; 9596 8D 30 D0 .0. + lda L9BF3 ; 9599 AD F3 9B ... + sta mobenble ; 959C 8D 15 D0 ... + lda #$7F ; 959F A9 7F .. + sta $DD0D ; 95A1 8D 0D DD ... + lda $DD0D ; 95A4 AD 0D DD ... + lda L9BF1 ; 95A7 AD F1 9B ... + sta grirqen ; 95AA 8D 1A D0 ... + lda L9BF2 ; 95AD AD F2 9B ... + sta CPU_DATA ; 95B0 85 01 .. + lda L9BF0 ; 95B2 AD F0 9B ... + pha ; 95B5 48 H + plp ; 95B6 28 ( + rts ; 95B7 60 ` + +; ---------------------------------------------------------------------------- +SendDOSCmd: + stx $8C ; 95B8 86 8C .. + sta $8B ; 95BA 85 8B .. + lda #$00 ; 95BC A9 00 .. + sta STATUS ; 95BE 85 90 .. + lda curDrive ; 95C0 AD 89 84 ... + jsr LISTEN ; 95C3 20 B1 FF .. + bit STATUS ; 95C6 24 90 $. + bmi L95E2 ; 95C8 30 18 0. + lda #$FF ; 95CA A9 FF .. + jsr SECOND ; 95CC 20 93 FF .. + bit STATUS ; 95CF 24 90 $. + bmi L95E2 ; 95D1 30 0F 0. + ldy #$00 ; 95D3 A0 00 .. +L95D5: lda ($8B),y ; 95D5 B1 8B .. + jsr CIOUT ; 95D7 20 A8 FF .. + iny ; 95DA C8 . + cpy #$05 ; 95DB C0 05 .. + bcc L95D5 ; 95DD 90 F6 .. + ldx #$00 ; 95DF A2 00 .. + rts ; 95E1 60 ` + +; ---------------------------------------------------------------------------- +L95E2: jsr UNLSN ; 95E2 20 AE FF .. + ldx #$0D ; 95E5 A2 0D .. + rts ; 95E7 60 ` + +; ---------------------------------------------------------------------------- +__EnterTurbo: + lda curDrive ; 95E8 AD 89 84 ... + jsr SetDevice ; 95EB 20 B0 C2 .. + ldx curDrive ; 95EE AE 89 84 ... + lda diskOpenFlg,x ; 95F1 BD 8A 84 ... + bmi L9604 ; 95F4 30 0E 0. + jsr SendCODE ; 95F6 20 69 96 i. + txa ; 95F9 8A . + bne L963B ; 95FA D0 3F .? + ldx curDrive ; 95FC AE 89 84 ... + lda #$80 ; 95FF A9 80 .. + sta diskOpenFlg,x ; 9601 9D 8A 84 ... +L9604: and #$40 ; 9604 29 40 )@ + bne L9634 ; 9606 D0 2C ., + jsr InitForIO ; 9608 20 5C C2 \. + ldx #$96 ; 960B A2 96 .. + lda #$3D ; 960D A9 3D .= + jsr SendDOSCmd ; 960F 20 B8 95 .. + txa ; 9612 8A . + bne L9638 ; 9613 D0 23 .# + jsr UNLSN ; 9615 20 AE FF .. + sei ; 9618 78 x + ldy #$21 ; 9619 A0 21 .! +L961B: dey ; 961B 88 . + bne L961B ; 961C D0 FD .. + jsr L9880 ; 961E 20 80 98 .. +L9621: bit cia2base ; 9621 2C 00 DD ,.. + bmi L9621 ; 9624 30 FB 0. + jsr DoneWithIO ; 9626 20 5F C2 _. + ldx curDrive ; 9629 AE 89 84 ... + lda diskOpenFlg,x ; 962C BD 8A 84 ... + ora #$40 ; 962F 09 40 .@ + sta diskOpenFlg,x ; 9631 9D 8A 84 ... +L9634: ldx #$00 ; 9634 A2 00 .. + beq L963B ; 9636 F0 03 .. +L9638: jsr DoneWithIO ; 9638 20 5F C2 _. +L963B: txa ; 963B 8A . + rts ; 963C 60 ` + +; ---------------------------------------------------------------------------- +EnterCommand: + .byte $4D,$2D,$45 ; 963D 4D 2D 45 M-E +; ---------------------------------------------------------------------------- + .word $040F ; 9640 0F 04 .. +; ---------------------------------------------------------------------------- +SendExitTurbo: + jsr InitForIO ; 9642 20 5C C2 \. + ldx #$04 ; 9645 A2 04 .. + lda #$B9 ; 9647 A9 B9 .. + jsr L979F ; 9649 20 9F 97 .. + ldx #$04 ; 964C A2 04 .. + lda #$57 ; 964E A9 57 .W + jsr L979F ; 9650 20 9F 97 .. + jsr L97D9 ; 9653 20 D9 97 .. +L9656: lda curDrive ; 9656 AD 89 84 ... + jsr LISTEN ; 9659 20 B1 FF .. + lda #$EF ; 965C A9 EF .. + jsr SECOND ; 965E 20 93 FF .. + jsr UNLSN ; 9661 20 AE FF .. + ldx #$00 ; 9664 A2 00 .. + jmp DoneWithIO ; 9666 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +SendCODE: + jsr CheckReal1581 ; 9669 20 95 99 .. + txa ; 966C 8A . + beq InitHDCode ; 966D F0 05 .. + bpl L9673 ; 966F 10 02 .. + bmi Init1581Code ; 9671 30 1B 0. +L9673: rts ; 9673 60 ` + +; ---------------------------------------------------------------------------- +InitHDCode: + jsr InitForIO ; 9674 20 5C C2 \. + ldx #$96 ; 9677 A2 96 .. + lda #$89 ; 9679 A9 89 .. + jsr SendDOSCmd ; 967B 20 B8 95 .. + txa ; 967E 8A . + bne L9686 ; 967F D0 05 .. + jsr UNLSN ; 9681 20 AE FF .. + ldx #$00 ; 9684 A2 00 .. +L9686: jmp DoneWithIO ; 9686 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +HDCommand: + .byte "GEOS" ; 9689 47 45 4F 53 GEOS + .byte $00 ; 968D 00 . +; ---------------------------------------------------------------------------- +Init1581Code: + jsr InitForIO ; 968E 20 5C C2 \. + lda #$9A ; 9691 A9 9A .. + sta TURBO_DD00 ; 9693 85 8E .. + lda #$02 ; 9695 A9 02 .. + sta $8D ; 9697 85 8D .. + lda #$03 ; 9699 A9 03 .. + sta L96F1+1 ; 969B 8D F2 96 ... + lda #$00 ; 969E A9 00 .. + sta L96F1 ; 96A0 8D F1 96 ... + lda #$0F ; 96A3 A9 0F .. + sta TURBO_DD00_CPY ; 96A5 85 8F .. +L96A7: jsr SendCHUNK ; 96A7 20 CD 96 .. + txa ; 96AA 8A . + bne L96CA ; 96AB D0 1D .. + clc ; 96AD 18 . + lda #$20 ; 96AE A9 20 . + adc $8D ; 96B0 65 8D e. + sta $8D ; 96B2 85 8D .. + bcc L96B8 ; 96B4 90 02 .. + inc TURBO_DD00 ; 96B6 E6 8E .. +L96B8: clc ; 96B8 18 . + lda #$20 ; 96B9 A9 20 . + adc L96F1 ; 96BB 6D F1 96 m.. + sta L96F1 ; 96BE 8D F1 96 ... + bcc L96C6 ; 96C1 90 03 .. + inc L96F1+1 ; 96C3 EE F2 96 ... +L96C6: dec TURBO_DD00_CPY ; 96C6 C6 8F .. + bpl L96A7 ; 96C8 10 DD .. +L96CA: jmp DoneWithIO ; 96CA 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +SendCHUNK: + ldx #$96 ; 96CD A2 96 .. + lda #$EE ; 96CF A9 EE .. + jsr SendDOSCmd ; 96D1 20 B8 95 .. + txa ; 96D4 8A . + bne L96ED ; 96D5 D0 16 .. + lda #$20 ; 96D7 A9 20 . + jsr CIOUT ; 96D9 20 A8 FF .. + ldy #$00 ; 96DC A0 00 .. +L96DE: lda ($8D),y ; 96DE B1 8D .. + jsr CIOUT ; 96E0 20 A8 FF .. + iny ; 96E3 C8 . + cpy #$20 ; 96E4 C0 20 . + bcc L96DE ; 96E6 90 F6 .. + jsr UNLSN ; 96E8 20 AE FF .. + ldx #$00 ; 96EB A2 00 .. +L96ED: rts ; 96ED 60 ` + +; ---------------------------------------------------------------------------- +WriteCommand: + .byte "M-W" ; 96EE 4D 2D 57 M-W +; ---------------------------------------------------------------------------- +L96F1: .word $0000 ; 96F1 00 00 .. +; ---------------------------------------------------------------------------- +__ExitTurbo: + txa ; 96F3 8A . + pha ; 96F4 48 H + ldx curDrive ; 96F5 AE 89 84 ... + lda diskOpenFlg,x ; 96F8 BD 8A 84 ... + and #$40 ; 96FB 29 40 )@ + beq L975D ; 96FD F0 5E .^ + jsr SendExitTurbo ; 96FF 20 42 96 B. + ldx curDrive ; 9702 AE 89 84 ... + lda diskOpenFlg,x ; 9705 BD 8A 84 ... + and #$BF ; 9708 29 BF ). + sta diskOpenFlg,x ; 970A 9D 8A 84 ... + bit sysRAMFlg ; 970D 2C C4 88 ,.. + bvc L975D ; 9710 50 4B PK + lda r0H ; 9712 A5 03 .. + pha ; 9714 48 H + lda r0L ; 9715 A5 02 .. + pha ; 9717 48 H + lda r1H ; 9718 A5 05 .. + pha ; 971A 48 H + lda r1L ; 971B A5 04 .. + pha ; 971D 48 H + lda r2H ; 971E A5 07 .. + pha ; 9720 48 H + lda r2L ; 9721 A5 06 .. + pha ; 9723 48 H + lda r3L ; 9724 A5 08 .. + pha ; 9726 48 H + ldx curDrive ; 9727 AE 89 84 ... + lda L9758,x ; 972A BD 58 97 .X. + sta r1L ; 972D 85 04 .. + lda L975C,x ; 972F BD 5C 97 .\. + sta r1H ; 9732 85 05 .. + lda #$9C ; 9734 A9 9C .. + sta r0H ; 9736 85 03 .. + lda #$80 ; 9738 A9 80 .. + sta r0L ; 973A 85 02 .. + ldy #$00 ; 973C A0 00 .. + sty r3L ; 973E 84 08 .. + sty r2L ; 9740 84 06 .. + iny ; 9742 C8 . + sty r2H ; 9743 84 07 .. + jsr StashRAM ; 9745 20 C8 C2 .. + pla ; 9748 68 h + sta r3L ; 9749 85 08 .. + pla ; 974B 68 h + sta r2L ; 974C 85 06 .. + pla ; 974E 68 h + sta r2H ; 974F 85 07 .. + pla ; 9751 68 h + sta r1L ; 9752 85 04 .. + pla ; 9754 68 h + sta r1H ; 9755 85 05 .. + pla ; 9757 68 h +L9758: sta r0L ; 9758 85 02 .. + pla ; 975A 68 h + .byte $85 ; 975B 85 . +L975C: .byte $03 ; 975C 03 . +L975D: pla ; 975D 68 h + tax ; 975E AA . + rts ; 975F 60 ` + +; ---------------------------------------------------------------------------- + .byte $80,$00,$80,$00,$8F,$9D,$AA,$B8 ; 9760 80 00 80 00 8F 9D AA B8 ........ +; ---------------------------------------------------------------------------- +__PurgeTurbo: + jsr ExitTurbo ; 9768 20 32 C2 2. + ldy curDrive ; 976B AC 89 84 ... + lda #$00 ; 976E A9 00 .. + sta diskOpenFlg,y ; 9770 99 8A 84 ... + rts ; 9773 60 ` + +; ---------------------------------------------------------------------------- +__ChangeDiskDevice: + sta ChngDskDev_Number ; 9774 8D 9D 97 ... + jsr PurgeTurbo ; 9777 20 35 C2 5. + jsr InitForIO ; 977A 20 5C C2 \. + ldx #$97 ; 977D A2 97 .. + lda #$9A ; 977F A9 9A .. + jsr SendDOSCmd ; 9781 20 B8 95 .. + txa ; 9784 8A . + bne L9797 ; 9785 D0 10 .. + ldy ChngDskDev_Number ; 9787 AC 9D 97 ... + lda #$00 ; 978A A9 00 .. + sta diskOpenFlg,y ; 978C 99 8A 84 ... + sty curDrive ; 978F 8C 89 84 ... + sty curDevice ; 9792 84 BA .. + jmp L9656 ; 9794 4C 56 96 LV. + +; ---------------------------------------------------------------------------- +L9797: jmp DoneWithIO ; 9797 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +ChngDskDev_Command: + .byte "U0>" ; 979A 55 30 3E U0> +; ---------------------------------------------------------------------------- +ChngDskDev_Number: + .byte $08,$00 ; 979D 08 00 .. +; ---------------------------------------------------------------------------- +L979F: stx $8C ; 979F 86 8C .. + sta $8B ; 97A1 85 8B .. + ldy #$02 ; 97A3 A0 02 .. + bne L97B7 ; 97A5 D0 10 .. +L97A7: stx $8C ; 97A7 86 8C .. + sta $8B ; 97A9 85 8B .. +DUNK4_2:ldy #$04 ; 97AB A0 04 .. + lda r1H ; 97AD A5 05 .. + sta L9BF8 ; 97AF 8D F8 9B ... + lda r1L ; 97B2 A5 04 .. + sta L9BF7 ; 97B4 8D F7 9B ... +L97B7: lda $8C ; 97B7 A5 8C .. + sta L9BF6 ; 97B9 8D F6 9B ... + lda $8B ; 97BC A5 8B .. + sta L9BF5 ; 97BE 8D F5 9B ... + lda #$9B ; 97C1 A9 9B .. + sta $8C ; 97C3 85 8C .. + lda #$F5 ; 97C5 A9 F5 .. + sta $8B ; 97C7 85 8B .. + jmp L9886 ; 97C9 4C 86 98 L.. + +; ---------------------------------------------------------------------------- +L97CC: ldy #$01 ; 97CC A0 01 .. + jsr L984E ; 97CE 20 4E 98 N. + pha ; 97D1 48 H + tay ; 97D2 A8 . + jsr L984E ; 97D3 20 4E 98 N. + pla ; 97D6 68 h + tay ; 97D7 A8 . + rts ; 97D8 60 ` + +; ---------------------------------------------------------------------------- +L97D9: sei ; 97D9 78 x + lda TURBO_DD00 ; 97DA A5 8E .. + sta cia2base ; 97DC 8D 00 DD ... +L97DF: bit cia2base ; 97DF 2C 00 DD ,.. + bpl L97DF ; 97E2 10 FB .. + rts ; 97E4 60 ` + +; ---------------------------------------------------------------------------- +__NewDisk: + jsr EnterTurbo ; 97E5 20 14 C2 .. + bne L980D ; 97E8 D0 23 .# + lda #$00 ; 97EA A9 00 .. + sta L9BFC ; 97EC 8D FC 9B ... + sta r1L ; 97EF 85 04 .. + jsr InitForIO ; 97F1 20 5C C2 \. +L97F4: ldx #$04 ; 97F4 A2 04 .. + lda #$9B ; 97F6 A9 9B .. + jsr L97A7 ; 97F8 20 A7 97 .. + jsr GetDOSError ; 97FB 20 6C 99 l. + beq L980A ; 97FE F0 0A .. + inc L9BFC ; 9800 EE FC 9B ... + cpy L9BFC ; 9803 CC FC 9B ... + beq L980A ; 9806 F0 02 .. + bcs L97F4 ; 9808 B0 EA .. +L980A: jsr DoneWithIO ; 980A 20 5F C2 _. +L980D: rts ; 980D 60 ` + +; ---------------------------------------------------------------------------- +_ReadLink: + jsr CheckParams_1 ; 980E 20 03 91 .. + bcc L9822 ; 9811 90 0F .. + lda r1L ; 9813 A5 04 .. + ora #$80 ; 9815 09 80 .. + sta r1L ; 9817 85 04 .. + jsr L98DB ; 9819 20 DB 98 .. + lda r1L ; 981C A5 04 .. + and #$7F ; 981E 29 7F ). + sta r1L ; 9820 85 04 .. +L9822: rts ; 9822 60 ` + +; ---------------------------------------------------------------------------- +DOSErrTab: + .byte $01,$05,$02,$08,$08,$01,$05,$01 ; 9823 01 05 02 08 08 01 05 01 ........ + .byte $05,$05,$05 ; 982B 05 05 05 ... +L982E: .byte $00,$80,$20,$A0,$40,$C0,$60,$E0 ; 982E 00 80 20 A0 40 C0 60 E0 .. .@.`. + .byte $10,$90,$30,$B0,$50,$D0,$70,$F0 ; 9836 10 90 30 B0 50 D0 70 F0 ..0.P.p. +L983E: .byte $00,$20,$00,$20,$10,$30,$10,$30 ; 983E 00 20 00 20 10 30 10 30 . . .0.0 + .byte $00,$20,$00,$20,$10,$30,$10,$30 ; 9846 00 20 00 20 10 30 10 30 . . .0.0 +; ---------------------------------------------------------------------------- +L984E: jsr L97D9 ; 984E 20 D9 97 .. +L9851: sec ; 9851 38 8 +L9852: lda rasreg ; 9852 AD 12 D0 ... + sbc #$32 ; 9855 E9 32 .2 + and #$07 ; 9857 29 07 ). + beq L9852 ; 9859 F0 F7 .. + .byte $A9 ; 985B A9 . +L985C: and $8D,x ; 985C 35 8D 5. + brk ; 985E 00 . + cmp $0F29,x ; 985F DD 29 0F .). + sta cia2base ; 9862 8D 00 DD ... + lda cia2base ; 9865 AD 00 DD ... + lsr a ; 9868 4A J + lsr a ; 9869 4A J + ora cia2base ; 986A 0D 00 DD ... + lsr a ; 986D 4A J + lsr a ; 986E 4A J + .byte $49 ; 986F 49 I +L9870: ora $4D ; 9870 05 4D .M + brk ; 9872 00 . + cmp $4A4A,x ; 9873 DD 4A 4A .JJ + .byte $49 ; 9876 49 I +L9877: ora $4D ; 9877 05 4D .M + brk ; 9879 00 . + cmp L9188,x ; 987A DD 88 91 ... + .byte $8B ; 987D 8B . + bne L9851 ; 987E D0 D1 .. +L9880: .byte $A2 ; 9880 A2 . +L9881: .byte $0F ; 9881 0F . + stx cia2base ; 9882 8E 00 DD ... + rts ; 9885 60 ` + +; ---------------------------------------------------------------------------- +L9886: jsr L97D9 ; 9886 20 D9 97 .. + tya ; 9889 98 . + pha ; 988A 48 H + ldy #$00 ; 988B A0 00 .. + jsr L989D ; 988D 20 9D 98 .. + pla ; 9890 68 h + tay ; 9891 A8 . +L9892: jsr L97D9 ; 9892 20 D9 97 .. +L9895: dey ; 9895 88 . + lda ($8B),y ; 9896 B1 8B .. + ldx TURBO_DD00 ; 9898 A6 8E .. + stx cia2base ; 989A 8E 00 DD ... +L989D: tax ; 989D AA . + and #$0F ; 989E 29 0F ). + sta $8D ; 98A0 85 8D .. + sec ; 98A2 38 8 +L98A3: lda rasreg ; 98A3 AD 12 D0 ... + sbc #$32 ; 98A6 E9 32 .2 + and #$07 ; 98A8 29 07 ). + beq L98A3 ; 98AA F0 F7 .. + txa ; 98AC 8A . + ldx TURBO_DD00_CPY ; 98AD A6 8F .. + stx cia2base ; 98AF 8E 00 DD ... + and #$F0 ; 98B2 29 F0 ). + ora TURBO_DD00 ; 98B4 05 8E .. + sta cia2base ; 98B6 8D 00 DD ... + ror a ; 98B9 6A j + ror a ; 98BA 6A j + and #$F0 ; 98BB 29 F0 ). + ora TURBO_DD00 ; 98BD 05 8E .. + sta cia2base ; 98BF 8D 00 DD ... + ldx $8D ; 98C2 A6 8D .. + lda L982E,x ; 98C4 BD 2E 98 ... + sta cia2base ; 98C7 8D 00 DD ... + lda L983E,x ; 98CA BD 3E 98 .>. + cpy #$00 ; 98CD C0 00 .. + sta cia2base ; 98CF 8D 00 DD ... + bne L9895 ; 98D2 D0 C1 .. + beq L9880 ; 98D4 F0 AA .. +__ReadBlock: + jsr CheckParams_1 ; 98D6 20 03 91 .. + bcc L9937 ; 98D9 90 5C .\ +L98DB: ldx #$04 ; 98DB A2 04 .. + lda #$CC ; 98DD A9 CC .. + jsr L97A7 ; 98DF 20 A7 97 .. + ldx #$03 ; 98E2 A2 03 .. + lda #$1F ; 98E4 A9 1F .. + jsr L979F ; 98E6 20 9F 97 .. + lda r4H ; 98E9 A5 0B .. + sta $8C ; 98EB 85 8C .. + lda r4L ; 98ED A5 0A .. + sta $8B ; 98EF 85 8B .. + ldy #$00 ; 98F1 A0 00 .. + lda r1L ; 98F3 A5 04 .. + bpl L98F9 ; 98F5 10 02 .. + ldy #$02 ; 98F7 A0 02 .. +L98F9: jsr L984E ; 98F9 20 4E 98 N. + jsr L9973 ; 98FC 20 73 99 s. + beq L990B ; 98FF F0 0A .. + inc L9BFC ; 9901 EE FC 9B ... + cpy L9BFC ; 9904 CC FC 9B ... + beq L990B ; 9907 F0 02 .. + bcs L98DB ; 9909 B0 D0 .. +L990B: lda r1L ; 990B A5 04 .. + cmp #$28 ; 990D C9 28 .( + bne L9936 ; 990F D0 25 .% + lda r1H ; 9911 A5 05 .. + bne L9936 ; 9913 D0 21 .! + ldy #$04 ; 9915 A0 04 .. +L9917: lda (r4L),y ; 9917 B1 0A .. + sta L9BFB ; 9919 8D FB 9B ... + tya ; 991C 98 . + clc ; 991D 18 . + adc #$8C ; 991E 69 8C i. + tay ; 9920 A8 . + lda (r4L),y ; 9921 B1 0A .. + pha ; 9923 48 H + lda L9BFB ; 9924 AD FB 9B ... + sta (r4L),y ; 9927 91 0A .. + tya ; 9929 98 . + sec ; 992A 38 8 + sbc #$8C ; 992B E9 8C .. + tay ; 992D A8 . + pla ; 992E 68 h + sta (r4L),y ; 992F 91 0A .. + iny ; 9931 C8 . + cpy #$1D ; 9932 C0 1D .. + bne L9917 ; 9934 D0 E1 .. +L9936: txa ; 9936 8A . +L9937: ldy #$00 ; 9937 A0 00 .. + rts ; 9939 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr CheckParams_1 ; 993A 20 03 91 .. + bcc L9968 ; 993D 90 29 .) + jsr L990B ; 993F 20 0B 99 .. +L9942: ldx #$04 ; 9942 A2 04 .. + lda #$7C ; 9944 A9 7C .| + jsr L97A7 ; 9946 20 A7 97 .. + lda r4H ; 9949 A5 0B .. + sta $8C ; 994B 85 8C .. + lda r4L ; 994D A5 0A .. + sta $8B ; 994F 85 8B .. + ldy #$00 ; 9951 A0 00 .. + jsr L9892 ; 9953 20 92 98 .. + jsr L9973 ; 9956 20 73 99 s. + beq L9965 ; 9959 F0 0A .. + inc L9BFC ; 995B EE FC 9B ... + cpy L9BFC ; 995E CC FC 9B ... + beq L9965 ; 9961 F0 02 .. + bcs L9942 ; 9963 B0 DD .. +L9965: jsr L990B ; 9965 20 0B 99 .. +L9968: rts ; 9968 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + ldx #$00 ; 9969 A2 00 .. + rts ; 996B 60 ` + +; ---------------------------------------------------------------------------- +GetDOSError: + ldx #$03 ; 996C A2 03 .. + lda #$2B ; 996E A9 2B .+ + jsr L979F ; 9970 20 9F 97 .. +L9973: lda #$9B ; 9973 A9 9B .. + sta $8C ; 9975 85 8C .. + lda #$FD ; 9977 A9 FD .. + sta $8B ; 9979 85 8B .. + jsr L97CC ; 997B 20 CC 97 .. + lda L9BFD ; 997E AD FD 9B ... + pha ; 9981 48 H + tay ; 9982 A8 . + lda L9822,y ; 9983 B9 22 98 .". + tay ; 9986 A8 . + pla ; 9987 68 h + cmp #$02 ; 9988 C9 02 .. + bcc L9991 ; 998A 90 05 .. + clc ; 998C 18 . + adc #$1E ; 998D 69 1E i. + bne L9993 ; 998F D0 02 .. +L9991: lda #$00 ; 9991 A9 00 .. +L9993: tax ; 9993 AA . + rts ; 9994 60 ` + +; ---------------------------------------------------------------------------- +CheckReal1581: + jsr InitForIO ; 9995 20 5C C2 \. + lda #$00 ; 9998 A9 00 .. + sta STATUS ; 999A 85 90 .. + lda #$9B ; 999C A9 9B .. + sta TURBO_DD00 ; 999E 85 8E .. + lda #$FF ; 99A0 A9 FF .. + sta $8D ; 99A2 85 8D .. + lda #$FE ; 99A4 A9 FE .. + sta L9A00+1 ; 99A6 8D 01 9A ... + lda #$A0 ; 99A9 A9 A0 .. + sta L9A00 ; 99AB 8D 00 9A ... + jsr ReadDeviceWord ; 99AE 20 CE 99 .. + txa ; 99B1 8A . + bne L99CA ; 99B2 D0 16 .. + lda L9BFF ; 99B4 AD FF 9B ... + cmp #$43 ; 99B7 C9 43 .C + bne L99C8 ; 99B9 D0 0D .. + lda L9C00 ; 99BB AD 00 9C ... + cmp #$4D ; 99BE C9 4D .M + bne L99C8 ; 99C0 D0 06 .. + ldx #$00 ; 99C2 A2 00 .. + jsr DoneWithIO ; 99C4 20 5F C2 _. + rts ; 99C7 60 ` + +; ---------------------------------------------------------------------------- +L99C8: ldx #$FF ; 99C8 A2 FF .. +L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. + rts ; 99CD 60 ` + +; ---------------------------------------------------------------------------- +ReadDeviceWord: + ldx #$99 ; 99CE A2 99 .. + lda #$FD ; 99D0 A9 FD .. + jsr SendDOSCmd ; 99D2 20 B8 95 .. + txa ; 99D5 8A . + bne L99FC ; 99D6 D0 24 .$ + lda #$02 ; 99D8 A9 02 .. + jsr CIOUT ; 99DA 20 A8 FF .. + jsr UNLSN ; 99DD 20 AE FF .. + lda curDrive ; 99E0 AD 89 84 ... + jsr TALK ; 99E3 20 B4 FF .. + lda #$FF ; 99E6 A9 FF .. + jsr TKSA ; 99E8 20 96 FF .. + ldy #$00 ; 99EB A0 00 .. +L99ED: jsr ACPTR ; 99ED 20 A5 FF .. + sta ($8D),y ; 99F0 91 8D .. + iny ; 99F2 C8 . + cpy #$02 ; 99F3 C0 02 .. + bcc L99ED ; 99F5 90 F6 .. + jsr UNTLK ; 99F7 20 AB FF .. + ldx #$00 ; 99FA A2 00 .. +L99FC: rts ; 99FC 60 ` + +; ---------------------------------------------------------------------------- + eor $522D ; 99FD 4D 2D 52 M-R +L9A00: .byte $00 ; 9A00 00 . + .byte $00 ; 9A01 00 . + +; End of "record4" segment +; ---------------------------------------------------------------------------- +.code + + +.segment "drv1581_21hd_drivecode": absolute + +DriveCode: + .byte $0F,$07,$0D,$05,$0B,$03,$09,$01 ; 9A02 0F 07 0D 05 0B 03 09 01 ........ + .byte $0E,$06,$0C,$04,$0A,$02,$08,$00 ; 9A0A 0E 06 0C 04 0A 02 08 00 ........ + .byte $80,$20,$A0,$40,$C0,$60,$E0,$10 ; 9A12 80 20 A0 40 C0 60 E0 10 . .@.`.. + .byte $90,$30,$B0,$50,$D0,$70,$F0 ; 9A1A 90 30 B0 50 D0 70 F0 .0.P.p. +; ---------------------------------------------------------------------------- + ldy #$00 ; 9A21 A0 00 .. + lda $04EB ; 9A23 AD EB 04 ... + bpl L9A2A ; 9A26 10 02 .. + ldy #$02 ; 9A28 A0 02 .. +L9A2A: jsr L0362 ; 9A2A 20 62 03 b. + lda #$05 ; 9A2D A9 05 .. + sta a9L ; 9A2F 85 7E .~ + ldy #$00 ; 9A31 A0 00 .. + sty a9H ; 9A33 84 7F .. + iny ; 9A35 C8 . + jsr L0354 ; 9A36 20 54 03 T. + jsr L046A ; 9A39 20 6A 04 j. + cli ; 9A3C 58 X +L9A3D: lda $04E8 ; 9A3D AD E8 04 ... + beq L9A4D ; 9A40 F0 0B .. + dex ; 9A42 CA . + bne L9A4D ; 9A43 D0 08 .. + dec $04E8 ; 9A45 CE E8 04 ... + bne L9A4D ; 9A48 D0 03 .. + jsr L04BE ; 9A4A 20 BE 04 .. +L9A4D: lda #$04 ; 9A4D A9 04 .. + bit $4001 ; 9A4F 2C 01 40 ,.@ + bne L9A3D ; 9A52 D0 E9 .. + sei ; 9A54 78 x + rts ; 9A55 60 ` + +; ---------------------------------------------------------------------------- + sty $42 ; 9A56 84 42 .B + ldy #$00 ; 9A58 A0 00 .. + jsr L0402 ; 9A5A 20 02 04 .. + lda $42 ; 9A5D A5 42 .B + jsr L0368 ; 9A5F 20 68 03 h. + ldy $42 ; 9A62 A4 42 .B + jsr L0402 ; 9A64 20 02 04 .. +L9A67: dey ; 9A67 88 . + lda (a9L),y ; 9A68 B1 7E .~ + sta $41 ; 9A6A 85 41 .A + and #$0F ; 9A6C 29 0F ). + tax ; 9A6E AA . + lda #$04 ; 9A6F A9 04 .. + sta $4001 ; 9A71 8D 01 40 ..@ +L9A74: bit $4001 ; 9A74 2C 01 40 ,.@ + beq L9A74 ; 9A77 F0 FB .. + lda $0300,x ; 9A79 BD 00 03 ... + sta $4001 ; 9A7C 8D 01 40 ..@ + nop ; 9A7F EA . + nop ; 9A80 EA . + ldx $41 ; 9A81 A6 41 .A + rol a ; 9A83 2A * + and #$0F ; 9A84 29 0F ). + sta $4001 ; 9A86 8D 01 40 ..@ + txa ; 9A89 8A . + lsr a ; 9A8A 4A J + lsr a ; 9A8B 4A J + lsr a ; 9A8C 4A J + lsr a ; 9A8D 4A J + tax ; 9A8E AA . + lda $0300,x ; 9A8F BD 00 03 ... + sta $4001 ; 9A92 8D 01 40 ..@ + nop ; 9A95 EA . + nop ; 9A96 EA . + nop ; 9A97 EA . + nop ; 9A98 EA . + rol a ; 9A99 2A * + and #$0F ; 9A9A 29 0F ). + cpy #$00 ; 9A9C C0 00 .. + sta $4001 ; 9A9E 8D 01 40 ..@ + bne L9A67 ; 9AA1 D0 C4 .. + jsr L03FE ; 9AA3 20 FE 03 .. + beq L9AEF ; 9AA6 F0 47 .G + nop ; 9AA8 EA . + nop ; 9AA9 EA . + nop ; 9AAA EA . + nop ; 9AAB EA . + nop ; 9AAC EA . + nop ; 9AAD EA . + nop ; 9AAE EA . + jsr L0402 ; 9AAF 20 02 04 .. + jsr L03FB ; 9AB2 20 FB 03 .. + lda #$00 ; 9AB5 A9 00 .. + sta $41 ; 9AB7 85 41 .A +L9AB9: eor $41 ; 9AB9 45 41 EA + sta $41 ; 9ABB 85 41 .A + jsr L03FC ; 9ABD 20 FC 03 .. + lda #$04 ; 9AC0 A9 04 .. +L9AC2: bit $4001 ; 9AC2 2C 01 40 ,.@ + beq L9AC2 ; 9AC5 F0 FB .. + jsr L03FD ; 9AC7 20 FD 03 .. + lda $4001 ; 9ACA AD 01 40 ..@ + jsr L03FC ; 9ACD 20 FC 03 .. + asl a ; 9AD0 0A . + ora $4001 ; 9AD1 0D 01 40 ..@ + php ; 9AD4 08 . + plp ; 9AD5 28 ( + nop ; 9AD6 EA . + nop ; 9AD7 EA . + and #$0F ; 9AD8 29 0F ). + tax ; 9ADA AA . + lda $4001 ; 9ADB AD 01 40 ..@ + jsr L03FF ; 9ADE 20 FF 03 .. + asl a ; 9AE1 0A . + ora $4001 ; 9AE2 0D 01 40 ..@ + and #$0F ; 9AE5 29 0F ). + ora $030F,x ; 9AE7 1D 0F 03 ... + dey ; 9AEA 88 . + sta (a9L),y ; 9AEB 91 7E .~ + bne L9AB9 ; 9AED D0 CA .. +L9AEF: ldx #$02 ; 9AEF A2 02 .. + stx $4001 ; 9AF1 8E 01 40 ..@ + php ; 9AF4 08 . + plp ; 9AF5 28 ( + php ; 9AF6 08 . + plp ; 9AF7 28 ( + php ; 9AF8 08 . + plp ; 9AF9 28 ( + php ; 9AFA 08 . + plp ; 9AFB 28 ( + nop ; 9AFC EA . + nop ; 9AFD EA . + nop ; 9AFE EA . + nop ; 9AFF EA . + nop ; 9B00 EA . + nop ; 9B01 EA . + nop ; 9B02 EA . + rts ; 9B03 60 ` + +; ---------------------------------------------------------------------------- +L9B04: lda #$04 ; 9B04 A9 04 .. + bit $4001 ; 9B06 2C 01 40 ,.@ + bne L9B04 ; 9B09 D0 F9 .. + lda #$00 ; 9B0B A9 00 .. + sta $4001 ; 9B0D 8D 01 40 ..@ + rts ; 9B10 60 ` + +; ---------------------------------------------------------------------------- + sei ; 9B11 78 x + lda $41 ; 9B12 A5 41 .A + pha ; 9B14 48 H + lda $42 ; 9B15 A5 42 .B + pha ; 9B17 48 H + lda a9H ; 9B18 A5 7F .. + pha ; 9B1A 48 H + lda a9L ; 9B1B A5 7E .~ + pha ; 9B1D 48 H + ldx #$02 ; 9B1E A2 02 .. + ldy #$00 ; 9B20 A0 00 .. +L9B22: dey ; 9B22 88 . + bne L9B22 ; 9B23 D0 FD .. + dex ; 9B25 CA . + bne L9B22 ; 9B26 D0 FA .. + jsr L03ED ; 9B28 20 ED 03 .. + lda #$04 ; 9B2B A9 04 .. +L9B2D: bit $4001 ; 9B2D 2C 01 40 ,.@ + beq L9B2D ; 9B30 F0 FB .. + lda #$04 ; 9B32 A9 04 .. + sta a9H ; 9B34 85 7F .. + lda #$E9 ; 9B36 A9 E9 .. + sta a9L ; 9B38 85 7E .~ + ldy #$01 ; 9B3A A0 01 .. + jsr L03AD ; 9B3C 20 AD 03 .. + sta $42 ; 9B3F 85 42 .B + tay ; 9B41 A8 . + jsr L03AD ; 9B42 20 AD 03 .. + jsr L046E ; 9B45 20 6E 04 n. + lda #$06 ; 9B48 A9 06 .. + sta a9H ; 9B4A 85 7F .. + lda #$00 ; 9B4C A9 00 .. + sta a9L ; 9B4E 85 7E .~ + lda #$04 ; 9B50 A9 04 .. + pha ; 9B52 48 H + lda #$2F ; 9B53 A9 2F ./ + pha ; 9B55 48 H + jmp (L04E9) ; 9B56 6C E9 04 l.. + +; ---------------------------------------------------------------------------- + jsr L0402 ; 9B59 20 02 04 .. + pla ; 9B5C 68 h + pla ; 9B5D 68 h + pla ; 9B5E 68 h + sta a9L ; 9B5F 85 7E .~ + pla ; 9B61 68 h + sta a9H ; 9B62 85 7F .. + pla ; 9B64 68 h + sta $42 ; 9B65 85 42 .B + pla ; 9B67 68 h + sta $41 ; 9B68 85 41 .A + cli ; 9B6A 58 X + rts ; 9B6B 60 ` + +; ---------------------------------------------------------------------------- + lda #$BF ; 9B6C A9 BF .. + bne L9B77 ; 9B6E D0 07 .. + lda #$40 ; 9B70 A9 40 .@ + ora $4000 ; 9B72 0D 00 40 ..@ + bne L9B7A ; 9B75 D0 03 .. +L9B77: and $4000 ; 9B77 2D 00 40 -.@ +L9B7A: sta $4000 ; 9B7A 8D 00 40 ..@ + rts ; 9B7D 60 ` + +; ---------------------------------------------------------------------------- + jsr L04B0 ; 9B7E 20 B0 04 .. + ldy #$00 ; 9B81 A0 00 .. + jsr L03AD ; 9B83 20 AD 03 .. + lda #$B6 ; 9B86 A9 B6 .. + jsr L04D1 ; 9B88 20 D1 04 .. + lda r1H ; 9B8B A5 05 .. + sta $01FA ; 9B8D 8D FA 01 ... + bne L9B9A ; 9B90 D0 08 .. + lda #$90 ; 9B92 A9 90 .. + sta $04E8 ; 9B94 8D E8 04 ... + jsr L04D1 ; 9B97 20 D1 04 .. +L9B9A: jmp L032B ; 9B9A 4C 2B 03 L+. + +; ---------------------------------------------------------------------------- + jsr L04B9 ; 9B9D 20 B9 04 .. + lda #$92 ; 9BA0 A9 92 .. + jsr L04D1 ; 9BA2 20 D1 04 .. + lda r1H ; 9BA5 A5 05 .. + cmp #$02 ; 9BA7 C9 02 .. + bcc L9BAE ; 9BA9 90 03 .. + nop ; 9BAB EA . + nop ; 9BAC EA . + rts ; 9BAD 60 ` + +; ---------------------------------------------------------------------------- +L9BAE: lda #$B0 ; 9BAE A9 B0 .. + bne L9BD3 ; 9BB0 D0 21 .! + lda $04EB ; 9BB2 AD EB 04 ... + and #$7F ; 9BB5 29 7F ). + cmp r7H ; 9BB7 C5 11 .. + beq L9BE8 ; 9BB9 F0 2D .- + lda $04E8 ; 9BBB AD E8 04 ... + beq L9BE8 ; 9BBE F0 28 .( + ldx #$03 ; 9BC0 A2 03 .. + jsr LFF6C ; 9BC2 20 6C FF l. + lda #$00 ; 9BC5 A9 00 .. + sta $04E8 ; 9BC7 8D E8 04 ... + lda #$86 ; 9BCA A9 86 .. + bne L9BD3 ; 9BCC D0 05 .. + jsr L04B0 ; 9BCE 20 B0 04 .. + lda #$80 ; 9BD1 A9 80 .. +L9BD3: sta r1H ; 9BD3 85 05 .. + lda $04EB ; 9BD5 AD EB 04 ... + and #$7F ; 9BD8 29 7F ). + sta r7H ; 9BDA 85 11 .. + lda $04EC ; 9BDC AD EC 04 ... + sta r8L ; 9BDF 85 12 .. + ldx #$03 ; 9BE1 A2 03 .. + lda r0L,x ; 9BE3 B5 02 .. + jsr LFF54 ; 9BE5 20 54 FF T. +L9BE8: rts ; 9BE8 60 ` + +; ---------------------------------------------------------------------------- + brk ; 9BE9 00 . + brk ; 9BEA 00 . + brk ; 9BEB 00 . + brk ; 9BEC 00 . + brk ; 9BED 00 . + brk ; 9BEE 00 . + +; End of "drv1581_drvcode" segment +; ---------------------------------------------------------------------------- +.code + + +.segment "drv1581_21hd_b": absolute + +L9BEF: brk ; 9BEF 00 . +L9BF0: brk ; 9BF0 00 . +L9BF1: brk ; 9BF1 00 . +L9BF2: brk ; 9BF2 00 . +L9BF3: brk ; 9BF3 00 . + brk ; 9BF4 00 . +L9BF5: brk ; 9BF5 00 . +L9BF6: brk ; 9BF6 00 . +L9BF7: brk ; 9BF7 00 . +L9BF8: brk ; 9BF8 00 . +L9BF9: brk ; 9BF9 00 . +L9BFA: brk ; 9BFA 00 . +L9BFB: brk ; 9BFB 00 . +L9BFC: brk ; 9BFC 00 . +L9BFD: brk ; 9BFD 00 . + brk ; 9BFE 00 . +L9BFF: brk ; 9BFF 00 . +L9C00: brk ; 9C00 00 . +L9C01: brk ; 9C01 00 . +L9C02: brk ; 9C02 00 . + brk ; 9C03 00 . + brk ; 9C04 00 . + brk ; 9C05 00 . + brk ; 9C06 00 . + brk ; 9C07 00 . +; .byte $C2 ; 9C08 C2 . diff --git a/drv/drv1581ram.cfg b/drv/drv1581ram.cfg new file mode 100644 index 00000000..f1caa521 --- /dev/null +++ b/drv/drv1581ram.cfg @@ -0,0 +1,8 @@ +MEMORY { + DISK_BASE: start = $9000, size = $0D80 file = %O; + +} + +SEGMENTS { + drv1581ram: load = DISK_BASE, type = ro; +} diff --git a/drv/drv1581ram.s b/drv/drv1581ram.s new file mode 100644 index 00000000..40712328 --- /dev/null +++ b/drv/drv1581ram.s @@ -0,0 +1,1063 @@ +; da65 V2.15 +; Created: 2017-06-30 23:59:27 +; Input file: configure.cvt.record.6 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + + +.segment "drv1581ram": absolute + +_InitForIO: + .addr __InitForIO ; 9000 DF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 55 95 U. +_ExitTurbo: + .addr __ExitTurbo ; 9004 84 95 .. +_PurgeTurbo: + .addr __ExitTurbo ; 9006 84 95 .. +_EnterTurbo: + .addr __EnterTurbo ; 9008 7B 95 {. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 8A 95 .. +_NewDisk: + .addr __NewDisk ; 900C 92 95 .. +_ReadBlock: + .addr __ReadBlock ; 900E 96 95 .. +_WriteBlock: + .addr __WriteBlock ; 9010 AC 95 .. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 B5 95 .. +_OpenDisk: + .addr __OpenDisk ; 9014 E5 90 .. +_GetBlock: + .addr __GetBlock ; 9016 6E 90 n. +_PutBlock: + .addr __PutBlock ; 9018 9E 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 4F 90 O. +_PutDirHead: + .addr __PutDirHead ; 901C 7B 90 {. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E 93 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 54 94 T. +_FreeBlock: + .addr __FreeBlock ; 9022 0A 94 .. +_SetNextFree: + .addr __SetNextFree ; 9024 3E 93 >. +_FindBAMBit: + .addr __FindBAMBit ; 9026 12 94 .. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 3D 91 =. +_BlkAlloc: + .addr __BlkAlloc ; 902A 10 91 .. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 65 92 e. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E 93 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C EE 91 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C FA 91 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 44 92 LD. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C F4 92 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 66 90 Lf. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C 96 90 L.. + +; ---------------------------------------------------------------------------- + nop ; 9042 EA . + nop ; 9043 EA . + rts ; 9044 60 ` + +; ---------------------------------------------------------------------------- + nop ; 9045 EA . + nop ; 9046 EA . + rts ; 9047 60 ` + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C C9 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C A1 95 L.. + +; ---------------------------------------------------------------------------- + .byte $83 ; 904E 83 . +__GetDirHead: + jsr L90B1 ; 904F 20 B1 90 .. + jsr __GetBlock ; 9052 20 6E 90 n. + txa ; 9055 8A . + bne L9065 ; 9056 D0 0D .. + jsr L90B9 ; 9058 20 B9 90 .. + jsr __GetBlock ; 905B 20 6E 90 n. + bne L9065 ; 905E D0 05 .. + jsr L90C1 ; 9060 20 C1 90 .. + bne __GetBlock ; 9063 D0 09 .. +L9065: rts ; 9065 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9066 A9 80 .. + sta r4H ; 9068 85 0B .. + lda #$00 ; 906A A9 00 .. + sta r4L ; 906C 85 0A .. +__GetBlock: + jsr EnterTurbo ; 906E 20 14 C2 .. + txa ; 9071 8A . + bne L907A ; 9072 D0 06 .. + php ; 9074 08 . + sei ; 9075 78 x + jsr ReadBlock ; 9076 20 1A C2 .. + plp ; 9079 28 ( +L907A: rts ; 907A 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + php ; 907B 08 . + sei ; 907C 78 x + jsr L90B1 ; 907D 20 B1 90 .. + jsr WriteBlock ; 9080 20 20 C2 . + txa ; 9083 8A . + bne L9094 ; 9084 D0 0E .. + jsr L90B9 ; 9086 20 B9 90 .. + jsr WriteBlock ; 9089 20 20 C2 . + bne L9094 ; 908C D0 06 .. + jsr L90C1 ; 908E 20 C1 90 .. + jsr WriteBlock ; 9091 20 20 C2 . +L9094: plp ; 9094 28 ( + rts ; 9095 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 9096 A9 80 .. + sta r4H ; 9098 85 0B .. + lda #$00 ; 909A A9 00 .. + sta r4L ; 909C 85 0A .. +__PutBlock: + jsr EnterTurbo ; 909E 20 14 C2 .. + txa ; 90A1 8A . + bne L90B0 ; 90A2 D0 0C .. + php ; 90A4 08 . + sei ; 90A5 78 x + jsr WriteBlock ; 90A6 20 20 C2 . + txa ; 90A9 8A . + bne L90AF ; 90AA D0 03 .. + jsr VerWriteBlock ; 90AC 20 23 C2 #. +L90AF: plp ; 90AF 28 ( +L90B0: rts ; 90B0 60 ` + +; ---------------------------------------------------------------------------- +L90B1: ldx #$82 ; 90B1 A2 82 .. + ldy #$00 ; 90B3 A0 00 .. + lda #$00 ; 90B5 A9 00 .. + beq L90C7 ; 90B7 F0 0E .. +L90B9: ldx #$89 ; 90B9 A2 89 .. + ldy #$00 ; 90BB A0 00 .. + lda #$01 ; 90BD A9 01 .. + bne L90C7 ; 90BF D0 06 .. +L90C1: ldx #$9C ; 90C1 A2 9C .. + ldy #$80 ; 90C3 A0 80 .. + lda #$02 ; 90C5 A9 02 .. +L90C7: stx r4H ; 90C7 86 0B .. + sty r4L ; 90C9 84 0A .. + sta r1H ; 90CB 85 05 .. + lda #$28 ; 90CD A9 28 .( + sta r1L ; 90CF 85 04 .. + rts ; 90D1 60 ` + +; ---------------------------------------------------------------------------- +L90D2: lda #$00 ; 90D2 A9 00 .. + sta L9674 ; 90D4 8D 74 96 .t. + ldx #$02 ; 90D7 A2 02 .. + lda r1L ; 90D9 A5 04 .. + beq L90E3 ; 90DB F0 06 .. + cmp #$51 ; 90DD C9 51 .Q + bcs L90E3 ; 90DF B0 02 .. + sec ; 90E1 38 8 + rts ; 90E2 60 ` + +; ---------------------------------------------------------------------------- +L90E3: clc ; 90E3 18 . + rts ; 90E4 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 90E5 20 E1 C1 .. + txa ; 90E8 8A . + bne L910F ; 90E9 D0 24 .$ + jsr GetDirHead ; 90EB 20 47 C2 G. + txa ; 90EE 8A . + bne L910F ; 90EF D0 1E .. + jsr L91E5 ; 90F1 20 E5 91 .. + jsr ChkDkGEOS ; 90F4 20 DE C1 .. + lda #$82 ; 90F7 A9 82 .. + sta r4H ; 90F9 85 0B .. + lda #$90 ; 90FB A9 90 .. + sta r4L ; 90FD 85 0A .. + ldx #$0C ; 90FF A2 0C .. + jsr GetPtrCurDkNm ; 9101 20 98 C2 .. + ldx #$0A ; 9104 A2 0A .. + ldy #$0C ; 9106 A0 0C .. + lda #$12 ; 9108 A9 12 .. + jsr CopyFString ; 910A 20 68 C2 h. + ldx #$00 ; 910D A2 00 .. +L910F: rts ; 910F 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 9110 68 h + sta r3L ; 9111 85 08 .. + pla ; 9113 68 h + sta r3H ; 9114 85 09 .. + lda r3H ; 9116 A5 09 .. + pha ; 9118 48 H + lda r3L ; 9119 A5 08 .. + pha ; 911B 48 H + lda r3L ; 911C A5 08 .. + sec ; 911E 38 8 + sbc $C1EE ; 911F ED EE C1 ... + sta r3L ; 9122 85 08 .. + lda r3H ; 9124 A5 09 .. + sbc $C1EF ; 9126 ED EF C1 ... + sta r3H ; 9129 85 09 .. + ldy #$27 ; 912B A0 27 .' + lda r3H ; 912D A5 09 .. + beq L9133 ; 912F F0 02 .. + ldy #$23 ; 9131 A0 23 .# +L9133: sty r3L ; 9133 84 08 .. + ldy #$00 ; 9135 A0 00 .. + sty r3H ; 9137 84 09 .. + lda #$02 ; 9139 A9 02 .. + bne L913F ; 913B D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 913D A9 00 .. +L913F: sta L9678 ; 913F 8D 78 96 .x. + lda r9H ; 9142 A5 15 .. + pha ; 9144 48 H + lda r9L ; 9145 A5 14 .. + pha ; 9147 48 H + lda r3H ; 9148 A5 09 .. + pha ; 914A 48 H + lda r3L ; 914B A5 08 .. + pha ; 914D 48 H + lda #$00 ; 914E A9 00 .. + sta r3H ; 9150 85 09 .. + lda #$FE ; 9152 A9 FE .. + sta r3L ; 9154 85 08 .. + ldx #$06 ; 9156 A2 06 .. + ldy #$08 ; 9158 A0 08 .. + jsr Ddiv ; 915A 20 69 C1 i. + lda r8L ; 915D A5 12 .. + beq L9167 ; 915F F0 06 .. + inc r2L ; 9161 E6 06 .. + bne L9167 ; 9163 D0 02 .. + inc r2H ; 9165 E6 07 .. +L9167: jsr L91E5 ; 9167 20 E5 91 .. + jsr CalcBlksFree ; 916A 20 DB C1 .. + pla ; 916D 68 h + sta r3L ; 916E 85 08 .. + pla ; 9170 68 h + sta r3H ; 9171 85 09 .. + ldx #$03 ; 9173 A2 03 .. + lda r2H ; 9175 A5 07 .. + cmp r4H ; 9177 C5 0B .. + bne L917F ; 9179 D0 04 .. + lda r2L ; 917B A5 06 .. + cmp r4L ; 917D C5 0A .. +L917F: beq L9183 ; 917F F0 02 .. + bcs L91DE ; 9181 B0 5B .[ +L9183: lda r6H ; 9183 A5 0F .. + sta r4H ; 9185 85 0B .. + lda r6L ; 9187 A5 0E .. + sta r4L ; 9189 85 0A .. + lda r2H ; 918B A5 07 .. + sta r5H ; 918D 85 0D .. + lda r2L ; 918F A5 06 .. + sta r5L ; 9191 85 0C .. +L9193: jsr SetNextFree ; 9193 20 92 C2 .. + txa ; 9196 8A . + bne L91DE ; 9197 D0 45 .E + ldy #$00 ; 9199 A0 00 .. + lda r3L ; 919B A5 08 .. + sta (r4L),y ; 919D 91 0A .. + iny ; 919F C8 . + lda r3H ; 91A0 A5 09 .. + sta (r4L),y ; 91A2 91 0A .. + clc ; 91A4 18 . + lda #$02 ; 91A5 A9 02 .. + adc r4L ; 91A7 65 0A e. + sta r4L ; 91A9 85 0A .. + bcc L91AF ; 91AB 90 02 .. + inc r4H ; 91AD E6 0B .. +L91AF: lda L9678 ; 91AF AD 78 96 .x. + beq L91BD ; 91B2 F0 09 .. + dec L9678 ; 91B4 CE 78 96 .x. + bne L91BD ; 91B7 D0 04 .. + lda #$23 ; 91B9 A9 23 .# + sta r3L ; 91BB 85 08 .. +L91BD: lda r5L ; 91BD A5 0C .. + bne L91C3 ; 91BF D0 02 .. + dec r5H ; 91C1 C6 0D .. +L91C3: dec r5L ; 91C3 C6 0C .. + lda r5L ; 91C5 A5 0C .. + ora r5H ; 91C7 05 0D .. + bne L9193 ; 91C9 D0 C8 .. + ldy #$00 ; 91CB A0 00 .. + tya ; 91CD 98 . + sta (r4L),y ; 91CE 91 0A .. + iny ; 91D0 C8 . + lda r8L ; 91D1 A5 12 .. + bne L91D7 ; 91D3 D0 02 .. + lda #$FE ; 91D5 A9 FE .. +L91D7: clc ; 91D7 18 . + adc #$01 ; 91D8 69 01 i. + sta (r4L),y ; 91DA 91 0A .. + ldx #$00 ; 91DC A2 00 .. +L91DE: pla ; 91DE 68 h + sta r9L ; 91DF 85 14 .. + pla ; 91E1 68 h + sta r9H ; 91E2 85 15 .. + rts ; 91E4 60 ` + +; ---------------------------------------------------------------------------- +L91E5: lda #$82 ; 91E5 A9 82 .. + sta r5H ; 91E7 85 0D .. + lda #$00 ; 91E9 A9 00 .. + sta r5L ; 91EB 85 0C .. + rts ; 91ED 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + jsr L90C1 ; 91EE 20 C1 90 .. + inc r1H ; 91F1 E6 05 .. + lda #$00 ; 91F3 A9 00 .. + sta L9679 ; 91F5 8D 79 96 .y. + beq L9236 ; 91F8 F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 91FA A2 00 .. + ldy #$00 ; 91FC A0 00 .. + clc ; 91FE 18 . + lda #$20 ; 91FF A9 20 . + adc r5L ; 9201 65 0C e. + sta r5L ; 9203 85 0C .. + bcc L9209 ; 9205 90 02 .. + inc r5H ; 9207 E6 0D .. +L9209: lda r5H ; 9209 A5 0D .. + cmp #$80 ; 920B C9 80 .. + bne L9213 ; 920D D0 04 .. + lda r5L ; 920F A5 0C .. + cmp #$FF ; 9211 C9 FF .. +L9213: bcc L9243 ; 9213 90 2E .. + ldy #$FF ; 9215 A0 FF .. + lda $8001 ; 9217 AD 01 80 ... + sta r1H ; 921A 85 05 .. + lda diskBlkBuf ; 921C AD 00 80 ... + sta r1L ; 921F 85 04 .. + bne L9236 ; 9221 D0 13 .. + lda L9679 ; 9223 AD 79 96 .y. + bne L9243 ; 9226 D0 1B .. + lda #$FF ; 9228 A9 FF .. + sta L9679 ; 922A 8D 79 96 .y. + jsr GetBorder ; 922D 20 36 90 6. + txa ; 9230 8A . + bne L9243 ; 9231 D0 10 .. + tya ; 9233 98 . + bne L9243 ; 9234 D0 0D .. +L9236: jsr ReadBuff ; 9236 20 3C 90 <. + ldy #$00 ; 9239 A0 00 .. + lda #$80 ; 923B A9 80 .. + sta r5H ; 923D 85 0D .. + lda #$02 ; 923F A9 02 .. + sta r5L ; 9241 85 0C .. +L9243: rts ; 9243 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9244 20 47 C2 G. + txa ; 9247 8A . + bne L9264 ; 9248 D0 1A .. + jsr L91E5 ; 924A 20 E5 91 .. + jsr ChkDkGEOS ; 924D 20 DE C1 .. + bne L9256 ; 9250 D0 04 .. + ldy #$FF ; 9252 A0 FF .. + bne L9262 ; 9254 D0 0C .. +L9256: lda $82AC ; 9256 AD AC 82 ... + sta r1H ; 9259 85 05 .. + lda $82AB ; 925B AD AB 82 ... + sta r1L ; 925E 85 04 .. + ldy #$00 ; 9260 A0 00 .. +L9262: ldx #$00 ; 9262 A2 00 .. +L9264: rts ; 9264 60 ` + +; ---------------------------------------------------------------------------- +__ChkDkGEOS: + ldy #$AD ; 9265 A0 AD .. + ldx #$00 ; 9267 A2 00 .. + stx isGEOS ; 9269 8E 8B 84 ... +L926C: lda (r5L),y ; 926C B1 0C .. + cmp L9282,x ; 926E DD 82 92 ... + bne L927E ; 9271 D0 0B .. + iny ; 9273 C8 . + inx ; 9274 E8 . + cpx #$0B ; 9275 E0 0B .. + bne L926C ; 9277 D0 F3 .. + lda #$FF ; 9279 A9 FF .. + sta isGEOS ; 927B 8D 8B 84 ... +L927E: lda isGEOS ; 927E AD 8B 84 ... + rts ; 9281 60 ` + +; ---------------------------------------------------------------------------- +L9282: .byte "GEOS format V1.0" ; 9282 47 45 4F 53 20 66 6F 72 GEOS for + ; 928A 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 9292 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 9293 08 . + sei ; 9294 78 x + lda r6L ; 9295 A5 0E .. + pha ; 9297 48 H + lda r2H ; 9298 A5 07 .. + pha ; 929A 48 H + lda r2L ; 929B A5 06 .. + pha ; 929D 48 H + ldx r10L ; 929E A6 16 .. + inx ; 92A0 E8 . + stx r6L ; 92A1 86 0E .. + lda #$28 ; 92A3 A9 28 .( + sta r1L ; 92A5 85 04 .. + lda #$03 ; 92A7 A9 03 .. + sta r1H ; 92A9 85 05 .. +L92AB: jsr ReadBuff ; 92AB 20 3C 90 <. +L92AE: txa ; 92AE 8A . + bne L92E9 ; 92AF D0 38 .8 + dec r6L ; 92B1 C6 0E .. + beq L92CA ; 92B3 F0 15 .. +L92B5: lda diskBlkBuf ; 92B5 AD 00 80 ... + bne L92C0 ; 92B8 D0 06 .. + jsr AddDirBlock ; 92BA 20 39 90 9. + clv ; 92BD B8 . + bvc L92AE ; 92BE 50 EE P. +L92C0: sta r1L ; 92C0 85 04 .. + lda $8001 ; 92C2 AD 01 80 ... + sta r1H ; 92C5 85 05 .. + clv ; 92C7 B8 . + bvc L92AB ; 92C8 50 E1 P. +L92CA: ldy #$02 ; 92CA A0 02 .. + ldx #$00 ; 92CC A2 00 .. +L92CE: lda diskBlkBuf,y ; 92CE B9 00 80 ... + beq L92E9 ; 92D1 F0 16 .. + tya ; 92D3 98 . + clc ; 92D4 18 . + adc #$20 ; 92D5 69 20 i + tay ; 92D7 A8 . + bcc L92CE ; 92D8 90 F4 .. + lda #$01 ; 92DA A9 01 .. + sta r6L ; 92DC 85 0E .. + ldx #$04 ; 92DE A2 04 .. + ldy r10L ; 92E0 A4 16 .. + iny ; 92E2 C8 . + sty r10L ; 92E3 84 16 .. + cpy #$12 ; 92E5 C0 12 .. + bcc L92B5 ; 92E7 90 CC .. +L92E9: pla ; 92E9 68 h + sta r2L ; 92EA 85 06 .. + pla ; 92EC 68 h + sta r2H ; 92ED 85 07 .. + pla ; 92EF 68 h + sta r6L ; 92F0 85 0E .. + plp ; 92F2 28 ( + rts ; 92F3 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 92F4 A5 0F .. + pha ; 92F6 48 H + lda r6L ; 92F7 A5 0E .. + pha ; 92F9 48 H + ldx #$04 ; 92FA A2 04 .. + lda $89FA ; 92FC AD FA 89 ... + beq L9327 ; 92FF F0 26 .& + lda r1H ; 9301 A5 05 .. + sta r3H ; 9303 85 09 .. + lda r1L ; 9305 A5 04 .. + sta r3L ; 9307 85 08 .. + jsr SetNextFree ; 9309 20 92 C2 .. + lda r3H ; 930C A5 09 .. + sta $8001 ; 930E 8D 01 80 ... + lda r3L ; 9311 A5 08 .. + sta diskBlkBuf ; 9313 8D 00 80 ... + jsr WriteBuff ; 9316 20 3F 90 ?. + txa ; 9319 8A . + bne L9327 ; 931A D0 0B .. + lda r3H ; 931C A5 09 .. + sta r1H ; 931E 85 05 .. + lda r3L ; 9320 A5 08 .. + sta r1L ; 9322 85 04 .. + jsr L932E ; 9324 20 2E 93 .. +L9327: pla ; 9327 68 h + sta r6L ; 9328 85 0E .. + pla ; 932A 68 h + sta r6H ; 932B 85 0F .. + rts ; 932D 60 ` + +; ---------------------------------------------------------------------------- +L932E: lda #$00 ; 932E A9 00 .. + tay ; 9330 A8 . +L9331: sta diskBlkBuf,y ; 9331 99 00 80 ... + iny ; 9334 C8 . + bne L9331 ; 9335 D0 FA .. + dey ; 9337 88 . + sty $8001 ; 9338 8C 01 80 ... + jmp WriteBuff ; 933B 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L9348 ; 933E 20 48 93 H. + bne L9344 ; 9341 D0 01 .. + rts ; 9343 60 ` + +; ---------------------------------------------------------------------------- +L9344: lda #$27 ; 9344 A9 27 .' + sta r3L ; 9346 85 08 .. +L9348: lda r3H ; 9348 A5 09 .. + clc ; 934A 18 . + adc #$01 ; 934B 69 01 i. + sta r6H ; 934D 85 0F .. + lda r3L ; 934F A5 08 .. + sta r6L ; 9351 85 0E .. + cmp #$28 ; 9353 C9 28 .( + beq L935D ; 9355 F0 06 .. +L9357: lda r6L ; 9357 A5 0E .. + cmp #$28 ; 9359 C9 28 .( + beq L938F ; 935B F0 32 .2 +L935D: cmp #$29 ; 935D C9 29 .) + bcc L9364 ; 935F 90 03 .. + sec ; 9361 38 8 + sbc #$28 ; 9362 E9 28 .( +L9364: sec ; 9364 38 8 + sbc #$01 ; 9365 E9 01 .. + asl a ; 9367 0A . + sta r7L ; 9368 85 10 .. + asl a ; 936A 0A . + clc ; 936B 18 . + adc r7L ; 936C 65 10 e. + tax ; 936E AA . + lda r6L ; 936F A5 0E .. + cmp #$29 ; 9371 C9 29 .) + bcc L937B ; 9373 90 06 .. + lda $9C90,x ; 9375 BD 90 9C ... + clv ; 9378 B8 . + bvc L937E ; 9379 50 03 P. +L937B: lda $8910,x ; 937B BD 10 89 ... +L937E: beq L938F ; 937E F0 0F .. + lda #$28 ; 9380 A9 28 .( + sta r7L ; 9382 85 10 .. + tay ; 9384 A8 . +L9385: jsr L93BB ; 9385 20 BB 93 .. + beq L93AD ; 9388 F0 23 .# + inc r6H ; 938A E6 0F .. + dey ; 938C 88 . + bne L9385 ; 938D D0 F6 .. +L938F: lda r6L ; 938F A5 0E .. + cmp #$29 ; 9391 C9 29 .) + bcs L939F ; 9393 B0 0A .. + dec r6L ; 9395 C6 0E .. + bne L93A1 ; 9397 D0 08 .. + lda #$29 ; 9399 A9 29 .) + sta r6L ; 939B 85 0E .. + bne L93A1 ; 939D D0 02 .. +L939F: inc r6L ; 939F E6 0E .. +L93A1: lda r6L ; 93A1 A5 0E .. + cmp #$51 ; 93A3 C9 51 .Q + bcs L93B8 ; 93A5 B0 11 .. + lda #$00 ; 93A7 A9 00 .. + sta r6H ; 93A9 85 0F .. + beq L9357 ; 93AB F0 AA .. +L93AD: lda r6L ; 93AD A5 0E .. + sta r3L ; 93AF 85 08 .. + lda r6H ; 93B1 A5 0F .. + sta r3H ; 93B3 85 09 .. + ldx #$00 ; 93B5 A2 00 .. + rts ; 93B7 60 ` + +; ---------------------------------------------------------------------------- +L93B8: ldx #$03 ; 93B8 A2 03 .. + rts ; 93BA 60 ` + +; ---------------------------------------------------------------------------- +L93BB: lda r6H ; 93BB A5 0F .. +L93BD: cmp r7L ; 93BD C5 10 .. + bcc L93C7 ; 93BF 90 06 .. + sec ; 93C1 38 8 + sbc r7L ; 93C2 E5 10 .. + clv ; 93C4 B8 . + bvc L93BD ; 93C5 50 F6 P. +L93C7: sta r6H ; 93C7 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93C9 20 AD C2 .. + bne L93D1 ; 93CC D0 03 .. + ldx #$06 ; 93CE A2 06 .. + rts ; 93D0 60 ` + +; ---------------------------------------------------------------------------- +L93D1: php ; 93D1 08 . + lda r6L ; 93D2 A5 0E .. + cmp #$29 ; 93D4 C9 29 .) + bcc L93F1 ; 93D6 90 19 .. + lda r8H ; 93D8 A5 13 .. + eor $9C90,x ; 93DA 5D 90 9C ].. + sta $9C90,x ; 93DD 9D 90 9C ... + ldx r7H ; 93E0 A6 11 .. + plp ; 93E2 28 ( + beq L93EB ; 93E3 F0 06 .. + dec $9C90,x ; 93E5 DE 90 9C ... + clv ; 93E8 B8 . + bvc L9407 ; 93E9 50 1C P. +L93EB: inc $9C90,x ; 93EB FE 90 9C ... + clv ; 93EE B8 . + bvc L9407 ; 93EF 50 16 P. +L93F1: lda r8H ; 93F1 A5 13 .. + eor $8910,x ; 93F3 5D 10 89 ].. + sta $8910,x ; 93F6 9D 10 89 ... + ldx r7H ; 93F9 A6 11 .. + plp ; 93FB 28 ( + beq L9404 ; 93FC F0 06 .. + dec $8910,x ; 93FE DE 10 89 ... + clv ; 9401 B8 . + bvc L9407 ; 9402 50 03 P. +L9404: inc $8910,x ; 9404 FE 10 89 ... +L9407: ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 940A 20 AD C2 .. + beq L93D1 ; 940D F0 C2 .. + ldx #$06 ; 940F A2 06 .. + rts ; 9411 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9412 A5 0F .. + and #$07 ; 9414 29 07 ). + tax ; 9416 AA . + lda FBBBitTab,x ; 9417 BD 4C 94 .L. + sta r8H ; 941A 85 13 .. + lda r6L ; 941C A5 0E .. + cmp #$29 ; 941E C9 29 .) + bcc L9425 ; 9420 90 03 .. + sec ; 9422 38 8 + sbc #$28 ; 9423 E9 28 .( +L9425: sec ; 9425 38 8 + sbc #$01 ; 9426 E9 01 .. + asl a ; 9428 0A . + sta r7H ; 9429 85 11 .. + asl a ; 942B 0A . + clc ; 942C 18 . + adc r7H ; 942D 65 11 e. + sta r7H ; 942F 85 11 .. + lda r6H ; 9431 A5 0F .. + lsr a ; 9433 4A J + lsr a ; 9434 4A J + lsr a ; 9435 4A J + sec ; 9436 38 8 + adc r7H ; 9437 65 11 e. + tax ; 9439 AA . + lda r6L ; 943A A5 0E .. + cmp #$29 ; 943C C9 29 .) + bcc L9446 ; 943E 90 06 .. + lda $9C90,x ; 9440 BD 90 9C ... + and r8H ; 9443 25 13 %. + rts ; 9445 60 ` + +; ---------------------------------------------------------------------------- +L9446: lda $8910,x ; 9446 BD 10 89 ... + and r8H ; 9449 25 13 %. + rts ; 944B 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 944C 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9454 A9 00 .. + sta r4L ; 9456 85 0A .. + sta r4H ; 9458 85 0B .. + ldy #$10 ; 945A A0 10 .. +L945C: lda dir2Head,y ; 945C B9 00 89 ... + clc ; 945F 18 . + adc r4L ; 9460 65 0A e. + sta r4L ; 9462 85 0A .. + bcc L9468 ; 9464 90 02 .. + inc r4H ; 9466 E6 0B .. +L9468: tya ; 9468 98 . + clc ; 9469 18 . + adc #$06 ; 946A 69 06 i. + tay ; 946C A8 . + cpy #$FA ; 946D C0 FA .. + beq L9468 ; 946F F0 F7 .. + cpy #$00 ; 9471 C0 00 .. + bne L945C ; 9473 D0 E7 .. + ldy #$10 ; 9475 A0 10 .. +L9477: lda $9C80,y ; 9477 B9 80 9C ... + clc ; 947A 18 . + adc r4L ; 947B 65 0A e. + sta r4L ; 947D 85 0A .. + bcc L9483 ; 947F 90 02 .. + inc r4H ; 9481 E6 0B .. +L9483: tya ; 9483 98 . + clc ; 9484 18 . + adc #$06 ; 9485 69 06 i. + tay ; 9487 A8 . + bne L9477 ; 9488 D0 ED .. + lda #$0C ; 948A A9 0C .. + sta r3H ; 948C 85 09 .. + lda #$58 ; 948E A9 58 .X + sta r3L ; 9490 85 08 .. + rts ; 9492 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 9493 20 47 C2 G. + txa ; 9496 8A . + bne L94DE ; 9497 D0 45 .E + jsr L91E5 ; 9499 20 E5 91 .. + jsr CalcBlksFree ; 949C 20 DB C1 .. + ldx #$03 ; 949F A2 03 .. + lda r4L ; 94A1 A5 0A .. + ora r4H ; 94A3 05 0B .. + beq L94DE ; 94A5 F0 37 .7 + lda #$28 ; 94A7 A9 28 .( + sta r3L ; 94A9 85 08 .. + lda #$12 ; 94AB A9 12 .. + sta r3H ; 94AD 85 09 .. + jsr SetNextFree ; 94AF 20 92 C2 .. + txa ; 94B2 8A . + bne L94DE ; 94B3 D0 29 .) + lda r3H ; 94B5 A5 09 .. + sta r1H ; 94B7 85 05 .. + lda r3L ; 94B9 A5 08 .. + sta r1L ; 94BB 85 04 .. + jsr L932E ; 94BD 20 2E 93 .. + txa ; 94C0 8A . + bne L94DE ; 94C1 D0 1B .. + lda r1H ; 94C3 A5 05 .. + sta $82AC ; 94C5 8D AC 82 ... + lda r1L ; 94C8 A5 04 .. + sta $82AB ; 94CA 8D AB 82 ... + ldy #$BC ; 94CD A0 BC .. + ldx #$0F ; 94CF A2 0F .. +L94D1: lda L9282,x ; 94D1 BD 82 92 ... + sta curDirHead,y ; 94D4 99 00 82 ... + dey ; 94D7 88 . + dex ; 94D8 CA . + bpl L94D1 ; 94D9 10 F6 .. + jsr PutDirHead ; 94DB 20 4A C2 J. +L94DE: rts ; 94DE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + php ; 94DF 08 . + pla ; 94E0 68 h + sta L966A ; 94E1 8D 6A 96 .j. + sei ; 94E4 78 x + lda CPU_DATA ; 94E5 A5 01 .. + sta L966C ; 94E7 8D 6C 96 .l. + lda #$36 ; 94EA A9 36 .6 + sta CPU_DATA ; 94EC 85 01 .. + lda grirqen ; 94EE AD 1A D0 ... + sta L966B ; 94F1 8D 6B 96 .k. + lda clkreg ; 94F4 AD 30 D0 .0. + sta L9669 ; 94F7 8D 69 96 .i. + ldy #$00 ; 94FA A0 00 .. + sty clkreg ; 94FC 8C 30 D0 .0. + sty grirqen ; 94FF 8C 1A D0 ... + lda #$7F ; 9502 A9 7F .. + sta grirq ; 9504 8D 19 D0 ... + sta $DC0D ; 9507 8D 0D DC ... + sta $DD0D ; 950A 8D 0D DD ... + lda #$95 ; 950D A9 95 .. + sta $0315 ; 950F 8D 15 03 ... + lda #$4F ; 9512 A9 4F .O + sta irqvec ; 9514 8D 14 03 ... + lda #$95 ; 9517 A9 95 .. + sta $0319 ; 9519 8D 19 03 ... + lda #$54 ; 951C A9 54 .T + sta nmivec ; 951E 8D 18 03 ... + lda #$3F ; 9521 A9 3F .? + sta $DD02 ; 9523 8D 02 DD ... + lda mobenble ; 9526 AD 15 D0 ... + sta L966D ; 9529 8D 6D 96 .m. + sty mobenble ; 952C 8C 15 D0 ... + sty $DD05 ; 952F 8C 05 DD ... + iny ; 9532 C8 . + sty $DD04 ; 9533 8C 04 DD ... + lda #$81 ; 9536 A9 81 .. + sta $DD0D ; 9538 8D 0D DD ... + lda #$09 ; 953B A9 09 .. + sta $DD0E ; 953D 8D 0E DD ... + ldy #$2C ; 9540 A0 2C ., +L9542: lda rasreg ; 9542 AD 12 D0 ... + cmp TURBO_DD00_CPY ; 9545 C5 8F .. + beq L9542 ; 9547 F0 F9 .. + sta TURBO_DD00_CPY ; 9549 85 8F .. + dey ; 954B 88 . + bne L9542 ; 954C D0 F4 .. + rts ; 954E 60 ` + +; ---------------------------------------------------------------------------- + pla ; 954F 68 h + tay ; 9550 A8 . + pla ; 9551 68 h + tax ; 9552 AA . + pla ; 9553 68 h + rti ; 9554 40 @ + +; ---------------------------------------------------------------------------- +__DoneWithIO: + sei ; 9555 78 x + lda L9669 ; 9556 AD 69 96 .i. + sta clkreg ; 9559 8D 30 D0 .0. + lda L966D ; 955C AD 6D 96 .m. + sta mobenble ; 955F 8D 15 D0 ... + lda #$7F ; 9562 A9 7F .. + sta $DD0D ; 9564 8D 0D DD ... + lda $DD0D ; 9567 AD 0D DD ... + lda L966B ; 956A AD 6B 96 .k. + sta grirqen ; 956D 8D 1A D0 ... + lda L966C ; 9570 AD 6C 96 .l. + sta CPU_DATA ; 9573 85 01 .. + lda L966A ; 9575 AD 6A 96 .j. + pha ; 9578 48 H + plp ; 9579 28 ( + rts ; 957A 60 ` + +; ---------------------------------------------------------------------------- +__EnterTurbo: + lda curDrive ; 957B AD 89 84 ... + jsr SetDevice ; 957E 20 B0 C2 .. + ldx #$00 ; 9581 A2 00 .. + rts ; 9583 60 ` + +; ---------------------------------------------------------------------------- +__ExitTurbo: + lda #$01 ; 9584 A9 01 .. + sta interleave ; 9586 8D 8C 84 ... + rts ; 9589 60 ` + +; ---------------------------------------------------------------------------- +__ChangeDiskDevice: + sta curDrive ; 958A 8D 89 84 ... + sta curDevice ; 958D 85 BA .. + ldx #$00 ; 958F A2 00 .. + rts ; 9591 60 ` + +; ---------------------------------------------------------------------------- +__NewDisk: + jsr EnterTurbo ; 9592 20 14 C2 .. + rts ; 9595 60 ` + +; ---------------------------------------------------------------------------- +__ReadBlock: + jsr L90D2 ; 9596 20 D2 90 .. + bcc L959E ; 9599 90 03 .. + jsr L95BD ; 959B 20 BD 95 .. +L959E: ldy #$00 ; 959E A0 00 .. + rts ; 95A0 60 ` + +; ---------------------------------------------------------------------------- +_ReadLink: + jsr L90D2 ; 95A1 20 D2 90 .. + bcc L95AB ; 95A4 90 05 .. + ldy #$91 ; 95A6 A0 91 .. + jsr L95C5 ; 95A8 20 C5 95 .. +L95AB: rts ; 95AB 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr L90D2 ; 95AC 20 D2 90 .. + bcc L95B4 ; 95AF 90 03 .. + jsr L95C1 ; 95B1 20 C1 95 .. +L95B4: rts ; 95B4 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + jsr L90D2 ; 95B5 20 D2 90 .. + bcc L95BC ; 95B8 90 02 .. + ldx #$00 ; 95BA A2 00 .. +L95BC: rts ; 95BC 60 ` + +; ---------------------------------------------------------------------------- +L95BD: ldy #$91 ; 95BD A0 91 .. + bne L95D5 ; 95BF D0 14 .. +L95C1: ldy #$90 ; 95C1 A0 90 .. + bne L95D5 ; 95C3 D0 10 .. +L95C5: lda r2H ; 95C5 A5 07 .. + pha ; 95C7 48 H + lda r2L ; 95C8 A5 06 .. + pha ; 95CA 48 H + lda #$00 ; 95CB A9 00 .. + sta r2H ; 95CD 85 07 .. + lda #$02 ; 95CF A9 02 .. + sta r2L ; 95D1 85 06 .. + bne L95E3 ; 95D3 D0 0E .. +L95D5: lda r2H ; 95D5 A5 07 .. + pha ; 95D7 48 H + lda r2L ; 95D8 A5 06 .. + pha ; 95DA 48 H + lda #$01 ; 95DB A9 01 .. + sta r2H ; 95DD 85 07 .. + lda #$00 ; 95DF A9 00 .. + sta r2L ; 95E1 85 06 .. +L95E3: lda r0H ; 95E3 A5 03 .. + pha ; 95E5 48 H + lda r0L ; 95E6 A5 02 .. + pha ; 95E8 48 H + lda r1H ; 95E9 A5 05 .. + pha ; 95EB 48 H + lda r1L ; 95EC A5 04 .. + pha ; 95EE 48 H + lda r3L ; 95EF A5 08 .. + pha ; 95F1 48 H + tya ; 95F2 98 . + pha ; 95F3 48 H + lda r2H ; 95F4 A5 07 .. + pha ; 95F6 48 H + lda r2L ; 95F7 A5 06 .. + pha ; 95F9 48 H + lda r7H ; 95FA A5 11 .. + pha ; 95FC 48 H + lda r7L ; 95FD A5 10 .. + pha ; 95FF 48 H + lda r8H ; 9600 A5 13 .. + pha ; 9602 48 H + lda r8L ; 9603 A5 12 .. + pha ; 9605 48 H + dec r1L ; 9606 C6 04 .. + lda r1H ; 9608 A5 05 .. + sta r2H ; 960A 85 07 .. + lda #$28 ; 960C A9 28 .( + sta r2L ; 960E 85 06 .. + ldx #$04 ; 9610 A2 04 .. + ldy #$06 ; 9612 A0 06 .. + jsr BBMult ; 9614 20 60 C1 `. + clc ; 9617 18 . + lda r1L ; 9618 A5 04 .. + adc r2H ; 961A 65 07 e. + sta r1L ; 961C 85 04 .. + lda r1H ; 961E A5 05 .. + ldy curDrive ; 9620 AC 89 84 ... + adc driveData,y ; 9623 79 BF 88 y.. + sta r3L ; 9626 85 08 .. + lda r1L ; 9628 A5 04 .. + sta r1H ; 962A 85 05 .. + pla ; 962C 68 h + sta r8L ; 962D 85 12 .. + pla ; 962F 68 h + sta r8H ; 9630 85 13 .. + pla ; 9632 68 h + sta r7L ; 9633 85 10 .. + pla ; 9635 68 h + sta r7H ; 9636 85 11 .. + pla ; 9638 68 h + sta r2L ; 9639 85 06 .. + pla ; 963B 68 h + sta r2H ; 963C 85 07 .. + lda #$00 ; 963E A9 00 .. + sta r1L ; 9640 85 04 .. + lda r4H ; 9642 A5 0B .. + sta r0H ; 9644 85 03 .. + lda r4L ; 9646 A5 0A .. + sta r0L ; 9648 85 02 .. + pla ; 964A 68 h + tay ; 964B A8 . + jsr DoRAMOp ; 964C 20 D4 C2 .. + tax ; 964F AA . + pla ; 9650 68 h + sta r3L ; 9651 85 08 .. + pla ; 9653 68 h + sta r1L ; 9654 85 04 .. + pla ; 9656 68 h + sta r1H ; 9657 85 05 .. + pla ; 9659 68 h + sta r0L ; 965A 85 02 .. + pla ; 965C 68 h + sta r0H ; 965D 85 03 .. + pla ; 965F 68 h + sta r2L ; 9660 85 06 .. + pla ; 9662 68 h + sta r2H ; 9663 85 07 .. + txa ; 9665 8A . + ldx #$00 ; 9666 A2 00 .. + rts ; 9668 60 ` + +; ---------------------------------------------------------------------------- +L9669: brk ; 9669 00 . +L966A: brk ; 966A 00 . +L966B: brk ; 966B 00 . +L966C: brk ; 966C 00 . +L966D: brk ; 966D 00 . + brk ; 966E 00 . + brk ; 966F 00 . + brk ; 9670 00 . + brk ; 9671 00 . + brk ; 9672 00 . + brk ; 9673 00 . +L9674: brk ; 9674 00 . + brk ; 9675 00 . + brk ; 9676 00 . + brk ; 9677 00 . +L9678: brk ; 9678 00 . +L9679: brk ; 9679 00 . + brk ; 967A 00 . + brk ; 967B 00 . + brk ; 967C 00 . + brk ; 967D 00 . + brk ; 967E 00 . + .byte "RAM 1581 driver Copyright (C) 1"; 967F 52 41 4D 20 31 35 38 31 RAM 1581 + ; 9687 20 64 72 69 76 65 72 20 driver + ; 968F 43 6F 70 79 72 69 67 68 Copyrigh + ; 9697 74 20 28 43 29 20 31 t (C) 1 + .byte "990, Jim Collette & Berkeley So"; 969E 39 39 30 2C 20 4A 69 6D 990, Jim + ; 96A6 20 43 6F 6C 6C 65 74 74 Collett + ; 96AE 65 20 26 20 42 65 72 6B e & Berk + ; 96B6 65 6C 65 79 20 53 6F eley So + .byte "ftworks. Thanks to Matt Lovele"; 96BD 66 74 77 6F 72 6B 73 2E ftworks. + ; 96C5 20 20 54 68 61 6E 6B 73 Thanks + ; 96CD 20 74 6F 20 4D 61 74 74 to Matt + ; 96D5 20 4C 6F 76 65 6C 65 Lovele + .byte "ss and Angie McKenna of BSW for"; 96DC 73 73 20 61 6E 64 20 41 ss and A + ; 96E4 6E 67 69 65 20 4D 63 4B ngie McK + ; 96EC 65 6E 6E 61 20 6F 66 20 enna of + ; 96F4 42 53 57 20 66 6F 72 BSW for + .byte " their help and support. (Q-Li"; 96FB 20 74 68 65 69 72 20 68 their h + ; 9703 65 6C 70 20 61 6E 64 20 elp and + ; 970B 73 75 70 70 6F 72 74 2E support. + ; 9713 20 20 28 51 2D 4C 69 (Q-Li + .byte "nk: GEOREP JIM)" ; 971A 6E 6B 3A 20 47 45 4F 52 nk: GEOR + ; 9722 45 50 20 4A 49 4D 29 EP JIM) + .byte $00 ; 9729 00 . +; ---------------------------------------------------------------------------- +; pla ; 972A 68 h diff --git a/inc/geosmac.inc b/inc/geosmac.inc index e75f4c42..25b93e2d 100755 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -191,6 +191,11 @@ .endmacro .endif +.macro bra_ addr + clv + bvc addr +.endmacro + .macro smb bitN, dest pha lda #1 << bitN From 78ca5482557fd6ac7755167ebc8084ce0532db03 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 9 Aug 2017 21:43:45 +0200 Subject: [PATCH 007/125] Integrated config 128 variant and checked for being binary equal to the original. --- _newconf/newconf/r2.asm | 4597 +++++++++++++++++++++----------------- _newconf/newconf/r6.asm | 537 ++--- _newconf/newconf/r6.info | 4 +- config.inc | 2 + configure/configure.cfg | 5 +- configure/r0.s | 594 +++-- configure/r1.s | 1598 +++++++++---- drv/drv1541.s | 124 +- drv/drv1571.s | 124 +- drv/drv1571ram.s | 24 +- drv/drv1581-21hd.s | 68 +- drv/drv1581ram.s | 24 +- 12 files changed, 4667 insertions(+), 3034 deletions(-) diff --git a/_newconf/newconf/r2.asm b/_newconf/newconf/r2.asm index 4d88c280..b8dc9d5f 100644 --- a/_newconf/newconf/r2.asm +++ b/_newconf/newconf/r2.asm @@ -1,2081 +1,2516 @@ -; da65 V2.13.2 - (C) Copyright 2000-2009, Ullrich von Bassewitz -; Created: 2010-05-27 22:13:16 -; Input file: configure.cvt.record.2 -; Page: 1 - - - .setcpu "6502" - -; ---------------------------------------------------------------------------- -L033A := $033A -L0340 := $0340 -L037B := $037B -L0389 := $0389 -L03BE := $03BE -L03CB := $03CB -L0443 := $0443 -L0494 := $0494 -L04D3 := $04D3 -L04DF := $04DF -L04F6 := $04F6 -L0518 := $0518 -L051D := $051D -L0525 := $0525 -L0529 := $0529 -L052D := $052D -L0534 := $0534 -L0548 := $0548 -L0599 := $0599 -L05A5 := $05A5 -L0632 := $0632 -L063B := $063B -L064A := $064A -L49AA := $49AA -L6040 := $6040 -_InitForIO := $9000 -_DoneWithIO := $9002 -_ExitTurbo := $9004 -_PurgeTurbo := $9006 -_EnterTurbo := $9008 -_ChangeDiskDevice:= $900A -_NewDisk := $900C -_ReadBlock := $900E -_WriteBlock := $9010 -_VerWriteBlock := $9012 -_OpenDisk := $9014 -_GetBlock := $9016 -_PutBlock := $9018 -_GetDirHead := $901A -_PutDirHead := $901C -_GetFreeDirBlk := $901E -_CalcBlksFree := $9020 -_FreeBlock := $9022 -_SetNextFree := $9024 -_FindBAMBit := $9026 -_NxtBlkAlloc := $9028 -_BlkAlloc := $902A -_ChkDkGEOS := $902C -_SetGEOSDisk := $902E -Get1stDirEntry := $9030 -GetNxtDirEntry := $9033 -GetBorder := $9036 -AddDirBlock := $9039 -ReadBuff := $903C -WriteBuff := $903F -AllocateBlock := $9048 -ReadLink := $904B -L9053 := $9053 -L9070 := $9070 -L908E := $908E -L909D := $909D -L90A7 := $90A7 -L91CF := $91CF -L9219 := $9219 -L92D0 := $92D0 -L930C := $930C -L937B := $937B -L938E := $938E -L939C := $939C -L9549 := $9549 -L9591 := $9591 -L9598 := $9598 -L95AF := $95AF -L95F2 := $95F2 -L9622 := $9622 -L962A := $962A -L962E := $962E -L964F := $964F -L965C := $965C -L96C1 := $96C1 -L96DF := $96DF -L971E := $971E -L976E := $976E -L97D4 := $97D4 -L9887 := $9887 -L988E := $988E -L9C09 := $9C09 -L9C0F := $9C0F -L9C3C := $9C3C -L9C4C := $9C4C -L9C54 := $9C54 -L9C56 := $9C56 -bootName := $C006 -version := $C00F -nationality := $C010 -sysFlgCopy := $C012 -c128Flag := $C013 -dateCopy := $C018 -InterruptMain := $C100 -InitProcesses := $C103 -RestartProcess := $C106 -EnableProcess := $C109 -BlockProcess := $C10C -UnBlockProcess := $C10F -FreezeProcess := $C112 -UnFreezeProcess := $C115 -HorizontalLine := $C118 -InvertLine := $C11B -RecoverLine := $C11E -VerticalLine := $C121 -Rectangle := $C124 -FrameRectangle := $C127 -InvertRectangle := $C12A -RecoverRectangle:= $C12D -DrawLine := $C130 -DrawPoint := $C133 -GraphicsString := $C136 -SetPattern := $C139 -GetScanLine := $C13C -TestPoint := $C13F -BitmapUp := $C142 -PutChar := $C145 -PutString := $C148 -UseSystemFont := $C14B -StartMouseMode := $C14E -DoMenu := $C151 -RecoverMenu := $C154 -RecoverAllMenus := $C157 -DoIcons := $C15A -DShiftLeft := $C15D -BBMult := $C160 -BMult := $C163 -DMult := $C166 -Ddiv := $C169 -DSdiv := $C16C -Dabs := $C16F -Dnegate := $C172 -Ddec := $C175 -ClearRam := $C178 -FillRam := $C17B -MoveData := $C17E -InitRam := $C181 -PutDecimal := $C184 -GetRandom := $C187 -MouseUp := $C18A -MouseOff := $C18D -DoPreviousMenu := $C190 -ReDoMenu := $C193 -GetSerialNumber := $C196 -Sleep := $C199 -ClearMouseMode := $C19C -i_Rectangle := $C19F -i_FrameRectangle:= $C1A2 -i_RecoverRectangle:= $C1A5 -i_GraphicsString:= $C1A8 -i_BitmapUp := $C1AB -i_PutString := $C1AE -GetRealSize := $C1B1 -i_FillRam := $C1B4 -i_MoveData := $C1B7 -GetString := $C1BA -GotoFirstMenu := $C1BD -InitTextPrompt := $C1C0 -MainLoop := $C1C3 -DrawSprite := $C1C6 -GetCharWidth := $C1C9 -LoadCharSet := $C1CC -PosSprite := $C1CF -EnablSprite := $C1D2 -DisablSprite := $C1D5 -CallRoutine := $C1D8 -CalcBlksFree := $C1DB -ChkDkGEOS := $C1DE -NewDisk := $C1E1 -GetBlock := $C1E4 -PutBlock := $C1E7 -SetGEOSDisk := $C1EA -SaveFile := $C1ED -SetGDirEntry := $C1F0 -BldGDirEntry := $C1F3 -GetFreeDirBlk := $C1F6 -WriteFile := $C1F9 -BlkAlloc := $C1FC -ReadFile := $C1FF -SmallPutChar := $C202 -FollowChain := $C205 -GetFile := $C208 -FindFile := $C20B -CRC := $C20E -LdFile := $C211 -EnterTurbo := $C214 -LdDeskAcc := $C217 -ReadBlock := $C21A -LdApplic := $C21D -WriteBlock := $C220 -VerWriteBlock := $C223 -FreeFile := $C226 -GetFHdrInfo := $C229 -EnterDeskTop := $C22C -StartAppl := $C22F -ExitTurbo := $C232 -PurgeTurbo := $C235 -DeleteFile := $C238 -FindFTypes := $C23B -RstrAppl := $C23E -ToBASIC := $C241 -FastDelFile := $C244 -GetDirHead := $C247 -PutDirHead := $C24A -NxtBlkAlloc := $C24D -ImprintRectangle:= $C250 -i_ImprintRectangle:= $C253 -DoDlgBox := $C256 -RenameFile := $C259 -InitForIO := $C25C -DoneWithIO := $C25F -DShiftRight := $C262 -CopyString := $C265 -CopyFString := $C268 -CmpString := $C26B -CmpFString := $C26E -FirstInit := $C271 -OpenRecordFile := $C274 -CloseRecordFile := $C277 -NextRecord := $C27A -PreviousRecord := $C27D -PointRecord := $C280 -DeleteRecord := $C283 -InsertRecord := $C286 -AppendRecord := $C289 -ReadRecord := $C28C -WriteRecord := $C28F -SetNextFree := $C292 -UpdateRecordFile:= $C295 -GetPtrCurDkNm := $C298 -PromptOn := $C29B -PromptOff := $C29E -OpenDisk := $C2A1 -DoInlineReturn := $C2A4 -GetNextChar := $C2A7 -BitmapClip := $C2AA -FindBAMBit := $C2AD -SetDevice := $C2B0 -IsMseInRegion := $C2B3 -ReadByte := $C2B6 -FreeBlock := $C2B9 -ChangeDiskDevice:= $C2BC -RstrFrmDialogue := $C2BF -Panic := $C2C2 -BitOtherClip := $C2C5 -StashRAM := $C2C8 -FetchRAM := $C2CB -SwapRAM := $C2CE -VerifyRAM := $C2D1 -DoRAMOp := $C2D4 -TempHideMouse := $C2D7 -SetMousePicture := $C2DA -SetNewMode := $C2DD -NormalizeX := $C2E0 -MoveBData := $C2E3 -SwapBData := $C2E6 -VerifyBData := $C2E9 -DoBOp := $C2EC -AccessCache := $C2EF -HideOnlyMouse := $C2F2 -SetColorMode := $C2F5 -ColorCard := $C2F8 -ColorRectangle := $C2FB -LF24B := $F24B -LF3B1 := $F3B1 -LF4CA := $F4CA -LF510 := $F510 -LF5E9 := $F5E9 -LF78F := $F78F -LF97E := $F97E -LF98F := $F98F -LFF93 := $FF93 -LFFA8 := $FFA8 -LFFAE := $FFAE -LFFB1 := $FFB1 -; ---------------------------------------------------------------------------- - adc L0494,y ; 3C80 79 94 04 y.. - sta $4B,x ; 3C83 95 4B .K - .byte $97 ; 3C85 97 . - pla ; 3C86 68 h - .byte $97 ; 3C87 97 . - pla ; 3C88 68 h - stx $A6,y ; 3C89 96 A6 .. - .byte $97 ; 3C8B 97 . - .byte $77 ; 3C8C 77 w - .byte $97 ; 3C8D 97 . - .byte $D4 ; 3C8E D4 . - .byte $97 ; 3C8F 97 . - .byte $1F ; 3C90 1F . - tya ; 3C91 98 . - pha ; 3C92 48 H - tya ; 3C93 98 . - tsx ; 3C94 BA . - bcc L3CF2 ; 3C95 90 5B .[ - bcc L3D11 ; 3C97 90 78 .x - bcc L3CE9 ; 3C99 90 4E .N - bcc L3D08 ; 3C9B 90 6B .k - bcc L3D0E ; 3C9D 90 6F .o - .byte $92 ; 3C9F 92 . - sbc $93,x ; 3CA0 F5 93 .. - cmp $1C93,x ; 3CA2 DD 93 1C ... - .byte $93 ; 3CA5 93 . - ldx $93,y ; 3CA6 B6 93 .. - .byte $1C ; 3CA8 1C . - sta ($15),y ; 3CA9 91 15 .. - sta ($3F),y ; 3CAB 91 3F .? - .byte $92 ; 3CAD 92 . - asl $4C94,x ; 3CAE 1E 94 4C ..L - ldx $91,y ; 3CB1 B6 91 .. - jmp L91CF ; 3CB3 4C CF 91 L.. -; ---------------------------------------------------------------------------- - jmp L9219 ; 3CB6 4C 19 92 L.. -; ---------------------------------------------------------------------------- - jmp L92D0 ; 3CB9 4C D0 92 L.. -; ---------------------------------------------------------------------------- - jmp L9053 ; 3CBC 4C 53 90 LS. -; ---------------------------------------------------------------------------- - jmp L9070 ; 3CBF 4C 70 90 Lp. -; ---------------------------------------------------------------------------- - jmp L962E ; 3CC2 4C 2E 96 L.. -; ---------------------------------------------------------------------------- - jmp L9887 ; 3CC5 4C 87 98 L.. -; ---------------------------------------------------------------------------- - jmp L939C ; 3CC8 4C 9C 93 L.. -; ---------------------------------------------------------------------------- - jmp L97D4 ; 3CCB 4C D4 97 L.. -; ---------------------------------------------------------------------------- - jsr L908E ; 3CCE 20 8E 90 .. - bne L3CDB ; 3CD1 D0 08 .. - lda #$80 ; 3CD3 A9 80 .. - sta $0B ; 3CD5 85 0B .. - lda #$00 ; 3CD7 A9 00 .. - sta $0A ; 3CD9 85 0A .. -L3CDB: jsr EnterTurbo ; 3CDB 20 14 C2 .. - txa ; 3CDE 8A . - bne L3CEA ; 3CDF D0 09 .. - jsr InitForIO ; 3CE1 20 5C C2 \. - jsr ReadBlock ; 3CE4 20 1A C2 .. - .byte $20 ; 3CE7 20 - .byte $5F ; 3CE8 5F _ -L3CE9: .byte $C2 ; 3CE9 C2 . -L3CEA: rts ; 3CEA 60 ` -; ---------------------------------------------------------------------------- - jsr L908E ; 3CEB 20 8E 90 .. - bne L3CF8 ; 3CEE D0 08 .. - lda #$80 ; 3CF0 A9 80 .. -L3CF2: sta $0B ; 3CF2 85 0B .. - lda #$00 ; 3CF4 A9 00 .. - sta $0A ; 3CF6 85 0A .. -L3CF8: jsr EnterTurbo ; 3CF8 20 14 C2 .. - txa ; 3CFB 8A . - bne L3D0D ; 3CFC D0 0F .. - jsr InitForIO ; 3CFE 20 5C C2 \. - jsr WriteBlock ; 3D01 20 20 C2 . - txa ; 3D04 8A . - bne L3D0A ; 3D05 D0 03 .. - .byte $20 ; 3D07 20 -L3D08: .byte $23 ; 3D08 23 # - .byte $C2 ; 3D09 C2 . -L3D0A: jsr DoneWithIO ; 3D0A 20 5F C2 _. -L3D0D: rts ; 3D0D 60 ` -; ---------------------------------------------------------------------------- -L3D0E: lda #$12 ; 3D0E A9 12 .. - .byte $85 ; 3D10 85 . -L3D11: .byte $04 ; 3D11 04 . - lda #$00 ; 3D12 A9 00 .. - sta $05 ; 3D14 85 05 .. - sta $0A ; 3D16 85 0A .. - lda #$82 ; 3D18 A9 82 .. - sta $0B ; 3D1A 85 0B .. - rts ; 3D1C 60 ` -; ---------------------------------------------------------------------------- - bit $88C6 ; 3D1D 2C C6 88 ,.. - bvc L3D27 ; 3D20 50 05 P. - jsr L9C4C ; 3D22 20 4C 9C L. - beq L3D38 ; 3D25 F0 11 .. -L3D27: lda #$00 ; 3D27 A9 00 .. - sta $9D07 ; 3D29 8D 07 9D ... - ldx #$02 ; 3D2C A2 02 .. - lda $04 ; 3D2E A5 04 .. - beq L3D38 ; 3D30 F0 06 .. - cmp #$24 ; 3D32 C9 24 .$ - bcs L3D38 ; 3D34 B0 02 .. - sec ; 3D36 38 8 - rts ; 3D37 60 ` -; ---------------------------------------------------------------------------- -L3D38: clc ; 3D38 18 . - rts ; 3D39 60 ` -; ---------------------------------------------------------------------------- - ldy $8489 ; 3D3A AC 89 84 ... - lda $8486,y ; 3D3D B9 86 84 ... - sta $9114 ; 3D40 8D 14 91 ... - and #$BF ; 3D43 29 BF ). - sta $8486,y ; 3D45 99 86 84 ... - jsr NewDisk ; 3D48 20 E1 C1 .. - txa ; 3D4B 8A . - bne L3D8A ; 3D4C D0 3C .< - jsr GetDirHead ; 3D4E 20 47 C2 G. - txa ; 3D51 8A . - bne L3D8A ; 3D52 D0 36 .6 - bit $9114 ; 3D54 2C 14 91 ,.. - bvc L3D67 ; 3D57 50 0E P. - jsr L9C4C ; 3D59 20 4C 9C L. - beq L3D67 ; 3D5C F0 09 .. - jsr L9C0F ; 3D5E 20 0F 9C .. - jsr L908E ; 3D61 20 8E 90 .. - jsr L9C54 ; 3D64 20 54 9C T. -L3D67: lda #$82 ; 3D67 A9 82 .. - sta $0D ; 3D69 85 0D .. - lda #$00 ; 3D6B A9 00 .. - sta $0C ; 3D6D 85 0C .. - jsr ChkDkGEOS ; 3D6F 20 DE C1 .. - lda #$82 ; 3D72 A9 82 .. - sta $0B ; 3D74 85 0B .. - lda #$90 ; 3D76 A9 90 .. - sta $0A ; 3D78 85 0A .. - ldx #$0C ; 3D7A A2 0C .. - jsr GetPtrCurDkNm ; 3D7C 20 98 C2 .. - ldx #$0A ; 3D7F A2 0A .. - ldy #$0C ; 3D81 A0 0C .. - lda #$12 ; 3D83 A9 12 .. - jsr CopyFString ; 3D85 20 68 C2 h. - ldx #$00 ; 3D88 A2 00 .. -L3D8A: lda $9114 ; 3D8A AD 14 91 ... - ldy $8489 ; 3D8D AC 89 84 ... - sta $8486,y ; 3D90 99 86 84 ... - rts ; 3D93 60 ` -; ---------------------------------------------------------------------------- - brk ; 3D94 00 . - ldy #$01 ; 3D95 A0 01 .. - sty $08 ; 3D97 84 08 .. - dey ; 3D99 88 . - sty $09 ; 3D9A 84 09 .. - lda $15 ; 3D9C A5 15 .. - pha ; 3D9E 48 H - lda $14 ; 3D9F A5 14 .. - pha ; 3DA1 48 H - lda $09 ; 3DA2 A5 09 .. - pha ; 3DA4 48 H - lda $08 ; 3DA5 A5 08 .. - pha ; 3DA7 48 H - lda #$00 ; 3DA8 A9 00 .. - sta $09 ; 3DAA 85 09 .. - lda #$FE ; 3DAC A9 FE .. - sta $08 ; 3DAE 85 08 .. - ldx #$06 ; 3DB0 A2 06 .. - ldy #$08 ; 3DB2 A0 08 .. - jsr Ddiv ; 3DB4 20 69 C1 i. - lda $12 ; 3DB7 A5 12 .. - beq L3DC1 ; 3DB9 F0 06 .. - inc $06 ; 3DBB E6 06 .. - bne L3DC1 ; 3DBD D0 02 .. - inc $07 ; 3DBF E6 07 .. -L3DC1: lda #$82 ; 3DC1 A9 82 .. - sta $0D ; 3DC3 85 0D .. - lda #$00 ; 3DC5 A9 00 .. - sta $0C ; 3DC7 85 0C .. - jsr CalcBlksFree ; 3DC9 20 DB C1 .. - pla ; 3DCC 68 h - sta $08 ; 3DCD 85 08 .. - pla ; 3DCF 68 h - sta $09 ; 3DD0 85 09 .. - ldx #$03 ; 3DD2 A2 03 .. - lda $07 ; 3DD4 A5 07 .. - cmp $0B ; 3DD6 C5 0B .. - bne L3DDE ; 3DD8 D0 04 .. - lda $06 ; 3DDA A5 06 .. - cmp $0A ; 3DDC C5 0A .. -L3DDE: beq L3DE2 ; 3DDE F0 02 .. - bcs L3E2F ; 3DE0 B0 4D .M -L3DE2: lda $0F ; 3DE2 A5 0F .. - sta $0B ; 3DE4 85 0B .. - lda $0E ; 3DE6 A5 0E .. - sta $0A ; 3DE8 85 0A .. - lda $07 ; 3DEA A5 07 .. - sta $0D ; 3DEC 85 0D .. - lda $06 ; 3DEE A5 06 .. - sta $0C ; 3DF0 85 0C .. -L3DF2: jsr SetNextFree ; 3DF2 20 92 C2 .. - txa ; 3DF5 8A . - bne L3E2F ; 3DF6 D0 37 .7 - ldy #$00 ; 3DF8 A0 00 .. - lda $08 ; 3DFA A5 08 .. - sta ($0A),y ; 3DFC 91 0A .. - iny ; 3DFE C8 . - lda $09 ; 3DFF A5 09 .. - sta ($0A),y ; 3E01 91 0A .. - clc ; 3E03 18 . - lda #$02 ; 3E04 A9 02 .. - adc $0A ; 3E06 65 0A e. - sta $0A ; 3E08 85 0A .. - bcc L3E0E ; 3E0A 90 02 .. - inc $0B ; 3E0C E6 0B .. -L3E0E: lda $0C ; 3E0E A5 0C .. - bne L3E14 ; 3E10 D0 02 .. - dec $0D ; 3E12 C6 0D .. -L3E14: dec $0C ; 3E14 C6 0C .. - lda $0C ; 3E16 A5 0C .. - ora $0D ; 3E18 05 0D .. - bne L3DF2 ; 3E1A D0 D6 .. - ldy #$00 ; 3E1C A0 00 .. - tya ; 3E1E 98 . - sta ($0A),y ; 3E1F 91 0A .. - iny ; 3E21 C8 . - lda $12 ; 3E22 A5 12 .. - bne L3E28 ; 3E24 D0 02 .. - lda #$FE ; 3E26 A9 FE .. -L3E28: clc ; 3E28 18 . - adc #$01 ; 3E29 69 01 i. - sta ($0A),y ; 3E2B 91 0A .. - ldx #$00 ; 3E2D A2 00 .. -L3E2F: pla ; 3E2F 68 h - sta $14 ; 3E30 85 14 .. - pla ; 3E32 68 h - sta $15 ; 3E33 85 15 .. - rts ; 3E35 60 ` -; ---------------------------------------------------------------------------- - lda #$12 ; 3E36 A9 12 .. - sta $04 ; 3E38 85 04 .. - lda #$01 ; 3E3A A9 01 .. - sta $05 ; 3E3C 85 05 .. - jsr ReadBuff ; 3E3E 20 3C 90 <. - lda #$80 ; 3E41 A9 80 .. - sta $0D ; 3E43 85 0D .. - lda #$02 ; 3E45 A9 02 .. - sta $0C ; 3E47 85 0C .. - lda #$00 ; 3E49 A9 00 .. - sta $9D0A ; 3E4B 8D 0A 9D ... - rts ; 3E4E 60 ` -; ---------------------------------------------------------------------------- - ldx #$00 ; 3E4F A2 00 .. - ldy #$00 ; 3E51 A0 00 .. - clc ; 3E53 18 . - lda #$20 ; 3E54 A9 20 . - adc $0C ; 3E56 65 0C e. - sta $0C ; 3E58 85 0C .. - bcc L3E5E ; 3E5A 90 02 .. - inc $0D ; 3E5C E6 0D .. -L3E5E: lda $0D ; 3E5E A5 0D .. - cmp #$80 ; 3E60 C9 80 .. - bne L3E68 ; 3E62 D0 04 .. - lda $0C ; 3E64 A5 0C .. - cmp #$FF ; 3E66 C9 FF .. -L3E68: bcc L3E98 ; 3E68 90 2E .. - ldy #$FF ; 3E6A A0 FF .. - lda $8001 ; 3E6C AD 01 80 ... - sta $05 ; 3E6F 85 05 .. - lda $8000 ; 3E71 AD 00 80 ... - sta $04 ; 3E74 85 04 .. - bne L3E8B ; 3E76 D0 13 .. - lda $9D0A ; 3E78 AD 0A 9D ... - bne L3E98 ; 3E7B D0 1B .. - lda #$FF ; 3E7D A9 FF .. - sta $9D0A ; 3E7F 8D 0A 9D ... - jsr GetBorder ; 3E82 20 36 90 6. - txa ; 3E85 8A . - bne L3E98 ; 3E86 D0 10 .. - tya ; 3E88 98 . - bne L3E98 ; 3E89 D0 0D .. -L3E8B: jsr ReadBuff ; 3E8B 20 3C 90 <. - ldy #$00 ; 3E8E A0 00 .. - lda #$80 ; 3E90 A9 80 .. - sta $0D ; 3E92 85 0D .. - lda #$02 ; 3E94 A9 02 .. - sta $0C ; 3E96 85 0C .. -L3E98: rts ; 3E98 60 ` -; ---------------------------------------------------------------------------- - jsr GetDirHead ; 3E99 20 47 C2 G. - txa ; 3E9C 8A . - bne L3EBE ; 3E9D D0 1F .. - lda #$82 ; 3E9F A9 82 .. - sta $0D ; 3EA1 85 0D .. - lda #$00 ; 3EA3 A9 00 .. - sta $0C ; 3EA5 85 0C .. - jsr ChkDkGEOS ; 3EA7 20 DE C1 .. - bne L3EB0 ; 3EAA D0 04 .. - ldy #$FF ; 3EAC A0 FF .. - bne L3EBC ; 3EAE D0 0C .. -L3EB0: lda $82AC ; 3EB0 AD AC 82 ... - sta $05 ; 3EB3 85 05 .. - lda $82AB ; 3EB5 AD AB 82 ... - sta $04 ; 3EB8 85 04 .. - ldy #$00 ; 3EBA A0 00 .. -L3EBC: ldx #$00 ; 3EBC A2 00 .. -L3EBE: rts ; 3EBE 60 ` -; ---------------------------------------------------------------------------- - ldy #$AD ; 3EBF A0 AD .. - ldx #$00 ; 3EC1 A2 00 .. - lda #$00 ; 3EC3 A9 00 .. - sta $848B ; 3EC5 8D 8B 84 ... -L3EC8: lda ($0C),y ; 3EC8 B1 0C .. - cmp $925E,x ; 3ECA DD 5E 92 .^. - bne L3EDA ; 3ECD D0 0B .. - iny ; 3ECF C8 . - inx ; 3ED0 E8 . - cpx #$0B ; 3ED1 E0 0B .. - bne L3EC8 ; 3ED3 D0 F3 .. - lda #$FF ; 3ED5 A9 FF .. - sta $848B ; 3ED7 8D 8B 84 ... -L3EDA: lda $848B ; 3EDA AD 8B 84 ... - rts ; 3EDD 60 ` -; ---------------------------------------------------------------------------- - .byte "GEOS format V1.0" ; 3EDE 47 45 4F 53 20 66 6F 72 GEOS for - ; 3EE6 6D 61 74 20 56 31 2E 30 mat V1.0 - .byte $00 ; 3EEE 00 . -; ---------------------------------------------------------------------------- - php ; 3EEF 08 . - sei ; 3EF0 78 x - lda $0E ; 3EF1 A5 0E .. - pha ; 3EF3 48 H - lda $07 ; 3EF4 A5 07 .. - pha ; 3EF6 48 H - lda $06 ; 3EF7 A5 06 .. - pha ; 3EF9 48 H - ldx $16 ; 3EFA A6 16 .. - inx ; 3EFC E8 . - stx $0E ; 3EFD 86 0E .. - lda #$12 ; 3EFF A9 12 .. - sta $04 ; 3F01 85 04 .. - lda #$01 ; 3F03 A9 01 .. - sta $05 ; 3F05 85 05 .. -L3F07: jsr ReadBuff ; 3F07 20 3C 90 <. -L3F0A: txa ; 3F0A 8A . - bne L3F45 ; 3F0B D0 38 .8 - dec $0E ; 3F0D C6 0E .. - beq L3F26 ; 3F0F F0 15 .. -L3F11: lda $8000 ; 3F11 AD 00 80 ... - bne L3F1C ; 3F14 D0 06 .. - jsr AddDirBlock ; 3F16 20 39 90 9. - clv ; 3F19 B8 . - bvc L3F0A ; 3F1A 50 EE P. -L3F1C: sta $04 ; 3F1C 85 04 .. - lda $8001 ; 3F1E AD 01 80 ... - sta $05 ; 3F21 85 05 .. - clv ; 3F23 B8 . - bvc L3F07 ; 3F24 50 E1 P. -L3F26: ldy #$02 ; 3F26 A0 02 .. - ldx #$00 ; 3F28 A2 00 .. -L3F2A: lda $8000,y ; 3F2A B9 00 80 ... - beq L3F45 ; 3F2D F0 16 .. - tya ; 3F2F 98 . - clc ; 3F30 18 . - adc #$20 ; 3F31 69 20 i - tay ; 3F33 A8 . - bcc L3F2A ; 3F34 90 F4 .. - lda #$01 ; 3F36 A9 01 .. - sta $0E ; 3F38 85 0E .. - ldx #$04 ; 3F3A A2 04 .. - ldy $16 ; 3F3C A4 16 .. - iny ; 3F3E C8 . - sty $16 ; 3F3F 84 16 .. - cpy #$12 ; 3F41 C0 12 .. - bcc L3F11 ; 3F43 90 CC .. -L3F45: pla ; 3F45 68 h - sta $06 ; 3F46 85 06 .. - pla ; 3F48 68 h - sta $07 ; 3F49 85 07 .. - pla ; 3F4B 68 h - sta $0E ; 3F4C 85 0E .. - plp ; 3F4E 28 ( - rts ; 3F4F 60 ` -; ---------------------------------------------------------------------------- - lda $0F ; 3F50 A5 0F .. - pha ; 3F52 48 H - lda $0E ; 3F53 A5 0E .. - pha ; 3F55 48 H - ldy #$48 ; 3F56 A0 48 .H - ldx #$04 ; 3F58 A2 04 .. - lda $8200,y ; 3F5A B9 00 82 ... - beq L3F85 ; 3F5D F0 26 .& - lda $05 ; 3F5F A5 05 .. - sta $09 ; 3F61 85 09 .. - lda $04 ; 3F63 A5 04 .. - sta $08 ; 3F65 85 08 .. - jsr SetNextFree ; 3F67 20 92 C2 .. - lda $09 ; 3F6A A5 09 .. - sta $8001 ; 3F6C 8D 01 80 ... - lda $08 ; 3F6F A5 08 .. - sta $8000 ; 3F71 8D 00 80 ... - jsr WriteBuff ; 3F74 20 3F 90 ?. - txa ; 3F77 8A . - bne L3F85 ; 3F78 D0 0B .. - lda $09 ; 3F7A A5 09 .. - sta $05 ; 3F7C 85 05 .. - lda $08 ; 3F7E A5 08 .. - sta $04 ; 3F80 85 04 .. - jsr L930C ; 3F82 20 0C 93 .. -L3F85: pla ; 3F85 68 h - sta $0E ; 3F86 85 0E .. - pla ; 3F88 68 h - sta $0F ; 3F89 85 0F .. - rts ; 3F8B 60 ` -; ---------------------------------------------------------------------------- - lda #$00 ; 3F8C A9 00 .. - tay ; 3F8E A8 . -L3F8F: sta $8000,y ; 3F8F 99 00 80 ... - iny ; 3F92 C8 . - bne L3F8F ; 3F93 D0 FA .. - dey ; 3F95 88 . - sty $8001 ; 3F96 8C 01 80 ... - jmp WriteBuff ; 3F99 4C 3F 90 L?. -; ---------------------------------------------------------------------------- - lda $09 ; 3F9C A5 09 .. - clc ; 3F9E 18 . - adc $848C ; 3F9F 6D 8C 84 m.. - sta $0F ; 3FA2 85 0F .. - lda $08 ; 3FA4 A5 08 .. - sta $0E ; 3FA6 85 0E .. - cmp #$19 ; 3FA8 C9 19 .. - bcc L3FAE ; 3FAA 90 02 .. - dec $0F ; 3FAC C6 0F .. -L3FAE: cmp #$12 ; 3FAE C9 12 .. - beq L3FB8 ; 3FB0 F0 06 .. -L3FB2: lda $0E ; 3FB2 A5 0E .. - cmp #$12 ; 3FB4 C9 12 .. - beq L3FD5 ; 3FB6 F0 1D .. -L3FB8: asl a ; 3FB8 0A . - asl a ; 3FB9 0A . - tax ; 3FBA AA . - lda $8200,x ; 3FBB BD 00 82 ... - beq L3FD5 ; 3FBE F0 15 .. - lda $0E ; 3FC0 A5 0E .. - jsr L937B ; 3FC2 20 7B 93 {. - lda $938A,x ; 3FC5 BD 8A 93 ... - sta $10 ; 3FC8 85 10 .. - tay ; 3FCA A8 . -L3FCB: jsr L938E ; 3FCB 20 8E 93 .. - beq L3FED ; 3FCE F0 1D .. - inc $0F ; 3FD0 E6 0F .. - dey ; 3FD2 88 . - bne L3FCB ; 3FD3 D0 F6 .. -L3FD5: inc $0E ; 3FD5 E6 0E .. - lda $0E ; 3FD7 A5 0E .. - cmp #$24 ; 3FD9 C9 24 .$ - bcs L3FF8 ; 3FDB B0 1B .. - sec ; 3FDD 38 8 - sbc $08 ; 3FDE E5 08 .. - sta $0F ; 3FE0 85 0F .. - asl a ; 3FE2 0A . - adc #$04 ; 3FE3 69 04 i. - adc $848C ; 3FE5 6D 8C 84 m.. - sta $0F ; 3FE8 85 0F .. - clv ; 3FEA B8 . - bvc L3FB2 ; 3FEB 50 C5 P. -L3FED: lda $0E ; 3FED A5 0E .. - sta $08 ; 3FEF 85 08 .. - lda $0F ; 3FF1 A5 0F .. - sta $09 ; 3FF3 85 09 .. - ldx #$00 ; 3FF5 A2 00 .. - rts ; 3FF7 60 ` -; ---------------------------------------------------------------------------- -L3FF8: ldx #$03 ; 3FF8 A2 03 .. - rts ; 3FFA 60 ` -; ---------------------------------------------------------------------------- - ldx #$00 ; 3FFB A2 00 .. -L3FFD: cmp $9386,x ; 3FFD DD 86 93 ... - bcc L4005 ; 4000 90 03 .. - inx ; 4002 E8 . - bne L3FFD ; 4003 D0 F8 .. -L4005: rts ; 4005 60 ` -; ---------------------------------------------------------------------------- - .byte $12 ; 4006 12 . - ora $241F,y ; 4007 19 1F 24 ..$ - ora $13,x ; 400A 15 13 .. - .byte $12 ; 400C 12 . - ora ($A5),y ; 400D 11 A5 .. - .byte $0F ; 400F 0F . -L4010: cmp $10 ; 4010 C5 10 .. - bcc L401A ; 4012 90 06 .. - sec ; 4014 38 8 - sbc $10 ; 4015 E5 10 .. - clv ; 4017 B8 . - bvc L4010 ; 4018 50 F6 P. -L401A: sta $0F ; 401A 85 0F .. - jsr FindBAMBit ; 401C 20 AD C2 .. - beq L4033 ; 401F F0 12 .. - lda $13 ; 4021 A5 13 .. - eor #$FF ; 4023 49 FF I. - and $8200,x ; 4025 3D 00 82 =.. - sta $8200,x ; 4028 9D 00 82 ... - ldx $11 ; 402B A6 11 .. - dec $8200,x ; 402D DE 00 82 ... - ldx #$00 ; 4030 A2 00 .. - rts ; 4032 60 ` -; ---------------------------------------------------------------------------- -L4033: ldx #$06 ; 4033 A2 06 .. - rts ; 4035 60 ` -; ---------------------------------------------------------------------------- - lda $0E ; 4036 A5 0E .. - asl a ; 4038 0A . - asl a ; 4039 0A . - sta $11 ; 403A 85 11 .. - lda $0F ; 403C A5 0F .. - and #$07 ; 403E 29 07 ). - tax ; 4040 AA . - lda $93D5,x ; 4041 BD D5 93 ... - sta $13 ; 4044 85 13 .. - lda $0F ; 4046 A5 0F .. - lsr a ; 4048 4A J - lsr a ; 4049 4A J - lsr a ; 404A 4A J - sec ; 404B 38 8 - adc $11 ; 404C 65 11 e. - tax ; 404E AA . - lda $8200,x ; 404F BD 00 82 ... - and $13 ; 4052 25 13 %. - rts ; 4054 60 ` -; ---------------------------------------------------------------------------- - ora ($02,x) ; 4055 01 02 .. - .byte $04 ; 4057 04 . - php ; 4058 08 . - bpl L407B ; 4059 10 20 . - rti ; 405B 40 @ -; ---------------------------------------------------------------------------- - .byte $80 ; 405C 80 . - jsr FindBAMBit ; 405D 20 AD C2 .. - bne L4072 ; 4060 D0 10 .. - lda $13 ; 4062 A5 13 .. - eor $8200,x ; 4064 5D 00 82 ].. - sta $8200,x ; 4067 9D 00 82 ... - ldx $11 ; 406A A6 11 .. - inc $8200,x ; 406C FE 00 82 ... - ldx #$00 ; 406F A2 00 .. - rts ; 4071 60 ` -; ---------------------------------------------------------------------------- -L4072: ldx #$06 ; 4072 A2 06 .. - rts ; 4074 60 ` -; ---------------------------------------------------------------------------- - lda #$00 ; 4075 A9 00 .. - sta $0A ; 4077 85 0A .. - sta $0B ; 4079 85 0B .. -L407B: ldy #$04 ; 407B A0 04 .. -L407D: lda ($0C),y ; 407D B1 0C .. - clc ; 407F 18 . - adc $0A ; 4080 65 0A e. - sta $0A ; 4082 85 0A .. - bcc L4088 ; 4084 90 02 .. - inc $0B ; 4086 E6 0B .. -L4088: tya ; 4088 98 . - clc ; 4089 18 . - adc #$04 ; 408A 69 04 i. - tay ; 408C A8 . - cpy #$48 ; 408D C0 48 .H - beq L4088 ; 408F F0 F7 .. - cpy #$90 ; 4091 C0 90 .. - bne L407D ; 4093 D0 E8 .. - lda #$02 ; 4095 A9 02 .. - sta $09 ; 4097 85 09 .. - lda #$98 ; 4099 A9 98 .. - sta $08 ; 409B 85 08 .. - rts ; 409D 60 ` -; ---------------------------------------------------------------------------- - .byte $20 ; 409E 20 - .byte $47 ; 409F 47 G -L40A0: .byte $C2 ; 40A0 C2 . - txa ; 40A1 8A . - bne L40F8 ; 40A2 D0 54 .T - lda #$82 ; 40A4 A9 82 .. - sta $0D ; 40A6 85 0D .. - lda #$00 ; 40A8 A9 00 .. - sta $0C ; 40AA 85 0C .. - jsr CalcBlksFree ; 40AC 20 DB C1 .. - ldx #$03 ; 40AF A2 03 .. - lda $0A ; 40B1 A5 0A .. - ora $0B ; 40B3 05 0B .. - beq L40F8 ; 40B5 F0 41 .A - lda #$13 ; 40B7 A9 13 .. - sta $08 ; 40B9 85 08 .. - lda #$00 ; 40BB A9 00 .. - sta $09 ; 40BD 85 09 .. - jsr SetNextFree ; 40BF 20 92 C2 .. - txa ; 40C2 8A . - beq L40CF ; 40C3 F0 0A .. - lda #$01 ; 40C5 A9 01 .. - sta $08 ; 40C7 85 08 .. - jsr SetNextFree ; 40C9 20 92 C2 .. - txa ; 40CC 8A . - bne L40F8 ; 40CD D0 29 .) -L40CF: lda $09 ; 40CF A5 09 .. - sta $05 ; 40D1 85 05 .. - lda $08 ; 40D3 A5 08 .. - sta $04 ; 40D5 85 04 .. - jsr L930C ; 40D7 20 0C 93 .. - txa ; 40DA 8A . - bne L40F8 ; 40DB D0 1B .. - lda $05 ; 40DD A5 05 .. - sta $82AC ; 40DF 8D AC 82 ... - lda $04 ; 40E2 A5 04 .. - sta $82AB ; 40E4 8D AB 82 ... - ldy #$BC ; 40E7 A0 BC .. - ldx #$0F ; 40E9 A2 0F .. -L40EB: lda $925E,x ; 40EB BD 5E 92 .^. - sta $8200,y ; 40EE 99 00 82 ... - dey ; 40F1 88 . - dex ; 40F2 CA . - bpl L40EB ; 40F3 10 F6 .. - jsr PutDirHead ; 40F5 20 4A C2 J. -L40F8: rts ; 40F8 60 ` -; ---------------------------------------------------------------------------- - php ; 40F9 08 . - pla ; 40FA 68 h - sta $9CFC ; 40FB 8D FC 9C ... - sei ; 40FE 78 x - lda $01 ; 40FF A5 01 .. - sta $9CFE ; 4101 8D FE 9C ... - lda #$36 ; 4104 A9 36 .6 - sta $01 ; 4106 85 01 .. - lda $D01A ; 4108 AD 1A D0 ... - sta $9CFD ; 410B 8D FD 9C ... - lda $D030 ; 410E AD 30 D0 .0. - sta $9CFB ; 4111 8D FB 9C ... - ldy #$00 ; 4114 A0 00 .. - sty $D030 ; 4116 8C 30 D0 .0. - sty $D01A ; 4119 8C 1A D0 ... - lda #$7F ; 411C A9 7F .. - sta $D019 ; 411E 8D 19 D0 ... - sta $DC0D ; 4121 8D 0D DC ... - sta $DD0D ; 4124 8D 0D DD ... - lda #$94 ; 4127 A9 94 .. - sta $0315 ; 4129 8D 15 03 ... - lda #$FE ; 412C A9 FE .. - sta $0314 ; 412E 8D 14 03 ... - lda #$95 ; 4131 A9 95 .. - sta $0319 ; 4133 8D 19 03 ... - lda #$03 ; 4136 A9 03 .. - sta $0318 ; 4138 8D 18 03 ... - lda #$3F ; 413B A9 3F .? - sta $DD02 ; 413D 8D 02 DD ... - lda $D015 ; 4140 AD 15 D0 ... - sta $9CFF ; 4143 8D FF 9C ... - sty $D015 ; 4146 8C 15 D0 ... - sty $DD05 ; 4149 8C 05 DD ... - iny ; 414C C8 . - sty $DD04 ; 414D 8C 04 DD ... - lda #$81 ; 4150 A9 81 .. - sta $DD0D ; 4152 8D 0D DD ... - lda #$09 ; 4155 A9 09 .. - sta $DD0E ; 4157 8D 0E DD ... - ldy #$2C ; 415A A0 2C ., -L415C: lda $D012 ; 415C AD 12 D0 ... - cmp $8F ; 415F C5 8F .. - beq L415C ; 4161 F0 F9 .. - sta $8F ; 4163 85 8F .. - dey ; 4165 88 . - bne L415C ; 4166 D0 F4 .. - lda $DD00 ; 4168 AD 00 DD ... - and #$07 ; 416B 29 07 ). - sta $8E ; 416D 85 8E .. - sta $9D05 ; 416F 8D 05 9D ... - ora #$30 ; 4172 09 30 .0 - sta $8F ; 4174 85 8F .. - lda $8E ; 4176 A5 8E .. - ora #$10 ; 4178 09 10 .. - sta $9D06 ; 417A 8D 06 9D ... - rts ; 417D 60 ` -; ---------------------------------------------------------------------------- - pla ; 417E 68 h - tay ; 417F A8 . - pla ; 4180 68 h - tax ; 4181 AA . - pla ; 4182 68 h - rti ; 4183 40 @ -; ---------------------------------------------------------------------------- - sei ; 4184 78 x - lda $9CFB ; 4185 AD FB 9C ... - sta $D030 ; 4188 8D 30 D0 .0. - lda $9CFF ; 418B AD FF 9C ... - sta $D015 ; 418E 8D 15 D0 ... - lda #$7F ; 4191 A9 7F .. - sta $DD0D ; 4193 8D 0D DD ... - lda $DD0D ; 4196 AD 0D DD ... - lda $9CFD ; 4199 AD FD 9C ... - sta $D01A ; 419C 8D 1A D0 ... - lda $9CFE ; 419F AD FE 9C ... - sta $01 ; 41A2 85 01 .. - lda $9CFC ; 41A4 AD FC 9C ... - pha ; 41A7 48 H - plp ; 41A8 28 ( - rts ; 41A9 60 ` -; ---------------------------------------------------------------------------- - .byte $0F ; 41AA 0F . - .byte $07 ; 41AB 07 . - ora $0B05 ; 41AC 0D 05 0B ... - .byte $03 ; 41AF 03 . - ora #$01 ; 41B0 09 01 .. - asl $0C06 ; 41B2 0E 06 0C ... - .byte $04 ; 41B5 04 . - asl a ; 41B6 0A . - .byte $02 ; 41B7 02 . - php ; 41B8 08 . - brk ; 41B9 00 . - .byte $80 ; 41BA 80 . - jsr L40A0 ; 41BB 20 A0 40 .@ - cpy #$60 ; 41BE C0 60 .` - cpx #$10 ; 41C0 E0 10 .. - bcc L41F4 ; 41C2 90 30 .0 - bcs L4216 ; 41C4 B0 50 .P - bne L4238 ; 41C6 D0 70 .p - beq L41EA ; 41C8 F0 20 . - .byte $5C ; 41CA 5C \ - stx $48,y ; 41CB 96 48 .H - pla ; 41CD 68 h - pha ; 41CE 48 H - pla ; 41CF 68 h - sty $8D ; 41D0 84 8D .. -L41D2: sec ; 41D2 38 8 -L41D3: lda $D012 ; 41D3 AD 12 D0 ... - sbc #$31 ; 41D6 E9 31 .1 - bcc L41DE ; 41D8 90 04 .. - and #$06 ; 41DA 29 06 ). - beq L41D3 ; 41DC F0 F5 .. -L41DE: lda $8F ; 41DE A5 8F .. - sta $DD00 ; 41E0 8D 00 DD ... - lda $8B ; 41E3 A5 8B .. - lda $8E ; 41E5 A5 8E .. - sta $DD00 ; 41E7 8D 00 DD ... -L41EA: dec $8D ; 41EA C6 8D .. - nop ; 41EC EA . - nop ; 41ED EA . - nop ; 41EE EA . - lda $DD00 ; 41EF AD 00 DD ... - lsr a ; 41F2 4A J - lsr a ; 41F3 4A J -L41F4: nop ; 41F4 EA . - ora $DD00 ; 41F5 0D 00 DD ... - lsr a ; 41F8 4A J - lsr a ; 41F9 4A J - lsr a ; 41FA 4A J - lsr a ; 41FB 4A J - ldy $DD00 ; 41FC AC 00 DD ... - tax ; 41FF AA . - tya ; 4200 98 . - lsr a ; 4201 4A J - lsr a ; 4202 4A J - ora $DD00 ; 4203 0D 00 DD ... - and #$F0 ; 4206 29 F0 ). - ora $952A,x ; 4208 1D 2A 95 .*. - ldy $8D ; 420B A4 8D .. - sta ($8B),y ; 420D 91 8B .. - bne L41D2 ; 420F D0 C1 .. -L4211: ldx $9D06 ; 4211 AE 06 9D ... - .byte $8E ; 4214 8E . - brk ; 4215 00 . -L4216: cmp $2060,x ; 4216 DD 60 20 .` - .byte $5C ; 4219 5C \ - stx $98,y ; 421A 96 98 .. - pha ; 421C 48 H - ldy #$00 ; 421D A0 00 .. - jsr L95AF ; 421F 20 AF 95 .. - pla ; 4222 68 h - tay ; 4223 A8 . - jsr L965C ; 4224 20 5C 96 \. -L4227: dey ; 4227 88 . - lda ($8B),y ; 4228 B1 8B .. - ldx $8E ; 422A A6 8E .. - stx $DD00 ; 422C 8E 00 DD ... - tax ; 422F AA . - and #$0F ; 4230 29 0F ). - sta $8D ; 4232 85 8D .. - sec ; 4234 38 8 -L4235: lda $D012 ; 4235 AD 12 D0 ... -L4238: sbc #$31 ; 4238 E9 31 .1 - bcc L4240 ; 423A 90 04 .. - and #$06 ; 423C 29 06 ). - beq L4235 ; 423E F0 F5 .. -L4240: txa ; 4240 8A . - ldx $8F ; 4241 A6 8F .. - stx $DD00 ; 4243 8E 00 DD ... - and #$F0 ; 4246 29 F0 ). - ora $8E ; 4248 05 8E .. - sta $DD00 ; 424A 8D 00 DD ... - ror a ; 424D 6A j - ror a ; 424E 6A j - and #$F0 ; 424F 29 F0 ). - ora $9D05 ; 4251 0D 05 9D ... - sta $DD00 ; 4254 8D 00 DD ... - ldx $8D ; 4257 A6 8D .. - lda $9539,x ; 4259 BD 39 95 .9. - ora $8E ; 425C 05 8E .. - sta $DD00 ; 425E 8D 00 DD ... - ror a ; 4261 6A j - ror a ; 4262 6A j - and #$F0 ; 4263 29 F0 ). - ora $8E ; 4265 05 8E .. - cpy #$00 ; 4267 C0 00 .. - sta $DD00 ; 4269 8D 00 DD ... - bne L4227 ; 426C D0 B9 .. - nop ; 426E EA . - nop ; 426F EA . - beq L4211 ; 4270 F0 9F .. - stx $8C ; 4272 86 8C .. - sta $8B ; 4274 85 8B .. - lda #$00 ; 4276 A9 00 .. - sta $90 ; 4278 85 90 .. - lda $8489 ; 427A AD 89 84 ... - jsr LFFB1 ; 427D 20 B1 FF .. - bit $90 ; 4280 24 90 $. - bmi L429C ; 4282 30 18 0. - lda #$FF ; 4284 A9 FF .. - jsr LFF93 ; 4286 20 93 FF .. - bit $90 ; 4289 24 90 $. - bmi L429C ; 428B 30 0F 0. - ldy #$00 ; 428D A0 00 .. -L428F: lda ($8B),y ; 428F B1 8B .. - jsr LFFA8 ; 4291 20 A8 FF .. - iny ; 4294 C8 . - cpy #$05 ; 4295 C0 05 .. - bcc L428F ; 4297 90 F6 .. - ldx #$00 ; 4299 A2 00 .. - rts ; 429B 60 ` -; ---------------------------------------------------------------------------- -L429C: jsr LFFAE ; 429C 20 AE FF .. - ldx #$0D ; 429F A2 0D .. - rts ; 42A1 60 ` -; ---------------------------------------------------------------------------- - stx $8C ; 42A2 86 8C .. - sta $8B ; 42A4 85 8B .. - ldy #$02 ; 42A6 A0 02 .. - bne L42BA ; 42A8 D0 10 .. - stx $8C ; 42AA 86 8C .. - sta $8B ; 42AC 85 8B .. - ldy #$04 ; 42AE A0 04 .. - lda $05 ; 42B0 A5 05 .. - sta $9D04 ; 42B2 8D 04 9D ... - lda $04 ; 42B5 A5 04 .. - sta $9D03 ; 42B7 8D 03 9D ... -L42BA: lda $8C ; 42BA A5 8C .. - sta $9D02 ; 42BC 8D 02 9D ... - lda $8B ; 42BF A5 8B .. - sta $9D01 ; 42C1 8D 01 9D ... - lda #$9D ; 42C4 A9 9D .. - sta $8C ; 42C6 85 8C .. - lda #$01 ; 42C8 A9 01 .. - sta $8B ; 42CA 85 8B .. - jmp L9598 ; 42CC 4C 98 95 L.. -; ---------------------------------------------------------------------------- - ldy #$01 ; 42CF A0 01 .. - jsr L9549 ; 42D1 20 49 95 I. - pha ; 42D4 48 H - tay ; 42D5 A8 . - jsr L9549 ; 42D6 20 49 95 I. - pla ; 42D9 68 h - tay ; 42DA A8 . - rts ; 42DB 60 ` -; ---------------------------------------------------------------------------- - sei ; 42DC 78 x - lda $8E ; 42DD A5 8E .. - sta $DD00 ; 42DF 8D 00 DD ... -L42E2: bit $DD00 ; 42E2 2C 00 DD ,.. - bpl L42E2 ; 42E5 10 FB .. - rts ; 42E7 60 ` -; ---------------------------------------------------------------------------- - lda $8489 ; 42E8 AD 89 84 ... - jsr SetDevice ; 42EB 20 B0 C2 .. - ldx $8489 ; 42EE AE 89 84 ... - lda $848A,x ; 42F1 BD 8A 84 ... - bmi L4304 ; 42F4 30 0E 0. - jsr L96DF ; 42F6 20 DF 96 .. - txa ; 42F9 8A . - bne L433B ; 42FA D0 3F .? - ldx $8489 ; 42FC AE 89 84 ... - lda #$80 ; 42FF A9 80 .. - sta $848A,x ; 4301 9D 8A 84 ... -L4304: and #$40 ; 4304 29 40 )@ - bne L4334 ; 4306 D0 2C ., - jsr InitForIO ; 4308 20 5C C2 \. - ldx #$96 ; 430B A2 96 .. - lda #$BC ; 430D A9 BC .. - jsr L95F2 ; 430F 20 F2 95 .. - txa ; 4312 8A . - bne L4338 ; 4313 D0 23 .# - jsr LFFAE ; 4315 20 AE FF .. - sei ; 4318 78 x - ldy #$21 ; 4319 A0 21 .! -L431B: dey ; 431B 88 . - bne L431B ; 431C D0 FD .. - jsr L9591 ; 431E 20 91 95 .. -L4321: bit $DD00 ; 4321 2C 00 DD ,.. - bmi L4321 ; 4324 30 FB 0. - jsr DoneWithIO ; 4326 20 5F C2 _. - ldx $8489 ; 4329 AE 89 84 ... - lda $848A,x ; 432C BD 8A 84 ... - ora #$40 ; 432F 09 40 .@ - sta $848A,x ; 4331 9D 8A 84 ... -L4334: ldx #$00 ; 4334 A2 00 .. - beq L433B ; 4336 F0 03 .. -L4338: jsr DoneWithIO ; 4338 20 5F C2 _. -L433B: rts ; 433B 60 ` -; ---------------------------------------------------------------------------- - eor L452D ; 433C 4D 2D 45 M-E - .byte $E2 ; 433F E2 . - .byte $03 ; 4340 03 . - jsr InitForIO ; 4341 20 5C C2 \. - ldx #$04 ; 4344 A2 04 .. - lda #$20 ; 4346 A9 20 . - jsr L9622 ; 4348 20 22 96 ". - jsr L965C ; 434B 20 5C 96 \. - lda $8489 ; 434E AD 89 84 ... - jsr LFFB1 ; 4351 20 B1 FF .. - lda #$EF ; 4354 A9 EF .. - jsr LFF93 ; 4356 20 93 FF .. - jsr LFFAE ; 4359 20 AE FF .. - jmp DoneWithIO ; 435C 4C 5F C2 L_. -; ---------------------------------------------------------------------------- - jsr InitForIO ; 435F 20 5C C2 \. - lda #$98 ; 4362 A9 98 .. - sta $8E ; 4364 85 8E .. - lda #$BB ; 4366 A9 BB .. - sta $8D ; 4368 85 8D .. - lda #$03 ; 436A A9 03 .. - sta $974A ; 436C 8D 4A 97 .J. - lda #$00 ; 436F A9 00 .. - sta $9749 ; 4371 8D 49 97 .I. - lda #$1A ; 4374 A9 1A .. - sta $8F ; 4376 85 8F .. -L4378: jsr L971E ; 4378 20 1E 97 .. - txa ; 437B 8A . - bne L439B ; 437C D0 1D .. - clc ; 437E 18 . - lda #$20 ; 437F A9 20 . - adc $8D ; 4381 65 8D e. - sta $8D ; 4383 85 8D .. - bcc L4389 ; 4385 90 02 .. - inc $8E ; 4387 E6 8E .. -L4389: clc ; 4389 18 . - lda #$20 ; 438A A9 20 . - adc $9749 ; 438C 6D 49 97 mI. - sta $9749 ; 438F 8D 49 97 .I. - bcc L4397 ; 4392 90 03 .. - inc $974A ; 4394 EE 4A 97 .J. -L4397: dec $8F ; 4397 C6 8F .. - bpl L4378 ; 4399 10 DD .. -L439B: jmp DoneWithIO ; 439B 4C 5F C2 L_. -; ---------------------------------------------------------------------------- - lda $8F ; 439E A5 8F .. - ora $848D ; 43A0 0D 8D 84 ... - beq L43C3 ; 43A3 F0 1E .. - ldx #$97 ; 43A5 A2 97 .. - lda #$46 ; 43A7 A9 46 .F - jsr L95F2 ; 43A9 20 F2 95 .. - txa ; 43AC 8A . - bne L43C5 ; 43AD D0 16 .. - lda #$20 ; 43AF A9 20 . - jsr LFFA8 ; 43B1 20 A8 FF .. - ldy #$00 ; 43B4 A0 00 .. -L43B6: lda ($8D),y ; 43B6 B1 8D .. - jsr LFFA8 ; 43B8 20 A8 FF .. - iny ; 43BB C8 . - cpy #$20 ; 43BC C0 20 . - bcc L43B6 ; 43BE 90 F6 .. - jsr LFFAE ; 43C0 20 AE FF .. -L43C3: ldx #$00 ; 43C3 A2 00 .. -L43C5: rts ; 43C5 60 ` -; ---------------------------------------------------------------------------- - eor $572D ; 43C6 4D 2D 57 M-W - brk ; 43C9 00 . - brk ; 43CA 00 . - txa ; 43CB 8A . - pha ; 43CC 48 H - ldx $8489 ; 43CD AE 89 84 ... - lda $848A,x ; 43D0 BD 8A 84 ... - and #$40 ; 43D3 29 40 )@ - beq L43E5 ; 43D5 F0 0E .. - jsr L96C1 ; 43D7 20 C1 96 .. - ldx $8489 ; 43DA AE 89 84 ... - lda $848A,x ; 43DD BD 8A 84 ... - and #$BF ; 43E0 29 BF ). - sta $848A,x ; 43E2 9D 8A 84 ... -L43E5: pla ; 43E5 68 h - tax ; 43E6 AA . - rts ; 43E7 60 ` -; ---------------------------------------------------------------------------- - jsr L9C09 ; 43E8 20 09 9C .. - jsr ExitTurbo ; 43EB 20 32 C2 2. - ldy $8489 ; 43EE AC 89 84 ... - lda #$00 ; 43F1 A9 00 .. - sta $848A,y ; 43F3 99 8A 84 ... - rts ; 43F6 60 ` -; ---------------------------------------------------------------------------- - jsr EnterTurbo ; 43F7 20 14 C2 .. - txa ; 43FA 8A . - bne L4425 ; 43FB D0 28 .( - jsr L9C09 ; 43FD 20 09 9C .. - jsr InitForIO ; 4400 20 5C C2 \. - lda #$00 ; 4403 A9 00 .. - sta $9D07 ; 4405 8D 07 9D ... -L4408: lda #$04 ; 4408 A9 04 .. - sta $8C ; 440A 85 8C .. - lda #$DC ; 440C A9 DC .. - sta $8B ; 440E 85 8B .. - jsr L962E ; 4410 20 2E 96 .. - jsr L9887 ; 4413 20 87 98 .. - beq L4422 ; 4416 F0 0A .. - inc $9D07 ; 4418 EE 07 9D ... - cpy $9D07 ; 441B CC 07 9D ... - beq L4422 ; 441E F0 02 .. - bcs L4408 ; 4420 B0 E6 .. -L4422: jsr DoneWithIO ; 4422 20 5F C2 _. -L4425: rts ; 4425 60 ` -; ---------------------------------------------------------------------------- - pha ; 4426 48 H - jsr EnterTurbo ; 4427 20 14 C2 .. - txa ; 442A 8A . - bne L4452 ; 442B D0 25 .% - pla ; 442D 68 h - pha ; 442E 48 H - ora #$20 ; 442F 09 20 . - sta $04 ; 4431 85 04 .. - jsr InitForIO ; 4433 20 5C C2 \. - ldx #$04 ; 4436 A2 04 .. - lda #$39 ; 4438 A9 39 .9 - jsr L962A ; 443A 20 2A 96 *. - jsr DoneWithIO ; 443D 20 5F C2 _. - jsr L976E ; 4440 20 6E 97 n. - pla ; 4443 68 h - tax ; 4444 AA . - lda #$C0 ; 4445 A9 C0 .. - sta $848A,x ; 4447 9D 8A 84 ... - stx $8489 ; 444A 8E 89 84 ... - stx $BA ; 444D 86 BA .. - ldx #$00 ; 444F A2 00 .. - rts ; 4451 60 ` -; ---------------------------------------------------------------------------- -L4452: pla ; 4452 68 h - rts ; 4453 60 ` -; ---------------------------------------------------------------------------- - jsr L90A7 ; 4454 20 A7 90 .. - bcc L449C ; 4457 90 43 .C - bit $88C6 ; 4459 2C C6 88 ,.. - bvc L4463 ; 445C 50 05 P. - jsr L9C3C ; 445E 20 3C 9C <. - bne L449C ; 4461 D0 39 .9 -L4463: ldx #$05 ; 4463 A2 05 .. - lda #$8E ; 4465 A9 8E .. - jsr L962A ; 4467 20 2A 96 *. - ldx #$03 ; 446A A2 03 .. - lda #$20 ; 446C A9 20 . - jsr L9622 ; 446E 20 22 96 ". - lda $0B ; 4471 A5 0B .. - sta $8C ; 4473 85 8C .. - lda $0A ; 4475 A5 0A .. - sta $8B ; 4477 85 8B .. - ldy #$00 ; 4479 A0 00 .. - jsr L9549 ; 447B 20 49 95 I. - jsr L988E ; 447E 20 8E 98 .. - txa ; 4481 8A . - beq L448E ; 4482 F0 0A .. - inc $9D07 ; 4484 EE 07 9D ... - cpy $9D07 ; 4487 CC 07 9D ... - beq L448E ; 448A F0 02 .. - bcs L4463 ; 448C B0 D5 .. -L448E: txa ; 448E 8A . - bne L449C ; 448F D0 0B .. - bit $88C6 ; 4491 2C C6 88 ,.. - bvc L449C ; 4494 50 06 P. - jsr L9C54 ; 4496 20 54 9C T. - clv ; 4499 B8 . - bvc L449C ; 449A 50 00 P. -L449C: ldy #$00 ; 449C A0 00 .. - rts ; 449E 60 ` -; ---------------------------------------------------------------------------- - jsr L909D ; 449F 20 9D 90 .. - bcc L44C7 ; 44A2 90 23 .# -L44A4: ldx #$05 ; 44A4 A2 05 .. - lda #$7C ; 44A6 A9 7C .| - jsr L962A ; 44A8 20 2A 96 *. - lda $0B ; 44AB A5 0B .. - sta $8C ; 44AD 85 8C .. - lda $0A ; 44AF A5 0A .. - sta $8B ; 44B1 85 8B .. - ldy #$00 ; 44B3 A0 00 .. - jsr L9598 ; 44B5 20 98 95 .. - jsr L9887 ; 44B8 20 87 98 .. - beq L44C7 ; 44BB F0 0A .. - inc $9D07 ; 44BD EE 07 9D ... - cpy $9D07 ; 44C0 CC 07 9D ... - beq L44C7 ; 44C3 F0 02 .. - bcs L44A4 ; 44C5 B0 DD .. -L44C7: rts ; 44C7 60 ` -; ---------------------------------------------------------------------------- - jsr L909D ; 44C8 20 9D 90 .. - bcc L4506 ; 44CB 90 39 .9 -L44CD: lda #$03 ; 44CD A9 03 .. - sta $9D09 ; 44CF 8D 09 9D ... -L44D2: ldx #$05 ; 44D2 A2 05 .. - lda #$8E ; 44D4 A9 8E .. - jsr L962A ; 44D6 20 2A 96 *. - jsr L9887 ; 44D9 20 87 98 .. - txa ; 44DC 8A . - beq L44FB ; 44DD F0 1C .. - dec $9D09 ; 44DF CE 09 9D ... - bne L44D2 ; 44E2 D0 EE .. - ldx #$25 ; 44E4 A2 25 .% - inc $9D07 ; 44E6 EE 07 9D ... - lda $9D07 ; 44E9 AD 07 9D ... - cmp #$05 ; 44EC C9 05 .. - beq L44FB ; 44EE F0 0B .. - pha ; 44F0 48 H - jsr WriteBlock ; 44F1 20 20 C2 . - pla ; 44F4 68 h - sta $9D07 ; 44F5 8D 07 9D ... - txa ; 44F8 8A . - beq L44CD ; 44F9 F0 D2 .. -L44FB: txa ; 44FB 8A . -L44FC: bne L4506 ; 44FC D0 08 .. - bit $88C6 ; 44FE 2C C6 88 ,.. - bvc L4506 ; 4501 50 03 P. - jmp L9C54 ; 4503 4C 54 9C LT. -; ---------------------------------------------------------------------------- -L4506: rts ; 4506 60 ` -; ---------------------------------------------------------------------------- - ldx #$03 ; 4507 A2 03 .. - lda #$25 ; 4509 A9 25 .% - jsr L9622 ; 450B 20 22 96 ". - lda #$9D ; 450E A9 9D .. - sta $8C ; 4510 85 8C .. - lda #$08 ; 4512 A9 08 .. - sta $8B ; 4514 85 8B .. - jsr L964F ; 4516 20 4F 96 O. - lda $9D08 ; 4519 AD 08 9D ... - pha ; 451C 48 H - tay ; 451D A8 . - lda $98AF,y ; 451E B9 AF 98 ... - tay ; 4521 A8 . - pla ; 4522 68 h - cmp #$01 ; 4523 C9 01 .. - beq L452C ; 4525 F0 05 .. - clc ; 4527 18 . - adc #$1E ; 4528 69 1E i. - bne L452E ; 452A D0 02 .. -L452C: .byte $A9 ; 452C A9 . -L452D: brk ; 452D 00 . -L452E: tax ; 452E AA . - rts ; 452F 60 ` -; ---------------------------------------------------------------------------- - ora ($05,x) ; 4530 01 05 .. - .byte $02 ; 4532 02 . - php ; 4533 08 . - php ; 4534 08 . - ora ($05,x) ; 4535 01 05 .. - ora ($05,x) ; 4537 01 05 .. - ora $05 ; 4539 05 05 .. - .byte $0F ; 453B 0F . - .byte $07 ; 453C 07 . - ora $0B05 ; 453D 0D 05 0B ... - .byte $03 ; 4540 03 . - ora #$01 ; 4541 09 01 .. - asl $0C06 ; 4543 0E 06 0C ... - .byte $04 ; 4546 04 . - asl a ; 4547 0A . - .byte $02 ; 4548 02 . - php ; 4549 08 . - brk ; 454A 00 . - brk ; 454B 00 . - .byte $80 ; 454C 80 . - jsr L40A0 ; 454D 20 A0 40 .@ - cpy #$60 ; 4550 C0 60 .` - cpx #$10 ; 4552 E0 10 .. - bcc L4586 ; 4554 90 30 .0 - bcs L45A8 ; 4556 B0 50 .P - bne L45CA ; 4558 D0 70 .p - beq L44FC ; 455A F0 A0 .. - brk ; 455C 00 . - jsr L033A ; 455D 20 3A 03 :. - ldy #$00 ; 4560 A0 00 .. - sty $73 ; 4562 84 73 .s - sty $74 ; 4564 84 74 .t - iny ; 4566 C8 . - sty $71 ; 4567 84 71 .q - ldy #$00 ; 4569 A0 00 .. - jsr L03CB ; 456B 20 CB 03 .. - lda $71 ; 456E A5 71 .q - jsr L0340 ; 4570 20 40 03 @. - ldy $71 ; 4573 A4 71 .q - jsr L03CB ; 4575 20 CB 03 .. -L4578: dey ; 4578 88 . - lda ($73),y ; 4579 B1 73 .s - tax ; 457B AA . - lsr a ; 457C 4A J - lsr a ; 457D 4A J - lsr a ; 457E 4A J - lsr a ; 457F 4A J - sta $70 ; 4580 85 70 .p - txa ; 4582 8A . - and #$0F ; 4583 29 0F ). - tax ; 4585 AA . -L4586: lda #$04 ; 4586 A9 04 .. - sta $1800 ; 4588 8D 00 18 ... -L458B: bit $1800 ; 458B 2C 00 18 ,.. - beq L458B ; 458E F0 FB .. - bit $1800 ; 4590 2C 00 18 ,.. - bne L4595 ; 4593 D0 00 .. -L4595: bne L4597 ; 4595 D0 00 .. -L4597: stx $1800 ; 4597 8E 00 18 ... - txa ; 459A 8A . - rol a ; 459B 2A * - and #$0F ; 459C 29 0F ). - sta $1800 ; 459E 8D 00 18 ... - ldx $70 ; 45A1 A6 70 .p - lda $0300,x ; 45A3 BD 00 03 ... - .byte $8D ; 45A6 8D . - brk ; 45A7 00 . -L45A8: clc ; 45A8 18 . - nop ; 45A9 EA . - rol a ; 45AA 2A * - and #$0F ; 45AB 29 0F ). - cpy #$00 ; 45AD C0 00 .. - sta $1800 ; 45AF 8D 00 18 ... - bne L4578 ; 45B2 D0 C4 .. - beq L45F9 ; 45B4 F0 43 .C - ldy #$01 ; 45B6 A0 01 .. - jsr L0389 ; 45B8 20 89 03 .. - sta $71 ; 45BB 85 71 .q - tay ; 45BD A8 . - jsr L0389 ; 45BE 20 89 03 .. - ldy $71 ; 45C1 A4 71 .q - rts ; 45C3 60 ` -; ---------------------------------------------------------------------------- - jsr L03CB ; 45C4 20 CB 03 .. -L45C7: pha ; 45C7 48 H - pla ; 45C8 68 h - .byte $A9 ; 45C9 A9 . -L45CA: .byte $04 ; 45CA 04 . -L45CB: bit $1800 ; 45CB 2C 00 18 ,.. - beq L45CB ; 45CE F0 FB .. - nop ; 45D0 EA . - nop ; 45D1 EA . - nop ; 45D2 EA . - lda $1800 ; 45D3 AD 00 18 ... - asl a ; 45D6 0A . - nop ; 45D7 EA . - nop ; 45D8 EA . - nop ; 45D9 EA . - nop ; 45DA EA . - ora $1800 ; 45DB 0D 00 18 ... - and #$0F ; 45DE 29 0F ). - tax ; 45E0 AA . - nop ; 45E1 EA . - nop ; 45E2 EA . - nop ; 45E3 EA . - lda $1800 ; 45E4 AD 00 18 ... - asl a ; 45E7 0A . - pha ; 45E8 48 H - lda $70 ; 45E9 A5 70 .p - pla ; 45EB 68 h - ora $1800 ; 45EC 0D 00 18 ... - and #$0F ; 45EF 29 0F ). - ora $0310,x ; 45F1 1D 10 03 ... - dey ; 45F4 88 . - sta ($73),y ; 45F5 91 73 .s - bne L45C7 ; 45F7 D0 CE .. -L45F9: ldx #$02 ; 45F9 A2 02 .. - stx $1800 ; 45FB 8E 00 18 ... - rts ; 45FE 60 ` -; ---------------------------------------------------------------------------- -L45FF: dec $48 ; 45FF C6 48 .H - bne L4606 ; 4601 D0 03 .. - jsr L0534 ; 4603 20 34 05 4. -L4606: lda #$C0 ; 4606 A9 C0 .. - sta $1805 ; 4608 8D 05 18 ... -L460B: bit $1805 ; 460B 2C 05 18 ,.. - bpl L45FF ; 460E 10 EF .. - lda #$04 ; 4610 A9 04 .. - bit $1800 ; 4612 2C 00 18 ,.. - bne L460B ; 4615 D0 F4 .. - lda #$00 ; 4617 A9 00 .. - sta $1800 ; 4619 8D 00 18 ... - rts ; 461C 60 ` -; ---------------------------------------------------------------------------- - php ; 461D 08 . - sei ; 461E 78 x - lda $49 ; 461F A5 49 .I - pha ; 4621 48 H - lda $180F ; 4622 AD 0F 18 ... - and #$DF ; 4625 29 DF ). - sta $180F ; 4627 8D 0F 18 ... - ldy #$00 ; 462A A0 00 .. -L462C: dey ; 462C 88 . - bne L462C ; 462D D0 FD .. - jsr L03BE ; 462F 20 BE 03 .. - lda #$04 ; 4632 A9 04 .. -L4634: bit $1800 ; 4634 2C 00 18 ,.. - beq L4634 ; 4637 F0 FB .. - jsr L0529 ; 4639 20 29 05 ). - lda #$06 ; 463C A9 06 .. - sta $74 ; 463E 85 74 .t - lda #$4A ; 4640 A9 4A .J - sta $73 ; 4642 85 73 .s - jsr L037B ; 4644 20 7B 03 {. - jsr L052D ; 4647 20 2D 05 -. - lda #$07 ; 464A A9 07 .. - sta $74 ; 464C 85 74 .t - lda #$00 ; 464E A9 00 .. - sta $73 ; 4650 85 73 .s - lda #$03 ; 4652 A9 03 .. - pha ; 4654 48 H - lda #$FD ; 4655 A9 FD .. - pha ; 4657 48 H - jmp (L064A) ; 4658 6C 4A 06 lJ. -; ---------------------------------------------------------------------------- - jsr L03CB ; 465B 20 CB 03 .. - lda #$00 ; 465E A9 00 .. - sta $33 ; 4660 85 33 .3 - sta $1800 ; 4662 8D 00 18 ... - jsr LF98F ; 4665 20 8F F9 .. - lda #$EC ; 4668 A9 EC .. - sta $1C0C ; 466A 8D 0C 1C ... - pla ; 466D 68 h - pla ; 466E 68 h - pla ; 466F 68 h - sta $49 ; 4670 85 49 .I - plp ; 4672 28 ( - rts ; 4673 60 ` -; ---------------------------------------------------------------------------- - lda $064C ; 4674 AD 4C 06 .L. - sta $77 ; 4677 85 77 .w - eor #$60 ; 4679 49 60 I` - sta $78 ; 467B 85 78 .x - rts ; 467D 60 ` -; ---------------------------------------------------------------------------- - jsr L0632 ; 467E 20 32 06 2. - lda $22 ; 4681 A5 22 ." - beq L468A ; 4683 F0 05 .. - ldx $00 ; 4685 A6 00 .. - dex ; 4687 CA . - beq L46AA ; 4688 F0 20 . -L468A: lda $12 ; 468A A5 12 .. - pha ; 468C 48 H - lda $13 ; 468D A5 13 .. - pha ; 468F 48 H - jsr L04DF ; 4690 20 DF 04 .. - pla ; 4693 68 h - sta $13 ; 4694 85 13 .. - tax ; 4696 AA . - pla ; 4697 68 h - sta $12 ; 4698 85 12 .. - ldy $00 ; 469A A4 00 .. - cpy #$01 ; 469C C0 01 .. - bne L46C9 ; 469E D0 29 .) - cpx $17 ; 46A0 E4 17 .. - bne L46CA ; 46A2 D0 26 .& - cmp $16 ; 46A4 C5 16 .. - bne L46CA ; 46A6 D0 22 ." - lda #$00 ; 46A8 A9 00 .. -L46AA: pha ; 46AA 48 H - lda $22 ; 46AB A5 22 ." - ldx #$FF ; 46AD A2 FF .. - sec ; 46AF 38 8 - sbc $064C ; 46B0 ED 4C 06 .L. - beq L46C8 ; 46B3 F0 13 .. - bcs L46BD ; 46B5 B0 06 .. - eor #$FF ; 46B7 49 FF I. - adc #$01 ; 46B9 69 01 i. - ldx #$01 ; 46BB A2 01 .. -L46BD: jsr L0494 ; 46BD 20 94 04 .. - lda $064C ; 46C0 AD 4C 06 .L. - sta $22 ; 46C3 85 22 ." - jsr L0518 ; 46C5 20 18 05 .. -L46C8: pla ; 46C8 68 h -L46C9: rts ; 46C9 60 ` -; ---------------------------------------------------------------------------- -L46CA: lda #$0B ; 46CA A9 0B .. - sta $00 ; 46CC 85 00 .. - rts ; 46CE 60 ` -; ---------------------------------------------------------------------------- - stx $4A ; 46CF 86 4A .J - asl a ; 46D1 0A . - tay ; 46D2 A8 . - lda $1C00 ; 46D3 AD 00 1C ... - and #$FE ; 46D6 29 FE ). - sta $70 ; 46D8 85 70 .p - lda #$1E ; 46DA A9 1E .. - sta $71 ; 46DC 85 71 .q -L46DE: lda $70 ; 46DE A5 70 .p - clc ; 46E0 18 . - adc $4A ; 46E1 65 4A eJ - eor $70 ; 46E3 45 70 Ep - and #$03 ; 46E5 29 03 ). - eor $70 ; 46E7 45 70 Ep - sta $70 ; 46E9 85 70 .p - sta $1C00 ; 46EB 8D 00 1C ... - lda $71 ; 46EE A5 71 .q - jsr L04D3 ; 46F0 20 D3 04 .. - lda $71 ; 46F3 A5 71 .q - cpy #$05 ; 46F5 C0 05 .. - bcc L4701 ; 46F7 90 08 .. - cmp #$11 ; 46F9 C9 11 .. - bcc L4707 ; 46FB 90 0A .. - sbc #$02 ; 46FD E9 02 .. - bne L4707 ; 46FF D0 06 .. -L4701: cmp #$1C ; 4701 C9 1C .. - bcs L4707 ; 4703 B0 02 .. - adc #$04 ; 4705 69 04 i. -L4707: sta $71 ; 4707 85 71 .q - dey ; 4709 88 . - bne L46DE ; 470A D0 D2 .. - lda #$4B ; 470C A9 4B .K - sta $1805 ; 470E 8D 05 18 ... -L4711: lda $1805 ; 4711 AD 05 18 ... - bne L4711 ; 4714 D0 FB .. - rts ; 4716 60 ` -; ---------------------------------------------------------------------------- - jsr L0632 ; 4717 20 32 06 2. - ldx $00 ; 471A A6 00 .. - dex ; 471C CA . - beq L4731 ; 471D F0 12 .. - ldx #$FF ; 471F A2 FF .. - lda #$01 ; 4721 A9 01 .. - jsr L0494 ; 4723 20 94 04 .. - ldx #$01 ; 4726 A2 01 .. - txa ; 4728 8A . - jsr L0494 ; 4729 20 94 04 .. - lda #$FF ; 472C A9 FF .. - jsr L04D3 ; 472E 20 D3 04 .. -L4731: lda #$04 ; 4731 A9 04 .. - sta $70 ; 4733 85 70 .p -L4735: jsr L0599 ; 4735 20 99 05 .. - ldx $18 ; 4738 A6 18 .. - stx $22 ; 473A 86 22 ." - ldy $00 ; 473C A4 00 .. - dey ; 473E 88 . - beq L4752 ; 473F F0 11 .. - dec $70 ; 4741 C6 70 .p - bmi L474D ; 4743 30 08 0. - ldx $70 ; 4745 A6 70 .p - jsr L051D ; 4747 20 1D 05 .. - sec ; 474A 38 8 - bcs L4735 ; 474B B0 E8 .. -L474D: lda #$00 ; 474D A9 00 .. - sta $22 ; 474F 85 22 ." - rts ; 4751 60 ` -; ---------------------------------------------------------------------------- -L4752: txa ; 4752 8A . - jsr LF24B ; 4753 20 4B F2 K. - sta $43 ; 4756 85 43 .C - lda $1C00 ; 4758 AD 00 1C ... - and #$9F ; 475B 29 9F ). - ora $0544,x ; 475D 1D 44 05 .D. -L4760: sta $1C00 ; 4760 8D 00 1C ... - rts ; 4763 60 ` -; ---------------------------------------------------------------------------- - lda #$F7 ; 4764 A9 F7 .. - bne L4779 ; 4766 D0 11 .. - lda #$08 ; 4768 A9 08 .. - ora $1C00 ; 476A 0D 00 1C ... - bne L4760 ; 476D D0 F1 .. - lda #$00 ; 476F A9 00 .. - sta $20 ; 4771 85 20 . - lda #$FF ; 4773 A9 FF .. - sta $3E ; 4775 85 3E .> - lda #$FB ; 4777 A9 FB .. -L4779: and $1C00 ; 4779 2D 00 1C -.. - jmp L0525 ; 477C 4C 25 05 L%. -; ---------------------------------------------------------------------------- - brk ; 477F 00 . - jsr L6040 ; 4780 20 40 60 @` - tax ; 4783 AA . - bit $20 ; 4784 24 20 $ - bpl L4791 ; 4786 10 09 .. - jsr L063B ; 4788 20 3B 06 ;. - lda #$20 ; 478B A9 20 . - sta $20 ; 478D 85 20 . - ldx #$00 ; 478F A2 00 .. -L4791: cpx $22 ; 4791 E4 22 ." - beq L47B6 ; 4793 F0 21 .! - jsr L04F6 ; 4795 20 F6 04 .. - cmp #$01 ; 4798 C9 01 .. - bne L47B6 ; 479A D0 1A .. - ldy $19 ; 479C A4 19 .. - iny ; 479E C8 . - cpy $43 ; 479F C4 43 .C - bcc L47A5 ; 47A1 90 02 .. - ldy #$00 ; 47A3 A0 00 .. -L47A5: sty $19 ; 47A5 84 19 .. - lda #$00 ; 47A7 A9 00 .. - sta $45 ; 47A9 85 45 .E - lda #$00 ; 47AB A9 00 .. - sta $33 ; 47AD 85 33 .3 - lda #$18 ; 47AF A9 18 .. - sta $32 ; 47B1 85 32 .2 - jsr L05A5 ; 47B3 20 A5 05 .. -L47B6: rts ; 47B6 60 ` -; ---------------------------------------------------------------------------- - jsr L0443 ; 47B7 20 43 04 C. - ldx $00 ; 47BA A6 00 .. - dex ; 47BC CA . - bne L47C2 ; 47BD D0 03 .. - jsr L0548 ; 47BF 20 48 05 H. -L47C2: jsr L037B ; 47C2 20 7B 03 {. - lda #$10 ; 47C5 A9 10 .. - bne L47CE ; 47C7 D0 05 .. - jsr L0443 ; 47C9 20 43 04 C. - lda #$00 ; 47CC A9 00 .. -L47CE: ldx $00 ; 47CE A6 00 .. - dex ; 47D0 CA . - beq L47D6 ; 47D1 F0 03 .. - rts ; 47D3 60 ` -; ---------------------------------------------------------------------------- - lda #$30 ; 47D4 A9 30 .0 -L47D6: sta $45 ; 47D6 85 45 .E - lda #$06 ; 47D8 A9 06 .. - sta $33 ; 47DA 85 33 .3 - lda #$4C ; 47DC A9 4C .L - sta $32 ; 47DE 85 32 .2 - lda #$07 ; 47E0 A9 07 .. - sta $31 ; 47E2 85 31 .1 - tsx ; 47E4 BA . - stx $49 ; 47E5 86 49 .I - ldx #$01 ; 47E7 A2 01 .. - stx $00 ; 47E9 86 00 .. - dex ; 47EB CA . - stx $3F ; 47EC 86 3F .? - lda #$EE ; 47EE A9 EE .. - sta $1C0C ; 47F0 8D 0C 1C ... - lda $45 ; 47F3 A5 45 .E - cmp #$10 ; 47F5 C9 10 .. - beq L4803 ; 47F7 F0 0A .. - cmp #$30 ; 47F9 C9 30 .0 - beq L4800 ; 47FB F0 03 .. - jmp LF4CA ; 47FD 4C CA F4 L.. -; ---------------------------------------------------------------------------- -L4800: jmp LF3B1 ; 4800 4C B1 F3 L.. -; ---------------------------------------------------------------------------- -L4803: jsr LF5E9 ; 4803 20 E9 F5 .. - sta $3A ; 4806 85 3A .: - lda $1C00 ; 4808 AD 00 1C ... - and #$10 ; 480B 29 10 ). - bne L4813 ; 480D D0 04 .. - lda #$08 ; 480F A9 08 .. - bne L486A ; 4811 D0 57 .W -L4813: jsr LF78F ; 4813 20 8F F7 .. - jsr LF510 ; 4816 20 10 F5 .. - ldx #$09 ; 4819 A2 09 .. -L481B: bvc L481B ; 481B 50 FE P. - clv ; 481D B8 . - dex ; 481E CA . - bne L481B ; 481F D0 FA .. - lda #$FF ; 4821 A9 FF .. - sta $1C03 ; 4823 8D 03 1C ... - lda $1C0C ; 4826 AD 0C 1C ... - and #$1F ; 4829 29 1F ). - ora #$C0 ; 482B 09 C0 .. - sta $1C0C ; 482D 8D 0C 1C ... - lda #$FF ; 4830 A9 FF .. - ldx #$05 ; 4832 A2 05 .. - sta $1C01 ; 4834 8D 01 1C ... - clv ; 4837 B8 . -L4838: bvc L4838 ; 4838 50 FE P. - clv ; 483A B8 . - dex ; 483B CA . - bne L4838 ; 483C D0 FA .. - ldy #$BB ; 483E A0 BB .. -L4840: lda $0100,y ; 4840 B9 00 01 ... -L4843: bvc L4843 ; 4843 50 FE P. - clv ; 4845 B8 . - sta $1C01 ; 4846 8D 01 1C ... - iny ; 4849 C8 . - bne L4840 ; 484A D0 F4 .. -L484C: lda ($30),y ; 484C B1 30 .0 -L484E: bvc L484E ; 484E 50 FE P. - clv ; 4850 B8 . - sta $1C01 ; 4851 8D 01 1C ... - iny ; 4854 C8 . - bne L484C ; 4855 D0 F5 .. -L4857: bvc L4857 ; 4857 50 FE P. - lda $1C0C ; 4859 AD 0C 1C ... - ora #$E0 ; 485C 09 E0 .. - sta $1C0C ; 485E 8D 0C 1C ... - lda #$00 ; 4861 A9 00 .. - sta $1C03 ; 4863 8D 03 1C ... - sta $50 ; 4866 85 50 .P - lda #$01 ; 4868 A9 01 .. -L486A: sta $00 ; 486A 85 00 .. - rts ; 486C 60 ` -; ---------------------------------------------------------------------------- - lda $20 ; 486D A5 20 . - and #$20 ; 486F 29 20 ) - bne L4880 ; 4871 D0 0D .. - jsr LF97E ; 4873 20 7E F9 ~. - ldy #$80 ; 4876 A0 80 .. -L4878: dex ; 4878 CA . - bne L4878 ; 4879 D0 FD .. - dey ; 487B 88 . - bne L4878 ; 487C D0 FA .. - sty $3E ; 487E 84 3E .> -L4880: lda #$FF ; 4880 A9 FF .. - sta $48 ; 4882 85 48 .H - rts ; 4884 60 ` -; ---------------------------------------------------------------------------- - brk ; 4885 00 . - brk ; 4886 00 . - brk ; 4887 00 . - brk ; 4888 00 . - bit $88C6 ; 4889 2C C6 88 ,.. - bvs L488F ; 488C 70 01 p. - rts ; 488E 60 ` -; ---------------------------------------------------------------------------- -L488F: lda #$9C ; 488F A9 9C .. - sta $03 ; 4891 85 03 .. - lda #$07 ; 4893 A9 07 .. - sta $02 ; 4895 85 02 .. - ldy #$00 ; 4897 A0 00 .. - sty $04 ; 4899 84 04 .. - sty $05 ; 489B 84 05 .. - sty $07 ; 489D 84 07 .. - iny ; 489F C8 . - iny ; 48A0 C8 . - sty $06 ; 48A1 84 06 .. - iny ; 48A3 C8 . - sty $09 ; 48A4 84 09 .. - ldy $8489 ; 48A6 AC 89 84 ... - lda $88BF,y ; 48A9 B9 BF 88 ... - sta $08 ; 48AC 85 08 .. -L48AE: jsr StashRAM ; 48AE 20 C8 C2 .. - inc $05 ; 48B1 E6 05 .. - bne L48AE ; 48B3 D0 F9 .. - inc $08 ; 48B5 E6 08 .. - dec $09 ; 48B7 C6 09 .. - bne L48AE ; 48B9 D0 F3 .. - rts ; 48BB 60 ` -; ---------------------------------------------------------------------------- - ldy #$91 ; 48BC A0 91 .. - jsr L9C56 ; 48BE 20 56 9C V. - ldy #$00 ; 48C1 A0 00 .. - lda ($0A),y ; 48C3 B1 0A .. - iny ; 48C5 C8 . - ora ($0A),y ; 48C6 11 0A .. - rts ; 48C8 60 ` -; ---------------------------------------------------------------------------- - ldx #$00 ; 48C9 A2 00 .. - rts ; 48CB 60 ` -; ---------------------------------------------------------------------------- - ldy #$93 ; 48CC A0 93 .. - jsr L9C56 ; 48CE 20 56 9C V. - and #$20 ; 48D1 29 20 ) - rts ; 48D3 60 ` -; ---------------------------------------------------------------------------- - ldy #$90 ; 48D4 A0 90 .. - lda $03 ; 48D6 A5 03 .. - pha ; 48D8 48 H - lda $02 ; 48D9 A5 02 .. - pha ; 48DB 48 H - lda $05 ; 48DC A5 05 .. - pha ; 48DE 48 H - lda $04 ; 48DF A5 04 .. - pha ; 48E1 48 H - lda $07 ; 48E2 A5 07 .. - pha ; 48E4 48 H - lda $06 ; 48E5 A5 06 .. - pha ; 48E7 48 H - lda $08 ; 48E8 A5 08 .. - pha ; 48EA 48 H - tya ; 48EB 98 . - pha ; 48EC 48 H - ldy $04 ; 48ED A4 04 .. - dey ; 48EF 88 . - lda $9CB3,y ; 48F0 B9 B3 9C ... - clc ; 48F3 18 . - adc $05 ; 48F4 65 05 e. - sta $05 ; 48F6 85 05 .. - lda $9CD7,y ; 48F8 B9 D7 9C ... - ldy $8489 ; 48FB AC 89 84 ... - adc $88BF,y ; 48FE 79 BF 88 y.. - sta $08 ; 4901 85 08 .. - ldy #$00 ; 4903 A0 00 .. - sty $04 ; 4905 84 04 .. - sty $06 ; 4907 84 06 .. - iny ; 4909 C8 . - sty $07 ; 490A 84 07 .. - lda $0B ; 490C A5 0B .. - sta $03 ; 490E 85 03 .. - lda $0A ; 4910 A5 0A .. - sta $02 ; 4912 85 02 .. - pla ; 4914 68 h - tay ; 4915 A8 . - jsr DoRAMOp ; 4916 20 D4 C2 .. - tax ; 4919 AA . - pla ; 491A 68 h - sta $08 ; 491B 85 08 .. - pla ; 491D 68 h - sta $06 ; 491E 85 06 .. - pla ; 4920 68 h - sta $07 ; 4921 85 07 .. - pla ; 4923 68 h - sta $04 ; 4924 85 04 .. - pla ; 4926 68 h - sta $05 ; 4927 85 05 .. - pla ; 4929 68 h - sta $02 ; 492A 85 02 .. - pla ; 492C 68 h - sta $03 ; 492D 85 03 .. - txa ; 492F 8A . - ldx #$00 ; 4930 A2 00 .. - rts ; 4932 60 ` -; ---------------------------------------------------------------------------- - brk ; 4933 00 . - ora $2A,x ; 4934 15 2A .* - .byte $3F ; 4936 3F ? - .byte $54 ; 4937 54 T - adc #$7E ; 4938 69 7E i~ - .byte $93 ; 493A 93 . - tay ; 493B A8 . - lda $E7D2,x ; 493C BD D2 E7 ... - .byte $FC ; 493F FC . - ora ($26),y ; 4940 11 26 .& - .byte $3B ; 4942 3B ; - bvc L49AA ; 4943 50 65 Pe - sei ; 4945 78 x - .byte $8B ; 4946 8B . - .byte $9E ; 4947 9E . - lda ($C4),y ; 4948 B1 C4 .. - .byte $D7 ; 494A D7 . - nop ; 494B EA . - .byte $FC ; 494C FC . - asl $3220 ; 494D 0E 20 32 . 2 - .byte $44 ; 4950 44 D - lsr $67,x ; 4951 56 67 Vg - sei ; 4953 78 x - .byte $89 ; 4954 89 . - txs ; 4955 9A . - .byte $AB ; 4956 AB . - brk ; 4957 00 . - brk ; 4958 00 . - brk ; 4959 00 . - brk ; 495A 00 . - brk ; 495B 00 . - brk ; 495C 00 . - brk ; 495D 00 . - brk ; 495E 00 . - brk ; 495F 00 . - brk ; 4960 00 . - brk ; 4961 00 . - brk ; 4962 00 . - brk ; 4963 00 . - ora ($01,x) ; 4964 01 01 .. - ora ($01,x) ; 4966 01 01 .. - ora ($01,x) ; 4968 01 01 .. - ora ($01,x) ; 496A 01 01 .. - ora ($01,x) ; 496C 01 01 .. - ora ($01,x) ; 496E 01 01 .. - ora ($02,x) ; 4970 01 02 .. - .byte $02 ; 4972 02 . - .byte $02 ; 4973 02 . - .byte $02 ; 4974 02 . - .byte $02 ; 4975 02 . - .byte $02 ; 4976 02 . - .byte $02 ; 4977 02 . - .byte $02 ; 4978 02 . - .byte $02 ; 4979 02 . - .byte $02 ; 497A 02 . - brk ; 497B 00 . - brk ; 497C 00 . - brk ; 497D 00 . - brk ; 497E 00 . - brk ; 497F 00 . - brk ; 4980 00 . - brk ; 4981 00 . - brk ; 4982 00 . - brk ; 4983 00 . - brk ; 4984 00 . - brk ; 4985 00 . - brk ; 4986 00 . - brk ; 4987 00 . - brk ; 4988 00 . - brk ; 4989 00 . - brk ; 498A 00 . - .byte $A2 ; 498B A2 . +; da65 V2.15 +; Created: 2017-07-30 15:27:26 +; Input file: configure128.cvt.record.2 +; Page: 1 + + + .setcpu "6502" + +; ---------------------------------------------------------------------------- +CPU_DDR := $0000 +CPU_DATA := $0001 +r0L := $0002 +r0H := $0003 +r1L := $0004 +r1H := $0005 +r2L := $0006 +r2H := $0007 +r3L := $0008 +r3H := $0009 +r4L := $000A +r4H := $000B +r5L := $000C +r5H := $000D +r6L := $000E +r6H := $000F +r7L := $0010 +r7H := $0011 +r8L := $0012 +r8H := $0013 +r9L := $0014 +r9H := $0015 +r10L := $0016 +r10H := $0017 +r11L := $0018 +r11H := $0019 +r12L := $001A +r12H := $001B +r13L := $001C +r13H := $001D +r14L := $001E +r14H := $001F +r15L := $0020 +r15H := $0021 +curPattern := $0022 +string := $0024 +baselineOffset := $0026 +curSetWidth := $0027 +curHeight := $0029 +curIndexTable := $002A +cardDataPntr := $002C +currentMode := $002E +dispBufferOn := $002F +mouseOn := $0030 +msePicPtr := $0031 +windowTop := $0033 +windowBottom := $0034 +leftMargin := $0035 +rightMargin := $0037 +pressFlag := $0039 +mouseXPos := $003A +mouseYPos := $003C +returnAddress := $003D +graphMode := $003F +a2L := $0070 +a2H := $0071 +a3L := $0072 +a3H := $0073 +a4L := $0074 +a4H := $0075 +a5L := $0076 +a5H := $0077 +a6L := $0078 +a6H := $0079 +a7L := $007A +a7H := $007B +a8L := $007C +a8H := $007D +a9L := $007E +a9H := $007F +TURBO_DD00 := $008E ; from 1541 turbo +TURBO_DD00_CPY := $008F ; from 1541 turbo +STATUS := $0090 +curDevice := $00BA +a0L := $00FB +a0H := $00FC +a1L := $00FD +a1H := $00FE +irqvec := $0314 +bkvec := $0316 +nmivec := $0318 +L033A := $033A +L0340 := $0340 +L037B := $037B +L0389 := $0389 +L03BE := $03BE +L03CB := $03CB +APP_RAM := $0400 +L0443 := $0443 +L0494 := $0494 +L04D3 := $04D3 +L04DF := $04DF +L04F6 := $04F6 +L0518 := $0518 +L051D := $051D +L0525 := $0525 +L0529 := $0529 +L052D := $052D +L0534 := $0534 +L0548 := $0548 +L0599 := $0599 +L05A5 := $05A5 +L0632 := $0632 +L063B := $063B +L064A := $064A +L3156 := $3156 +L40A0 := $40A0 +L4328 := $4328 +BACK_SCR_BASE := $6000 +L6040 := $6040 +L6216 := $6216 +L656C := $656C +L6F43 := $6F43 +L6F53 := $6F53 +L6F66 := $6F66 +PRINTBASE := $7900 +diskBlkBuf := $8000 +fileHeader := $8100 +curDirHead := $8200 +fileTrScTab := $8300 +dirEntryBuf := $8400 +DrACurDkNm := $841E +DrBCurDkNm := $8430 +dataFileName := $8442 +dataDiskName := $8453 +PrntFilename := $8465 +PrntDiskName := $8476 +curDrive := $8489 +diskOpenFlg := $848A +isGEOS := $848B +interleave := $848C +NUMDRV := $848D +driveType := $848E +turboFlags := $8492 +curRecord := $8496 +usedRecords := $8497 +fileWritten := $8498 +fileSize := $8499 +appMain := $849B +intTopVector := $849D +intBotVector := $849F +mouseVector := $84A1 +keyVector := $84A3 +inputVector := $84A5 +mouseFaultVec := $84A7 +otherPressVec := $84A9 +StringFaultVec := $84AB +alarmTmtVector := $84AD +BRKVector := $84AF +RecoverVector := $84B1 +selectionFlash := $84B3 +alphaFlag := $84B4 +iconSelFlg := $84B5 +faultData := $84B6 +menuNumber := $84B7 +mouseTop := $84B8 +mouseBottom := $84B9 +mouseLeft := $84BA +mouseRight := $84BC +stringX := $84BE +stringY := $84C0 +mousePicData := $84C1 +maxMouseSpeed := $8501 +minMouseSpeed := $8502 +mouseAccel := $8503 +keyData := $8504 +mouseData := $8505 +inputData := $8506 +mouseSpeed := $8507 +random := $850A +saveFontTab := $850C +dblClickCount := $8515 +year := $8516 +month := $8517 +day := $8518 +hour := $8519 +minutes := $851A +seconds := $851B +alarmSetFlag := $851C +sysDBData := $851D +screencolors := $851E +dlgBoxRamBuf := $851F ; to $8697 +savedmoby2 := $88BB +scr80polar := $88BC +scr80colors := $88BD +vdcClrMode := $88BE +driveData := $88BF +ramExpSize := $88C3 +sysRAMFlg := $88C4 +firstBoot := $88C5 +curType := $88C6 +ramBase := $88C7 +inputDevName := $88CB +memBase := $88CF ; ??? +DrCCurDkNm := $88DC +DrDCurDkNm := $88EE +dir2Head := $8900 +spr0pic := $8A00 +spr1pic := $8A40 +spr2pic := $8A80 +spr3pic := $8AC0 +spr4pic := $8B00 +spr5pic := $8B40 +spr6pic := $8B80 +spr7pic := $8BC0 +COLOR_MATRIX := $8C00 +obj0Pointer := $8FF8 +obj1Pointer := $8FF9 +obj2Pointer := $8FFA +obj3Pointer := $8FFB +obj4Pointer := $8FFC +obj5Pointer := $8FFD +obj6Pointer := $8FFE +obj7Pointer := $8FFF +L9DD8 := $9DD8 +SCREEN_BASE := $A000 +OS_ROM := $C000 +bootName := $C006 +version := $C00F +nationality := $C010 +sysFlgCopy := $C012 +c128Flag := $C013 +dateCopy := $C018 +InterruptMain := $C100 +InitProcesses := $C103 +RestartProcess := $C106 +EnableProcess := $C109 +BlockProcess := $C10C +UnBlockProcess := $C10F +FreezeProcess := $C112 +UnFreezeProcess := $C115 +HorizontalLine := $C118 +InvertLine := $C11B +RecoverLine := $C11E +VerticalLine := $C121 +Rectangle := $C124 +FrameRectangle := $C127 +InvertRectangle := $C12A +RecoverRectangle:= $C12D +DrawLine := $C130 +DrawPoint := $C133 +GraphicsString := $C136 +SetPattern := $C139 +GetScanLine := $C13C +TestPoint := $C13F +BitmapUp := $C142 +PutChar := $C145 +PutString := $C148 +UseSystemFont := $C14B +StartMouseMode := $C14E +DoMenu := $C151 +RecoverMenu := $C154 +RecoverAllMenus := $C157 +DoIcons := $C15A +DShiftLeft := $C15D +BBMult := $C160 +BMult := $C163 +DMult := $C166 +Ddiv := $C169 +DSdiv := $C16C +Dabs := $C16F +Dnegate := $C172 +Ddec := $C175 +ClearRam := $C178 +FillRam := $C17B +MoveData := $C17E +InitRam := $C181 +PutDecimal := $C184 +GetRandom := $C187 +MouseUp := $C18A +MouseOff := $C18D +DoPreviousMenu := $C190 +ReDoMenu := $C193 +GetSerialNumber := $C196 +Sleep := $C199 +ClearMouseMode := $C19C +i_Rectangle := $C19F +i_FrameRectangle:= $C1A2 +i_RecoverRectangle:= $C1A5 +i_GraphicsString:= $C1A8 +i_BitmapUp := $C1AB +i_PutString := $C1AE +GetRealSize := $C1B1 +i_FillRam := $C1B4 +i_MoveData := $C1B7 +GetString := $C1BA +GotoFirstMenu := $C1BD +InitTextPrompt := $C1C0 +MainLoop := $C1C3 +DrawSprite := $C1C6 +GetCharWidth := $C1C9 +LoadCharSet := $C1CC +PosSprite := $C1CF +EnablSprite := $C1D2 +DisablSprite := $C1D5 +CallRoutine := $C1D8 +CalcBlksFree := $C1DB +ChkDkGEOS := $C1DE +NewDisk := $C1E1 +GetBlock := $C1E4 +PutBlock := $C1E7 +SetGEOSDisk := $C1EA +SaveFile := $C1ED +SetGDirEntry := $C1F0 +BldGDirEntry := $C1F3 +GetFreeDirBlk := $C1F6 +WriteFile := $C1F9 +BlkAlloc := $C1FC +ReadFile := $C1FF +SmallPutChar := $C202 +FollowChain := $C205 +GetFile := $C208 +FindFile := $C20B +CRC := $C20E +LdFile := $C211 +EnterTurbo := $C214 +LdDeskAcc := $C217 +ReadBlock := $C21A +LdApplic := $C21D +WriteBlock := $C220 +VerWriteBlock := $C223 +FreeFile := $C226 +GetFHdrInfo := $C229 +EnterDeskTop := $C22C +StartAppl := $C22F +ExitTurbo := $C232 +PurgeTurbo := $C235 +DeleteFile := $C238 +FindFTypes := $C23B +RstrAppl := $C23E +ToBASIC := $C241 +FastDelFile := $C244 +GetDirHead := $C247 +PutDirHead := $C24A +NxtBlkAlloc := $C24D +ImprintRectangle:= $C250 +i_ImprintRectangle:= $C253 +DoDlgBox := $C256 +RenameFile := $C259 +InitForIO := $C25C +DoneWithIO := $C25F +DShiftRight := $C262 +CopyString := $C265 +CopyFString := $C268 +CmpString := $C26B +CmpFString := $C26E +FirstInit := $C271 +OpenRecordFile := $C274 +CloseRecordFile := $C277 +NextRecord := $C27A +PreviousRecord := $C27D +PointRecord := $C280 +DeleteRecord := $C283 +InsertRecord := $C286 +AppendRecord := $C289 +ReadRecord := $C28C +WriteRecord := $C28F +SetNextFree := $C292 +UpdateRecordFile:= $C295 +GetPtrCurDkNm := $C298 +PromptOn := $C29B +PromptOff := $C29E +OpenDisk := $C2A1 +DoInlineReturn := $C2A4 +GetNextChar := $C2A7 +BitmapClip := $C2AA +FindBAMBit := $C2AD +SetDevice := $C2B0 +IsMseInRegion := $C2B3 +ReadByte := $C2B6 +FreeBlock := $C2B9 +ChangeDiskDevice:= $C2BC +RstrFrmDialogue := $C2BF +Panic := $C2C2 +BitOtherClip := $C2C5 +StashRAM := $C2C8 +FetchRAM := $C2CB +SwapRAM := $C2CE +VerifyRAM := $C2D1 +DoRAMOp := $C2D4 +TempHideMouse := $C2D7 +SetMousePicture := $C2DA +SetNewMode := $C2DD +NormalizeX := $C2E0 +MoveBData := $C2E3 +SwapBData := $C2E6 +VerifyBData := $C2E9 +DoBOp := $C2EC +AccessCache := $C2EF +HideOnlyMouse := $C2F2 +SetColorMode := $C2F5 +ColorCard := $C2F8 +ColorRectangle := $C2FB +vicbase := $D000 +mob0ypos := $D001 +mob1xpos := $D002 +mob1ypos := $D003 +mob2xpos := $D004 +mob2ypos := $D005 +mob3xpos := $D006 +mob3ypos := $D007 +mob4xpos := $D008 +mob4ypos := $D009 +mob5xpos := $D00A +mob5ypos := $D00B +mob6xpos := $D00C +mob6ypos := $D00D +mob7xpos := $D00E +mob7ypos := $D00F +msbxpos := $D010 +grcntrl1 := $D011 +rasreg := $D012 +lpxpos := $D013 +lpypos := $D014 +mobenble := $D015 +grcntrl2 := $D016 +moby2 := $D017 +grmemptr := $D018 +grirq := $D019 +grirqen := $D01A +mobprior := $D01B +mobmcm := $D01C +mobx2 := $D01D +mobmobcol := $D01E +mobbakcol := $D01F +extclr := $D020 +bakclr0 := $D021 +bakclr1 := $D022 +bakclr2 := $D023 +bakclr3 := $D024 +mcmclr0 := $D025 +mcmclr1 := $D026 +mob0clr := $D027 +mob1clr := $D028 +mob2clr := $D029 +mob3clr := $D02A +mob4clr := $D02B +mob5clr := $D02C +mob6clr := $D02D +mob7clr := $D02E +keyreg := $D02F +clkreg := $D030 +sidbase := $D400 +mmu := $D500 +vdcreg := $D600 +vdcdata := $D601 +ctab := $D800 +cia1base := $DC00 +cia2base := $DD00 +RAMC_BASE := $DE00 +EXP_BASE := $DF00 +LF24B := $F24B +LF3B1 := $F3B1 +LF4CA := $F4CA +LF510 := $F510 +LF5E9 := $F5E9 +LF78F := $F78F +LF97E := $F97E +LF98F := $F98F +MOUSE_BASE := $FE80 +config := $FF00 +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +OPEN := $FFC0 +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 +NMI_VECTOR := $FFFA +RESET_VECTOR := $FFFC +IRQ_VECTOR := $FFFE +; ---------------------------------------------------------------------------- + +.segment "record6": absolute + +_InitForIO: + .addr L9479 ; 9000 79 94 y. +_DoneWithIO: + .addr L9504 ; 9002 04 95 .. +_ExitTurbo: + .addr L9749 ; 9004 49 97 I. +_PurgeTurbo: + .addr L9769 ; 9006 69 97 i. +_EnterTurbo: + .addr L9663 ; 9008 63 96 c. +_ChangeDiskDevice: + .addr L97A7 ; 900A A7 97 .. +_NewDisk: + .addr L9778 ; 900C 78 97 x. +_ReadBlock: + .addr L97D5 ; 900E D5 97 .. +_WriteBlock: + .addr L981E ; 9010 1E 98 .. +_VerWriteBlock: + .addr L9847 ; 9012 47 98 G. +_OpenDisk: + .addr L90BA ; 9014 BA 90 .. +_GetBlock: + .addr L905B ; 9016 5B 90 [. +_PutBlock: + .addr L9078 ; 9018 78 90 x. +_GetDirHead: + .addr L904E ; 901A 4E 90 N. +_PutDirHead: + .addr L906B ; 901C 6B 90 k. +_GetFreeDirBlk: + .addr L926F ; 901E 6F 92 o. +_CalcBlksFree: + .addr L93F5 ; 9020 F5 93 .. +_FreeBlock: + .addr L93DD ; 9022 DD 93 .. +_SetNextFree: + .addr L931C ; 9024 1C 93 .. +_FindBAMBit: + .addr L93B6 ; 9026 B6 93 .. +_NxtBlkAlloc: + .addr L911C ; 9028 1C 91 .. +_BlkAlloc: + .addr L9115 ; 902A 15 91 .. +_ChkDkGEOS: + .addr L923F ; 902C 3F 92 ?. +_SetGEOSDisk: + .addr L941E ; 902E 1E 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp L91B6 ; 9030 4C B6 91 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp L91CF ; 9033 4C CF 91 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp L9219 ; 9036 4C 19 92 L.. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp L92D0 ; 9039 4C D0 92 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp L9053 ; 903C 4C 53 90 LS. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp L9070 ; 903F 4C 70 90 Lp. + +; ---------------------------------------------------------------------------- + jmp L9629 ; 9042 4C 29 96 L). + +; ---------------------------------------------------------------------------- + jmp L9889 ; 9045 4C 89 98 L.. + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp L939C ; 9048 4C 9C 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp L97D5 ; 904B 4C D5 97 L.. + +; ---------------------------------------------------------------------------- +L904E: .byte $20 ; 904E 20 +__GetDirHead: + stx $D090 ; 904F 8E 90 D0 ... + php ; 9052 08 . +L9053: lda #$80 ; 9053 A9 80 .. + sta r4H ; 9055 85 0B .. + lda #$00 ; 9057 A9 00 .. + sta r4L ; 9059 85 0A .. +L905B: jsr EnterTurbo ; 905B 20 14 C2 .. + txa ; 905E 8A . + bne L906A ; 905F D0 09 .. + jsr InitForIO ; 9061 20 5C C2 \. + .byte $20 ; 9064 20 + .byte $1A ; 9065 1A . +_ReadBuff: + .byte $C2 ; 9066 C2 . + jsr DoneWithIO ; 9067 20 5F C2 _. +L906A: rts ; 906A 60 ` + +; ---------------------------------------------------------------------------- +L906B: jsr L908E ; 906B 20 8E 90 .. +__GetBlock: + bne L9078 ; 906E D0 08 .. +L9070: lda #$80 ; 9070 A9 80 .. + sta r4H ; 9072 85 0B .. + lda #$00 ; 9074 A9 00 .. + sta r4L ; 9076 85 0A .. +L9078: jsr EnterTurbo ; 9078 20 14 C2 .. +__PutDirHead: + txa ; 907B 8A . + bne L908D ; 907C D0 0F .. + jsr InitForIO ; 907E 20 5C C2 \. + jsr WriteBlock ; 9081 20 20 C2 . + txa ; 9084 8A . + bne L908A ; 9085 D0 03 .. + jsr VerWriteBlock ; 9087 20 23 C2 #. +L908A: jsr DoneWithIO ; 908A 20 5F C2 _. +L908D: rts ; 908D 60 ` + +; ---------------------------------------------------------------------------- +L908E: lda #$12 ; 908E A9 12 .. + sta r1L ; 9090 85 04 .. + lda #$00 ; 9092 A9 00 .. + sta r1H ; 9094 85 05 .. +_WriteBuff: + sta r4L ; 9096 85 0A .. + lda #$82 ; 9098 A9 82 .. + sta r4H ; 909A 85 0B .. + rts ; 909C 60 ` + +; ---------------------------------------------------------------------------- +L909D: .byte $2C ; 909D 2C , +__PutBlock: + dec $88 ; 909E C6 88 .. + bvc L90A7 ; 90A0 50 05 P. + jsr L9C6A ; 90A2 20 6A 9C j. + beq L90B8 ; 90A5 F0 11 .. +L90A7: lda #$00 ; 90A7 A9 00 .. + sta L9D37 ; 90A9 8D 37 9D .7. + ldx #$02 ; 90AC A2 02 .. + lda r1L ; 90AE A5 04 .. + beq L90B8 ; 90B0 F0 06 .. + cmp #$24 ; 90B2 C9 24 .$ + bcs L90B8 ; 90B4 B0 02 .. + sec ; 90B6 38 8 + rts ; 90B7 60 ` + +; ---------------------------------------------------------------------------- +L90B8: clc ; 90B8 18 . + rts ; 90B9 60 ` + +; ---------------------------------------------------------------------------- +L90BA: ldy curDrive ; 90BA AC 89 84 ... + lda $8486,y ; 90BD B9 86 84 ... + sta L9114 ; 90C0 8D 14 91 ... + and #$BF ; 90C3 29 BF ). + sta $8486,y ; 90C5 99 86 84 ... + jsr NewDisk ; 90C8 20 E1 C1 .. + txa ; 90CB 8A . + bne L910A ; 90CC D0 3C .< + jsr GetDirHead ; 90CE 20 47 C2 G. + txa ; 90D1 8A . + bne L910A ; 90D2 D0 36 .6 + bit L9114 ; 90D4 2C 14 91 ,.. + bvc L90E7 ; 90D7 50 0E P. + jsr L9C6A ; 90D9 20 6A 9C j. + beq L90E7 ; 90DC F0 09 .. + jsr L9C18 ; 90DE 20 18 9C .. + jsr L908E ; 90E1 20 8E 90 .. + .byte $20 ; 90E4 20 +__OpenDisk: + sty $9C ; 90E5 84 9C .. +L90E7: lda #$82 ; 90E7 A9 82 .. + sta r5H ; 90E9 85 0D .. + lda #$00 ; 90EB A9 00 .. + sta r5L ; 90ED 85 0C .. + jsr ChkDkGEOS ; 90EF 20 DE C1 .. + lda #$82 ; 90F2 A9 82 .. + sta r4H ; 90F4 85 0B .. + lda #$90 ; 90F6 A9 90 .. + sta r4L ; 90F8 85 0A .. + ldx #$0C ; 90FA A2 0C .. + jsr GetPtrCurDkNm ; 90FC 20 98 C2 .. + ldx #$0A ; 90FF A2 0A .. + ldy #$0C ; 9101 A0 0C .. + lda #$12 ; 9103 A9 12 .. + jsr CopyFString ; 9105 20 68 C2 h. + ldx #$00 ; 9108 A2 00 .. +L910A: lda L9114 ; 910A AD 14 91 ... + ldy curDrive ; 910D AC 89 84 ... +__BlkAlloc: + sta $8486,y ; 9110 99 86 84 ... + rts ; 9113 60 ` + +; ---------------------------------------------------------------------------- +L9114: brk ; 9114 00 . +L9115: ldy #$01 ; 9115 A0 01 .. + sty r3L ; 9117 84 08 .. + dey ; 9119 88 . + sty r3H ; 911A 84 09 .. +L911C: lda r9H ; 911C A5 15 .. + pha ; 911E 48 H + lda r9L ; 911F A5 14 .. + pha ; 9121 48 H + lda r3H ; 9122 A5 09 .. + pha ; 9124 48 H + lda r3L ; 9125 A5 08 .. + pha ; 9127 48 H + lda #$00 ; 9128 A9 00 .. + sta r3H ; 912A 85 09 .. + lda #$FE ; 912C A9 FE .. + sta r3L ; 912E 85 08 .. + ldx #$06 ; 9130 A2 06 .. + ldy #$08 ; 9132 A0 08 .. + jsr Ddiv ; 9134 20 69 C1 i. + lda r8L ; 9137 A5 12 .. + beq L9141 ; 9139 F0 06 .. + inc r2L ; 913B E6 06 .. +__NxtBlkAlloc: + bne L9141 ; 913D D0 02 .. + inc r2H ; 913F E6 07 .. +L9141: lda #$82 ; 9141 A9 82 .. + sta r5H ; 9143 85 0D .. + lda #$00 ; 9145 A9 00 .. + sta r5L ; 9147 85 0C .. + jsr CalcBlksFree ; 9149 20 DB C1 .. + pla ; 914C 68 h + sta r3L ; 914D 85 08 .. + pla ; 914F 68 h + sta r3H ; 9150 85 09 .. + ldx #$03 ; 9152 A2 03 .. + lda r2H ; 9154 A5 07 .. + cmp r4H ; 9156 C5 0B .. + bne L915E ; 9158 D0 04 .. + lda r2L ; 915A A5 06 .. + cmp r4L ; 915C C5 0A .. +L915E: beq L9162 ; 915E F0 02 .. + bcs L91AF ; 9160 B0 4D .M +L9162: lda r6H ; 9162 A5 0F .. + sta r4H ; 9164 85 0B .. + lda r6L ; 9166 A5 0E .. + sta r4L ; 9168 85 0A .. + lda r2H ; 916A A5 07 .. + sta r5H ; 916C 85 0D .. + lda r2L ; 916E A5 06 .. + sta r5L ; 9170 85 0C .. +L9172: jsr SetNextFree ; 9172 20 92 C2 .. + txa ; 9175 8A . + bne L91AF ; 9176 D0 37 .7 + ldy #$00 ; 9178 A0 00 .. + lda r3L ; 917A A5 08 .. + sta (r4L),y ; 917C 91 0A .. + iny ; 917E C8 . + lda r3H ; 917F A5 09 .. + sta (r4L),y ; 9181 91 0A .. + clc ; 9183 18 . + lda #$02 ; 9184 A9 02 .. + adc r4L ; 9186 65 0A e. + sta r4L ; 9188 85 0A .. + bcc L918E ; 918A 90 02 .. + inc r4H ; 918C E6 0B .. +L918E: lda r5L ; 918E A5 0C .. + bne L9194 ; 9190 D0 02 .. + dec r5H ; 9192 C6 0D .. +L9194: dec r5L ; 9194 C6 0C .. + lda r5L ; 9196 A5 0C .. + ora r5H ; 9198 05 0D .. + bne L9172 ; 919A D0 D6 .. + ldy #$00 ; 919C A0 00 .. + tya ; 919E 98 . + sta (r4L),y ; 919F 91 0A .. + iny ; 91A1 C8 . + lda r8L ; 91A2 A5 12 .. + bne L91A8 ; 91A4 D0 02 .. + lda #$FE ; 91A6 A9 FE .. +L91A8: clc ; 91A8 18 . + adc #$01 ; 91A9 69 01 i. + sta (r4L),y ; 91AB 91 0A .. + ldx #$00 ; 91AD A2 00 .. +L91AF: pla ; 91AF 68 h + sta r9L ; 91B0 85 14 .. + pla ; 91B2 68 h + sta r9H ; 91B3 85 15 .. + rts ; 91B5 60 ` + +; ---------------------------------------------------------------------------- +L91B6: lda #$12 ; 91B6 A9 12 .. + sta r1L ; 91B8 85 04 .. + lda #$01 ; 91BA A9 01 .. + sta r1H ; 91BC 85 05 .. + jsr ReadBuff ; 91BE 20 3C 90 <. + lda #$80 ; 91C1 A9 80 .. + sta r5H ; 91C3 85 0D .. + lda #$02 ; 91C5 A9 02 .. + sta r5L ; 91C7 85 0C .. + lda #$00 ; 91C9 A9 00 .. + sta L9D3A ; 91CB 8D 3A 9D .:. + rts ; 91CE 60 ` + +; ---------------------------------------------------------------------------- +L91CF: ldx #$00 ; 91CF A2 00 .. + ldy #$00 ; 91D1 A0 00 .. + clc ; 91D3 18 . + lda #$20 ; 91D4 A9 20 . + adc r5L ; 91D6 65 0C e. + sta r5L ; 91D8 85 0C .. + bcc L91DE ; 91DA 90 02 .. + inc r5H ; 91DC E6 0D .. +L91DE: lda r5H ; 91DE A5 0D .. + cmp #$80 ; 91E0 C9 80 .. + bne L91E8 ; 91E2 D0 04 .. + lda r5L ; 91E4 A5 0C .. + cmp #$FF ; 91E6 C9 FF .. +L91E8: bcc L9218 ; 91E8 90 2E .. + ldy #$FF ; 91EA A0 FF .. + .byte $AD ; 91EC AD . + .byte $01 ; 91ED 01 . +_Get1stDirEntry: + .byte $80 ; 91EE 80 . + sta r1H ; 91EF 85 05 .. + lda diskBlkBuf ; 91F1 AD 00 80 ... + sta r1L ; 91F4 85 04 .. + bne L920B ; 91F6 D0 13 .. + .byte $AD ; 91F8 AD . + .byte $3A ; 91F9 3A : +_GetNxtDirEntry: + sta $1BD0,x ; 91FA 9D D0 1B ... + lda #$FF ; 91FD A9 FF .. + sta L9D3A ; 91FF 8D 3A 9D .:. + jsr GetBorder ; 9202 20 36 90 6. + txa ; 9205 8A . + bne L9218 ; 9206 D0 10 .. + tya ; 9208 98 . + bne L9218 ; 9209 D0 0D .. +L920B: jsr ReadBuff ; 920B 20 3C 90 <. + ldy #$00 ; 920E A0 00 .. + lda #$80 ; 9210 A9 80 .. + sta r5H ; 9212 85 0D .. + lda #$02 ; 9214 A9 02 .. + sta r5L ; 9216 85 0C .. +L9218: rts ; 9218 60 ` + +; ---------------------------------------------------------------------------- +L9219: jsr GetDirHead ; 9219 20 47 C2 G. + txa ; 921C 8A . + bne L923E ; 921D D0 1F .. + lda #$82 ; 921F A9 82 .. + sta r5H ; 9221 85 0D .. + lda #$00 ; 9223 A9 00 .. + sta r5L ; 9225 85 0C .. + jsr ChkDkGEOS ; 9227 20 DE C1 .. + bne L9230 ; 922A D0 04 .. + ldy #$FF ; 922C A0 FF .. + bne L923C ; 922E D0 0C .. +L9230: lda $82AC ; 9230 AD AC 82 ... + sta r1H ; 9233 85 05 .. + lda $82AB ; 9235 AD AB 82 ... + sta r1L ; 9238 85 04 .. + ldy #$00 ; 923A A0 00 .. +L923C: ldx #$00 ; 923C A2 00 .. +L923E: rts ; 923E 60 ` + +; ---------------------------------------------------------------------------- +L923F: ldy #$AD ; 923F A0 AD .. + ldx #$00 ; 9241 A2 00 .. + .byte $A9 ; 9243 A9 . +_GetBorder: + brk ; 9244 00 . + sta isGEOS ; 9245 8D 8B 84 ... +L9248: lda (r5L),y ; 9248 B1 0C .. + cmp L925E,x ; 924A DD 5E 92 .^. + bne L925A ; 924D D0 0B .. + iny ; 924F C8 . + inx ; 9250 E8 . + cpx #$0B ; 9251 E0 0B .. + bne L9248 ; 9253 D0 F3 .. + lda #$FF ; 9255 A9 FF .. + sta isGEOS ; 9257 8D 8B 84 ... +L925A: lda isGEOS ; 925A AD 8B 84 ... + rts ; 925D 60 ` + +; ---------------------------------------------------------------------------- +L925E: .byte $47 ; 925E 47 G + eor $4F ; 925F 45 4F EO + .byte $53 ; 9261 53 S + jsr L6F66 ; 9262 20 66 6F fo +__ChkDkGEOS: + .byte $72 ; 9265 72 r + adc $7461 ; 9266 6D 61 74 mat + jsr L3156 ; 9269 20 56 31 V1 + rol a:mouseOn ; 926C 2E 30 00 .0. +L926F: php ; 926F 08 . + sei ; 9270 78 x + lda r6L ; 9271 A5 0E .. + pha ; 9273 48 H + lda r2H ; 9274 A5 07 .. + pha ; 9276 48 H + lda r2L ; 9277 A5 06 .. + pha ; 9279 48 H + ldx r10L ; 927A A6 16 .. + inx ; 927C E8 . + stx r6L ; 927D 86 0E .. + lda #$12 ; 927F A9 12 .. + sta r1L ; 9281 85 04 .. + .byte $A9,$01,$85,$05 ; 9283 A9 01 85 05 .... +L9287: .byte " <" ; 9287 20 3C < + .byte $90 ; 9289 90 . +L928A: .byte $8A,$D0 ; 928A 8A D0 .. + .byte "8" ; 928C 38 8 + .byte $C6,$0E,$F0,$15 ; 928D C6 0E F0 15 .... +L9291: .byte $AD,$00 ; 9291 AD 00 .. +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + .byte $80 ; 9293 80 . + bne L929C ; 9294 D0 06 .. + jsr AddDirBlock ; 9296 20 39 90 9. + clv ; 9299 B8 . + bvc L928A ; 929A 50 EE P. +L929C: sta r1L ; 929C 85 04 .. + lda $8001 ; 929E AD 01 80 ... + sta r1H ; 92A1 85 05 .. + clv ; 92A3 B8 . + bvc L9287 ; 92A4 50 E1 P. + ldy #$02 ; 92A6 A0 02 .. + ldx #$00 ; 92A8 A2 00 .. +L92AA: lda diskBlkBuf,y ; 92AA B9 00 80 ... + beq L92C5 ; 92AD F0 16 .. + tya ; 92AF 98 . + clc ; 92B0 18 . + adc #$20 ; 92B1 69 20 i + tay ; 92B3 A8 . + bcc L92AA ; 92B4 90 F4 .. + lda #$01 ; 92B6 A9 01 .. + sta r6L ; 92B8 85 0E .. + ldx #$04 ; 92BA A2 04 .. + ldy r10L ; 92BC A4 16 .. + iny ; 92BE C8 . + sty r10L ; 92BF 84 16 .. + cpy #$12 ; 92C1 C0 12 .. + bcc L9291 ; 92C3 90 CC .. +L92C5: pla ; 92C5 68 h + sta r2L ; 92C6 85 06 .. + pla ; 92C8 68 h + sta r2H ; 92C9 85 07 .. + pla ; 92CB 68 h + sta r6L ; 92CC 85 0E .. + plp ; 92CE 28 ( + rts ; 92CF 60 ` + +; ---------------------------------------------------------------------------- +L92D0: lda r6H ; 92D0 A5 0F .. + pha ; 92D2 48 H + lda r6L ; 92D3 A5 0E .. + pha ; 92D5 48 H + ldy #$48 ; 92D6 A0 48 .H + ldx #$04 ; 92D8 A2 04 .. + lda curDirHead,y ; 92DA B9 00 82 ... + beq L9305 ; 92DD F0 26 .& + lda r1H ; 92DF A5 05 .. + sta r3H ; 92E1 85 09 .. + lda r1L ; 92E3 A5 04 .. + sta r3L ; 92E5 85 08 .. + jsr SetNextFree ; 92E7 20 92 C2 .. + lda r3H ; 92EA A5 09 .. + sta $8001 ; 92EC 8D 01 80 ... + lda r3L ; 92EF A5 08 .. + sta diskBlkBuf ; 92F1 8D 00 80 ... +_AddDirBlock: + jsr WriteBuff ; 92F4 20 3F 90 ?. + txa ; 92F7 8A . + bne L9305 ; 92F8 D0 0B .. + lda r3H ; 92FA A5 09 .. + sta r1H ; 92FC 85 05 .. + lda r3L ; 92FE A5 08 .. + sta r1L ; 9300 85 04 .. + jsr L930C ; 9302 20 0C 93 .. +L9305: pla ; 9305 68 h + sta r6L ; 9306 85 0E .. + pla ; 9308 68 h + sta r6H ; 9309 85 0F .. + rts ; 930B 60 ` + +; ---------------------------------------------------------------------------- +L930C: lda #$00 ; 930C A9 00 .. + tay ; 930E A8 . +L930F: sta diskBlkBuf,y ; 930F 99 00 80 ... + iny ; 9312 C8 . + bne L930F ; 9313 D0 FA .. + dey ; 9315 88 . + sty $8001 ; 9316 8C 01 80 ... + jmp WriteBuff ; 9319 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +L931C: lda r3H ; 931C A5 09 .. + clc ; 931E 18 . + adc interleave ; 931F 6D 8C 84 m.. + sta r6H ; 9322 85 0F .. + lda r3L ; 9324 A5 08 .. + sta r6L ; 9326 85 0E .. + cmp #$19 ; 9328 C9 19 .. + bcc L932E ; 932A 90 02 .. + dec r6H ; 932C C6 0F .. +L932E: cmp #$12 ; 932E C9 12 .. + beq L9338 ; 9330 F0 06 .. +L9332: lda r6L ; 9332 A5 0E .. + cmp #$12 ; 9334 C9 12 .. + beq L9355 ; 9336 F0 1D .. +L9338: asl a ; 9338 0A . + asl a ; 9339 0A . + tax ; 933A AA . + lda curDirHead,x ; 933B BD 00 82 ... +__SetNextFree: + beq L9355 ; 933E F0 15 .. + lda r6L ; 9340 A5 0E .. + jsr L937B ; 9342 20 7B 93 {. + lda L938A,x ; 9345 BD 8A 93 ... + sta r7L ; 9348 85 10 .. + tay ; 934A A8 . +L934B: jsr L938E ; 934B 20 8E 93 .. + beq L936D ; 934E F0 1D .. + inc r6H ; 9350 E6 0F .. + dey ; 9352 88 . + bne L934B ; 9353 D0 F6 .. +L9355: inc r6L ; 9355 E6 0E .. + lda r6L ; 9357 A5 0E .. + cmp #$24 ; 9359 C9 24 .$ + bcs L9378 ; 935B B0 1B .. + sec ; 935D 38 8 + sbc r3L ; 935E E5 08 .. + sta r6H ; 9360 85 0F .. + asl a ; 9362 0A . + adc #$04 ; 9363 69 04 i. + adc interleave ; 9365 6D 8C 84 m.. + sta r6H ; 9368 85 0F .. + clv ; 936A B8 . + bvc L9332 ; 936B 50 C5 P. +L936D: lda r6L ; 936D A5 0E .. + sta r3L ; 936F 85 08 .. + lda r6H ; 9371 A5 0F .. + sta r3H ; 9373 85 09 .. + ldx #$00 ; 9375 A2 00 .. + rts ; 9377 60 ` + +; ---------------------------------------------------------------------------- +L9378: ldx #$03 ; 9378 A2 03 .. + rts ; 937A 60 ` + +; ---------------------------------------------------------------------------- +L937B: ldx #$00 ; 937B A2 00 .. +L937D: cmp L9386,x ; 937D DD 86 93 ... + bcc L9385 ; 9380 90 03 .. + inx ; 9382 E8 . + bne L937D ; 9383 D0 F8 .. +L9385: rts ; 9385 60 ` + +; ---------------------------------------------------------------------------- +L9386: .byte $12 ; 9386 12 . + ora $241F,y ; 9387 19 1F 24 ..$ +L938A: ora r8H,x ; 938A 15 13 .. + .byte $12 ; 938C 12 . + .byte $11 ; 938D 11 . +L938E: lda r6H ; 938E A5 0F .. +L9390: cmp r7L ; 9390 C5 10 .. + bcc L939A ; 9392 90 06 .. + sec ; 9394 38 8 + sbc r7L ; 9395 E5 10 .. + clv ; 9397 B8 . + bvc L9390 ; 9398 50 F6 P. +L939A: sta r6H ; 939A 85 0F .. +L939C: jsr FindBAMBit ; 939C 20 AD C2 .. + beq L93B3 ; 939F F0 12 .. + lda r8H ; 93A1 A5 13 .. + eor #$FF ; 93A3 49 FF I. + and curDirHead,x ; 93A5 3D 00 82 =.. + sta curDirHead,x ; 93A8 9D 00 82 ... + ldx r7H ; 93AB A6 11 .. + dec curDirHead,x ; 93AD DE 00 82 ... + ldx #$00 ; 93B0 A2 00 .. + rts ; 93B2 60 ` + +; ---------------------------------------------------------------------------- +L93B3: ldx #$06 ; 93B3 A2 06 .. + rts ; 93B5 60 ` + +; ---------------------------------------------------------------------------- +L93B6: lda r6L ; 93B6 A5 0E .. + asl a ; 93B8 0A . + asl a ; 93B9 0A . + sta r7H ; 93BA 85 11 .. + lda r6H ; 93BC A5 0F .. + and #$07 ; 93BE 29 07 ). + tax ; 93C0 AA . + lda L93D5,x ; 93C1 BD D5 93 ... + sta r8H ; 93C4 85 13 .. + lda r6H ; 93C6 A5 0F .. + lsr a ; 93C8 4A J +_AllocateBlock: + lsr a ; 93C9 4A J + lsr a ; 93CA 4A J + sec ; 93CB 38 8 + adc r7H ; 93CC 65 11 e. + tax ; 93CE AA . + lda curDirHead,x ; 93CF BD 00 82 ... + and r8H ; 93D2 25 13 %. + rts ; 93D4 60 ` + +; ---------------------------------------------------------------------------- +L93D5: ora (r0L,x) ; 93D5 01 02 .. + .byte $04 ; 93D7 04 . + php ; 93D8 08 . + bpl L93FB ; 93D9 10 20 . + rti ; 93DB 40 @ + +; ---------------------------------------------------------------------------- + .byte $80 ; 93DC 80 . +L93DD: jsr FindBAMBit ; 93DD 20 AD C2 .. + bne L93F2 ; 93E0 D0 10 .. + lda r8H ; 93E2 A5 13 .. +L93E4: eor curDirHead,x ; 93E4 5D 00 82 ].. + sta curDirHead,x ; 93E7 9D 00 82 ... + ldx r7H ; 93EA A6 11 .. + inc curDirHead,x ; 93EC FE 00 82 ... + ldx #$00 ; 93EF A2 00 .. + rts ; 93F1 60 ` + +; ---------------------------------------------------------------------------- +L93F2: ldx #$06 ; 93F2 A2 06 .. + rts ; 93F4 60 ` + +; ---------------------------------------------------------------------------- +L93F5: lda #$00 ; 93F5 A9 00 .. + sta r4L ; 93F7 85 0A .. + sta r4H ; 93F9 85 0B .. +L93FB: ldy #$04 ; 93FB A0 04 .. + lda (r5L),y ; 93FD B1 0C .. + clc ; 93FF 18 . + adc r4L ; 9400 65 0A e. + sta r4L ; 9402 85 0A .. + bcc L9408 ; 9404 90 02 .. + inc r4H ; 9406 E6 0B .. +L9408: tya ; 9408 98 . + clc ; 9409 18 . +__FreeBlock: + adc #$04 ; 940A 69 04 i. + tay ; 940C A8 . + cpy #$48 ; 940D C0 48 .H + beq L9408 ; 940F F0 F7 .. + .byte $C0 ; 9411 C0 . +__FindBAMBit: + bcc L93E4 ; 9412 90 D0 .. + inx ; 9414 E8 . + lda #$02 ; 9415 A9 02 .. + sta r3H ; 9417 85 09 .. + lda #$98 ; 9419 A9 98 .. + sta r3L ; 941B 85 08 .. + rts ; 941D 60 ` + +; ---------------------------------------------------------------------------- +L941E: jsr GetDirHead ; 941E 20 47 C2 G. + txa ; 9421 8A . + bne L9478 ; 9422 D0 54 .T + lda #$82 ; 9424 A9 82 .. + sta r5H ; 9426 85 0D .. + lda #$00 ; 9428 A9 00 .. + sta r5L ; 942A 85 0C .. + jsr CalcBlksFree ; 942C 20 DB C1 .. + ldx #$03 ; 942F A2 03 .. + lda r4L ; 9431 A5 0A .. + ora r4H ; 9433 05 0B .. + beq L9478 ; 9435 F0 41 .A + lda #$13 ; 9437 A9 13 .. + sta r3L ; 9439 85 08 .. + lda #$00 ; 943B A9 00 .. + sta r3H ; 943D 85 09 .. + jsr SetNextFree ; 943F 20 92 C2 .. + txa ; 9442 8A . + beq L944F ; 9443 F0 0A .. + lda #$01 ; 9445 A9 01 .. + sta r3L ; 9447 85 08 .. + jsr SetNextFree ; 9449 20 92 C2 .. +FBBBitTab: + .byte $8A,$D0,$29 ; 944C 8A D0 29 ..) +L944F: .byte $A5,$09,$85,$05,$A5 ; 944F A5 09 85 05 A5 ..... +; ---------------------------------------------------------------------------- +__CalcBlksFree: + php ; 9454 08 . + sta r1L ; 9455 85 04 .. + jsr L930C ; 9457 20 0C 93 .. + txa ; 945A 8A . + bne L9478 ; 945B D0 1B .. + lda r1H ; 945D A5 05 .. + sta $82AC ; 945F 8D AC 82 ... + lda r1L ; 9462 A5 04 .. + .byte $8D ; 9464 8D . +L9465: .byte $AB ; 9465 AB . + .byte $82 ; 9466 82 . + ldy #$BC ; 9467 A0 BC .. + ldx #$0F ; 9469 A2 0F .. +L946B: lda L925E,x ; 946B BD 5E 92 .^. + sta curDirHead,y ; 946E 99 00 82 ... + dey ; 9471 88 . + dex ; 9472 CA . + bpl L946B ; 9473 10 F6 .. + jsr PutDirHead ; 9475 20 4A C2 J. +L9478: rts ; 9478 60 ` + +; ---------------------------------------------------------------------------- +L9479: php ; 9479 08 . + pla ; 947A 68 h + sta L9D2C ; 947B 8D 2C 9D .,. + sei ; 947E 78 x + lda CPU_DATA ; 947F A5 01 .. + sta L9D2E ; 9481 8D 2E 9D ... + lda grirqen ; 9484 AD 1A D0 ... + sta L9D2D ; 9487 8D 2D 9D .-. + lda clkreg ; 948A AD 30 D0 .0. + sta L9D2B ; 948D 8D 2B 9D .+. + ldy #$00 ; 9490 A0 00 .. + .byte $8C ; 9492 8C . +__SetGEOSDisk: + bmi L9465 ; 9493 30 D0 0. + sty grirqen ; 9495 8C 1A D0 ... + lda #$7F ; 9498 A9 7F .. + sta grirq ; 949A 8D 19 D0 ... + sta $DC0D ; 949D 8D 0D DC ... + sta $DD0D ; 94A0 8D 0D DD ... + lda #$94 ; 94A3 A9 94 .. + sta $0315 ; 94A5 8D 15 03 ... + lda #$FA ; 94A8 A9 FA .. + sta irqvec ; 94AA 8D 14 03 ... + lda #$94 ; 94AD A9 94 .. + sta $0319 ; 94AF 8D 19 03 ... + lda #$FA ; 94B2 A9 FA .. + sta nmivec ; 94B4 8D 18 03 ... + lda #$3F ; 94B7 A9 3F .? + sta $DD02 ; 94B9 8D 02 DD ... + lda mobenble ; 94BC AD 15 D0 ... + sta L9D2F ; 94BF 8D 2F 9D ./. + sty mobenble ; 94C2 8C 15 D0 ... + sty $DD05 ; 94C5 8C 05 DD ... + iny ; 94C8 C8 . + sty $DD04 ; 94C9 8C 04 DD ... + lda #$81 ; 94CC A9 81 .. + sta $DD0D ; 94CE 8D 0D DD ... + lda #$09 ; 94D1 A9 09 .. + sta $DD0E ; 94D3 8D 0E DD ... + ldy #$2C ; 94D6 A0 2C ., +L94D8: lda rasreg ; 94D8 AD 12 D0 ... + cmp TURBO_DD00_CPY ; 94DB C5 8F .. + beq L94D8 ; 94DD F0 F9 .. +__InitForIO: + sta TURBO_DD00_CPY ; 94DF 85 8F .. + dey ; 94E1 88 . + bne L94D8 ; 94E2 D0 F4 .. + lda cia2base ; 94E4 AD 00 DD ... + and #$07 ; 94E7 29 07 ). + sta TURBO_DD00 ; 94E9 85 8E .. + sta L9D35 ; 94EB 8D 35 9D .5. + ora #$30 ; 94EE 09 30 .0 + sta TURBO_DD00_CPY ; 94F0 85 8F .. + lda TURBO_DD00 ; 94F2 A5 8E .. + ora #$10 ; 94F4 09 10 .. + sta L9D36 ; 94F6 8D 36 9D .6. + rts ; 94F9 60 ` + +; ---------------------------------------------------------------------------- + pla ; 94FA 68 h + sta config ; 94FB 8D 00 FF ... + pla ; 94FE 68 h + tay ; 94FF A8 . + pla ; 9500 68 h + tax ; 9501 AA . + pla ; 9502 68 h + rti ; 9503 40 @ + +; ---------------------------------------------------------------------------- +L9504: sei ; 9504 78 x + lda L9D2B ; 9505 AD 2B 9D .+. + sta clkreg ; 9508 8D 30 D0 .0. + lda L9D2F ; 950B AD 2F 9D ./. + sta mobenble ; 950E 8D 15 D0 ... + lda #$7F ; 9511 A9 7F .. + sta $DD0D ; 9513 8D 0D DD ... + lda $DD0D ; 9516 AD 0D DD ... + lda L9D2D ; 9519 AD 2D 9D .-. + sta grirqen ; 951C 8D 1A D0 ... + lda L9D2C ; 951F AD 2C 9D .,. + pha ; 9522 48 H + plp ; 9523 28 ( + rts ; 9524 60 ` + +; ---------------------------------------------------------------------------- + .byte $0F ; 9525 0F . + .byte $07 ; 9526 07 . + ora $0B05 ; 9527 0D 05 0B ... + .byte $03 ; 952A 03 . + ora #$01 ; 952B 09 01 .. + asl $0C06 ; 952D 0E 06 0C ... + .byte $04 ; 9530 04 . + asl a ; 9531 0A . + .byte $02 ; 9532 02 . + php ; 9533 08 . +L9534: brk ; 9534 00 . + .byte $80 ; 9535 80 . + jsr L40A0 ; 9536 20 A0 40 .@ + cpy #$60 ; 9539 C0 60 .` + cpx #$10 ; 953B E0 10 .. + bcc L956F ; 953D 90 30 .0 + bcs L9591 ; 953F B0 50 .P + bne L95B3 ; 9541 D0 70 .p + .byte $F0 ; 9543 F0 . +L9544: jsr L9657 ; 9544 20 57 96 W. + pha ; 9547 48 H + pla ; 9548 68 h + pha ; 9549 48 H + pla ; 954A 68 h + sty $8D ; 954B 84 8D .. +L954D: sec ; 954D 38 8 +L954E: lda rasreg ; 954E AD 12 D0 ... + sbc #$31 ; 9551 E9 31 .1 + bcc L9559 ; 9553 90 04 .. +__DoneWithIO: + and #$06 ; 9555 29 06 ). + beq L954E ; 9557 F0 F5 .. +L9559: lda TURBO_DD00_CPY ; 9559 A5 8F .. + sta cia2base ; 955B 8D 00 DD ... + lda $8B ; 955E A5 8B .. + lda TURBO_DD00 ; 9560 A5 8E .. + sta cia2base ; 9562 8D 00 DD ... +L9565: dec $8D ; 9565 C6 8D .. + nop ; 9567 EA . + nop ; 9568 EA . + nop ; 9569 EA . + lda cia2base ; 956A AD 00 DD ... + lsr a ; 956D 4A J + lsr a ; 956E 4A J +L956F: nop ; 956F EA . + ora cia2base ; 9570 0D 00 DD ... + lsr a ; 9573 4A J + lsr a ; 9574 4A J + lsr a ; 9575 4A J + lsr a ; 9576 4A J + ldy cia2base ; 9577 AC 00 DD ... + tax ; 957A AA . +__EnterTurbo: + tya ; 957B 98 . + lsr a ; 957C 4A J + lsr a ; 957D 4A J + ora cia2base ; 957E 0D 00 DD ... + and #$F0 ; 9581 29 F0 ). + .byte $1D ; 9583 1D . +__ExitTurbo: + and $95 ; 9584 25 95 %. + ldy $8D ; 9586 A4 8D .. + sta ($8B),y ; 9588 91 8B .. +__ChangeDiskDevice: + bne L954D ; 958A D0 C1 .. +L958C: ldx L9D36 ; 958C AE 36 9D .6. + .byte $8E ; 958F 8E . + brk ; 9590 00 . +L9591: .byte $DD ; 9591 DD . +__NewDisk: + rts ; 9592 60 ` + +; ---------------------------------------------------------------------------- +L9593: jsr L9657 ; 9593 20 57 96 W. +__ReadBlock: + tya ; 9596 98 . + pha ; 9597 48 H + ldy #$00 ; 9598 A0 00 .. + jsr L95AA ; 959A 20 AA 95 .. + pla ; 959D 68 h + tay ; 959E A8 . + .byte $20 ; 959F 20 + .byte $57 ; 95A0 57 W +_ReadLink: + .byte $96 ; 95A1 96 . +L95A2: dey ; 95A2 88 . + lda ($8B),y ; 95A3 B1 8B .. + ldx TURBO_DD00 ; 95A5 A6 8E .. + stx cia2base ; 95A7 8E 00 DD ... +L95AA: tax ; 95AA AA . + .byte $29 ; 95AB 29 ) +__WriteBlock: + .byte $0F ; 95AC 0F . + sta $8D ; 95AD 85 8D .. + sec ; 95AF 38 8 +L95B0: lda rasreg ; 95B0 AD 12 D0 ... +L95B3: sbc #$31 ; 95B3 E9 31 .1 +__VerWriteBlock: + bcc L95BB ; 95B5 90 04 .. + and #$06 ; 95B7 29 06 ). + beq L95B0 ; 95B9 F0 F5 .. +L95BB: txa ; 95BB 8A . + ldx TURBO_DD00_CPY ; 95BC A6 8F .. + stx cia2base ; 95BE 8E 00 DD ... + and #$F0 ; 95C1 29 F0 ). + ora TURBO_DD00 ; 95C3 05 8E .. + sta cia2base ; 95C5 8D 00 DD ... + ror a ; 95C8 6A j + ror a ; 95C9 6A j + and #$F0 ; 95CA 29 F0 ). + ora L9D35 ; 95CC 0D 35 9D .5. + sta cia2base ; 95CF 8D 00 DD ... + ldx $8D ; 95D2 A6 8D .. + lda L9534,x ; 95D4 BD 34 95 .4. + ora TURBO_DD00 ; 95D7 05 8E .. + sta cia2base ; 95D9 8D 00 DD ... + ror a ; 95DC 6A j + ror a ; 95DD 6A j + and #$F0 ; 95DE 29 F0 ). + ora TURBO_DD00 ; 95E0 05 8E .. + cpy #$00 ; 95E2 C0 00 .. + sta cia2base ; 95E4 8D 00 DD ... + bne L95A2 ; 95E7 D0 B9 .. + nop ; 95E9 EA . + nop ; 95EA EA . + beq L958C ; 95EB F0 9F .. + stx $8C ; 95ED 86 8C .. + sta $8B ; 95EF 85 8B .. + lda #$00 ; 95F1 A9 00 .. + sta STATUS ; 95F3 85 90 .. + lda curDrive ; 95F5 AD 89 84 ... + jsr LISTEN ; 95F8 20 B1 FF .. + bit STATUS ; 95FB 24 90 $. + bmi L9617 ; 95FD 30 18 0. + lda #$FF ; 95FF A9 FF .. + jsr SECOND ; 9601 20 93 FF .. + bit STATUS ; 9604 24 90 $. + bmi L9617 ; 9606 30 0F 0. + ldy #$00 ; 9608 A0 00 .. +L960A: lda ($8B),y ; 960A B1 8B .. + jsr CIOUT ; 960C 20 A8 FF .. + iny ; 960F C8 . + cpy #$05 ; 9610 C0 05 .. + bcc L960A ; 9612 90 F6 .. + ldx #$00 ; 9614 A2 00 .. + rts ; 9616 60 ` + +; ---------------------------------------------------------------------------- +L9617: jsr UNLSN ; 9617 20 AE FF .. + ldx #$0D ; 961A A2 0D .. + rts ; 961C 60 ` + +; ---------------------------------------------------------------------------- +L961D: stx $8C ; 961D 86 8C .. + sta $8B ; 961F 85 8B .. + ldy #$02 ; 9621 A0 02 .. + bne L9635 ; 9623 D0 10 .. +L9625: stx $8C ; 9625 86 8C .. + sta $8B ; 9627 85 8B .. +L9629: ldy #$04 ; 9629 A0 04 .. + lda r1H ; 962B A5 05 .. + sta L9D34 ; 962D 8D 34 9D .4. + lda r1L ; 9630 A5 04 .. + sta L9D33 ; 9632 8D 33 9D .3. +L9635: lda $8C ; 9635 A5 8C .. + sta L9D32 ; 9637 8D 32 9D .2. + lda $8B ; 963A A5 8B .. + sta L9D31 ; 963C 8D 31 9D .1. + lda #$9D ; 963F A9 9D .. + sta $8C ; 9641 85 8C .. + lda #$31 ; 9643 A9 31 .1 + sta $8B ; 9645 85 8B .. + jmp L9593 ; 9647 4C 93 95 L.. + +; ---------------------------------------------------------------------------- +L964A: ldy #$01 ; 964A A0 01 .. + jsr L9544 ; 964C 20 44 95 D. + pha ; 964F 48 H + tay ; 9650 A8 . + jsr L9544 ; 9651 20 44 95 D. + pla ; 9654 68 h + tay ; 9655 A8 . + rts ; 9656 60 ` + +; ---------------------------------------------------------------------------- +L9657: sei ; 9657 78 x + lda TURBO_DD00 ; 9658 A5 8E .. + sta cia2base ; 965A 8D 00 DD ... +L965D: bit cia2base ; 965D 2C 00 DD ,.. + bpl L965D ; 9660 10 FB .. + rts ; 9662 60 ` + +; ---------------------------------------------------------------------------- +L9663: lda curDrive ; 9663 AD 89 84 ... + jsr SetDevice ; 9666 20 B0 C2 .. + ldx curDrive ; 9669 AE 89 84 ... + lda diskOpenFlg,x ; 966C BD 8A 84 ... + bmi L967F ; 966F 30 0E 0. + jsr L96DD ; 9671 20 DD 96 .. + txa ; 9674 8A . + bne L96B9 ; 9675 D0 42 .B + ldx curDrive ; 9677 AE 89 84 ... + lda #$80 ; 967A A9 80 .. + sta diskOpenFlg,x ; 967C 9D 8A 84 ... +L967F: .byte ")@" ; 967F 29 40 )@ + .byte $D0 ; 9681 D0 . + .byte "/ " ; 9682 2F 20 / + .byte $13,$9C ; 9684 13 9C .. + .byte " \" ; 9686 20 5C \ + .byte $C2,$A2,$96,$A9,$BA ; 9688 C2 A2 96 A9 BA ..... + .byte " " ; 968D 20 + .byte $ED,$95,$8A,$D0 ; 968E ED 95 8A D0 .... + .byte "# " ; 9692 23 20 # + .byte $AE,$FF ; 9694 AE FF .. + .byte "x" ; 9696 78 x + .byte $A0 ; 9697 A0 . + .byte "!" ; 9698 21 ! + .byte $88,$D0,$FD ; 9699 88 D0 FD ... + .byte " " ; 969C 20 + .byte $8C,$95 ; 969D 8C 95 .. + .byte "," ; 969F 2C , + .byte $00,$DD ; 96A0 00 DD .. + .byte "0" ; 96A2 30 0 + .byte $FB ; 96A3 FB . + .byte " _" ; 96A4 20 5F _ + .byte $C2,$AE,$89,$84,$BD,$8A,$84,$09 ; 96A6 C2 AE 89 84 BD 8A 84 09 ........ + .byte "@" ; 96AE 40 @ + .byte $9D,$8A,$84,$A2,$00,$F0,$03 ; 96AF 9D 8A 84 A2 00 F0 03 ....... + .byte " _" ; 96B6 20 5F _ + .byte $C2 ; 96B8 C2 . +L96B9: .byte "`M-E" ; 96B9 60 4D 2D 45 `M-E + .byte $E2,$03 ; 96BD E2 03 .. +L96BF: .byte " \" ; 96BF 20 5C \ + .byte $C2,$A2,$04,$A9 ; 96C1 C2 A2 04 A9 .... + .byte " " ; 96C5 20 20 + .byte $1D,$96 ; 96C7 1D 96 .. + .byte " W" ; 96C9 20 57 W + .byte $96,$AD,$89,$84 ; 96CB 96 AD 89 84 .... + .byte " " ; 96CF 20 + .byte $B1,$FF,$A9,$EF ; 96D0 B1 FF A9 EF .... + .byte " " ; 96D4 20 + .byte $93,$FF ; 96D5 93 FF .. + .byte " " ; 96D7 20 + .byte $AE,$FF ; 96D8 AE FF .. + .byte "L_" ; 96DA 4C 5F L_ + .byte $C2 ; 96DC C2 . +L96DD: .byte " \" ; 96DD 20 5C \ + .byte $C2,$A9,$98,$85,$8E,$A9,$BD,$85 ; 96DF C2 A9 98 85 8E A9 BD 85 ........ + .byte $8D,$A9,$03,$8D ; 96E7 8D A9 03 8D .... + .byte "H" ; 96EB 48 H + .byte $97,$A9,$00,$8D ; 96EC 97 A9 00 8D .... + .byte "G" ; 96F0 47 G + .byte $97,$A9,$1A,$85,$8F ; 96F1 97 A9 1A 85 8F ..... + .byte " " ; 96F6 20 + .byte $1C,$97,$8A,$D0,$1D,$18,$A9 ; 96F7 1C 97 8A D0 1D 18 A9 ....... + .byte " e" ; 96FE 20 65 e + .byte $8D,$85,$8D,$90,$02,$E6,$8E,$18 ; 9700 8D 85 8D 90 02 E6 8E 18 ........ + .byte $A9 ; 9708 A9 . + .byte " mG" ; 9709 20 6D 47 mG + .byte $97,$8D ; 970C 97 8D .. + .byte "G" ; 970E 47 G + .byte $97,$90,$03,$EE ; 970F 97 90 03 EE .... + .byte "H" ; 9713 48 H + .byte $97,$C6,$8F,$10,$DD ; 9714 97 C6 8F 10 DD ..... + .byte "L_" ; 9719 4C 5F L_ + .byte $C2,$A5,$8F,$0D,$8D,$84,$F0,$1E ; 971B C2 A5 8F 0D 8D 84 F0 1E ........ + .byte $A2,$97,$A9 ; 9723 A2 97 A9 ... + .byte "D " ; 9726 44 20 D + .byte $ED,$95 ; 9728 ED 95 .. +; ---------------------------------------------------------------------------- + txa ; 972A 8A . + bne L9743 ; 972B D0 16 .. + lda #$20 ; 972D A9 20 . + jsr CIOUT ; 972F 20 A8 FF .. + ldy #$00 ; 9732 A0 00 .. +L9734: lda ($8D),y ; 9734 B1 8D .. + jsr CIOUT ; 9736 20 A8 FF .. + iny ; 9739 C8 . + cpy #$20 ; 973A C0 20 . + bcc L9734 ; 973C 90 F6 .. + jsr UNLSN ; 973E 20 AE FF .. + ldx #$00 ; 9741 A2 00 .. +L9743: rts ; 9743 60 ` + +; ---------------------------------------------------------------------------- + eor $572D ; 9744 4D 2D 57 M-W + brk ; 9747 00 . + brk ; 9748 00 . +L9749: txa ; 9749 8A . + pha ; 974A 48 H + jsr L9C13 ; 974B 20 13 9C .. + ldx curDrive ; 974E AE 89 84 ... + lda diskOpenFlg,x ; 9751 BD 8A 84 ... + and #$40 ; 9754 29 40 )@ + beq L9766 ; 9756 F0 0E .. + jsr L96BF ; 9758 20 BF 96 .. + ldx curDrive ; 975B AE 89 84 ... + lda diskOpenFlg,x ; 975E BD 8A 84 ... + and #$BF ; 9761 29 BF ). + sta diskOpenFlg,x ; 9763 9D 8A 84 ... +L9766: pla ; 9766 68 h + tax ; 9767 AA . + rts ; 9768 60 ` + +; ---------------------------------------------------------------------------- +L9769: jsr L9C0B ; 9769 20 0B 9C .. + jsr ExitTurbo ; 976C 20 32 C2 2. +L976F: ldy curDrive ; 976F AC 89 84 ... + lda #$00 ; 9772 A9 00 .. + sta diskOpenFlg,y ; 9774 99 8A 84 ... + rts ; 9777 60 ` + +; ---------------------------------------------------------------------------- +L9778: jsr EnterTurbo ; 9778 20 14 C2 .. + txa ; 977B 8A . + bne L97A6 ; 977C D0 28 .( + jsr L9C0B ; 977E 20 0B 9C .. + jsr InitForIO ; 9781 20 5C C2 \. + lda #$00 ; 9784 A9 00 .. + sta L9D37 ; 9786 8D 37 9D .7. +L9789: lda #$04 ; 9789 A9 04 .. + sta $8C ; 978B 85 8C .. + lda #$DC ; 978D A9 DC .. + sta $8B ; 978F 85 8B .. + jsr L9629 ; 9791 20 29 96 ). + jsr L9889 ; 9794 20 89 98 .. + beq L97A3 ; 9797 F0 0A .. + inc L9D37 ; 9799 EE 37 9D .7. + cpy L9D37 ; 979C CC 37 9D .7. + beq L97A3 ; 979F F0 02 .. + bcs L9789 ; 97A1 B0 E6 .. +L97A3: jsr DoneWithIO ; 97A3 20 5F C2 _. +L97A6: rts ; 97A6 60 ` + +; ---------------------------------------------------------------------------- +L97A7: pha ; 97A7 48 H + jsr EnterTurbo ; 97A8 20 14 C2 .. + txa ; 97AB 8A . + bne L97D3 ; 97AC D0 25 .% + pla ; 97AE 68 h + pha ; 97AF 48 H + ora #$20 ; 97B0 09 20 . + sta r1L ; 97B2 85 04 .. + jsr InitForIO ; 97B4 20 5C C2 \. + ldx #$04 ; 97B7 A2 04 .. + lda #$39 ; 97B9 A9 39 .9 + jsr L9625 ; 97BB 20 25 96 %. + jsr DoneWithIO ; 97BE 20 5F C2 _. + jsr L976F ; 97C1 20 6F 97 o. + pla ; 97C4 68 h + tax ; 97C5 AA . + lda #$C0 ; 97C6 A9 C0 .. + sta diskOpenFlg,x ; 97C8 9D 8A 84 ... + stx curDrive ; 97CB 8E 89 84 ... + stx curDevice ; 97CE 86 BA .. + ldx #$00 ; 97D0 A2 00 .. + rts ; 97D2 60 ` + +; ---------------------------------------------------------------------------- +L97D3: pla ; 97D3 68 h + rts ; 97D4 60 ` + +; ---------------------------------------------------------------------------- +L97D5: jsr L90A7 ; 97D5 20 A7 90 .. + bcc L981B ; 97D8 90 41 .A + jsr L9C45 ; 97DA 20 45 9C E. + bne L981B ; 97DD D0 3C .< +L97DF: ldx #$05 ; 97DF A2 05 .. + lda #$8E ; 97E1 A9 8E .. + jsr L9625 ; 97E3 20 25 96 %. + ldx #$03 ; 97E6 A2 03 .. + lda #$20 ; 97E8 A9 20 . + jsr L961D ; 97EA 20 1D 96 .. + lda r4H ; 97ED A5 0B .. + sta $8C ; 97EF 85 8C .. + lda r4L ; 97F1 A5 0A .. + sta $8B ; 97F3 85 8B .. + ldy #$00 ; 97F5 A0 00 .. + jsr L9544 ; 97F7 20 44 95 D. + jsr L9890 ; 97FA 20 90 98 .. + txa ; 97FD 8A . + beq L980A ; 97FE F0 0A .. + inc L9D37 ; 9800 EE 37 9D .7. + cpy L9D37 ; 9803 CC 37 9D .7. + beq L980A ; 9806 F0 02 .. + bcs L97DF ; 9808 B0 D5 .. +L980A: txa ; 980A 8A . + bne L981B ; 980B D0 0E .. + bit curType ; 980D 2C C6 88 ,.. + bvc L9818 ; 9810 50 06 P. + jsr L9C84 ; 9812 20 84 9C .. + clv ; 9815 B8 . + bvc L981B ; 9816 50 03 P. +L9818: jsr L9C72 ; 9818 20 72 9C r. +L981B: ldy #$00 ; 981B A0 00 .. + rts ; 981D 60 ` + +; ---------------------------------------------------------------------------- +L981E: jsr L909D ; 981E 20 9D 90 .. + bcc L9846 ; 9821 90 23 .# +L9823: ldx #$05 ; 9823 A2 05 .. + lda #$7C ; 9825 A9 7C .| + jsr L9625 ; 9827 20 25 96 %. + lda r4H ; 982A A5 0B .. + sta $8C ; 982C 85 8C .. + lda r4L ; 982E A5 0A .. + sta $8B ; 9830 85 8B .. + ldy #$00 ; 9832 A0 00 .. + jsr L9593 ; 9834 20 93 95 .. + jsr L9889 ; 9837 20 89 98 .. + beq L9846 ; 983A F0 0A .. + inc L9D37 ; 983C EE 37 9D .7. + cpy L9D37 ; 983F CC 37 9D .7. + beq L9846 ; 9842 F0 02 .. + bcs L9823 ; 9844 B0 DD .. +L9846: rts ; 9846 60 ` + +; ---------------------------------------------------------------------------- +L9847: jsr L909D ; 9847 20 9D 90 .. + bcc L9888 ; 984A 90 3C .< +L984C: lda #$03 ; 984C A9 03 .. + sta L9D39 ; 984E 8D 39 9D .9. +L9851: ldx #$05 ; 9851 A2 05 .. + lda #$8E ; 9853 A9 8E .. + jsr L9625 ; 9855 20 25 96 %. + jsr L9889 ; 9858 20 89 98 .. + txa ; 985B 8A . + beq L987A ; 985C F0 1C .. + dec L9D39 ; 985E CE 39 9D .9. + bne L9851 ; 9861 D0 EE .. + ldx #$25 ; 9863 A2 25 .% + inc L9D37 ; 9865 EE 37 9D .7. + lda L9D37 ; 9868 AD 37 9D .7. + cmp #$05 ; 986B C9 05 .. + beq L987A ; 986D F0 0B .. + pha ; 986F 48 H + jsr WriteBlock ; 9870 20 20 C2 . + pla ; 9873 68 h + sta L9D37 ; 9874 8D 37 9D .7. + txa ; 9877 8A . + beq L984C ; 9878 F0 D2 .. +L987A: txa ; 987A 8A . + bne L9888 ; 987B D0 0B .. + .byte $2C ; 987D 2C , +L987E: dec $88 ; 987E C6 88 .. + bvc L9885 ; 9880 50 03 P. + jmp L9C84 ; 9882 4C 84 9C L.. + +; ---------------------------------------------------------------------------- +L9885: jmp L9C72 ; 9885 4C 72 9C Lr. + +; ---------------------------------------------------------------------------- +L9888: rts ; 9888 60 ` + +; ---------------------------------------------------------------------------- +L9889: ldx #$03 ; 9889 A2 03 .. + lda #$25 ; 988B A9 25 .% + jsr L961D ; 988D 20 1D 96 .. +L9890: lda #$9D ; 9890 A9 9D .. + sta $8C ; 9892 85 8C .. + lda #$38 ; 9894 A9 38 .8 + sta $8B ; 9896 85 8B .. + jsr L964A ; 9898 20 4A 96 J. + lda L9D38 ; 989B AD 38 9D .8. + pha ; 989E 48 H + tay ; 989F A8 . + lda L98B1,y ; 98A0 B9 B1 98 ... + tay ; 98A3 A8 . + pla ; 98A4 68 h + cmp #$01 ; 98A5 C9 01 .. + beq L98AE ; 98A7 F0 05 .. + clc ; 98A9 18 . + adc #$1E ; 98AA 69 1E i. + bne L98B0 ; 98AC D0 02 .. +L98AE: lda #$00 ; 98AE A9 00 .. +L98B0: tax ; 98B0 AA . +L98B1: rts ; 98B1 60 ` + +; ---------------------------------------------------------------------------- + ora (r1H,x) ; 98B2 01 05 .. + .byte $02 ; 98B4 02 . + php ; 98B5 08 . + php ; 98B6 08 . + ora (r1H,x) ; 98B7 01 05 .. + ora (r1H,x) ; 98B9 01 05 .. + ora r1H ; 98BB 05 05 .. + .byte $0F ; 98BD 0F . + .byte $07 ; 98BE 07 . + ora $0B05 ; 98BF 0D 05 0B ... + .byte $03 ; 98C2 03 . + ora #$01 ; 98C3 09 01 .. + asl $0C06 ; 98C5 0E 06 0C ... + .byte $04 ; 98C8 04 . + asl a ; 98C9 0A . + .byte $02 ; 98CA 02 . + php ; 98CB 08 . + brk ; 98CC 00 . + brk ; 98CD 00 . + .byte $80 ; 98CE 80 . + jsr L40A0 ; 98CF 20 A0 40 .@ + cpy #$60 ; 98D2 C0 60 .` + cpx #$10 ; 98D4 E0 10 .. + bcc L9908 ; 98D6 90 30 .0 + bcs L992A ; 98D8 B0 50 .P + bne L994C ; 98DA D0 70 .p + beq L987E ; 98DC F0 A0 .. + brk ; 98DE 00 . + jsr L033A ; 98DF 20 3A 03 :. + ldy #$00 ; 98E2 A0 00 .. + sty a3H ; 98E4 84 73 .s + sty a4L ; 98E6 84 74 .t + iny ; 98E8 C8 . + sty a2H ; 98E9 84 71 .q + ldy #$00 ; 98EB A0 00 .. + jsr L03CB ; 98ED 20 CB 03 .. + lda a2H ; 98F0 A5 71 .q + jsr L0340 ; 98F2 20 40 03 @. + ldy a2H ; 98F5 A4 71 .q + jsr L03CB ; 98F7 20 CB 03 .. +L98FA: dey ; 98FA 88 . + lda (a3H),y ; 98FB B1 73 .s + tax ; 98FD AA . + lsr a ; 98FE 4A J + lsr a ; 98FF 4A J + lsr a ; 9900 4A J + lsr a ; 9901 4A J + sta a2L ; 9902 85 70 .p + txa ; 9904 8A . + and #$0F ; 9905 29 0F ). + tax ; 9907 AA . +L9908: lda #$04 ; 9908 A9 04 .. + sta $1800 ; 990A 8D 00 18 ... +L990D: bit $1800 ; 990D 2C 00 18 ,.. + beq L990D ; 9910 F0 FB .. + bit $1800 ; 9912 2C 00 18 ,.. + bne L9917 ; 9915 D0 00 .. +L9917: bne L9919 ; 9917 D0 00 .. +L9919: stx $1800 ; 9919 8E 00 18 ... + txa ; 991C 8A . + rol a ; 991D 2A * + and #$0F ; 991E 29 0F ). + sta $1800 ; 9920 8D 00 18 ... + ldx a2L ; 9923 A6 70 .p + lda $0300,x ; 9925 BD 00 03 ... + .byte $8D ; 9928 8D . + brk ; 9929 00 . +L992A: clc ; 992A 18 . + nop ; 992B EA . + rol a ; 992C 2A * + and #$0F ; 992D 29 0F ). + cpy #$00 ; 992F C0 00 .. + sta $1800 ; 9931 8D 00 18 ... + bne L98FA ; 9934 D0 C4 .. + beq L997B ; 9936 F0 43 .C + ldy #$01 ; 9938 A0 01 .. + jsr L0389 ; 993A 20 89 03 .. + sta a2H ; 993D 85 71 .q + tay ; 993F A8 . + jsr L0389 ; 9940 20 89 03 .. + ldy a2H ; 9943 A4 71 .q + rts ; 9945 60 ` + +; ---------------------------------------------------------------------------- + jsr L03CB ; 9946 20 CB 03 .. +L9949: pha ; 9949 48 H + pla ; 994A 68 h + .byte $A9 ; 994B A9 . +L994C: .byte $04 ; 994C 04 . +L994D: bit $1800 ; 994D 2C 00 18 ,.. + beq L994D ; 9950 F0 FB .. + nop ; 9952 EA . + nop ; 9953 EA . + nop ; 9954 EA . + lda $1800 ; 9955 AD 00 18 ... + asl a ; 9958 0A . + nop ; 9959 EA . + nop ; 995A EA . + nop ; 995B EA . + nop ; 995C EA . + ora $1800 ; 995D 0D 00 18 ... + and #$0F ; 9960 29 0F ). + tax ; 9962 AA . + nop ; 9963 EA . + nop ; 9964 EA . + nop ; 9965 EA . + lda $1800 ; 9966 AD 00 18 ... + asl a ; 9969 0A . + pha ; 996A 48 H + lda a2L ; 996B A5 70 .p + pla ; 996D 68 h + ora $1800 ; 996E 0D 00 18 ... + and #$0F ; 9971 29 0F ). + ora $0310,x ; 9973 1D 10 03 ... + dey ; 9976 88 . + sta (a3H),y ; 9977 91 73 .s + bne L9949 ; 9979 D0 CE .. +L997B: ldx #$02 ; 997B A2 02 .. + stx $1800 ; 997D 8E 00 18 ... + rts ; 9980 60 ` + +; ---------------------------------------------------------------------------- +L9981: dec $48 ; 9981 C6 48 .H + bne L9988 ; 9983 D0 03 .. + jsr L0534 ; 9985 20 34 05 4. +L9988: lda #$C0 ; 9988 A9 C0 .. + sta $1805 ; 998A 8D 05 18 ... +L998D: bit $1805 ; 998D 2C 05 18 ,.. + bpl L9981 ; 9990 10 EF .. + lda #$04 ; 9992 A9 04 .. + bit $1800 ; 9994 2C 00 18 ,.. + bne L998D ; 9997 D0 F4 .. + lda #$00 ; 9999 A9 00 .. + sta $1800 ; 999B 8D 00 18 ... + rts ; 999E 60 ` + +; ---------------------------------------------------------------------------- + php ; 999F 08 . + sei ; 99A0 78 x + lda $49 ; 99A1 A5 49 .I + pha ; 99A3 48 H + lda $180F ; 99A4 AD 0F 18 ... + and #$DF ; 99A7 29 DF ). + sta $180F ; 99A9 8D 0F 18 ... + ldy #$00 ; 99AC A0 00 .. +L99AE: dey ; 99AE 88 . + bne L99AE ; 99AF D0 FD .. + jsr L03BE ; 99B1 20 BE 03 .. + lda #$04 ; 99B4 A9 04 .. +L99B6: bit $1800 ; 99B6 2C 00 18 ,.. + beq L99B6 ; 99B9 F0 FB .. + jsr L0529 ; 99BB 20 29 05 ). + lda #$06 ; 99BE A9 06 .. + sta a4L ; 99C0 85 74 .t + lda #$4A ; 99C2 A9 4A .J + sta a3H ; 99C4 85 73 .s + jsr L037B ; 99C6 20 7B 03 {. + jsr L052D ; 99C9 20 2D 05 -. + lda #$07 ; 99CC A9 07 .. + sta a4L ; 99CE 85 74 .t + lda #$00 ; 99D0 A9 00 .. + sta a3H ; 99D2 85 73 .s + lda #$03 ; 99D4 A9 03 .. + pha ; 99D6 48 H + lda #$FD ; 99D7 A9 FD .. + pha ; 99D9 48 H + jmp (L064A) ; 99DA 6C 4A 06 lJ. + +; ---------------------------------------------------------------------------- + jsr L03CB ; 99DD 20 CB 03 .. + lda #$00 ; 99E0 A9 00 .. + sta windowTop ; 99E2 85 33 .3 + sta $1800 ; 99E4 8D 00 18 ... + jsr LF98F ; 99E7 20 8F F9 .. + lda #$EC ; 99EA A9 EC .. + sta $1C0C ; 99EC 8D 0C 1C ... + pla ; 99EF 68 h + pla ; 99F0 68 h + pla ; 99F1 68 h + sta $49 ; 99F2 85 49 .I + plp ; 99F4 28 ( + rts ; 99F5 60 ` + +; ---------------------------------------------------------------------------- + lda $064C ; 99F6 AD 4C 06 .L. + sta a5H ; 99F9 85 77 .w + eor #$60 ; 99FB 49 60 I` + sta a6L ; 99FD 85 78 .x + rts ; 99FF 60 ` + +; ---------------------------------------------------------------------------- + jsr L0632 ; 9A00 20 32 06 2. + lda curPattern ; 9A03 A5 22 ." + beq L9A0C ; 9A05 F0 05 .. + ldx CPU_DDR ; 9A07 A6 00 .. + dex ; 9A09 CA . + beq L9A2C ; 9A0A F0 20 . +L9A0C: lda r8L ; 9A0C A5 12 .. + pha ; 9A0E 48 H + lda r8H ; 9A0F A5 13 .. + pha ; 9A11 48 H + jsr L04DF ; 9A12 20 DF 04 .. + pla ; 9A15 68 h + sta r8H ; 9A16 85 13 .. + tax ; 9A18 AA . + pla ; 9A19 68 h + sta r8L ; 9A1A 85 12 .. + ldy CPU_DDR ; 9A1C A4 00 .. + cpy #$01 ; 9A1E C0 01 .. + bne L9A4B ; 9A20 D0 29 .) + cpx r10H ; 9A22 E4 17 .. + bne L9A4C ; 9A24 D0 26 .& + cmp r10L ; 9A26 C5 16 .. + bne L9A4C ; 9A28 D0 22 ." + lda #$00 ; 9A2A A9 00 .. +L9A2C: pha ; 9A2C 48 H + lda curPattern ; 9A2D A5 22 ." + ldx #$FF ; 9A2F A2 FF .. + sec ; 9A31 38 8 + sbc $064C ; 9A32 ED 4C 06 .L. + beq L9A4A ; 9A35 F0 13 .. + bcs L9A3F ; 9A37 B0 06 .. + eor #$FF ; 9A39 49 FF I. + adc #$01 ; 9A3B 69 01 i. + ldx #$01 ; 9A3D A2 01 .. +L9A3F: jsr L0494 ; 9A3F 20 94 04 .. + lda $064C ; 9A42 AD 4C 06 .L. + sta curPattern ; 9A45 85 22 ." + jsr L0518 ; 9A47 20 18 05 .. +L9A4A: pla ; 9A4A 68 h +L9A4B: rts ; 9A4B 60 ` + +; ---------------------------------------------------------------------------- +L9A4C: lda #$0B ; 9A4C A9 0B .. + sta CPU_DDR ; 9A4E 85 00 .. + rts ; 9A50 60 ` + +; ---------------------------------------------------------------------------- + stx $4A ; 9A51 86 4A .J + asl a ; 9A53 0A . + tay ; 9A54 A8 . + lda $1C00 ; 9A55 AD 00 1C ... + and #$FE ; 9A58 29 FE ). + sta a2L ; 9A5A 85 70 .p + lda #$1E ; 9A5C A9 1E .. + sta a2H ; 9A5E 85 71 .q +L9A60: lda a2L ; 9A60 A5 70 .p + clc ; 9A62 18 . + adc $4A ; 9A63 65 4A eJ + eor a2L ; 9A65 45 70 Ep + and #$03 ; 9A67 29 03 ). + eor a2L ; 9A69 45 70 Ep + sta a2L ; 9A6B 85 70 .p + sta $1C00 ; 9A6D 8D 00 1C ... + lda a2H ; 9A70 A5 71 .q + jsr L04D3 ; 9A72 20 D3 04 .. + lda a2H ; 9A75 A5 71 .q + cpy #$05 ; 9A77 C0 05 .. + bcc L9A83 ; 9A79 90 08 .. + cmp #$11 ; 9A7B C9 11 .. + bcc L9A89 ; 9A7D 90 0A .. + sbc #$02 ; 9A7F E9 02 .. + bne L9A89 ; 9A81 D0 06 .. +L9A83: cmp #$1C ; 9A83 C9 1C .. + bcs L9A89 ; 9A85 B0 02 .. + adc #$04 ; 9A87 69 04 i. +L9A89: sta a2H ; 9A89 85 71 .q + dey ; 9A8B 88 . + bne L9A60 ; 9A8C D0 D2 .. + lda #$4B ; 9A8E A9 4B .K + sta $1805 ; 9A90 8D 05 18 ... +L9A93: lda $1805 ; 9A93 AD 05 18 ... + bne L9A93 ; 9A96 D0 FB .. + rts ; 9A98 60 ` + +; ---------------------------------------------------------------------------- + jsr L0632 ; 9A99 20 32 06 2. + ldx CPU_DDR ; 9A9C A6 00 .. + dex ; 9A9E CA . + beq L9AB3 ; 9A9F F0 12 .. + ldx #$FF ; 9AA1 A2 FF .. + lda #$01 ; 9AA3 A9 01 .. + jsr L0494 ; 9AA5 20 94 04 .. + ldx #$01 ; 9AA8 A2 01 .. + txa ; 9AAA 8A . + jsr L0494 ; 9AAB 20 94 04 .. + lda #$FF ; 9AAE A9 FF .. + jsr L04D3 ; 9AB0 20 D3 04 .. +L9AB3: lda #$04 ; 9AB3 A9 04 .. + sta a2L ; 9AB5 85 70 .p +L9AB7: jsr L0599 ; 9AB7 20 99 05 .. + ldx r11L ; 9ABA A6 18 .. + stx curPattern ; 9ABC 86 22 ." + ldy CPU_DDR ; 9ABE A4 00 .. + dey ; 9AC0 88 . + beq L9AD4 ; 9AC1 F0 11 .. + dec a2L ; 9AC3 C6 70 .p + bmi L9ACF ; 9AC5 30 08 0. + ldx a2L ; 9AC7 A6 70 .p + jsr L051D ; 9AC9 20 1D 05 .. + sec ; 9ACC 38 8 + bcs L9AB7 ; 9ACD B0 E8 .. +L9ACF: lda #$00 ; 9ACF A9 00 .. + sta curPattern ; 9AD1 85 22 ." + rts ; 9AD3 60 ` + +; ---------------------------------------------------------------------------- +L9AD4: txa ; 9AD4 8A . + jsr LF24B ; 9AD5 20 4B F2 K. + sta $43 ; 9AD8 85 43 .C + lda $1C00 ; 9ADA AD 00 1C ... + and #$9F ; 9ADD 29 9F ). + ora $0544,x ; 9ADF 1D 44 05 .D. +L9AE2: sta $1C00 ; 9AE2 8D 00 1C ... + rts ; 9AE5 60 ` + +; ---------------------------------------------------------------------------- + lda #$F7 ; 9AE6 A9 F7 .. + bne L9AFB ; 9AE8 D0 11 .. + lda #$08 ; 9AEA A9 08 .. + ora $1C00 ; 9AEC 0D 00 1C ... + bne L9AE2 ; 9AEF D0 F1 .. + lda #$00 ; 9AF1 A9 00 .. + sta r15L ; 9AF3 85 20 . + lda #$FF ; 9AF5 A9 FF .. + sta $3E ; 9AF7 85 3E .> + lda #$FB ; 9AF9 A9 FB .. +L9AFB: and $1C00 ; 9AFB 2D 00 1C -.. + jmp L0525 ; 9AFE 4C 25 05 L%. + +; ---------------------------------------------------------------------------- + brk ; 9B01 00 . + jsr L6040 ; 9B02 20 40 60 @` + tax ; 9B05 AA . + bit r15L ; 9B06 24 20 $ + bpl L9B13 ; 9B08 10 09 .. + jsr L063B ; 9B0A 20 3B 06 ;. + lda #$20 ; 9B0D A9 20 . + sta r15L ; 9B0F 85 20 . + ldx #$00 ; 9B11 A2 00 .. +L9B13: cpx curPattern ; 9B13 E4 22 ." + beq L9B38 ; 9B15 F0 21 .! + jsr L04F6 ; 9B17 20 F6 04 .. + cmp #$01 ; 9B1A C9 01 .. + bne L9B38 ; 9B1C D0 1A .. + ldy r11H ; 9B1E A4 19 .. + iny ; 9B20 C8 . + cpy $43 ; 9B21 C4 43 .C + bcc L9B27 ; 9B23 90 02 .. + ldy #$00 ; 9B25 A0 00 .. +L9B27: sty r11H ; 9B27 84 19 .. + lda #$00 ; 9B29 A9 00 .. + sta $45 ; 9B2B 85 45 .E + lda #$00 ; 9B2D A9 00 .. + sta windowTop ; 9B2F 85 33 .3 + lda #$18 ; 9B31 A9 18 .. + sta $32 ; 9B33 85 32 .2 + jsr L05A5 ; 9B35 20 A5 05 .. +L9B38: rts ; 9B38 60 ` + +; ---------------------------------------------------------------------------- + jsr L0443 ; 9B39 20 43 04 C. + ldx CPU_DDR ; 9B3C A6 00 .. + dex ; 9B3E CA . + bne L9B44 ; 9B3F D0 03 .. + jsr L0548 ; 9B41 20 48 05 H. +L9B44: jsr L037B ; 9B44 20 7B 03 {. + lda #$10 ; 9B47 A9 10 .. + bne L9B50 ; 9B49 D0 05 .. + jsr L0443 ; 9B4B 20 43 04 C. + lda #$00 ; 9B4E A9 00 .. +L9B50: ldx CPU_DDR ; 9B50 A6 00 .. + dex ; 9B52 CA . + beq L9B58 ; 9B53 F0 03 .. + rts ; 9B55 60 ` + +; ---------------------------------------------------------------------------- + lda #$30 ; 9B56 A9 30 .0 +L9B58: sta $45 ; 9B58 85 45 .E + lda #$06 ; 9B5A A9 06 .. + sta windowTop ; 9B5C 85 33 .3 + lda #$4C ; 9B5E A9 4C .L + sta $32 ; 9B60 85 32 .2 + lda #$07 ; 9B62 A9 07 .. + sta msePicPtr ; 9B64 85 31 .1 + tsx ; 9B66 BA . + stx $49 ; 9B67 86 49 .I + ldx #$01 ; 9B69 A2 01 .. + stx CPU_DDR ; 9B6B 86 00 .. + dex ; 9B6D CA . + stx graphMode ; 9B6E 86 3F .? + lda #$EE ; 9B70 A9 EE .. + sta $1C0C ; 9B72 8D 0C 1C ... + lda $45 ; 9B75 A5 45 .E + cmp #$10 ; 9B77 C9 10 .. + beq L9B85 ; 9B79 F0 0A .. + cmp #$30 ; 9B7B C9 30 .0 + beq L9B82 ; 9B7D F0 03 .. + jmp LF4CA ; 9B7F 4C CA F4 L.. + +; ---------------------------------------------------------------------------- +L9B82: jmp LF3B1 ; 9B82 4C B1 F3 L.. + +; ---------------------------------------------------------------------------- +L9B85: jsr LF5E9 ; 9B85 20 E9 F5 .. + sta mouseXPos ; 9B88 85 3A .: + lda $1C00 ; 9B8A AD 00 1C ... + and #$10 ; 9B8D 29 10 ). + bne L9B95 ; 9B8F D0 04 .. + lda #$08 ; 9B91 A9 08 .. + bne L9BEC ; 9B93 D0 57 .W +L9B95: jsr LF78F ; 9B95 20 8F F7 .. + jsr LF510 ; 9B98 20 10 F5 .. + ldx #$09 ; 9B9B A2 09 .. +L9B9D: bvc L9B9D ; 9B9D 50 FE P. + clv ; 9B9F B8 . + dex ; 9BA0 CA . + bne L9B9D ; 9BA1 D0 FA .. + lda #$FF ; 9BA3 A9 FF .. + sta $1C03 ; 9BA5 8D 03 1C ... + lda $1C0C ; 9BA8 AD 0C 1C ... + and #$1F ; 9BAB 29 1F ). + ora #$C0 ; 9BAD 09 C0 .. + sta $1C0C ; 9BAF 8D 0C 1C ... + lda #$FF ; 9BB2 A9 FF .. + ldx #$05 ; 9BB4 A2 05 .. + sta $1C01 ; 9BB6 8D 01 1C ... + clv ; 9BB9 B8 . +L9BBA: bvc L9BBA ; 9BBA 50 FE P. + clv ; 9BBC B8 . + dex ; 9BBD CA . + bne L9BBA ; 9BBE D0 FA .. + ldy #$BB ; 9BC0 A0 BB .. +L9BC2: lda $0100,y ; 9BC2 B9 00 01 ... +L9BC5: bvc L9BC5 ; 9BC5 50 FE P. + clv ; 9BC7 B8 . + sta $1C01 ; 9BC8 8D 01 1C ... + iny ; 9BCB C8 . + bne L9BC2 ; 9BCC D0 F4 .. +L9BCE: lda (mouseOn),y ; 9BCE B1 30 .0 +L9BD0: bvc L9BD0 ; 9BD0 50 FE P. + clv ; 9BD2 B8 . + sta $1C01 ; 9BD3 8D 01 1C ... + iny ; 9BD6 C8 . + bne L9BCE ; 9BD7 D0 F5 .. +L9BD9: bvc L9BD9 ; 9BD9 50 FE P. + lda $1C0C ; 9BDB AD 0C 1C ... + ora #$E0 ; 9BDE 09 E0 .. + sta $1C0C ; 9BE0 8D 0C 1C ... + lda #$00 ; 9BE3 A9 00 .. + sta $1C03 ; 9BE5 8D 03 1C ... + sta $50 ; 9BE8 85 50 .P + lda #$01 ; 9BEA A9 01 .. +L9BEC: sta CPU_DDR ; 9BEC 85 00 .. + rts ; 9BEE 60 ` + +; ---------------------------------------------------------------------------- + lda r15L ; 9BEF A5 20 . + and #$20 ; 9BF1 29 20 ) + bne L9C02 ; 9BF3 D0 0D .. + jsr LF97E ; 9BF5 20 7E F9 ~. + ldy #$80 ; 9BF8 A0 80 .. +L9BFA: dex ; 9BFA CA . + bne L9BFA ; 9BFB D0 FD .. + dey ; 9BFD 88 . + bne L9BFA ; 9BFE D0 FA .. + sty $3E ; 9C00 84 3E .> +L9C02: lda #$FF ; 9C02 A9 FF .. + sta $48 ; 9C04 85 48 .H + rts ; 9C06 60 ` + +; ---------------------------------------------------------------------------- + brk ; 9C07 00 . + brk ; 9C08 00 . + brk ; 9C09 00 . + brk ; 9C0A 00 . +L9C0B: bit curType ; 9C0B 2C C6 88 ,.. + bvc L9C13 ; 9C0E 50 03 P. + jsr L9C18 ; 9C10 20 18 9C .. +L9C13: ldy #$FF ; 9C13 A0 FF .. + jmp AccessCache ; 9C15 4C EF C2 L.. + +; ---------------------------------------------------------------------------- +L9C18: lda #$9C ; 9C18 A9 9C .. + sta r0H ; 9C1A 85 03 .. + lda #$09 ; 9C1C A9 09 .. + sta r0L ; 9C1E 85 02 .. + ldy #$00 ; 9C20 A0 00 .. + sty r1L ; 9C22 84 04 .. + sty r1H ; 9C24 84 05 .. + sty r2H ; 9C26 84 07 .. + iny ; 9C28 C8 . + iny ; 9C29 C8 . + sty r2L ; 9C2A 84 06 .. + iny ; 9C2C C8 . + sty r3H ; 9C2D 84 09 .. + ldy curDrive ; 9C2F AC 89 84 ... + lda driveData,y ; 9C32 B9 BF 88 ... + sta r3L ; 9C35 85 08 .. +L9C37: jsr StashRAM ; 9C37 20 C8 C2 .. + inc r1H ; 9C3A E6 05 .. + bne L9C37 ; 9C3C D0 F9 .. + inc r3L ; 9C3E E6 08 .. + dec r3H ; 9C40 C6 09 .. + bne L9C37 ; 9C42 D0 F3 .. + rts ; 9C44 60 ` + +; ---------------------------------------------------------------------------- +L9C45: ldy #$91 ; 9C45 A0 91 .. + bit curType ; 9C47 2C C6 88 ,.. + bvc L9C52 ; 9C4A 50 06 P. + jsr L9C86 ; 9C4C 20 86 9C .. + clv ; 9C4F B8 . + bvc L9C5F ; 9C50 50 0D P. +L9C52: lda r1L ; 9C52 A5 04 .. + cmp #$12 ; 9C54 C9 12 .. + bne L9C67 ; 9C56 D0 0F .. + lda r1H ; 9C58 A5 05 .. + beq L9C67 ; 9C5A F0 0B .. + jsr AccessCache ; 9C5C 20 EF C2 .. +L9C5F: ldy #$00 ; 9C5F A0 00 .. + lda (r4L),y ; 9C61 B1 0A .. + iny ; 9C63 C8 . + ora (r4L),y ; 9C64 11 0A .. + rts ; 9C66 60 ` + +; ---------------------------------------------------------------------------- +L9C67: ldx #$00 ; 9C67 A2 00 .. + rts ; 9C69 60 ` + +; ---------------------------------------------------------------------------- +L9C6A: ldy #$93 ; 9C6A A0 93 .. + jsr L9C86 ; 9C6C 20 86 9C .. + and #$20 ; 9C6F 29 20 ) + rts ; 9C71 60 ` + +; ---------------------------------------------------------------------------- +L9C72: lda r1L ; 9C72 A5 04 .. + cmp #$12 ; 9C74 C9 12 .. + bne L9C81 ; 9C76 D0 09 .. + lda r1H ; 9C78 A5 05 .. + beq L9C81 ; 9C7A F0 05 .. + ldy #$90 ; 9C7C A0 90 .. + jmp AccessCache ; 9C7E 4C EF C2 L.. + +; ---------------------------------------------------------------------------- +L9C81: ldx #$00 ; 9C81 A2 00 .. + rts ; 9C83 60 ` + +; ---------------------------------------------------------------------------- +L9C84: ldy #$90 ; 9C84 A0 90 .. +L9C86: lda r0H ; 9C86 A5 03 .. + pha ; 9C88 48 H + lda r0L ; 9C89 A5 02 .. + pha ; 9C8B 48 H + lda r1H ; 9C8C A5 05 .. + pha ; 9C8E 48 H + lda r1L ; 9C8F A5 04 .. + pha ; 9C91 48 H + lda r2H ; 9C92 A5 07 .. + pha ; 9C94 48 H + lda r2L ; 9C95 A5 06 .. + pha ; 9C97 48 H + lda r3L ; 9C98 A5 08 .. + pha ; 9C9A 48 H + tya ; 9C9B 98 . + pha ; 9C9C 48 H + ldy r1L ; 9C9D A4 04 .. + dey ; 9C9F 88 . + lda L9CE3,y ; 9CA0 B9 E3 9C ... + clc ; 9CA3 18 . + adc r1H ; 9CA4 65 05 e. + sta r1H ; 9CA6 85 05 .. + lda L9D07,y ; 9CA8 B9 07 9D ... + ldy curDrive ; 9CAB AC 89 84 ... + adc driveData,y ; 9CAE 79 BF 88 y.. + sta r3L ; 9CB1 85 08 .. + ldy #$00 ; 9CB3 A0 00 .. + sty r1L ; 9CB5 84 04 .. + sty r2L ; 9CB7 84 06 .. + iny ; 9CB9 C8 . + sty r2H ; 9CBA 84 07 .. + lda r4H ; 9CBC A5 0B .. + sta r0H ; 9CBE 85 03 .. + lda r4L ; 9CC0 A5 0A .. + sta r0L ; 9CC2 85 02 .. + pla ; 9CC4 68 h + tay ; 9CC5 A8 . + jsr DoRAMOp ; 9CC6 20 D4 C2 .. + tax ; 9CC9 AA . + pla ; 9CCA 68 h + sta r3L ; 9CCB 85 08 .. + pla ; 9CCD 68 h + sta r2L ; 9CCE 85 06 .. + pla ; 9CD0 68 h + sta r2H ; 9CD1 85 07 .. + pla ; 9CD3 68 h + sta r1L ; 9CD4 85 04 .. + pla ; 9CD6 68 h + sta r1H ; 9CD7 85 05 .. + pla ; 9CD9 68 h + sta r0L ; 9CDA 85 02 .. + pla ; 9CDC 68 h + sta r0H ; 9CDD 85 03 .. + txa ; 9CDF 8A . + ldx #$00 ; 9CE0 A2 00 .. + rts ; 9CE2 60 ` + +; ---------------------------------------------------------------------------- +L9CE3: brk ; 9CE3 00 . + ora curIndexTable,x ; 9CE4 15 2A .* + .byte $3F ; 9CE6 3F ? + .byte $54 ; 9CE7 54 T + adc #$7E ; 9CE8 69 7E i~ + .byte $93 ; 9CEA 93 . + tay ; 9CEB A8 . + lda $E7D2,x ; 9CEC BD D2 E7 ... + .byte $FC ; 9CEF FC . + ora (baselineOffset),y ; 9CF0 11 26 .& + .byte $3B ; 9CF2 3B ; + bvc L9D5A ; 9CF3 50 65 Pe + sei ; 9CF5 78 x + .byte $8B ; 9CF6 8B . + .byte $9E ; 9CF7 9E . + lda ($C4),y ; 9CF8 B1 C4 .. + .byte $D7 ; 9CFA D7 . + nop ; 9CFB EA . + .byte $FC ; 9CFC FC . + asl $3220 ; 9CFD 0E 20 32 . 2 + .byte $44 ; 9D00 44 D + lsr $67,x ; 9D01 56 67 Vg + sei ; 9D03 78 x + .byte $89 ; 9D04 89 . + txs ; 9D05 9A . + .byte $AB ; 9D06 AB . +L9D07: brk ; 9D07 00 . + brk ; 9D08 00 . + brk ; 9D09 00 . + brk ; 9D0A 00 . + brk ; 9D0B 00 . + brk ; 9D0C 00 . + brk ; 9D0D 00 . + brk ; 9D0E 00 . + brk ; 9D0F 00 . + brk ; 9D10 00 . + brk ; 9D11 00 . + brk ; 9D12 00 . + brk ; 9D13 00 . + ora (CPU_DATA,x) ; 9D14 01 01 .. + ora (CPU_DATA,x) ; 9D16 01 01 .. + ora (CPU_DATA,x) ; 9D18 01 01 .. + ora (CPU_DATA,x) ; 9D1A 01 01 .. + ora (CPU_DATA,x) ; 9D1C 01 01 .. + ora (CPU_DATA,x) ; 9D1E 01 01 .. + ora (r0L,x) ; 9D20 01 02 .. + .byte $02 ; 9D22 02 . + .byte $02 ; 9D23 02 . + .byte $02 ; 9D24 02 . + .byte $02 ; 9D25 02 . + .byte $02 ; 9D26 02 . + .byte $02 ; 9D27 02 . + .byte $02 ; 9D28 02 . + .byte $02 ; 9D29 02 . + .byte $02 ; 9D2A 02 . +L9D2B: brk ; 9D2B 00 . +L9D2C: brk ; 9D2C 00 . +L9D2D: brk ; 9D2D 00 . +L9D2E: brk ; 9D2E 00 . +L9D2F: brk ; 9D2F 00 . + brk ; 9D30 00 . +L9D31: brk ; 9D31 00 . +L9D32: brk ; 9D32 00 . +L9D33: brk ; 9D33 00 . +L9D34: brk ; 9D34 00 . +L9D35: brk ; 9D35 00 . +L9D36: brk ; 9D36 00 . +L9D37: brk ; 9D37 00 . +L9D38: brk ; 9D38 00 . +L9D39: brk ; 9D39 00 . +L9D3A: brk ; 9D3A 00 . + bmi L9D69 ; 9D3B 30 2C 0, + brk ; 9D3D 00 . + .byte $42 ; 9D3E 42 B + adc a3L ; 9D3F 65 72 er + .byte $6B ; 9D41 6B k + adc $6C ; 9D42 65 6C el + adc a6H ; 9D44 65 79 ey + jsr L6F53 ; 9D46 20 53 6F So + ror a4L ; 9D49 66 74 ft + .byte $77 ; 9D4B 77 w + .byte $6F ; 9D4C 6F o + .byte $72 ; 9D4D 72 r + .byte $6B ; 9D4E 6B k + .byte $73 ; 9D4F 73 s + rol $5000 ; 9D50 2E 00 50 ..P + .byte $6F ; 9D53 6F o + .byte $72 ; 9D54 72 r + .byte $74 ; 9D55 74 t + adc #$6F ; 9D56 69 6F io + .byte $6E ; 9D58 6E n + .byte $73 ; 9D59 73 s +L9D5A: jsr L6F43 ; 9D5A 20 43 6F Co + bvs L9DD8 ; 9D5D 70 79 py + .byte $72 ; 9D5F 72 r + adc #$67 ; 9D60 69 67 ig + pla ; 9D62 68 h + .byte $74 ; 9D63 74 t + jsr L4328 ; 9D64 20 28 43 (C + and #$20 ; 9D67 29 20 ) +L9D69: and (pressFlag),y ; 9D69 31 39 19 + and $2C30,y ; 9D6B 39 30 2C 90, + brk ; 9D6E 00 . + lsr a ; 9D6F 4A J + adc #$6D ; 9D70 69 6D im + jsr L6F43 ; 9D72 20 43 6F Co + jmp (L656C) ; 9D75 6C 6C 65 lle + +; ---------------------------------------------------------------------------- + .byte $74 ; 9D78 74 t + .byte $74 ; 9D79 74 t + tax ; 9D7A AA . + tax ; 9D7B AA . + tax ; 9D7C AA . diff --git a/_newconf/newconf/r6.asm b/_newconf/newconf/r6.asm index e46bc989..7532d91f 100644 --- a/_newconf/newconf/r6.asm +++ b/_newconf/newconf/r6.asm @@ -1,6 +1,6 @@ ; da65 V2.15 -; Created: 2017-06-30 23:59:27 -; Input file: configure.cvt.record.6 +; Created: 2017-07-29 22:56:46 +; Input file: configure128.cvt.record.6 ; Page: 1 @@ -89,6 +89,7 @@ irqvec := $0314 bkvec := $0316 nmivec := $0318 APP_RAM := $0400 +L3531 := $3531 BACK_SCR_BASE := $6000 L6216 := $6216 PRINTBASE := $7900 @@ -476,23 +477,23 @@ IRQ_VECTOR := $FFFE _InitForIO: .addr __InitForIO ; 9000 DF 94 .. _DoneWithIO: - .addr __DoneWithIO ; 9002 55 95 U. + .addr L9550 ; 9002 50 95 P. _ExitTurbo: - .addr __ExitTurbo ; 9004 84 95 .. + .addr L957A ; 9004 7A 95 z. _PurgeTurbo: - .addr __ExitTurbo ; 9006 84 95 .. + .addr L957A ; 9006 7A 95 z. _EnterTurbo: - .addr __EnterTurbo ; 9008 7B 95 {. + .addr L9571 ; 9008 71 95 q. _ChangeDiskDevice: - .addr __ChangeDiskDevice ; 900A 8A 95 .. + .addr L9580 ; 900A 80 95 .. _NewDisk: - .addr __NewDisk ; 900C 92 95 .. + .addr L9588 ; 900C 88 95 .. _ReadBlock: - .addr __ReadBlock ; 900E 96 95 .. + .addr L958C ; 900E 8C 95 .. _WriteBlock: - .addr __WriteBlock ; 9010 AC 95 .. + .addr L95A2 ; 9010 A2 95 .. _VerWriteBlock: - .addr __VerWriteBlock ; 9012 B5 95 .. + .addr L95AB ; 9012 AB 95 .. _OpenDisk: .addr __OpenDisk ; 9014 E5 90 .. _GetBlock: @@ -561,7 +562,7 @@ AllocateBlock: ; ---------------------------------------------------------------------------- ReadLink: - jmp _ReadLink ; 904B 4C A1 95 L.. + jmp L9597 ; 904B 4C 97 95 L.. ; ---------------------------------------------------------------------------- .byte $83 ; 904E 83 . @@ -649,7 +650,7 @@ L90C7: stx r4H ; 90C7 86 0B ; ---------------------------------------------------------------------------- L90D2: lda #$00 ; 90D2 A9 00 .. - sta L9674 ; 90D4 8D 74 96 .t. + sta L966A ; 90D4 8D 6A 96 .j. ldx #$02 ; 90D7 A2 02 .. lda r1L ; 90D9 A5 04 .. beq L90E3 ; 90DB F0 06 .. @@ -713,7 +714,7 @@ L9133: sty r3L ; 9133 84 08 bne L913F ; 913B D0 02 .. __NxtBlkAlloc: lda #$00 ; 913D A9 00 .. -L913F: sta L9678 ; 913F 8D 78 96 .x. +L913F: sta L966E ; 913F 8D 6E 96 .n. lda r9H ; 9142 A5 15 .. pha ; 9144 48 H lda r9L ; 9145 A5 14 .. @@ -771,9 +772,9 @@ L9193: jsr SetNextFree ; 9193 20 92 C2 sta r4L ; 91A9 85 0A .. bcc L91AF ; 91AB 90 02 .. inc r4H ; 91AD E6 0B .. -L91AF: lda L9678 ; 91AF AD 78 96 .x. +L91AF: lda L966E ; 91AF AD 6E 96 .n. beq L91BD ; 91B2 F0 09 .. - dec L9678 ; 91B4 CE 78 96 .x. + dec L966E ; 91B4 CE 6E 96 .n. bne L91BD ; 91B7 D0 04 .. lda #$23 ; 91B9 A9 23 .# sta r3L ; 91BB 85 08 .. @@ -813,7 +814,7 @@ _Get1stDirEntry: jsr L90C1 ; 91EE 20 C1 90 .. inc r1H ; 91F1 E6 05 .. lda #$00 ; 91F3 A9 00 .. - sta L9679 ; 91F5 8D 79 96 .y. + sta L966F ; 91F5 8D 6F 96 .o. beq L9236 ; 91F8 F0 3C .< _GetNxtDirEntry: ldx #$00 ; 91FA A2 00 .. @@ -836,10 +837,10 @@ L9213: bcc L9243 ; 9213 90 2E lda diskBlkBuf ; 921C AD 00 80 ... sta r1L ; 921F 85 04 .. bne L9236 ; 9221 D0 13 .. - lda L9679 ; 9223 AD 79 96 .y. + lda L966F ; 9223 AD 6F 96 .o. bne L9243 ; 9226 D0 1B .. lda #$FF ; 9228 A9 FF .. - sta L9679 ; 922A 8D 79 96 .y. + sta L966F ; 922A 8D 6F 96 .o. jsr GetBorder ; 922D 20 36 90 6. txa ; 9230 8A . bne L9243 ; 9231 D0 10 .. @@ -1241,283 +1242,289 @@ L94DE: rts ; 94DE 60 __InitForIO: php ; 94DF 08 . pla ; 94E0 68 h - sta L966A ; 94E1 8D 6A 96 .j. + sta L9660 ; 94E1 8D 60 96 .`. sei ; 94E4 78 x - lda CPU_DATA ; 94E5 A5 01 .. - sta L966C ; 94E7 8D 6C 96 .l. - lda #$36 ; 94EA A9 36 .6 - sta CPU_DATA ; 94EC 85 01 .. - lda grirqen ; 94EE AD 1A D0 ... - sta L966B ; 94F1 8D 6B 96 .k. - lda clkreg ; 94F4 AD 30 D0 .0. - sta L9669 ; 94F7 8D 69 96 .i. - ldy #$00 ; 94FA A0 00 .. - sty clkreg ; 94FC 8C 30 D0 .0. - sty grirqen ; 94FF 8C 1A D0 ... - lda #$7F ; 9502 A9 7F .. - sta grirq ; 9504 8D 19 D0 ... - sta $DC0D ; 9507 8D 0D DC ... - sta $DD0D ; 950A 8D 0D DD ... - lda #$95 ; 950D A9 95 .. - sta $0315 ; 950F 8D 15 03 ... - lda #$4F ; 9512 A9 4F .O - sta irqvec ; 9514 8D 14 03 ... - lda #$95 ; 9517 A9 95 .. - sta $0319 ; 9519 8D 19 03 ... - lda #$54 ; 951C A9 54 .T - sta nmivec ; 951E 8D 18 03 ... - lda #$3F ; 9521 A9 3F .? - sta $DD02 ; 9523 8D 02 DD ... - lda mobenble ; 9526 AD 15 D0 ... - sta L966D ; 9529 8D 6D 96 .m. - sty mobenble ; 952C 8C 15 D0 ... - sty $DD05 ; 952F 8C 05 DD ... - iny ; 9532 C8 . - sty $DD04 ; 9533 8C 04 DD ... - lda #$81 ; 9536 A9 81 .. - sta $DD0D ; 9538 8D 0D DD ... - lda #$09 ; 953B A9 09 .. - sta $DD0E ; 953D 8D 0E DD ... - ldy #$2C ; 9540 A0 2C ., -L9542: lda rasreg ; 9542 AD 12 D0 ... - cmp TURBO_DD00_CPY ; 9545 C5 8F .. - beq L9542 ; 9547 F0 F9 .. - sta TURBO_DD00_CPY ; 9549 85 8F .. - dey ; 954B 88 . - bne L9542 ; 954C D0 F4 .. - rts ; 954E 60 ` + lda grirqen ; 94E5 AD 1A D0 ... + sta L9661 ; 94E8 8D 61 96 .a. + lda clkreg ; 94EB AD 30 D0 .0. + sta L965F ; 94EE 8D 5F 96 ._. + ldy #$00 ; 94F1 A0 00 .. + sty clkreg ; 94F3 8C 30 D0 .0. + sty grirqen ; 94F6 8C 1A D0 ... + lda #$7F ; 94F9 A9 7F .. + sta grirq ; 94FB 8D 19 D0 ... + sta $DC0D ; 94FE 8D 0D DC ... + sta $DD0D ; 9501 8D 0D DD ... + lda #$95 ; 9504 A9 95 .. + sta $0315 ; 9506 8D 15 03 ... + lda #$46 ; 9509 A9 46 .F + sta irqvec ; 950B 8D 14 03 ... + lda #$95 ; 950E A9 95 .. + sta $0319 ; 9510 8D 19 03 ... + lda #$46 ; 9513 A9 46 .F + sta nmivec ; 9515 8D 18 03 ... + lda #$3F ; 9518 A9 3F .? + sta $DD02 ; 951A 8D 02 DD ... + lda mobenble ; 951D AD 15 D0 ... + sta L9663 ; 9520 8D 63 96 .c. + sty mobenble ; 9523 8C 15 D0 ... + .byte $8C ; 9526 8C . +L9527: ora $DD ; 9527 05 DD .. + iny ; 9529 C8 . + sty $DD04 ; 952A 8C 04 DD ... + lda #$81 ; 952D A9 81 .. + sta $DD0D ; 952F 8D 0D DD ... + lda #$09 ; 9532 A9 09 .. + sta $DD0E ; 9534 8D 0E DD ... + ldy #$2C ; 9537 A0 2C ., +L9539: lda rasreg ; 9539 AD 12 D0 ... + cmp TURBO_DD00_CPY ; 953C C5 8F .. + .byte $F0 ; 953E F0 . +L953F: sbc $8F85,y ; 953F F9 85 8F ... + dey ; 9542 88 . + bne L9539 ; 9543 D0 F4 .. + rts ; 9545 60 ` ; ---------------------------------------------------------------------------- - pla ; 954F 68 h - tay ; 9550 A8 . - pla ; 9551 68 h - tax ; 9552 AA . - pla ; 9553 68 h - rti ; 9554 40 @ + pla ; 9546 68 h + sta config ; 9547 8D 00 FF ... + pla ; 954A 68 h + tay ; 954B A8 . + pla ; 954C 68 h + tax ; 954D AA . + pla ; 954E 68 h + rti ; 954F 40 @ ; ---------------------------------------------------------------------------- +L9550: sei ; 9550 78 x + lda L965F ; 9551 AD 5F 96 ._. + .byte $8D ; 9554 8D . __DoneWithIO: - sei ; 9555 78 x - lda L9669 ; 9556 AD 69 96 .i. - sta clkreg ; 9559 8D 30 D0 .0. - lda L966D ; 955C AD 6D 96 .m. - sta mobenble ; 955F 8D 15 D0 ... - lda #$7F ; 9562 A9 7F .. - sta $DD0D ; 9564 8D 0D DD ... - lda $DD0D ; 9567 AD 0D DD ... - lda L966B ; 956A AD 6B 96 .k. - sta grirqen ; 956D 8D 1A D0 ... - lda L966C ; 9570 AD 6C 96 .l. - sta CPU_DATA ; 9573 85 01 .. - lda L966A ; 9575 AD 6A 96 .j. - pha ; 9578 48 H - plp ; 9579 28 ( - rts ; 957A 60 ` + bmi L9527 ; 9555 30 D0 0. + lda L9663 ; 9557 AD 63 96 .c. + sta mobenble ; 955A 8D 15 D0 ... + lda #$7F ; 955D A9 7F .. + sta $DD0D ; 955F 8D 0D DD ... + lda $DD0D ; 9562 AD 0D DD ... + lda L9661 ; 9565 AD 61 96 .a. + sta grirqen ; 9568 8D 1A D0 ... + lda L9660 ; 956B AD 60 96 .`. + pha ; 956E 48 H + plp ; 956F 28 ( + rts ; 9570 60 ` ; ---------------------------------------------------------------------------- -__EnterTurbo: - lda curDrive ; 957B AD 89 84 ... - jsr SetDevice ; 957E 20 B0 C2 .. - ldx #$00 ; 9581 A2 00 .. - rts ; 9583 60 ` +L9571: lda curDrive ; 9571 AD 89 84 ... + jsr SetDevice ; 9574 20 B0 C2 .. + ldx #$00 ; 9577 A2 00 .. + rts ; 9579 60 ` ; ---------------------------------------------------------------------------- +L957A: .byte $A9 ; 957A A9 . +__EnterTurbo: + ora ($8D,x) ; 957B 01 8D .. + sty $6084 ; 957D 8C 84 60 ..` +L9580: sta curDrive ; 9580 8D 89 84 ... + .byte $85 ; 9583 85 . __ExitTurbo: - lda #$01 ; 9584 A9 01 .. - sta interleave ; 9586 8D 8C 84 ... - rts ; 9589 60 ` + tsx ; 9584 BA . + ldx #$00 ; 9585 A2 00 .. + rts ; 9587 60 ` ; ---------------------------------------------------------------------------- +L9588: .byte $20 ; 9588 20 + .byte $14 ; 9589 14 . __ChangeDiskDevice: - sta curDrive ; 958A 8D 89 84 ... - sta curDevice ; 958D 85 BA .. - ldx #$00 ; 958F A2 00 .. - rts ; 9591 60 ` + .byte $C2 ; 958A C2 . + rts ; 958B 60 ` ; ---------------------------------------------------------------------------- +L958C: jsr L90D2 ; 958C 20 D2 90 .. + bcc L9594 ; 958F 90 03 .. + .byte $20 ; 9591 20 __NewDisk: - jsr EnterTurbo ; 9592 20 14 C2 .. - rts ; 9595 60 ` - -; ---------------------------------------------------------------------------- + .byte $B3 ; 9592 B3 . + .byte $95 ; 9593 95 . +L9594: ldy #$00 ; 9594 A0 00 .. __ReadBlock: - jsr L90D2 ; 9596 20 D2 90 .. - bcc L959E ; 9599 90 03 .. - jsr L95BD ; 959B 20 BD 95 .. -L959E: ldy #$00 ; 959E A0 00 .. - rts ; 95A0 60 ` + rts ; 9596 60 ` ; ---------------------------------------------------------------------------- +L9597: jsr L90D2 ; 9597 20 D2 90 .. + bcc _ReadLink ; 959A 90 05 .. + ldy #$91 ; 959C A0 91 .. + jsr L95BB ; 959E 20 BB 95 .. _ReadLink: - jsr L90D2 ; 95A1 20 D2 90 .. - bcc L95AB ; 95A4 90 05 .. - ldy #$91 ; 95A6 A0 91 .. - jsr L95C5 ; 95A8 20 C5 95 .. -L95AB: rts ; 95AB 60 ` + rts ; 95A1 60 ` ; ---------------------------------------------------------------------------- -__WriteBlock: - jsr L90D2 ; 95AC 20 D2 90 .. - bcc L95B4 ; 95AF 90 03 .. - jsr L95C1 ; 95B1 20 C1 95 .. -L95B4: rts ; 95B4 60 ` +L95A2: jsr L90D2 ; 95A2 20 D2 90 .. + bcc L95AA ; 95A5 90 03 .. + jsr L95B7 ; 95A7 20 B7 95 .. +L95AA: rts ; 95AA 60 ` ; ---------------------------------------------------------------------------- -__VerWriteBlock: - jsr L90D2 ; 95B5 20 D2 90 .. - bcc L95BC ; 95B8 90 02 .. - ldx #$00 ; 95BA A2 00 .. -L95BC: rts ; 95BC 60 ` +L95AB: .byte $20 ; 95AB 20 +__WriteBlock: + .byte $D2 ; 95AC D2 . + bcc L953F ; 95AD 90 90 .. + .byte $02 ; 95AF 02 . + ldx #$00 ; 95B0 A2 00 .. + rts ; 95B2 60 ` ; ---------------------------------------------------------------------------- -L95BD: ldy #$91 ; 95BD A0 91 .. - bne L95D5 ; 95BF D0 14 .. -L95C1: ldy #$90 ; 95C1 A0 90 .. - bne L95D5 ; 95C3 D0 10 .. -L95C5: lda r2H ; 95C5 A5 07 .. - pha ; 95C7 48 H - lda r2L ; 95C8 A5 06 .. - pha ; 95CA 48 H - lda #$00 ; 95CB A9 00 .. - sta r2H ; 95CD 85 07 .. - lda #$02 ; 95CF A9 02 .. - sta r2L ; 95D1 85 06 .. - bne L95E3 ; 95D3 D0 0E .. -L95D5: lda r2H ; 95D5 A5 07 .. - pha ; 95D7 48 H - lda r2L ; 95D8 A5 06 .. - pha ; 95DA 48 H - lda #$01 ; 95DB A9 01 .. - sta r2H ; 95DD 85 07 .. - lda #$00 ; 95DF A9 00 .. - sta r2L ; 95E1 85 06 .. -L95E3: lda r0H ; 95E3 A5 03 .. - pha ; 95E5 48 H - lda r0L ; 95E6 A5 02 .. - pha ; 95E8 48 H - lda r1H ; 95E9 A5 05 .. - pha ; 95EB 48 H - lda r1L ; 95EC A5 04 .. - pha ; 95EE 48 H - lda r3L ; 95EF A5 08 .. - pha ; 95F1 48 H - tya ; 95F2 98 . - pha ; 95F3 48 H - lda r2H ; 95F4 A5 07 .. - pha ; 95F6 48 H - lda r2L ; 95F7 A5 06 .. - pha ; 95F9 48 H - lda r7H ; 95FA A5 11 .. - pha ; 95FC 48 H - lda r7L ; 95FD A5 10 .. - pha ; 95FF 48 H - lda r8H ; 9600 A5 13 .. - pha ; 9602 48 H - lda r8L ; 9603 A5 12 .. - pha ; 9605 48 H - dec r1L ; 9606 C6 04 .. - lda r1H ; 9608 A5 05 .. - sta r2H ; 960A 85 07 .. - lda #$28 ; 960C A9 28 .( - sta r2L ; 960E 85 06 .. - ldx #$04 ; 9610 A2 04 .. - ldy #$06 ; 9612 A0 06 .. - jsr BBMult ; 9614 20 60 C1 `. - clc ; 9617 18 . - lda r1L ; 9618 A5 04 .. - adc r2H ; 961A 65 07 e. - sta r1L ; 961C 85 04 .. - lda r1H ; 961E A5 05 .. - ldy curDrive ; 9620 AC 89 84 ... - adc driveData,y ; 9623 79 BF 88 y.. - sta r3L ; 9626 85 08 .. - lda r1L ; 9628 A5 04 .. - sta r1H ; 962A 85 05 .. - pla ; 962C 68 h - sta r8L ; 962D 85 12 .. - pla ; 962F 68 h - sta r8H ; 9630 85 13 .. - pla ; 9632 68 h - sta r7L ; 9633 85 10 .. - pla ; 9635 68 h - sta r7H ; 9636 85 11 .. - pla ; 9638 68 h - sta r2L ; 9639 85 06 .. - pla ; 963B 68 h - sta r2H ; 963C 85 07 .. - lda #$00 ; 963E A9 00 .. - sta r1L ; 9640 85 04 .. - lda r4H ; 9642 A5 0B .. - sta r0H ; 9644 85 03 .. - lda r4L ; 9646 A5 0A .. - sta r0L ; 9648 85 02 .. - pla ; 964A 68 h - tay ; 964B A8 . - jsr DoRAMOp ; 964C 20 D4 C2 .. - tax ; 964F AA . - pla ; 9650 68 h - sta r3L ; 9651 85 08 .. - pla ; 9653 68 h - sta r1L ; 9654 85 04 .. - pla ; 9656 68 h - sta r1H ; 9657 85 05 .. - pla ; 9659 68 h - sta r0L ; 965A 85 02 .. - pla ; 965C 68 h - sta r0H ; 965D 85 03 .. - pla ; 965F 68 h - sta r2L ; 9660 85 06 .. - pla ; 9662 68 h - sta r2H ; 9663 85 07 .. - txa ; 9665 8A . - ldx #$00 ; 9666 A2 00 .. - rts ; 9668 60 ` + ldy #$91 ; 95B3 A0 91 .. +__VerWriteBlock: + bne L95CB ; 95B5 D0 14 .. +L95B7: ldy #$90 ; 95B7 A0 90 .. + bne L95CB ; 95B9 D0 10 .. +L95BB: lda r2H ; 95BB A5 07 .. + pha ; 95BD 48 H + lda r2L ; 95BE A5 06 .. + pha ; 95C0 48 H + lda #$00 ; 95C1 A9 00 .. + sta r2H ; 95C3 85 07 .. + lda #$02 ; 95C5 A9 02 .. + sta r2L ; 95C7 85 06 .. + bne L95D9 ; 95C9 D0 0E .. +L95CB: lda r2H ; 95CB A5 07 .. + pha ; 95CD 48 H + lda r2L ; 95CE A5 06 .. + pha ; 95D0 48 H + lda #$01 ; 95D1 A9 01 .. + sta r2H ; 95D3 85 07 .. + lda #$00 ; 95D5 A9 00 .. + sta r2L ; 95D7 85 06 .. +L95D9: lda r0H ; 95D9 A5 03 .. + pha ; 95DB 48 H + lda r0L ; 95DC A5 02 .. + pha ; 95DE 48 H + lda r1H ; 95DF A5 05 .. + pha ; 95E1 48 H + lda r1L ; 95E2 A5 04 .. + pha ; 95E4 48 H + lda r3L ; 95E5 A5 08 .. + pha ; 95E7 48 H + tya ; 95E8 98 . + pha ; 95E9 48 H + lda r2H ; 95EA A5 07 .. + pha ; 95EC 48 H + lda r2L ; 95ED A5 06 .. + pha ; 95EF 48 H + lda r7H ; 95F0 A5 11 .. + pha ; 95F2 48 H + lda r7L ; 95F3 A5 10 .. + pha ; 95F5 48 H + lda r8H ; 95F6 A5 13 .. + pha ; 95F8 48 H + lda r8L ; 95F9 A5 12 .. + pha ; 95FB 48 H + dec r1L ; 95FC C6 04 .. + lda r1H ; 95FE A5 05 .. + sta r2H ; 9600 85 07 .. + lda #$28 ; 9602 A9 28 .( + sta r2L ; 9604 85 06 .. + ldx #$04 ; 9606 A2 04 .. + ldy #$06 ; 9608 A0 06 .. + jsr BBMult ; 960A 20 60 C1 `. + clc ; 960D 18 . + lda r1L ; 960E A5 04 .. + adc r2H ; 9610 65 07 e. + sta r1L ; 9612 85 04 .. + lda r1H ; 9614 A5 05 .. + ldy curDrive ; 9616 AC 89 84 ... + adc driveData,y ; 9619 79 BF 88 y.. + sta r3L ; 961C 85 08 .. + lda r1L ; 961E A5 04 .. + sta r1H ; 9620 85 05 .. + pla ; 9622 68 h + sta r8L ; 9623 85 12 .. + pla ; 9625 68 h + sta r8H ; 9626 85 13 .. + pla ; 9628 68 h + sta r7L ; 9629 85 10 .. + pla ; 962B 68 h + sta r7H ; 962C 85 11 .. + pla ; 962E 68 h + sta r2L ; 962F 85 06 .. + pla ; 9631 68 h + sta r2H ; 9632 85 07 .. + lda #$00 ; 9634 A9 00 .. + sta r1L ; 9636 85 04 .. + lda r4H ; 9638 A5 0B .. + sta r0H ; 963A 85 03 .. + lda r4L ; 963C A5 0A .. + sta r0L ; 963E 85 02 .. + pla ; 9640 68 h + tay ; 9641 A8 . + jsr DoRAMOp ; 9642 20 D4 C2 .. + tax ; 9645 AA . + pla ; 9646 68 h + sta r3L ; 9647 85 08 .. + pla ; 9649 68 h + sta r1L ; 964A 85 04 .. + pla ; 964C 68 h + sta r1H ; 964D 85 05 .. + pla ; 964F 68 h + sta r0L ; 9650 85 02 .. + pla ; 9652 68 h + sta r0H ; 9653 85 03 .. + pla ; 9655 68 h + sta r2L ; 9656 85 06 .. + pla ; 9658 68 h + sta r2H ; 9659 85 07 .. + txa ; 965B 8A . + ldx #$00 ; 965C A2 00 .. + rts ; 965E 60 ` ; ---------------------------------------------------------------------------- -L9669: brk ; 9669 00 . +L965F: brk ; 965F 00 . +L9660: brk ; 9660 00 . +L9661: brk ; 9661 00 . + brk ; 9662 00 . +L9663: brk ; 9663 00 . + brk ; 9664 00 . + brk ; 9665 00 . + brk ; 9666 00 . + brk ; 9667 00 . + brk ; 9668 00 . + brk ; 9669 00 . L966A: brk ; 966A 00 . -L966B: brk ; 966B 00 . -L966C: brk ; 966C 00 . -L966D: brk ; 966D 00 . - brk ; 966E 00 . - brk ; 966F 00 . + brk ; 966B 00 . + brk ; 966C 00 . + brk ; 966D 00 . +L966E: brk ; 966E 00 . +L966F: brk ; 966F 00 . brk ; 9670 00 . brk ; 9671 00 . brk ; 9672 00 . brk ; 9673 00 . -L9674: brk ; 9674 00 . - brk ; 9675 00 . - brk ; 9676 00 . - brk ; 9677 00 . -L9678: brk ; 9678 00 . -L9679: brk ; 9679 00 . - brk ; 967A 00 . - brk ; 967B 00 . - brk ; 967C 00 . - brk ; 967D 00 . - brk ; 967E 00 . - .byte "RAM 1581 driver Copyright (C) 1"; 967F 52 41 4D 20 31 35 38 31 RAM 1581 - ; 9687 20 64 72 69 76 65 72 20 driver - ; 968F 43 6F 70 79 72 69 67 68 Copyrigh - ; 9697 74 20 28 43 29 20 31 t (C) 1 - .byte "990, Jim Collette & Berkeley So"; 969E 39 39 30 2C 20 4A 69 6D 990, Jim - ; 96A6 20 43 6F 6C 6C 65 74 74 Collett - ; 96AE 65 20 26 20 42 65 72 6B e & Berk - ; 96B6 65 6C 65 79 20 53 6F eley So - .byte "ftworks. Thanks to Matt Lovele"; 96BD 66 74 77 6F 72 6B 73 2E ftworks. - ; 96C5 20 20 54 68 61 6E 6B 73 Thanks - ; 96CD 20 74 6F 20 4D 61 74 74 to Matt - ; 96D5 20 4C 6F 76 65 6C 65 Lovele - .byte "ss and Angie McKenna of BSW for"; 96DC 73 73 20 61 6E 64 20 41 ss and A - ; 96E4 6E 67 69 65 20 4D 63 4B ngie McK - ; 96EC 65 6E 6E 61 20 6F 66 20 enna of - ; 96F4 42 53 57 20 66 6F 72 BSW for - .byte " their help and support. (Q-Li"; 96FB 20 74 68 65 69 72 20 68 their h - ; 9703 65 6C 70 20 61 6E 64 20 elp and - ; 970B 73 75 70 70 6F 72 74 2E support. - ; 9713 20 20 28 51 2D 4C 69 (Q-Li - .byte "nk: GEOREP JIM)" ; 971A 6E 6B 3A 20 47 45 4F 52 nk: GEOR - ; 9722 45 50 20 4A 49 4D 29 EP JIM) - .byte $00 ; 9729 00 . -; ---------------------------------------------------------------------------- - pla ; 972A 68 h + brk ; 9674 00 . + .byte $52 ; 9675 52 R + eor ($4D,x) ; 9676 41 4D AM + jsr L3531 ; 9678 20 31 35 15 + sec ; 967B 38 8 + and (r15L),y ; 967C 31 20 1 + .byte $64 ; 967E 64 d + .byte "river Copyright (C) 1990, Jim C"; 967F 72 69 76 65 72 20 43 6F river Co + ; 9687 70 79 72 69 67 68 74 20 pyright + ; 968F 28 43 29 20 31 39 39 30 (C) 1990 + ; 9697 2C 20 4A 69 6D 20 43 , Jim C + .byte "ollette & Berkeley Softworks. "; 969E 6F 6C 6C 65 74 74 65 20 ollette + ; 96A6 26 20 42 65 72 6B 65 6C & Berkel + ; 96AE 65 79 20 53 6F 66 74 77 ey Softw + ; 96B6 6F 72 6B 73 2E 20 20 orks. + .byte "Thanks to Matt Loveless and Ang"; 96BD 54 68 61 6E 6B 73 20 74 Thanks t + ; 96C5 6F 20 4D 61 74 74 20 4C o Matt L + ; 96CD 6F 76 65 6C 65 73 73 20 oveless + ; 96D5 61 6E 64 20 41 6E 67 and Ang + .byte "ie McKenna of BSW for their hel"; 96DC 69 65 20 4D 63 4B 65 6E ie McKen + ; 96E4 6E 61 20 6F 66 20 42 53 na of BS + ; 96EC 57 20 66 6F 72 20 74 68 W for th + ; 96F4 65 69 72 20 68 65 6C eir hel + .byte "p and support. (Q-Link: GEOREP"; 96FB 70 20 61 6E 64 20 73 75 p and su + ; 9703 70 70 6F 72 74 2E 20 20 pport. + ; 970B 28 51 2D 4C 69 6E 6B 3A (Q-Link: + ; 9713 20 47 45 4F 52 45 50 GEOREP + .byte " JIM)" ; 971A 20 4A 49 4D 29 JIM) + .byte $00 ; 971F 00 . diff --git a/_newconf/newconf/r6.info b/_newconf/newconf/r6.info index 79ffb0f7..f7a0f40f 100644 --- a/_newconf/newconf/r6.info +++ b/_newconf/newconf/r6.info @@ -1,7 +1,7 @@ # This is a comment. It extends to the end of the line GLOBAL { - OUTPUTNAME "r6.asm"; - INPUTNAME "configure.cvt.record.6"; + OUTPUTNAME "r2.asm"; + INPUTNAME "configure128.cvt.record.2"; STARTADDR $9000; PAGELENGTH 0; # No paging CPU "6502"; diff --git a/config.inc b/config.inc index b37a247f..ce6b28e4 100755 --- a/config.inc +++ b/config.inc @@ -141,6 +141,8 @@ config_inc = 1 ; additionally, there are ".ifdef mega65" checks ; throughout the code .setcpu "4510" + + config128 = 1 .endif .ifdef custom diff --git a/configure/configure.cfg b/configure/configure.cfg index 29292823..8f76c40a 100644 --- a/configure/configure.cfg +++ b/configure/configure.cfg @@ -31,6 +31,7 @@ MEMORY { VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + REBOOT: define = yes, start = $6000, size = $2000; } SEGMENTS { ZEROPAGE: type = zp, load = ZP; @@ -38,7 +39,9 @@ SEGMENTS { DIRENTRY: type = ro, load = CVT, align = $FE; FILEINFO: type = ro, load = CVT, align = $FE; RECORDS: type = ro, load = CVT, align = $FE, optional = yes; - STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; + STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; + REBOOT: type = ro, run = VLIR0, load = CVT, define = yes; + STARTUP2: type = ro, run = VLIR0, load = CVT, define = yes; LOWCODE: type = ro, run = VLIR0, load = CVT, optional = yes; ONCE: type = ro, run = VLIR0, load = CVT, optional = yes; CODE: type = ro, run = VLIR0, load = CVT; diff --git a/configure/r0.s b/configure/r0.s index ecbc6329..64d2a682 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -14,14 +14,17 @@ ;.source "inc/labels.inc" ;.initmem $ea ;.zone r0 -L1466 = $1466 -L1E05 = $1E05 L3156 = $3156 +.ifdef config128 +L6216 = $62AD; +.else +L6216 = $6216; +.endif + ; *=$406 ;.import L6216 -L6216 = $6216 .segment "STARTUP" @@ -34,7 +37,17 @@ L6216 = $6216 .export L0E19 .export L0FA0 .export L0FB3 - +.export L0A66 +.export L0A6A +.export Init1541 +.export InitShadowed1541 +.export InitRAM1541 +.export Init1571 +.export Init1581 +.export InitShadowed1581 +.export InitRAM1571 +.export InitRAM1581 + ;.export L043E ; = $043E; fix! ;.export L0616 ; = $0616; fix! ;.export L0672 ; = $0672; fix! @@ -46,68 +59,113 @@ L6216 = $6216 ;.export L0FB3 ; = $0FB3; fix! .export __STARTUP_RUN__ +.import V20D9 +.import V2102 +.import V2103 +.import V2104 +.import V2105 +.import V2106 +.import V2107 +.import V2108 +.import V2109 +.import V210A +.import V2150 +.import V212B +.import V212C +.import V212F +.import V2130 +.import UIEntry +.import L180C +.import L1E05 +.import V20FA +.import V20F2 +.import V20EA + ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- - .byte $01,$03 ; 0406 01 03 .. -L0408: .byte $03,$00 ; 0408 03 00 .. -L040A: .byte $00 ;$E0 ; 040A E0 . + .byte $02,$02 ; 0406 01 03 .. +L0408: .byte $00,$00 ; 0408 03 00 .. +L040A: .byte $a0 ;$E0 ; 040A E0 . ; ---------------------------------------------------------------------------- __STARTUP_RUN__: +.ifndef config128 jsr L047C ; 040B 20 7C 04 |. +.endif lda firstBoot ; 040E AD C5 88 ... cmp #$FF ; 0411 C9 FF .. bne L0418 ; 0413 D0 03 .. jmp L04EC ; 0415 4C EC 04 L.. ; ---------------------------------------------------------------------------- L0418: bit c128Flag ; 0418 2C 13 C0 ,.. +.ifdef config128 + bpl L0479 +.else bmi L0479 ; 041B 30 5C 0\ +.endif lda curDrive ; 041D AD 89 84 ... - sta $2104 ; 0420 8D 04 21 ..! + sta V2104 ; 0420 8D 04 21 ..! tay ; 0423 A8 . lda $8486,y ; 0424 B9 86 84 ... - sta $2105 ; 0427 8D 05 21 ..! + sta V2105 ; 0427 8D 05 21 ..! jsr L0FB3 ; 042A 20 B3 0F .. jsr i_MoveData ; 042D 20 B7 C1 .. - brk ; 0430 00 . - bvc L0483 ; 0431 50 50 PP - and ($00,x) ; 0433 21 00 !. - .byte $04 ; 0435 04 . + .word $5000 + .word V2150 ;SaveBootCode + .word $0400 + ;brk ; 0430 00 . + ;bvc L0483 ; 0431 50 50 PP + ;and ($00,x) ; 0433 21 00 !. + ;.byte $04 ; 0435 04 . lda #$01 ; 0436 A9 01 .. sta NUMDRV ; 0438 8D 8D 84 ... jsr L0558 ; 043B 20 58 05 X. -L043E: lda $2104 ; 043E AD 04 21 ..! +L043E: lda V2104 ; 043E AD 04 21 ..! jsr L073E ; 0441 20 3E 07 >. jsr L1081 ; 0444 20 81 10 .. jsr L0FA0 ; 0447 20 A0 0F .. +.ifndef config128 + ; for config64 if no RAM exp is available, only + ; multiple drives are supported if they are of the same type + ; this routine checks this and sets one drive support + ; if needed lda ramExpSize ; 044A AD C3 88 ... bne L0470 ; 044D D0 21 .! lda NUMDRV ; 044F AD 8D 84 ... cmp #$02 ; 0452 C9 02 .. bcc L0470 ; 0454 90 1A .. lda driveType ; 0456 AD 8E 84 ... - cmp $848F ; 0459 CD 8F 84 ... + cmp driveType+1 ; 0459 CD 8F 84 ... bne L0462 ; 045C D0 04 .. + + ; we not support 2 1581 drives without REU cmp #$03 ; 045E C9 03 .. bne L0470 ; 0460 D0 0E .. -L0462: jsr L0739 ; 0462 20 39 07 9. +L0462: + ; 2 different dreives here not support + ; make us a 1 drive system + jsr L0739 ; 0462 20 39 07 9. jsr PurgeTurbo ; 0465 20 35 C2 5. jsr L0739 ; 0468 20 39 07 9. lda #$01 ; 046B A9 01 .. sta NUMDRV ; 046D 8D 8D 84 ... -L0470: jsr i_MoveData ; 0470 20 B7 C1 .. - bvc L0496 ; 0473 50 21 P! - brk ; 0475 00 . - bvc L0478 ; 0476 50 00 P. -L0478: .byte $04 ; 0478 04 . +L0470: +.endif + jsr i_MoveData ; 0470 20 B7 C1 .. + .word V2150 ;SaveBootCode + .word $5000 + .word $0400 + ;bvc L0496 ; 0473 50 21 P! + ;brk ; 0475 00 . + ;bvc L0478 ; 0476 50 00 P. + ;.byte $04 ; 0478 04 . L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. ; ---------------------------------------------------------------------------- +.ifndef config128 L047C: bit c128Flag ; 047C 2C 13 C0 ,.. bmi L048E ; 047F 30 0D 0. - .byte $AD ; 0481 AD . - .byte $0F ; 0482 0F . -L0483: cpy #$C9 ; 0483 C0 C9 .. - .byte $14 ; 0485 14 . + lda version + cmp #$14 bcs L048E ; 0486 B0 06 .. jsr L04CC ; 0488 20 CC 04 .. jsr L048F ; 048B 20 8F 04 .. @@ -164,52 +222,66 @@ L04CC: lda version ; 04CC AD 0F C0 lda #$3D ; 04E7 A9 3D .= sta (r0L),y ; 04E9 91 02 .. L04EB: rts ; 04EB 60 ` +.endif ; ---------------------------------------------------------------------------- -L04EC: jsr L0522 ; 04EC 20 22 05 ". +; Code executed if loaded after first boot, regularly, loading ui part + +L04EC: jsr OpenConfigFile ; 04EC 20 22 05 ". txa ; 04EF 8A . bne L050E ; 04F0 D0 1C .. lda #$01 ; 04F2 A9 01 .. jsr PointRecord ; 04F4 20 80 C2 .. - lda #$13 ; 04F7 A9 13 .. - sta r7H ; 04F9 85 11 .. - lda #$B1 ; 04FB A9 B1 .. - sta r7L ; 04FD 85 10 .. + LoadW r7, ModStart lda #$FF ; 04FF A9 FF .. sta r2L ; 0501 85 06 .. sta r2H ; 0503 85 07 .. jsr ReadRecord ; 0505 20 8C C2 .. txa ; 0508 8A . bne L050E ; 0509 D0 03 .. - jmp L1466 ; 050B 4C 66 14 Lf. + jmp UIEntry ; 050B 4C 66 14 Lf. ; ---------------------------------------------------------------------------- L050E: jmp EnterDeskTop ; 050E 4C 2C C2 L,. ; ---------------------------------------------------------------------------- +configFileClass: +.ifdef config128 + .byte "128 Config V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur + ; 0519 65 20 20 20 56 32 2E 31 e V2.1 + .byte $00 ; 0521 00 . +.else .byte "Configure V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur ; 0519 65 20 20 20 56 32 2E 31 e V2.1 .byte $00 ; 0521 00 . +.endif ; ---------------------------------------------------------------------------- -L0522: ldx #$00 ; 0522 A2 00 .. +OpenConfigFile: ldx #$00 ; 0522 A2 00 .. lda L06AC ; 0524 AD AC 06 ... bne L0557 ; 0527 D0 2E .. - lda #$20 ; 0529 A9 20 . - sta r6H ; 052B 85 0F .. - lda #$D9 ; 052D A9 D9 .. - sta r6L ; 052F 85 0E .. - lda #$0E ; 0531 A9 0E .. - sta r7L ; 0533 85 10 .. - lda #$01 ; 0535 A9 01 .. - sta r7H ; 0537 85 11 .. - lda #$05 ; 0539 A9 05 .. - sta r10H ; 053B 85 17 .. - lda #$11 ; 053D A9 11 .. - sta r10L ; 053F 85 16 .. + + LoadW r6, V20D9 + ;lda #$20 ; 0529 A9 20 . + ;sta r6H ; 052B 85 0F .. + ;lda #$D9 ; 052D A9 D9 .. + ;sta r6L + + LoadB r7L, $0e ; auto exec file type + LoadB r7H, 1 ; lookup 1 file + ; 052F 85 0E .. + ;lda #$0E ; 0531 A9 0E .. + ;sta r7L ; 0533 85 10 .. + ;lda #$01 ; 0535 A9 01 .. + ;sta r7H ; 0537 85 11 .. + + LoadW r10, configFileClass + ;lda #$05 ; 0539 A9 05 .. + ;sta r10H ; 053B 85 17 .. + ;lda #$11 ; 053D A9 11 .. + ;sta r10L ; 053F 85 16 .. jsr FindFTypes ; 0541 20 3B C2 ;. txa ; 0544 8A . bne L0557 ; 0545 D0 10 .. - lda #$20 ; 0547 A9 20 . - sta r0H ; 0549 85 03 .. - lda #$D9 ; 054B A9 D9 .. - sta r0L ; 054D 85 02 .. + + ; found, load it + LoadW r0, V20D9 jsr OpenRecordFile ; 054F 20 74 C2 t. lda #$FF ; 0552 A9 FF .. sta L06AC ; 0554 8D AC 06 ... @@ -222,14 +294,14 @@ L0558: jsr ExitTurbo ; 0558 20 32 C2 L0563: and #$A0 ; 0563 29 A0 ). sta sysRAMFlg ; 0565 8D C4 88 ... sta sysFlgCopy ; 0568 8D 12 C0 ... - lda $2105 ; 056B AD 05 21 ..! + lda V2105 ; 056B AD 05 21 ..! cmp #$02 ; 056E C9 02 .. bcs L057B ; 0570 B0 09 .. jsr L0E64 ; 0572 20 64 0E d. cmp #$FF ; 0575 C9 FF .. bne L057B ; 0577 D0 02 .. lda #$01 ; 0579 A9 01 .. -L057B: sta $2106 ; 057B 8D 06 21 ..! +L057B: sta V2106 ; 057B 8D 06 21 ..! lda curDrive ; 057E AD 89 84 ... eor #$01 ; 0581 49 01 I. jsr SetDevice ; 0583 20 B0 C2 .. @@ -237,7 +309,7 @@ L057B: sta $2106 ; 057B 8D 06 21 cmp #$FF ; 0589 C9 FF .. bne L058F ; 058B D0 02 .. lda #$00 ; 058D A9 00 .. -L058F: sta $2107 ; 058F 8D 07 21 ..! +L058F: sta V2107 ; 058F 8D 07 21 ..! lda ramExpSize ; 0592 AD C3 88 ... beq L05A3 ; 0595 F0 0C .. lda #$0A ; 0597 A9 0A .. @@ -246,8 +318,8 @@ L058F: sta $2107 ; 058F 8D 07 21 cmp #$FF ; 059F C9 FF .. bne L05A5 ; 05A1 D0 02 .. L05A3: lda #$00 ; 05A3 A9 00 .. -L05A5: sta $2108 ; 05A5 8D 08 21 ..! - lda $2104 ; 05A8 AD 04 21 ..! +L05A5: sta V2108 ; 05A5 8D 08 21 ..! + lda V2104 ; 05A8 AD 04 21 ..! jsr SetDevice ; 05AB 20 B0 C2 .. jsr L06B2 ; 05AE 20 B2 06 .. jsr L064A ; 05B1 20 4A 06 J. @@ -264,30 +336,30 @@ L05C1: sta driveType,y ; 05C1 99 8E 84 dey ; 05CD 88 . bpl L05C1 ; 05CE 10 F1 .. jsr L05F8 ; 05D0 20 F8 05 .. - lda $2106 ; 05D3 AD 06 21 ..! + lda V2106 ; 05D3 AD 06 21 ..! jsr L0769 ; 05D6 20 69 07 i. - lda $2107 ; 05D9 AD 07 21 ..! + lda V2107 ; 05D9 AD 07 21 ..! beq L05E7 ; 05DC F0 09 .. jsr L0739 ; 05DE 20 39 07 9. - lda $2107 ; 05E1 AD 07 21 ..! + lda V2107 ; 05E1 AD 07 21 ..! jsr L0769 ; 05E4 20 69 07 i. -L05E7: lda $2108 ; 05E7 AD 08 21 ..! +L05E7: lda V2108 ; 05E7 AD 08 21 ..! beq L05F7 ; 05EA F0 0B .. lda #$0A ; 05EC A9 0A .. jsr L073E ; 05EE 20 3E 07 >. - lda $2108 ; 05F1 AD 08 21 ..! + lda V2108 ; 05F1 AD 08 21 ..! jsr L0769 ; 05F4 20 69 07 i. -L05F7: rts ; 05F7 60 ` +L05F7: rts ; 05F7 60 ; ---------------------------------------------------------------------------- L05F8: lda ramExpSize ; 05F8 AD C3 88 ... beq L0615 ; 05FB F0 18 .. lda #$08 ; 05FD A9 08 .. - sta $212B ; 05FF 8D 2B 21 .+! - lda $2106 ; 0602 AD 06 21 ..! - sta $212F ; 0605 8D 2F 21 ./! + sta V212B ; 05FF 8D 2B 21 .+! + lda V2106 ; 0602 AD 06 21 ..! + sta V212F ; 0605 8D 2F 21 ./! L0608: jsr L09C8 ; 0608 20 C8 09 .. - inc $212B ; 060B EE 2B 21 .+! - lda $212B ; 060E AD 2B 21 .+! + inc V212B ; 060B EE 2B 21 .+! + lda V212B ; 060E AD 2B 21 .+! cmp #$0C ; 0611 C9 0C .. bne L0608 ; 0613 D0 F3 .. L0615: rts ; 0615 60 ` @@ -316,13 +388,13 @@ L0616: ldy curDrive ; 0616 AC 89 84 jsr MoveData ; 0646 20 7E C1 ~. L0649: rts ; 0649 60 ` ; ---------------------------------------------------------------------------- -L064A: lda $2106 ; 064A AD 06 21 ..! +L064A: lda V2106 ; 064A AD 06 21 ..! jsr L0672 ; 064D 20 72 06 r. bne L0671 ; 0650 D0 1F .. - lda $2107 ; 0652 AD 07 21 ..! + lda V2107 ; 0652 AD 07 21 ..! jsr L0672 ; 0655 20 72 06 r. bne L0671 ; 0658 D0 17 .. - lda $2108 ; 065A AD 08 21 ..! + lda V2108 ; 065A AD 08 21 ..! jsr L0672 ; 065D 20 72 06 r. bne L0671 ; 0660 D0 0F .. ldx #$00 ; 0662 A2 00 .. @@ -341,7 +413,7 @@ L0672: ldx #$00 ; 0672 A2 00 bne L06AA ; 067D D0 2B .+ tya ; 067F 98 . pha ; 0680 48 H - jsr L0522 ; 0681 20 22 05 ". + jsr OpenConfigFile ; 0681 20 22 05 ". pla ; 0684 68 h tay ; 0685 A8 . txa ; 0686 8A . @@ -372,25 +444,25 @@ L06AD: brk ; 06AD 00 brk ; 06B1 00 . L06B2: lda #$01 ; 06B2 A9 01 .. sta r0L ; 06B4 85 02 .. - lda $2104 ; 06B6 AD 04 21 ..! + lda V2104 ; 06B6 AD 04 21 ..! eor #$01 ; 06B9 49 01 I. tay ; 06BB A8 . lda $03FE,y ; 06BC B9 FE 03 ... - ldx $2107 ; 06BF AE 07 21 ..! + ldx V2107 ; 06BF AE 07 21 ..! jsr L06EB ; 06C2 20 EB 06 .. - sta $2107 ; 06C5 8D 07 21 ..! - ldy $2104 ; 06C8 AC 04 21 ..! + sta V2107 ; 06C5 8D 07 21 ..! + ldy V2104 ; 06C8 AC 04 21 ..! lda $03FE,y ; 06CB B9 FE 03 ... and #$7F ; 06CE 29 7F ). - ldx $2106 ; 06D0 AE 06 21 ..! + ldx V2106 ; 06D0 AE 06 21 ..! jsr L06EB ; 06D3 20 EB 06 .. - sta $2106 ; 06D6 8D 06 21 ..! + sta V2106 ; 06D6 8D 06 21 ..! lda ramExpSize ; 06D9 AD C3 88 ... beq L06E7 ; 06DC F0 09 .. lda L0408 ; 06DE AD 08 04 ... - ldx $2108 ; 06E1 AE 08 21 ..! + ldx V2108 ; 06E1 AE 08 21 ..! jsr L06EB ; 06E4 20 EB 06 .. -L06E7: sta $2108 ; 06E7 8D 08 21 ..! +L06E7: sta V2108 ; 06E7 8D 08 21 ..! rts ; 06EA 60 ` ; ---------------------------------------------------------------------------- L06EB: stx r2L ; 06EB 86 06 .. @@ -435,23 +507,26 @@ L0721: lda r2H ; 0721 A5 07 ; ---------------------------------------------------------------------------- L0736: lda r2L ; 0736 A5 06 .. rts ; 0738 60 ` +;rts ; ---------------------------------------------------------------------------- L0739: lda curDrive ; 0739 AD 89 84 ... eor #$01 ; 073C 49 01 I. L073E: jsr SetDevice ; 073E 20 B0 C2 .. txa ; 0741 8A . bne L0768 ; 0742 D0 24 .$ +.ifndef config128 lda ramExpSize ; 0744 AD C3 88 ... bne L075F ; 0747 D0 16 .. - lda $212F ; 0749 AD 2F 21 ./! + lda V212F ; 0749 AD 2F 21 ./! pha ; 074C 48 H ldy curDrive ; 074D AC 89 84 ... lda $8486,y ; 0750 B9 86 84 ... beq L075B ; 0753 F0 06 .. - sta $212F ; 0755 8D 2F 21 ./! + sta V212F ; 0755 8D 2F 21 ./! jsr L09C8 ; 0758 20 C8 09 .. L075B: pla ; 075B 68 h - sta $212F ; 075C 8D 2F 21 ./! + sta V212F ; 075C 8D 2F 21 ./! +.endif L075F: ldy curDrive ; 075F AC 89 84 ... lda $8486,y ; 0762 B9 86 84 ... sta curType ; 0765 8D C6 88 ... @@ -459,9 +534,9 @@ L0768: rts ; 0768 60 ; ---------------------------------------------------------------------------- L0769: pha ; 0769 48 H lda #$00 ; 076A A9 00 .. - sta $212C ; 076C 8D 2C 21 .,! + sta V212C ; 076C 8D 2C 21 .,! lda curDrive ; 076F AD 89 84 ... - sta $212B ; 0772 8D 2B 21 .+! + sta V212B ; 0772 8D 2B 21 .+! pla ; 0775 68 h beq L07B6 ; 0776 F0 3E .> cmp #$01 ; 0778 C9 01 .. @@ -500,149 +575,157 @@ L07AF: cmp #$83 ; 07AF C9 83 ; ---------------------------------------------------------------------------- L07B6: rts ; 07B6 60 ` ; ---------------------------------------------------------------------------- -L07B7: lda $212C ; 07B7 AD 2C 21 .,! +Init1541: +L07B7: lda V212C ; 07B7 AD 2C 21 .,! cmp #$01 ; 07BA C9 01 .. beq L07DE ; 07BC F0 20 . cmp #$41 ; 07BE C9 41 .A bne L07D6 ; 07C0 D0 14 .. - ldy $212B ; 07C2 AC 2B 21 .+! + ldy V212B ; 07C2 AC 2B 21 .+! lda #$01 ; 07C5 A9 01 .. sta $8486,y ; 07C7 99 86 84 ... sta $03FE,y ; 07CA 99 FE 03 ... lda #$00 ; 07CD A9 00 .. sta driveData,y ; 07CF 99 BF 88 ... - dec $180C ; 07D2 CE 0C 18 ... + dec L180C ; 07D2 CE 0C 18 ... rts ; 07D5 60 ` ; ---------------------------------------------------------------------------- L07D6: lda #$01 ; 07D6 A9 01 .. - sta $212F ; 07D8 8D 2F 21 ./! + sta V212F ; 07D8 8D 2F 21 ./! jmp L08D7 ; 07DB 4C D7 08 L.. ; ---------------------------------------------------------------------------- L07DE: rts ; 07DE 60 ` ; ---------------------------------------------------------------------------- -L07DF: lda $212C ; 07DF AD 2C 21 .,! +Init1571: +L07DF: lda V212C ; 07DF AD 2C 21 .,! cmp #$02 ; 07E2 C9 02 .. beq L07EE ; 07E4 F0 08 .. lda #$02 ; 07E6 A9 02 .. - sta $212F ; 07E8 8D 2F 21 ./! + sta V212F ; 07E8 8D 2F 21 ./! jmp L08D7 ; 07EB 4C D7 08 L.. ; ---------------------------------------------------------------------------- L07EE: rts ; 07EE 60 ` ; ---------------------------------------------------------------------------- -L07EF: lda $212C ; 07EF AD 2C 21 .,! +Init1581: +L07EF: lda V212C ; 07EF AD 2C 21 .,! cmp #$03 ; 07F2 C9 03 .. beq L07FE ; 07F4 F0 08 .. lda #$03 ; 07F6 A9 03 .. - sta $212F ; 07F8 8D 2F 21 ./! + sta V212F ; 07F8 8D 2F 21 ./! jmp L08D7 ; 07FB 4C D7 08 L.. ; ---------------------------------------------------------------------------- L07FE: rts ; 07FE 60 ` ; ---------------------------------------------------------------------------- -L07FF: lda $212C ; 07FF AD 2C 21 .,! +InitShadowed1541: +L07FF: lda V212C ; 07FF AD 2C 21 .,! cmp #$41 ; 0802 C9 41 .A beq L081F ; 0804 F0 19 .. lda #$41 ; 0806 A9 41 .A jsr L0911 ; 0808 20 11 09 .. - ldy $212B ; 080B AC 2B 21 .+! + ldy V212B ; 080B AC 2B 21 .+! sta driveData,y ; 080E 99 BF 88 ... lda #$41 ; 0811 A9 41 .A sta $8486,y ; 0813 99 86 84 ... sta $03FE,y ; 0816 99 FE 03 ... jsr NewDisk ; 0819 20 E1 C1 .. - dec $180C ; 081C CE 0C 18 ... + dec L180C ; 081C CE 0C 18 ... L081F: rts ; 081F 60 ` ; ---------------------------------------------------------------------------- -L0820: lda $212C ; 0820 AD 2C 21 .,! +InitShadowed1581: +L0820: lda V212C ; 0820 AD 2C 21 .,! cmp #$43 ; 0823 C9 43 .C beq L0840 ; 0825 F0 19 .. lda #$43 ; 0827 A9 43 .C jsr L0911 ; 0829 20 11 09 .. - ldy $212B ; 082C AC 2B 21 .+! + ldy V212B ; 082C AC 2B 21 .+! sta driveData,y ; 082F 99 BF 88 ... lda #$43 ; 0832 A9 43 .C sta $8486,y ; 0834 99 86 84 ... sta $03FE,y ; 0837 99 FE 03 ... jsr NewDisk ; 083A 20 E1 C1 .. - dec $180C ; 083D CE 0C 18 ... + dec L180C ; 083D CE 0C 18 ... L0840: rts ; 0840 60 ` ; ---------------------------------------------------------------------------- -L0841: lda $212C ; 0841 AD 2C 21 .,! +InitRAM1541: +L0841: lda V212C ; 0841 AD 2C 21 .,! cmp #$81 ; 0844 C9 81 .. beq L0872 ; 0846 F0 2A .* lda #$81 ; 0848 A9 81 .. - sta $212F ; 084A 8D 2F 21 ./! + sta V212F ; 084A 8D 2F 21 ./! jsr L09C8 ; 084D 20 C8 09 .. inc NUMDRV ; 0850 EE 8D 84 ... lda #$81 ; 0853 A9 81 .. jsr L0911 ; 0855 20 11 09 .. - ldy $212B ; 0858 AC 2B 21 .+! + ldy V212B ; 0858 AC 2B 21 .+! sta driveData,y ; 085B 99 BF 88 ... lda #$81 ; 085E A9 81 .. sta $8486,y ; 0860 99 86 84 ... sta $03FE,y ; 0863 99 FE 03 ... - lda $212B ; 0866 AD 2B 21 .+! + lda V212B ; 0866 AD 2B 21 .+! jsr L073E ; 0869 20 3E 07 >. jsr L0A8A ; 086C 20 8A 0A .. - dec $180C ; 086F CE 0C 18 ... + dec L180C ; 086F CE 0C 18 ... L0872: rts ; 0872 60 ` ; ---------------------------------------------------------------------------- -L0873: lda $212C ; 0873 AD 2C 21 .,! +InitRAM1571: +L0873: lda V212C ; 0873 AD 2C 21 .,! cmp #$82 ; 0876 C9 82 .. beq L08A4 ; 0878 F0 2A .* lda #$82 ; 087A A9 82 .. - sta $212F ; 087C 8D 2F 21 ./! + sta V212F ; 087C 8D 2F 21 ./! jsr L09C8 ; 087F 20 C8 09 .. inc NUMDRV ; 0882 EE 8D 84 ... lda #$82 ; 0885 A9 82 .. jsr L0911 ; 0887 20 11 09 .. - ldy $212B ; 088A AC 2B 21 .+! + ldy V212B ; 088A AC 2B 21 .+! sta driveData,y ; 088D 99 BF 88 ... lda #$82 ; 0890 A9 82 .. sta $8486,y ; 0892 99 86 84 ... sta $03FE,y ; 0895 99 FE 03 ... - lda $212B ; 0898 AD 2B 21 .+! + lda V212B ; 0898 AD 2B 21 .+! jsr L073E ; 089B 20 3E 07 >. jsr L0A8A ; 089E 20 8A 0A .. - dec $180C ; 08A1 CE 0C 18 ... + dec L180C ; 08A1 CE 0C 18 ... L08A4: rts ; 08A4 60 ` ; ---------------------------------------------------------------------------- -L08A5: lda $212C ; 08A5 AD 2C 21 .,! +InitRAM1581: +L08A5: lda V212C ; 08A5 AD 2C 21 .,! cmp #$83 ; 08A8 C9 83 .. beq L08D6 ; 08AA F0 2A .* lda #$83 ; 08AC A9 83 .. - sta $212F ; 08AE 8D 2F 21 ./! + sta V212F ; 08AE 8D 2F 21 ./! jsr L09C8 ; 08B1 20 C8 09 .. inc NUMDRV ; 08B4 EE 8D 84 ... lda #$83 ; 08B7 A9 83 .. jsr L0911 ; 08B9 20 11 09 .. - ldy $212B ; 08BC AC 2B 21 .+! + ldy V212B ; 08BC AC 2B 21 .+! sta driveData,y ; 08BF 99 BF 88 ... lda #$83 ; 08C2 A9 83 .. sta $8486,y ; 08C4 99 86 84 ... sta $03FE,y ; 08C7 99 FE 03 ... - lda $212B ; 08CA AD 2B 21 .+! + lda V212B ; 08CA AD 2B 21 .+! jsr L073E ; 08CD 20 3E 07 >. jsr L0A8A ; 08D0 20 8A 0A .. - dec $180C ; 08D3 CE 0C 18 ... + dec L180C ; 08D3 CE 0C 18 ... L08D6: rts ; 08D6 60 ` ; ---------------------------------------------------------------------------- L08D7: jsr L09C8 ; 08D7 20 C8 09 .. - lda $212B ; 08DA AD 2B 21 .+! + lda V212B ; 08DA AD 2B 21 .+! jsr L073E ; 08DD 20 3E 07 >. lda firstBoot ; 08E0 AD C5 88 ... cmp #$FF ; 08E3 C9 FF .. beq L08F6 ; 08E5 F0 0F .. - ldy $212B ; 08E7 AC 2B 21 .+! - lda $212F ; 08EA AD 2F 21 ./! + ldy V212B ; 08E7 AC 2B 21 .+! + lda V212F ; 08EA AD 2F 21 ./! sta $8486,y ; 08ED 99 86 84 ... inc NUMDRV ; 08F0 EE 8D 84 ... clv ; 08F3 B8 . bvc L08FF ; 08F4 50 09 P. L08F6: jsr L1E05 ; 08F6 20 05 1E .. - lda $212B ; 08F9 AD 2B 21 .+! + lda V212B ; 08F9 AD 2B 21 .+! jsr L073E ; 08FC 20 3E 07 >. -L08FF: dec $180C ; 08FF CE 0C 18 ... - ldy $212B ; 0902 AC 2B 21 .+! +L08FF: dec L180C ; 08FF CE 0C 18 ... + ldy V212B ; 0902 AC 2B 21 .+! lda $8486,y ; 0905 B9 86 84 ... sta $03FE,y ; 0908 99 FE 03 ... lda #$00 ; 090B A9 00 .. @@ -653,7 +736,7 @@ L0911: pha ; 0911 48 jsr L0977 ; 0912 20 77 09 w. pla ; 0915 68 h sta r0L ; 0916 85 02 .. - lda $212C ; 0918 AD 2C 21 .,! + lda V212C ; 0918 AD 2C 21 .,! and #$C0 ; 091B 29 C0 ). bne L092A ; 091D D0 0B .. lda r0L ; 091F A5 02 .. @@ -661,7 +744,7 @@ L0911: pha ; 0911 48 cmp #$01 ; 0924 C9 01 .. beq L0933 ; 0926 F0 0B .. bne L0945 ; 0928 D0 1B .. -L092A: ldy $212B ; 092A AC 2B 21 .+! +L092A: ldy V212B ; 092A AC 2B 21 .+! lda driveData,y ; 092D B9 BF 88 ... ldx #$00 ; 0930 A2 00 .. rts ; 0932 60 ` @@ -669,7 +752,7 @@ L092A: ldy $212B ; 092A AC 2B 21 L0933: ldy ramExpSize ; 0933 AC C3 88 ... L0936: dey ; 0936 88 . bmi L0942 ; 0937 30 09 0. - lda $2130,y ; 0939 B9 30 21 .0! + lda V2130,y ; 0939 B9 30 21 .0! bne L0936 ; 093C D0 F8 .. tya ; 093E 98 . ldx #$00 ; 093F A2 00 .. @@ -685,7 +768,7 @@ L0949: lda r0L ; 0949 A5 02 L094D: sty r1L ; 094D 84 04 .. cpy ramExpSize ; 094F CC C3 88 ... bcs L0974 ; 0952 B0 20 . - lda $2130,y ; 0954 B9 30 21 .0! + lda V2130,y ; 0954 B9 30 21 .0! iny ; 0957 C8 . cmp #$00 ; 0958 C9 00 .. bne L094D ; 095A D0 F1 .. @@ -693,7 +776,7 @@ L095C: dec r0H ; 095C C6 03 beq L096F ; 095E F0 0F .. cpy ramExpSize ; 0960 CC C3 88 ... bcs L0974 ; 0963 B0 0F .. - lda $2130,y ; 0965 B9 30 21 .0! + lda V2130,y ; 0965 B9 30 21 .0! iny ; 0968 C8 . cmp #$00 ; 0969 C9 00 .. bne L0949 ; 096B D0 DC .. @@ -707,11 +790,11 @@ L0974: ldx #$FF ; 0974 A2 FF ; ---------------------------------------------------------------------------- L0977: ldy #$1F ; 0977 A0 1F .. lda #$00 ; 0979 A9 00 .. -L097B: sta $2130,y ; 097B 99 30 21 .0! +L097B: sta V2130,y ; 097B 99 30 21 .0! dey ; 097E 88 . bpl L097B ; 097F 10 FA .. lda #$FF ; 0981 A9 FF .. - sta $2130 ; 0983 8D 30 21 .0! + sta V2130 ; 0983 8D 30 21 .0! lda #$08 ; 0986 A9 08 .. sta r0L ; 0988 85 02 .. L098A: ldy r0L ; 098A A4 02 .. @@ -723,7 +806,7 @@ L098A: ldy r0L ; 098A A4 02 lda driveData,y ; 0997 B9 BF 88 ... tay ; 099A A8 . L099B: lda #$FF ; 099B A9 FF .. - sta $2130,y ; 099D 99 30 21 .0! + sta V2130,y ; 099D 99 30 21 .0! iny ; 09A0 C8 . dex ; 09A1 CA . bne L099B ; 09A2 D0 F7 .. @@ -757,8 +840,8 @@ L09C8: lda ramExpSize ; 09C8 AD C3 88 sta sysRAMFlg ; 09D2 8D C4 88 ... sta sysFlgCopy ; 09D5 8D 12 C0 ... sta L040A ; 09D8 8D 0A 04 ... - ldy $212F ; 09DB AC 2F 21 ./! - lda $212B ; 09DE AD 2B 21 .+! + ldy V212F ; 09DB AC 2F 21 ./! + lda V212B ; 09DE AD 2B 21 .+! jsr L0A3D ; 09E1 20 3D 0A =. lda #$90 ; 09E4 A9 90 .. sta r1H ; 09E6 85 05 .. @@ -780,17 +863,15 @@ L09F0: lda sysRAMFlg ; 09F0 AD C4 88 L0A0B: ldy $848F ; 0A0B AC 8F 84 ... beq L0A18 ; 0A0E F0 08 .. lda #$09 ; 0A10 A9 09 .. - .byte $20 ; 0A12 20 -L0A13: and $200A,x ; 0A13 3D 0A 20 =. - iny ; 0A16 C8 . - .byte $C2 ; 0A17 C2 . + jsr L0A3D + jsr $c2c8 L0A18: ldy $8490 ; 0A18 AC 90 84 ... beq L0A25 ; 0A1B F0 08 .. lda #$0A ; 0A1D A9 0A .. jsr L0A3D ; 0A1F 20 3D 0A =. jsr StashRAM ; 0A22 20 C8 C2 .. -L0A25: ldy $212F ; 0A25 AC 2F 21 ./! - lda $212B ; 0A28 AD 2B 21 .+! +L0A25: ldy V212F ; 0A25 AC 2F 21 ./! + lda V212B ; 0A28 AD 2B 21 .+! jsr L0A3D ; 0A2B 20 3D 0A =. jsr StashRAM ; 0A2E 20 C8 C2 .. lda #$90 ; 0A31 A9 90 .. @@ -834,7 +915,8 @@ L0A6A: lsr ; 0A6A 4A J brk ; 0A70 00 . .byte $80 ; 0A71 80 . .byte $83 ; 0A72 83 . - bcc L0A13 ; 0A73 90 9E .. + ;bcc L0A13 ; 0A73 90 9E .. + .byte $90, $9e .byte $AB ; 0A75 AB . L0A76: tya ; 0A76 98 . bpl L0A85 ; 0A77 10 0C .. @@ -849,7 +931,7 @@ L0A85: and #$0F ; 0A85 29 0F dey ; 0A88 88 . L0A89: rts ; 0A89 60 ` ; ---------------------------------------------------------------------------- -L0A8A: ldy $212B ; 0A8A AC 2B 21 .+! +L0A8A: ldy V212B ; 0A8A AC 2B 21 .+! lda $8486,y ; 0A8D B9 86 84 ... and #$0F ; 0A90 29 0F ). cmp #$03 ; 0A92 C9 03 .. @@ -1238,22 +1320,19 @@ L0EF5: lda r0H ; 0EF5 A5 03 lda r0L ; 0EFA A5 02 .. sta L0F71 ; 0EFC 8D 71 0F .q. lda #$20 ; 0EFF A9 20 . - sta $2109 ; 0F01 8D 09 21 ..! + sta V2109 ; 0F01 8D 09 21 ..! rts ; 0F04 60 ` ; ---------------------------------------------------------------------------- -L0F05: ldy $2109 ; 0F05 AC 09 21 ..! +L0F05: ldy V2109 ; 0F05 AC 09 21 ..! cpy #$20 ; 0F08 C0 20 . bcs L0F15 ; 0F0A B0 09 .. - lda $210A,y ; 0F0C B9 0A 21 ..! - inc $2109 ; 0F0F EE 09 21 ..! + lda V210A,y ; 0F0C B9 0A 21 ..! + inc V2109 ; 0F0F EE 09 21 ..! ldx #$00 ; 0F12 A2 00 .. rts ; 0F14 60 ` ; ---------------------------------------------------------------------------- L0F15: jsr InitForIO ; 0F15 20 5C C2 \. - lda #$0F ; 0F18 A9 0F .. - sta r0H ; 0F1A 85 03 .. - lda #$6E ; 0F1C A9 6E .n - sta r0L ; 0F1E 85 02 .. + LoadW r0, L0F6E jsr L0F74 ; 0F20 20 74 0F t. beq L0F29 ; 0F23 F0 04 .. jsr DoneWithIO ; 0F25 20 5F C2 _. @@ -1266,7 +1345,7 @@ L0F29: jsr UNLSN ; 0F29 20 AE FF jsr TKSA ; 0F34 20 96 FF .. ldy #$00 ; 0F37 A0 00 .. L0F39: jsr ACPTR ; 0F39 20 A5 FF .. - sta $210A,y ; 0F3C 99 0A 21 ..! + sta V210A,y ; 0F3C 99 0A 21 ..! iny ; 0F3F C8 . cpy #$20 ; 0F40 C0 20 . bcc L0F39 ; 0F42 90 F5 .. @@ -1278,7 +1357,7 @@ L0F39: jsr ACPTR ; 0F39 20 A5 FF jsr UNLSN ; 0F52 20 AE FF .. jsr DoneWithIO ; 0F55 20 5F C2 _. lda #$00 ; 0F58 A9 00 .. - sta $2109 ; 0F5A 8D 09 21 ..! + sta V2109 ; 0F5A 8D 09 21 ..! clc ; 0F5D 18 . lda #$20 ; 0F5E A9 20 . adc L0F71 ; 0F60 6D 71 0F mq. @@ -1287,6 +1366,7 @@ L0F39: jsr ACPTR ; 0F39 20 A5 FF inc L0F72 ; 0F68 EE 72 0F .r. L0F6B: clv ; 0F6B B8 . bvc L0F05 ; 0F6C 50 97 P. +L0F6E: eor $522D ; 0F6E 4D 2D 52 M-R L0F71: brk ; 0F71 00 . L0F72: brk ; 0F72 00 . @@ -1328,13 +1408,13 @@ L0FB3: jsr InitForIO ; 0FB3 20 5C C2 lda #$00 ; 0FB6 A9 00 .. sta ramExpSize ; 0FB8 8D C3 88 ... lda #$02 ; 0FBB A9 02 .. - sta $2102 ; 0FBD 8D 02 21 ..! + sta V2102 ; 0FBD 8D 02 21 ..! ;rts lda EXP_BASE ; 0FC0 AD 00 DF ... and #$10 ; 0FC3 29 10 ). beq L0FCC ; 0FC5 F0 05 .. lda #$20 ; 0FC7 A9 20 . - sta $2102 ; 0FC9 8D 02 21 ..! + sta V2102 ; 0FC9 8D 02 21 ..! L0FCC: lda EXP_BASE ; 0FCC AD 00 DF ... and #$E0 ; 0FCF 29 E0 ). bne L100D ; 0FD1 D0 3A .: @@ -1356,7 +1436,7 @@ L0FE4: dey ; 0FE4 88 L0FF5: jsr L1010 ; 0FF5 20 10 10 .. bcc L100A ; 0FF8 90 10 .. lda ramExpSize ; 0FFA AD C3 88 ... - cmp $2102 ; 0FFD CD 02 21 ..! + cmp V2102 ; 0FFD CD 02 21 ..! beq L100D ; 1000 F0 0B .. inc ramExpSize ; 1002 EE C3 88 ... inc r3L ; 1005 E6 08 .. @@ -1366,10 +1446,8 @@ L100A: dec ramExpSize ; 100A CE C3 88 L100D: jmp DoneWithIO ; 100D 4C 5F C2 L_. ; ---------------------------------------------------------------------------- ;*=$1010 -L1010: lda #$20 ; 1010 A9 20 . - sta r0H ; 1012 85 03 .. - lda #$FA ; 1014 A9 FA .. - sta r0L ; 1016 85 02 .. +L1010: + LoadW r0, V20FA lda #$00 ; 1018 A9 00 .. sta r1L ; 101A 85 04 .. sta r1H ; 101C 85 05 .. @@ -1378,39 +1456,27 @@ L1010: lda #$20 ; 1010 A9 20 lda #$08 ; 1022 A9 08 .. sta r2L ; 1024 85 06 .. jsr FetchRAM ; 1026 20 CB C2 .. - lda #$10 ; 1029 A9 10 .. - sta r0H ; 102B 85 03 .. - lda #$79 ; 102D A9 79 .y - sta r0L ; 102F 85 02 .. + LoadW r0, L1079 jsr StashRAM ; 1031 20 C8 C2 .. - lda #$20 ; 1034 A9 20 . - sta r0H ; 1036 85 03 .. - lda #$EA ; 1038 A9 EA .. - sta r0L ; 103A 85 02 .. + LoadW r0, V20EA jsr FetchRAM ; 103C 20 CB C2 .. lda r3L ; 103F A5 08 .. pha ; 1041 48 H lda #$00 ; 1042 A9 00 .. sta r3L ; 1044 85 08 .. - lda #$20 ; 1046 A9 20 . - sta r0H ; 1048 85 03 .. - lda #$F2 ; 104A A9 F2 .. - sta r0L ; 104C 85 02 .. + LoadW r0, V20F2 jsr FetchRAM ; 104E 20 CB C2 .. pla ; 1051 68 h sta r3L ; 1052 85 08 .. - lda #$20 ; 1054 A9 20 . - sta r0H ; 1056 85 03 .. - lda #$FA ; 1058 A9 FA .. - sta r0L ; 105A 85 02 .. + LoadW r0, V20FA jsr StashRAM ; 105C 20 C8 C2 .. ldy #$07 ; 105F A0 07 .. L1061: lda L1079,y ; 1061 B9 79 10 .y. - cmp $20EA,y ; 1064 D9 EA 20 .. + cmp V20EA,y ; 1064 D9 EA 20 .. bne L1077 ; 1067 D0 0E .. ldx r3L ; 1069 A6 08 .. beq L1072 ; 106B F0 05 .. - cmp $20F2,y ; 106D D9 F2 20 .. + cmp V20F2,y ; 106D D9 F2 20 .. beq L1077 ; 1070 F0 05 .. L1072: dey ; 1072 88 . bpl L1061 ; 1073 10 EC .. @@ -1425,7 +1491,7 @@ L1079: .byte "RAMCheck" ; 1079 52 41 4D 43 68 65 63 6B L1081: lda sysRAMFlg ; 1081 AD C4 88 ... and #$20 ; 1084 29 20 ) beq L1094 ; 1086 F0 0C .. - lda $2104 ; 1088 AD 04 21 ..! + lda V2104 ; 1088 AD 04 21 ..! jsr L073E ; 108B 20 3E 07 >. jsr L1095 ; 108E 20 95 10 .. jsr L1145 ; 1091 20 45 11 E. @@ -1498,16 +1564,80 @@ L10C2: jsr L113A ; 10C2 20 3A 11 sta r2L ; 111E 85 06 .. lda #$00 ; 1120 A9 00 .. sta r3L ; 1122 85 08 .. + L1124: ldy #$00 ; 1124 A0 00 .. +.ifdef config128 + php ; 1072 08 . + sei ; 1073 78 x + lda #$7F ; 1074 A9 7F .. + sta config ; 1076 8D 00 FF ... +.endif L1126: lda (r5L),y ; 1126 B1 0C .. sta diskBlkBuf,y ; 1128 99 00 80 ... iny ; 112B C8 . bne L1126 ; 112C D0 F8 .. +.ifdef config128 + + lda #$7E ; 1081 A9 7E .~ + sta config ; 1083 8D 00 FF ... + plp ; 1086 28 ( +.endif jsr StashRAM ; 112E 20 C8 C2 .. inc r5H ; 1131 E6 0D .. inc r1H ; 1133 E6 05 .. dec r4L ; 1135 C6 0A .. bne L1124 ; 1137 D0 EB .. + +.ifdef config128 + php ; 1092 08 . + sei ; 1093 78 x + lda $D506 ; 1094 AD 06 D5 ... + pha ; 1097 48 H + lda #$40 ; 1098 A9 40 .@ + sta r4L ; 109A 85 0A .. + lda #$C0 ; 109C A9 C0 .. + sta r5H ; 109E 85 0D .. + lda #$00 ; 10A0 A9 00 .. + sta r5L ; 10A2 85 0C .. + lda #$80 ; 10A4 A9 80 .. + sta r0H ; 10A6 85 03 .. + lda #$00 ; 10A8 A9 00 .. + sta r0L ; 10AA 85 02 .. + lda #$39 ; 10AC A9 39 .9 + sta r1H ; 10AE 85 05 .. + lda #$00 ; 10B0 A9 00 .. + sta r1L ; 10B2 85 04 .. + lda #$01 ; 10B4 A9 01 .. + sta r2H ; 10B6 85 07 .. + lda #$00 ; 10B8 A9 00 .. + sta r2L ; 10BA 85 06 .. + lda #$00 ; 10BC A9 00 .. + sta r3L ; 10BE 85 08 .. +L10C0: lda $D506 ; 10C0 AD 06 D5 ... + and #$F0 ; 10C3 29 F0 ). + ora #$0B ; 10C5 09 0B .. + sta $D506 ; 10C7 8D 06 D5 ... + lda #$7F ; 10CA A9 7F .. + sta config ; 10CC 8D 00 FF ... + ldy #$00 ; 10CF A0 00 .. +L10D1: lda (r5L),y ; 10D1 B1 0C .. + sta diskBlkBuf,y ; 10D3 99 00 80 ... + iny ; 10D6 C8 . + bne L10D1 ; 10D7 D0 F8 .. + lda #$7E ; 10D9 A9 7E .~ + sta config ; 10DB 8D 00 FF ... + lda $D506 ; 10DE AD 06 D5 ... + and #$F0 ; 10E1 29 F0 ). + sta $D506 ; 10E3 8D 06 D5 ... + jsr StashRAM ; 10E6 20 C8 C2 .. + inc r5H ; 10E9 E6 0D .. + inc r1H ; 10EB E6 05 .. + dec r4L ; 10ED C6 0A .. + bne L10C0 ; 10EF D0 CF .. + pla ; 10F1 68 h + sta $D506 ; 10F2 8D 06 D5 ... + plp ; 10F5 28 ( +.endif rts ; 1139 60 ` ; ---------------------------------------------------------------------------- L113A: lda #$00 ; 113A A9 00 .. @@ -1522,18 +1652,26 @@ L1145: jsr L113A ; 1145 20 3A 11 sta r1H ; 114A 85 05 .. lda #$05 ; 114C A9 05 .. sta r2H ; 114E 85 07 .. - lda #$11 ; 1150 A9 11 .. - sta r0H ; 1152 85 03 .. - lda #$5B ; 1154 A9 5B .[ - sta r0L ; 1156 85 02 .. + LoadW r0, RebootCode jmp StashRAM ; 1158 4C C8 C2 L.. + +.segment "REBOOT" + ; ---------------------------------------------------------------------------- +; RAM reboot code? +RebootCode: sei ; 115B 78 x cld ; 115C D8 . ldx #$FF ; 115D A2 FF .. txs ; 115F 9A . lda #$30 ; 1160 A9 30 .0 sta CPU_DATA ; 1162 85 01 .. +.ifdef config128 + lda #$7E ; 1121 A9 7E .~ + sta config ; 1123 8D 00 FF ... + lda #$40 ; 1126 A9 40 .@ + sta $D506 ; 1128 8D 06 D5 ... +.endif lda #$90 ; 1164 A9 90 .. sta r0H ; 1166 85 03 .. lda #$00 ; 1168 A9 00 .. @@ -1606,18 +1744,84 @@ L1145: jsr L113A ; 1145 20 3A 11 sta r2L ; 11F2 85 06 .. L11F4: jsr L6216 ; 11F4 20 16 62 .b ldy #$00 ; 11F7 A0 00 .. +.ifdef config128 + lda #$7F ; 11C0 A9 7F .. + sta config ; 11C2 8D 00 FF ... + lda r5H ; 11C5 A5 0D .. + cmp #$FF ; 11C7 C9 FF .. + bne L11CD ; 11C9 D0 02 .. + ldy #$05 ; 11CB A0 05 .. +L11CD: lda diskBlkBuf,y ; 11CD B9 00 80 ... + sta (r5L),y ; 11D0 91 0C .. + iny ; 11D2 C8 . + bne L11CD ; 11D3 D0 F8 .. + lda #$7E ; 11D5 A9 7E .~ + sta config ; 11D7 8D 00 FF ... + inc r5H ; 11DA E6 0D .. + inc r1H ; 11DC E6 05 .. + dec r4L ; 11DE C6 0A .. + bne L11F4 ;L11BB ; 11E0 D0 D9 .. + lda #$40 ; 11E2 A9 40 .@ + sta r4L ; 11E4 85 0A .. + lda #$C0 ; 11E6 A9 C0 .. + sta r5H ; 11E8 85 0D .. + lda #$00 ; 11EA A9 00 .. + sta r5L ; 11EC 85 0C .. + lda #$80 ; 11EE A9 80 .. + sta r0H ; 11F0 85 03 .. + lda #$00 ; 11F2 A9 00 .. + sta r0L ; 11F4 85 02 .. + lda #$39 ; 11F6 A9 39 .9 + sta r1H ; 11F8 85 05 .. + lda #$00 ; 11FA A9 00 .. + sta r1L ; 11FC 85 04 .. + lda #$01 ; 11FE A9 01 .. + sta r2H ; 1200 85 07 .. + lda #$00 ; 1202 A9 00 .. + sta r2L ; 1204 85 06 .. +L1206: jsr $62AD ; 1206 20 AD 62 .b + lda #$4B ; 1209 A9 4B .K + sta $D506 ; 120B 8D 06 D5 ... + lda #$7F ; 120E A9 7F .. + sta config ; 1210 8D 00 FF ... + ldy #$00 ; 1213 A0 00 .. + lda r5H ; 1215 A5 0D .. + cmp #$FF ; 1217 C9 FF .. + bne L11F9 ; 1219 D0 02 .. + ldy #$05 ; 121B A0 05 .. +.endif L11F9: lda diskBlkBuf,y ; 11F9 B9 00 80 ... sta (r5L),y ; 11FC 91 0C .. iny ; 11FE C8 . bne L11F9 ; 11FF D0 F8 .. +.ifdef config128 + lda #$7E ; 1225 A9 7E .~ + sta config ; 1227 8D 00 FF ... + lda #$40 ; 122A A9 40 .@ + sta $D506 ; 122C 8D 06 D5 ... +.endif inc r5H ; 1201 E6 0D .. inc r1H ; 1203 E6 05 .. dec r4L ; 1205 C6 0A .. +.ifdef config128 + bne L1206 ; 1207 D0 EB .. +.else bne L11F4 ; 1207 D0 EB .. +.endif jsr i_FillRam ; 1209 20 B4 C1 .. brk ; 120C 00 . ora CPU_DDR ; 120D 05 00 .. sty CPU_DDR ; 120F 84 00 .. +.ifdef config128 + lda $D505 ; 123F AD 05 D5 ... + and #$80 ; 1242 29 80 ). + eor #$80 ; 1244 49 80 I. + sta graphMode ; 1246 85 3F .? + lda #$80 ; 1248 A9 80 .. + sta dispBufferOn ; 124A 85 2F ./ + bit graphMode ; 124C 24 3F $? + bmi L1278 ; 124E 30 28 0( +.endif lda #$00 ; 1211 A9 00 .. sta r0L ; 1213 85 02 .. lda #$A0 ; 1215 A9 A0 .. @@ -1639,10 +1843,28 @@ L121D: lda #$55 ; 121D A9 55 inc r0H ; 1232 E6 03 .. L1234: dex ; 1234 CA . bne L121B ; 1235 D0 E4 .. +.ifdef config128 + beq L1286 ; 1276 F0 0E .. +L1278: lda #$02 ; 1278 A9 02 .. + jsr SetPattern ; 127A 20 39 C1 9. + jsr i_Rectangle ; 127D 20 9F C1 .. + brk ; 1280 00 . + .byte $C7 ; 1281 C7 . + brk ; 1282 00 . + brk ; 1283 00 . + .byte $7F ; 1284 7F . + .byte $02 ; 1285 02 . +L1286: +.endif + jsr FirstInit ; 1237 20 71 C2 q. lda #$FF ; 123A A9 FF .. sta firstBoot ; 123C 8D C5 88 ... jsr MOUSE_BASE ; 123F 20 80 FE .. +.ifdef config128 + lda graphMode ; 1291 A5 3F .? + jsr SetNewMode ; 1293 20 DD C2 .. +.endif lda #$88 ; 1242 A9 88 .. sta r0H ; 1244 85 03 .. lda #$C3 ; 1246 A9 C3 .. @@ -1764,18 +1986,18 @@ L131A: dey ; 131A 88 sta interleave ; 133B 8D 8C 84 ... jsr SetDevice ; 133E 20 B0 C2 .. lda #$08 ; 1341 A9 08 .. - sta $2103 ; 1343 8D 03 21 ..! -L1346: ldy $2103 ; 1346 AC 03 21 ..! + sta V2103 ; 1343 8D 03 21 ..! +L1346: ldy V2103 ; 1346 AC 03 21 ..! lda $8486,y ; 1349 B9 86 84 ... beq L135E ; 134C F0 10 .. cpy #$0A ; 134E C0 0A .. bcs L1355 ; 1350 B0 03 .. inc NUMDRV ; 1352 EE 8D 84 ... -L1355: lda $2103 ; 1355 AD 03 21 ..! +L1355: lda V2103 ; 1355 AD 03 21 ..! jsr SetDevice ; 1358 20 B0 C2 .. jsr NewDisk ; 135B 20 E1 C1 .. -L135E: inc $2103 ; 135E EE 03 21 ..! - lda $2103 ; 1361 AD 03 21 ..! +L135E: inc V2103 ; 135E EE 03 21 ..! + lda V2103 ; 1361 AD 03 21 ..! cmp #$0C ; 1364 C9 0C .. bcc L1346 ; 1366 90 DE .. beq L1346 ; 1368 F0 DC .. @@ -1785,10 +2007,17 @@ L135E: inc $2103 ; 135E EE 03 21 ; ---------------------------------------------------------------------------- ;*=$1371 ;jmp FetchRAM +;L6216: ldy #$91 ; 1371 A0 91 .. +.ifdef config128 + lda #$00 ; 13C7 A9 00 .. + sta $D030 ;clkreg ; 13C9 8D 30 D0 .0. + nop ; 13CC EA . +.else ldx CPU_DATA ; 1373 A6 01 .. lda #$35 ; 1375 A9 35 .5 sta CPU_DATA ; 1377 85 01 .. +.endif lda r0H ; 1379 A5 03 .. sta $DF03 ; 137B 8D 03 DF ... lda r0L ; 137E A5 02 .. @@ -1810,9 +2039,16 @@ L135E: inc $2103 ; 135E EE 03 21 L13A7: lda EXP_BASE ; 13A7 AD 00 DF ... and #$60 ; 13AA 29 60 )` beq L13A7 ; 13AC F0 F9 .. +.ifdef config128 + nop + nop +.else stx CPU_DATA ; 13AE 86 01 .. +.endif rts ; 13B0 60 ` ; ---------------------------------------------------------------------------- +.segment "STARTUP2" + ;*=$13b1 ; .byte $A2 ; 13B1 A2 . diff --git a/configure/r1.s b/configure/r1.s index 301ec0d6..c013cfd9 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -20,6 +20,9 @@ ;!zone r1 ; ---------------------------------------------------------------------------- +vdcreg = $d600 +vdcdata = $d601 + ; fix! ;L043E = $043E; fix! ;L0616 = $0616; fix! @@ -40,118 +43,244 @@ .import L0E19 .import L0FA0 .import L0FB3 +.import L0A66 +.import L0A6A +.import Init1541 +.import InitShadowed1541 +.import InitRAM1541 +.import Init1571 +.import Init1581 +.import InitShadowed1581 +.import InitRAM1571 +.import InitRAM1581 + +.export V20D9 +.export V2102 +.export V2103 +.export V2104 +.export V2105 +.export V2106 +.export V2107 +.export V2108 +.export V2109 +.export V210A +.export V212B +.export V212C +.export V212D +.export V212E +.export V212F +.export V2130 +.export V2150 +.export UIEntry +.export L180C +.export L1E05 +.export V20FA +.export V20F2 +.export V20EA L6819 = $6819 ; ---------------------------------------------------------------------------- - adc #$C4 ; 13B1 69 C4 i. - ldy CPU_DDR,x ; 13B3 B4 00 .. - rol CPU_DATA,x ; 13B5 36 01 6. - sta TURBO_DD00_CPY ; 13B7 85 8F .. - asl $3001,x ; 13B9 1E 01 30 ..0 - ora ($A1,x) ; 13BC 01 A1 .. - .byte $AB ; 13BE AB . - asl $3001,x ; 13BF 1E 01 30 ..0 - ora (r2H,x) ; 13C2 01 07 .. +AreaTable: +;#0 + .byte $69, $c4 +.ifdef config128 + .word $b4 + DOUBLE_W, $136 + DOUBLE_W +.else + .word $b4, $136 +.endif + +;#1 + .byte $85, $8f +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#2 + .byte $A1, $AB +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#3 + .byte $07 .byte $62 ; 13C4 62 b - asl SCREEN_BASE,x ; 13C5 1E 00 A0 ... - brk ; 13C8 00 . +.ifdef config128 + .word $1e+DOUBLE_W, $a0+DOUBLE_W +.else + .word $1e, $a0 +.endif + +;#4 .byte $07 ; 13C9 07 . .byte $62 ; 13CA 62 b - ldy CPU_DDR,x ; 13CB B4 00 .. - rol CPU_DATA,x ; 13CD 36 01 6. - adc #$C4 ; 13CF 69 C4 i. - asl SCREEN_BASE,x ; 13D1 1E 00 A0 ... - brk ; 13D4 00 . - .byte $17 ; 13D5 17 . - and ($88,x) ; 13D6 21 88 !. - brk ; 13D8 00 . - txs ; 13D9 9A . - brk ; 13DA 00 . +.ifdef config128 + .word $b4 + DOUBLE_W, $136 + DOUBLE_W +.else + .word $b4, $136 +.endif + +;#5 + .byte $69, $c4 +.ifdef config128 + .word $1e + DOUBLE_W, $a0 + DOUBLE_W +.else + .word $1e, $a0 +.endif + +;#6 + .byte $17, $21 ; 13D5 17 . +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#7 .byte $23 ; 13DB 23 # - ;and $0088 ; 13DC 2D 88 00 -.. .byte $2d - .byte $88 - .byte $00 - txs ; 13DF 9A . - brk ; 13E0 00 . +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#8 .byte $2F ; 13E1 2F / - ;and $0088,y ; 13E2 39 88 00 9.. .byte $39 - .byte $88 - .byte $00 +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif - txs ; 13E5 9A . - brk ; 13E6 00 . +;#9 . .byte $3B ; 13E7 3B ; - eor $88 ; 13E8 45 88 E. - brk ; 13EA 00 . - txs ; 13EB 9A . - brk ; 13EC 00 . - .byte $47 ; 13ED 47 G - eor ($88),y ; 13EE 51 88 Q. - brk ; 13F0 00 . - txs ; 13F1 9A . - brk ; 13F2 00 . - .byte $53 ; 13F3 53 S - ;eor $0088,x ; 13F4 5D 88 00 ].. - .byte $5d - .byte $88 - .byte $00 - txs ; 13F7 9A . - brk ; 13F8 00 . - .byte $17 ; 13F9 17 . - and (r14L,x) ; 13FA 21 1E !. - ora (mouseOn,x) ; 13FC 01 30 .0 - ora ($23,x) ; 13FE 01 23 .# - and $011E ; 1400 2D 1E 01 -.. - bmi L1406 ; 1403 30 01 0. - .byte $2F ; 1405 2F / -L1406: and $011E,y ; 1406 39 1E 01 9.. - bmi L140C ; 1409 30 01 0. - .byte $3B ; 140B 3B ; -L140C: eor r14L ; 140C 45 1E E. - ora (mouseOn,x) ; 140E 01 30 .0 - ora ($47,x) ; 1410 01 47 .G - eor (r14L),y ; 1412 51 1E Q. - ora (mouseOn,x) ; 1414 01 30 .0 - ora ($53,x) ; 1416 01 53 .S - eor $011E,x ; 1418 5D 1E 01 ].. - bmi L141E ; 141B 30 01 0. - .byte $79 ; 141D 79 y -L141E: .byte $83 ; 141E 83 . - dey ; 141F 88 . - brk ; 1420 00 . - txs ; 1421 9A . - brk ; 1422 00 . - sta TURBO_DD00_CPY ; 1423 85 8F .. - dey ; 1425 88 . - brk ; 1426 00 . - txs ; 1427 9A . - brk ; 1428 00 . - sta ($9B),y ; 1429 91 9B .. - dey ; 142B 88 . - brk ; 142C 00 . - txs ; 142D 9A . - brk ; 142E 00 . - sta $88A7,x ; 142F 9D A7 88 ... - brk ; 1432 00 . - txs ; 1433 9A . - brk ; 1434 00 . - lda #$B3 ; 1435 A9 B3 .. - dey ; 1437 88 . - brk ; 1438 00 . - txs ; 1439 9A . - brk ; 143A 00 . - lda $BF,x ; 143B B5 BF .. - dey ; 143D 88 . - brk ; 143E 00 . - txs ; 143F 9A . - brk ; 1440 00 . -L1441: lda #$13 ; 1441 A9 13 .. - sta r0H ; 1443 85 03 .. - lda #$B1 ; 1445 A9 B1 .. - sta r0L ; 1447 85 02 .. + .byte $45 +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#10 + .byte $47, $51 +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#11 + .byte $53, $5d ; 13F3 53 +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#12 + .byte $17, $21 ; 13F9 17 +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#13 + .byte $23, $2d +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#14 + .byte $2F, $39 ; 1405 2F / +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#15 + .byte $3B, $45 ; 140B 3B ; +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#16 + .byte $47, $51 +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#17 + .byte $53, $5d +.ifdef config128 + .word $011e + DOUBLE_W, $0130 + DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#18 + .byte $79, $83 ; 141D 79 y +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#19 + .byte $85, $8f +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#20 + .byte $91, $9b +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#21 + .byte $9d, $a7 +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#22 + .byte $a9, $b3 +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + +;#23 + .byte $b5, $bf +.ifdef config128 + .word $88 + DOUBLE_W, $9a + DOUBLE_W +.else + .word $88, $9a +.endif + + +L1441: LoadW r0, AreaTable cpy #$00 ; 1449 C0 00 .. beq L145B ; 144B F0 0E .. L144D: clc ; 144D 18 . @@ -169,24 +298,30 @@ L145D: lda (r0L),y ; 145D B1 02 bpl L145D ; 1463 10 F8 .. rts ; 1465 60 ` ; ---------------------------------------------------------------------------- +UIEntry: lda version ; 1466 AD 0F C0 ... cmp #$13 ; 1469 C9 13 .. bcc L1472 ; 146B 90 05 .. bit c128Flag ; 146D 2C 13 C0 ,.. +.ifdef config128 + bmi L147F ; 1470 10 0D .. +.else bpl L147F ; 1470 10 0D .. +.endif L1472: jsr CloseRecordFile ; 1472 20 77 C2 w. - ldx #$15 ; 1475 A2 15 .. - lda #$42 ; 1477 A9 42 .B + ldx #>incompKernDlg ; 1475 A2 15 .. + lda #. - ldy $212B ; 15F3 AC 2B 21 .+! + ldy V212B ; 15F3 AC 2B 21 .+! lda $8486,y ; 15F6 B9 86 84 ... - sta $212C ; 15F9 8D 2C 21 .,! + sta V212C ; 15F9 8D 2C 21 .,! jmp L161C ; 15FC 4C 1C 16 L.. ; ---------------------------------------------------------------------------- -L15FF: lda $212E ; 15FF AD 2E 21 ..! +L15FF: lda V212E ; 15FF AD 2E 21 ..! sta r15H ; 1602 85 21 .! - lda $212D ; 1604 AD 2D 21 .-! + lda V212D ; 1604 AD 2D 21 .-! sta r15L ; 1607 85 20 . ldy #$00 ; 1609 A0 00 .. lda (r15L),y ; 160B B1 20 . - sta $212B ; 160D 8D 2B 21 .+! + sta V212B ; 160D 8D 2B 21 .+! jsr L073E ; 1610 20 3E 07 >. - ldy $212B ; 1613 AC 2B 21 .+! + ldy V212B ; 1613 AC 2B 21 .+! lda $8486,y ; 1616 B9 86 84 ... - sta $212C ; 1619 8D 2C 21 .,! + sta V212C ; 1619 8D 2C 21 .,! L161C: ldy #$01 ; 161C A0 01 .. lda (r15L),y ; 161E B1 20 . - sta $212A ; 1620 8D 2A 21 .*! + sta V212A ; 1620 8D 2A 21 .*! L1623: clc ; 1623 18 . lda #$02 ; 1624 A9 02 .. adc r15L ; 1626 65 20 e @@ -371,7 +533,7 @@ L162E: ldy #$00 ; 162E A0 00 lda (r15L),y ; 1635 B1 20 . sta r13H ; 1637 85 1D .. beq L165D ; 1639 F0 22 ." - ldy $212A ; 163B AC 2A 21 .*! + ldy V212A ; 163B AC 2A 21 .*! jsr L1441 ; 163E 20 41 14 A. jsr IsMseInRegion ; 1641 20 B3 C2 .. beq L1657 ; 1644 F0 11 .. @@ -384,18 +546,23 @@ L162E: ldy #$00 ; 162E A0 00 jsr L165E ; 1651 20 5E 16 ^. clv ; 1654 B8 . bvc L165D ; 1655 50 06 P. -L1657: inc $212A ; 1657 EE 2A 21 .*! +L1657: inc V212A ; 1657 EE 2A 21 .*! clv ; 165A B8 . bvc L1623 ; 165B 50 C6 P. L165D: rts ; 165D 60 ` ; ---------------------------------------------------------------------------- L165E: jmp (r0L) ; 165E 6C 02 00 l.. ; ---------------------------------------------------------------------------- - clc ; 1661 18 . +DriveAStr: + .byte $18 ; 1661 18 . .byte "Drive A" ; 1662 44 72 69 76 65 20 41 Drive A - .byte $00,$18 ; 1669 00 18 .. + .byte $00 +DriveBStr: + .byte $18 ; 1669 00 18 .. .byte "Drive B" ; 166B 44 72 69 76 65 20 42 Drive B - .byte $00,$18 ; 1672 00 18 .. + .byte $00 +DriveCStr: + .byte $18 ; 1672 00 18 .. .byte "Drive C" ; 1674 44 72 69 76 65 20 43 Drive C .byte $00 ; 167B 00 . ; ---------------------------------------------------------------------------- @@ -417,61 +584,46 @@ L169E: jsr ExitTurbo ; 169E 20 32 C2 ; ---------------------------------------------------------------------------- L16A2: ldy #$03 ; 16A2 A0 03 .. jsr L15AA ; 16A4 20 AA 15 .. - lda #$16 ; 16A7 A9 16 .. - sta r0H ; 16A9 85 03 .. - lda #$61 ; 16AB A9 61 .a - sta r0L ; 16AD 85 02 .. + LoadW r0, DriveAStr lda #$13 ; 16AF A9 13 .. sta r1H ; 16B1 85 05 .. - lda #$00 ; 16B3 A9 00 .. - sta r11H ; 16B5 85 19 .. - lda #$4F ; 16B7 A9 4F .O - sta r11L ; 16B9 85 18 .. +.ifdef config128 + LoadW r11, $4F + DOUBLE_W +.else + LoadW r11, $4F +.endif jsr PutString ; 16BB 20 48 C1 H. -L16BE: lda #$1B ; 16BE A9 1B .. - sta $212E ; 16C0 8D 2E 21 ..! - lda #$79 ; 16C3 A9 79 .y - sta $212D ; 16C5 8D 2D 21 .-! +L16BE: LoadW V212D, L1B79 jsr L1A74 ; 16C8 20 74 1A t. rts ; 16CB 60 ` ; ---------------------------------------------------------------------------- L16CC: ldy #$04 ; 16CC A0 04 .. jsr L15AA ; 16CE 20 AA 15 .. - lda #$16 ; 16D1 A9 16 .. - sta r0H ; 16D3 85 03 .. - lda #$6A ; 16D5 A9 6A .j - sta r0L ; 16D7 85 02 .. + LoadW r0, DriveBStr lda #$13 ; 16D9 A9 13 .. sta r1H ; 16DB 85 05 .. - lda #$00 ; 16DD A9 00 .. - sta r11H ; 16DF 85 19 .. - lda #$E5 ; 16E1 A9 E5 .. - sta r11L ; 16E3 85 18 .. +.ifdef config128 + LoadW r11, $E5 + DOUBLE_W +.else + LoadW r11, $E5 +.endif jsr PutString ; 16E5 20 48 C1 H. -L16E8: lda #$1B ; 16E8 A9 1B .. - sta $212E ; 16EA 8D 2E 21 ..! - lda #$89 ; 16ED A9 89 .. - sta $212D ; 16EF 8D 2D 21 .-! +L16E8: LoadW V212D, L1B89 jsr L1A74 ; 16F2 20 74 1A t. rts ; 16F5 60 ` ; ---------------------------------------------------------------------------- L16F6: ldy #$05 ; 16F6 A0 05 .. jsr L15AA ; 16F8 20 AA 15 .. - lda #$16 ; 16FB A9 16 .. - sta r0H ; 16FD 85 03 .. - lda #$73 ; 16FF A9 73 .s - sta r0L ; 1701 85 02 .. + LoadW r0, DriveCStr lda #$75 ; 1703 A9 75 .u sta r1H ; 1705 85 05 .. - lda #$00 ; 1707 A9 00 .. - sta r11H ; 1709 85 19 .. - lda #$4F ; 170B A9 4F .O - sta r11L ; 170D 85 18 .. +.ifdef config128 + LoadW r11, $4F + DOUBLE_W +.else + LoadW r11, $4F +.endif jsr PutString ; 170F 20 48 C1 H. -L1712: lda #$1B ; 1712 A9 1B .. - sta $212E ; 1714 8D 2E 21 ..! - lda #$99 ; 1717 A9 99 .. - sta $212D ; 1719 8D 2D 21 .-! +L1712: LoadW V212D, L1B99 jsr L1A74 ; 171C 20 74 1A t. rts ; 171F 60 ` ; ---------------------------------------------------------------------------- @@ -509,27 +661,24 @@ L1752: jsr L1873 ; 1752 20 73 18 jsr L17B2 ; 175D 20 B2 17 .. L1760: rts ; 1760 60 ` ; ---------------------------------------------------------------------------- -L1761: lda #$17 ; 1761 A9 17 .. - sta r0H ; 1763 85 03 .. - lda #$9E ; 1765 A9 9E .. - sta r0L ; 1767 85 02 .. +L1761: + LoadW r0, DMAMoveDataStr lda #$A4 ; 1769 A9 A4 .. sta r1H ; 176B 85 05 .. - lda #$00 ; 176D A9 00 .. - sta r11H ; 176F 85 19 .. - lda #$BE ; 1771 A9 BE .. - sta r11L ; 1773 85 18 .. +.ifdef config128 + LoadW r11, $BE + DOUBLE_W +.else + LoadW r11, $BE +.endif jsr PutString ; 1775 20 48 C1 H. - lda #$17 ; 1778 A9 17 .. - sta r0H ; 177A 85 03 .. - lda #$A7 ; 177C A9 A7 .. - sta r0L ; 177E 85 02 .. + LoadW r0, DMAMoveDataStr2 lda #$B2 ; 1780 A9 B2 .. sta r1H ; 1782 85 05 .. - lda #$00 ; 1784 A9 00 .. - sta r11H ; 1786 85 19 .. - lda #$BE ; 1788 A9 BE .. - sta r11L ; 178A 85 18 .. +.ifdef config128 + LoadW r11, $BE + DOUBLE_W +.else + LoadW r11, $BE +.endif jsr PutString ; 178C 20 48 C1 H. L178F: lda sysRAMFlg ; 178F AD C4 88 ... and #$80 ; 1792 29 80 ). @@ -539,23 +688,24 @@ L1798: ldy #$01 ; 1798 A0 01 jsr L15CF ; 179A 20 CF 15 .. rts ; 179D 60 ` ; ---------------------------------------------------------------------------- - clc ; 179E 18 . +DMAMoveDataStr: + .byte $18 ; 179E 18 . .byte "DMA for" ; 179F 44 4D 41 20 66 6F 72 DMA for - .byte $00,$22 ; 17A6 00 22 ." + .byte $00 +DMAMoveDataStr2: + .byte $22 ; 17A6 00 22 ." .byte "MoveData" ; 17A8 4D 6F 76 65 44 61 74 61 MoveData .byte $22,$00 ; 17B0 22 00 ". -L17B2: .byte $A9 ; 17B2 A9 . ; ---------------------------------------------------------------------------- - .byte $17 ; 17B3 17 . - sta r0H ; 17B4 85 03 .. - lda #$D8 ; 17B6 A9 D8 .. - sta r0L ; 17B8 85 02 .. +L17B2: + LoadW r0, RAMRebootStr lda #$8D ; 17BA A9 8D .. sta r1H ; 17BC 85 05 .. - lda #$00 ; 17BE A9 00 .. - sta r11H ; 17C0 85 19 .. - lda #$BE ; 17C2 A9 BE .. - sta r11L ; 17C4 85 18 .. +.ifdef config128 + LoadW r11, $BE + DOUBLE_W +.else + LoadW r11, $BE +.endif jsr PutString ; 17C6 20 48 C1 H. L17C9: lda sysRAMFlg ; 17C9 AD C4 88 ... and #$20 ; 17CC 29 20 ) @@ -565,11 +715,13 @@ L17D2: ldy #$02 ; 17D2 A0 02 jsr L15CF ; 17D4 20 CF 15 .. rts ; 17D7 60 ` ; ---------------------------------------------------------------------------- +RAMRebootStr: .byte $18 ; 17D8 18 . .byte "RAM Reboot" ; 17D9 52 41 4D 20 52 65 62 6F RAM Rebo ; 17E1 6F 74 ot .byte $00 ; 17E3 00 . ; ---------------------------------------------------------------------------- +ConfigOtherPressVec: lda mouseData ; 17E4 AD 05 85 ... bpl L17EA ; 17E7 10 01 .. rts ; 17E9 60 ` @@ -589,24 +741,18 @@ L1800: lda L180C ; 1800 AD 0C 18 L180B: rts ; 180B 60 ` ; ---------------------------------------------------------------------------- L180C: brk ; 180C 00 . -L180D: lda #$1B ; 180D A9 1B .. - sta $212E ; 180F 8D 2E 21 ..! - lda #$79 ; 1812 A9 79 .y - sta $212D ; 1814 8D 2D 21 .-! +L180D: + LoadW V212D, L1B79 jsr L15FF ; 1817 20 FF 15 .. rts ; 181A 60 ` ; ---------------------------------------------------------------------------- -L181B: lda #$1B ; 181B A9 1B .. - sta $212E ; 181D 8D 2E 21 ..! - lda #$89 ; 1820 A9 89 .. - sta $212D ; 1822 8D 2D 21 .-! +L181B: + LoadW V212D, L1B89 jsr L15FF ; 1825 20 FF 15 .. rts ; 1828 60 ` ; ---------------------------------------------------------------------------- -L1829: lda #$1B ; 1829 A9 1B .. - sta $212E ; 182B 8D 2E 21 ..! - lda #$99 ; 182E A9 99 .. - sta $212D ; 1830 8D 2D 21 .-! +L1829: + LoadW V212D, L1B99 jsr L15DF ; 1833 20 DF 15 .. rts ; 1836 60 ` ; ---------------------------------------------------------------------------- @@ -636,16 +782,14 @@ L1857: ldy #$02 ; 1857 A0 02 ; ---------------------------------------------------------------------------- L1872: rts ; 1872 60 ` ; ---------------------------------------------------------------------------- -L1873: lda #$18 ; 1873 A9 18 .. - sta r0H ; 1875 85 03 .. - lda #$A5 ; 1877 A9 A5 .. - sta r0L ; 1879 85 02 .. +L1873: LoadW r0, RAMExpStr lda #$75 ; 187B A9 75 .u sta r1H ; 187D 85 05 .. - lda #$00 ; 187F A9 00 .. - sta r11H ; 1881 85 19 .. - lda #$BE ; 1883 A9 BE .. - sta r11L ; 1885 85 18 .. +.ifdef config128 + LoadW r11, $BE + DOUBLE_W +.else + LoadW r11, $BE +.endif jsr PutString ; 1887 20 48 C1 H. lda ramExpSize ; 188A AD C3 88 ... sta r0L ; 188D 85 02 .. @@ -660,11 +804,13 @@ L1873: lda #$18 ; 1873 A9 18 jsr PutChar ; 18A1 20 45 C1 E. rts ; 18A4 60 ` ; ---------------------------------------------------------------------------- +RAMExpStr: .byte $18 ; 18A5 18 . .byte "RAM expansion: " ; 18A6 52 41 4D 20 65 78 70 61 RAM expa ; 18AE 6E 73 69 6F 6E 3A 20 nsion: .byte $00 ; 18B5 00 . ; ---------------------------------------------------------------------------- +MenuQuit: jsr DoPreviousMenu ; 18B6 20 90 C1 .. lda driveType ; 18B9 AD 8E 84 ... beq L18C0 ; 18BC F0 02 .. @@ -674,49 +820,67 @@ L18C0: lda $848F ; 18C0 AD 8F 84 bpl L18C8 ; 18C5 10 01 .. L18C7: rts ; 18C7 60 ` ; ---------------------------------------------------------------------------- -L18C8: ldy $2104 ; 18C8 AC 04 21 ..! +L18C8: ldy V2104 ; 18C8 AC 04 21 ..! lda $8486,y ; 18CB B9 86 84 ... bne L18D6 ; 18CE D0 06 .. tya ; 18D0 98 . eor #$01 ; 18D1 49 01 I. - sta $2104 ; 18D3 8D 04 21 ..! + sta V2104 ; 18D3 8D 04 21 ..! L18D6: jmp L043E ; 18D6 4C 3E 04 L>. ; ---------------------------------------------------------------------------- - ldx #$18 ; 18D9 A2 18 .. - lda #$E0 ; 18DB A9 E0 .. + ldx #>SomeTextDlg ; 18D9 A2 18 .. + lda #InfoDlg ; 18EC A2 18 .. + lda #O. -L1909: .byte $0B ; 1909 0B . - php ; 190A 08 . - lsr ; 190B 4A J - jmp (L0E19) ; 190C 6C 19 0E l.. -; ---------------------------------------------------------------------------- - .byte $00,$18,$1A ; 190F 00 18 1A ... +InfoDlg: + .byte $81 + .byte DBTXTSTR + .byte 8 + .byte $10 + .word L1910 + .byte DBTXTSTR + .byte 8 + .byte $20 + .word L1921 + .byte DBTXTSTR + .byte 8 + .byte $2c + .word L193B + .byte DBTXTSTR + .byte 8 + .byte $3E + .word L194F + .byte DBTXTSTR + .byte 8 + .byte $4A + .word L196C + .byte DBSYSOPV + .byte 0 +L1910: + .byte $18,$1A ; 190F 00 18 1A ... +.ifdef config128 + .byte "128 CONFIGURE 2.1" ; 1912 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 191A 45 20 32 2E 31 E 2.1 +.else .byte "CONFIGURE 2.1" ; 1912 43 4F 4E 46 49 47 55 52 CONFIGUR ; 191A 45 20 32 2E 31 E 2.1 +.endif .byte $1B,$00 ; 191F 1B 00 .. L1921: .byte $18 ; 1921 18 . .byte "Copyright (C) 1986-1990," ; 1922 43 6F 70 79 72 69 67 68 Copyrigh @@ -732,6 +896,7 @@ L194F: .byte "Portions Copyright (C) 1990," ; 194F 50 6F 72 74 69 6F 6E 73 ; 195F 68 74 20 28 43 29 20 31 ht (C) 1 ; 1967 39 39 30 2C 990, .byte $00 ; 196B 00 . +L196C: .byte "Jim Collette. (Q-Link: GEOREP J"; 196C 4A 69 6D 20 43 6F 6C 6C Jim Coll ; 1974 65 74 74 65 2E 20 28 51 ette. (Q ; 197C 2D 4C 69 6E 6B 3A 20 47 -Link: G @@ -739,13 +904,11 @@ L194F: .byte "Portions Copyright (C) 1990," ; 194F 50 6F 72 74 69 6F 6E 73 .byte "IM)" ; 198B 49 4D 29 IM) .byte $1B,$00 ; 198E 1B 00 .. ; ---------------------------------------------------------------------------- +MenuSaveConfig: jsr DoPreviousMenu ; 1990 20 90 C1 .. - lda $2104 ; 1993 AD 04 21 ..! + lda V2104 ; 1993 AD 04 21 ..! jsr L073E ; 1996 20 3E 07 >. - lda #$20 ; 1999 A9 20 . - sta r0H ; 199B 85 03 .. - lda #$D9 ; 199D A9 D9 .. - sta r0L ; 199F 85 02 .. + LoadW r0, V20D9 jsr OpenRecordFile ; 19A1 20 74 C2 t. txa ; 19A4 8A . bne L19CE ; 19A5 D0 27 .' @@ -768,26 +931,33 @@ L19BC: lda $0406,y ; 19BC B9 06 04 bne L19CE ; 19C9 D0 03 .. jmp CloseRecordFile ; 19CB 4C 77 C2 Lw. ; ---------------------------------------------------------------------------- -L19CE: ldx #$19 ; 19CE A2 19 .. - lda #$D5 ; 19D0 A9 D5 .. +L19CE: ldx #>CantSaveDlg ; 19CE A2 19 .. + lda #OptNoDrive + .byte >Opt1541 + .byte >OptShadowed1541 + .byte >OptRAM1541 + .byte >Opt1571 + .byte >Opt1581 + .byte >OptShadowed1581 + .byte >OptRAM1571 + .byte >OptRAM1581 + +; no drive +OptNoDrive: + .byte 0 + .word L1BC0 + .word InitNoDrive +L1BC0: .byte "No Drive" ; 1BC0 4E 6F 20 44 72 69 76 65 No Drive - .byte $00,$01,$CE,$1B,$B7,$07 ; 1BC8 00 01 CE 1B B7 07 ...... + .byte $00 + +; 1541 +Opt1541: + .byte $01 + .word L1BCE + .word Init1541 +L1BCE: .byte "1541" ; 1BCE 31 35 34 31 1541 .byte $00 ; 1BD2 00 . - .byte "A" ; 1BD3 41 A - .byte $D8,$1B,$FF,$07 ; 1BD4 D8 1B FF 07 .... + +; Shadowed 1541 +OptShadowed1541: + .byte $41 ; 1BD3 41 A + .word L1BD8 + .word InitShadowed1541 +L1BD8: .byte "Shadowed 1541" ; 1BD8 53 68 61 64 6F 77 65 64 Shadowed ; 1BE0 20 31 35 34 31 1541 - .byte $00,$81,$EB,$1B ; 1BE5 00 81 EB 1B .... - .byte "A" ; 1BE9 41 A - .byte $08 ; 1BEA 08 . + .byte $00 + +; RAM 1541 +OptRAM1541: + .byte $81 + .word L1BEB + .word InitRAM1541 + +L1BEB: .byte "RAM 1541" ; 1BEB 52 41 4D 20 31 35 34 31 RAM 1541 - .byte $00,$02,$F9,$1B,$DF,$07 ; 1BF3 00 02 F9 1B DF 07 ...... + .byte $00 + +; 1571 +Opt1571: + .byte $02 + .word L1BF9 + .word Init1571 + +L1BF9: .byte "1571" ; 1BF9 31 35 37 31 1571 - .byte $00,$03,$03,$1C,$EF,$07 ; 1BFD 00 03 03 1C EF 07 ...... + .byte $00 + +;1581 +Opt1581: + .byte $03 + .word L1C03 + .word Init1581 + +L1C03: .byte "1581" ; 1C03 31 35 38 31 1581 .byte $00 ; 1C07 00 . + +; Shadowed 1581 +OptShadowed1581: .byte "C" ; 1C08 43 C - .byte $0D,$1C ; 1C09 0D 1C .. - .byte " " ; 1C0B 20 - .byte $08 ; 1C0C 08 . + .word L1C0D + .word InitShadowed1581 +L1C0D: .byte "Dir Shadow 1581" ; 1C0D 44 69 72 20 53 68 61 64 Dir Shad ; 1C15 6F 77 20 31 35 38 31 ow 1581 - .byte $00,$82,$22,$1C ; 1C1C 00 82 22 1C ..". - .byte "s" ; 1C20 73 s - .byte $08 ; 1C21 08 . + .byte $00 + +; RAM 1571 +OptRAM1571: + .byte $82 + .word L1C22 ; 1C1C 00 82 22 1C ..". + .word InitRAM1571 +L1C22: .byte "RAM 1571" ; 1C22 52 41 4D 20 31 35 37 31 RAM 1571 - .byte $00,$83 ; 1C2A 00 83 .. - .byte "0" ; 1C2C 30 0 - .byte $1C,$A5,$08 ; 1C2D 1C A5 08 ... + .byte $00 + +; RAM 1581 +OptRAM1581: + .byte $83 ; 1C2A 00 83 .. + .word L1C30 + .word InitRAM1581 +L1C30: .byte "RAM 1581" ; 1C30 52 41 4D 20 31 35 38 31 RAM 1581 -; ---------------------------------------------------------------------------- - brk ; 1C38 00 . -L1C39: ldy $212C ; 1C39 AC 2C 21 .,! + .byte 0 ; 1C38 00 . + + +L1C39: ldy V212C ; 1C39 AC 2C 21 .,! beq L1C40 ; 1C3C F0 02 .. ldy #$01 ; 1C3E A0 01 .. L1C40: rts ; 1C40 60 ` ; ---------------------------------------------------------------------------- -L1C41: lda $212C ; 1C41 AD 2C 21 .,! +L1C41: lda V212C ; 1C41 AD 2C 21 .,! cmp #$01 ; 1C44 C9 01 .. beq L1C50 ; 1C46 F0 08 .. cmp #$41 ; 1C48 C9 41 .A @@ -1078,7 +1323,7 @@ L1C50: ldy #$02 ; 1C50 A0 02 L1C53: ldy #$00 ; 1C53 A0 00 .. rts ; 1C55 60 ` ; ---------------------------------------------------------------------------- -L1C56: lda $212C ; 1C56 AD 2C 21 .,! +L1C56: lda V212C ; 1C56 AD 2C 21 .,! cmp #$41 ; 1C59 C9 41 .A beq L1C69 ; 1C5B F0 0C .. cmp #$01 ; 1C5D C9 01 .. @@ -1093,7 +1338,7 @@ L1C69: ldy #$03 ; 1C69 A0 03 L1C6C: ldy #$00 ; 1C6C A0 00 .. rts ; 1C6E 60 ` ; ---------------------------------------------------------------------------- -L1C6F: lda $212C ; 1C6F AD 2C 21 .,! +L1C6F: lda V212C ; 1C6F AD 2C 21 .,! cmp #$81 ; 1C72 C9 81 .. beq L1C82 ; 1C74 F0 0C .. cmp #$00 ; 1C76 C9 00 .. @@ -1108,7 +1353,7 @@ L1C82: ldy #$04 ; 1C82 A0 04 L1C85: ldy #$00 ; 1C85 A0 00 .. rts ; 1C87 60 ` ; ---------------------------------------------------------------------------- -L1C88: lda $212C ; 1C88 AD 2C 21 .,! +L1C88: lda V212C ; 1C88 AD 2C 21 .,! cmp #$02 ; 1C8B C9 02 .. beq L1C93 ; 1C8D F0 04 .. cmp #$00 ; 1C8F C9 00 .. @@ -1119,7 +1364,7 @@ L1C93: ldy #$05 ; 1C93 A0 05 L1C96: ldy #$00 ; 1C96 A0 00 .. rts ; 1C98 60 ` ; ---------------------------------------------------------------------------- -L1C99: lda $212C ; 1C99 AD 2C 21 .,! +L1C99: lda V212C ; 1C99 AD 2C 21 .,! cmp #$03 ; 1C9C C9 03 .. beq L1CA4 ; 1C9E F0 04 .. cmp #$00 ; 1CA0 C9 00 .. @@ -1130,7 +1375,8 @@ L1CA4: ldy #$06 ; 1CA4 A0 06 L1CA7: ldy #$00 ; 1CA7 A0 00 .. rts ; 1CA9 60 ` ; ---------------------------------------------------------------------------- -L1CAA: lda $212C ; 1CAA AD 2C 21 .,! +.ifndef config128 +L1CAA: lda V212C ; 1CAA AD 2C 21 .,! cmp #$43 ; 1CAD C9 43 .C beq L1CBD ; 1CAF F0 0C .. cmp #$03 ; 1CB1 C9 03 .. @@ -1144,8 +1390,9 @@ L1CBD: ldy #$07 ; 1CBD A0 07 ; ---------------------------------------------------------------------------- L1CC0: ldy #$00 ; 1CC0 A0 00 .. rts ; 1CC2 60 ` +.endif ; ---------------------------------------------------------------------------- -L1CC3: lda $212C ; 1CC3 AD 2C 21 .,! +L1CC3: lda V212C ; 1CC3 AD 2C 21 .,! cmp #$82 ; 1CC6 C9 82 .. beq L1CD6 ; 1CC8 F0 0C .. cmp #$00 ; 1CCA C9 00 .. @@ -1160,7 +1407,7 @@ L1CD6: ldy #$08 ; 1CD6 A0 08 L1CD9: ldy #$00 ; 1CD9 A0 00 .. rts ; 1CDB 60 ` ; ---------------------------------------------------------------------------- -L1CDC: lda $212C ; 1CDC AD 2C 21 .,! +L1CDC: lda V212C ; 1CDC AD 2C 21 .,! cmp #$83 ; 1CDF C9 83 .. beq L1CEF ; 1CE1 F0 0C .. cmp #$00 ; 1CE3 C9 00 .. @@ -1175,23 +1422,24 @@ L1CEF: ldy #$09 ; 1CEF A0 09 L1CF2: ldy #$00 ; 1CF2 A0 00 .. rts ; 1CF4 60 ` ; ---------------------------------------------------------------------------- - lda $212C ; 1CF5 AD 2C 21 .,! +InitNoDrive: + lda V212C ; 1CF5 AD 2C 21 .,! beq L1D27 ; 1CF8 F0 2D .- jsr PurgeTurbo ; 1CFA 20 35 C2 5. - lda $212C ; 1CFD AD 2C 21 .,! + lda V212C ; 1CFD AD 2C 21 .,! bmi L1D1B ; 1D00 30 19 0. - lda $212B ; 1D02 AD 2B 21 .+! + lda V212B ; 1D02 AD 2B 21 .+! clc ; 1D05 18 . adc #$39 ; 1D06 69 39 i9 L1D08: sta L1D9A ; 1D08 8D 9A 1D ... - ldx #$1D ; 1D0B A2 1D .. - lda #$9D ; 1D0D A9 9D .. + ldx #>UnplugDlg ; 1D0B A2 1D .. + lda #PluginDlg ; 1E59 A2 1F .. + lda #PluginDlg2 ; 1EEE A2 1F .. + lda #D_IRQHandler + sta nmivec+1 + lda #D_NMIHandler sta nmivec+1 lda #EnterCommand lda #Drv_ReadSec lda #D_IRQHandler sta irqvec+1 +.ifdef config128 + sta nmivec+1 +.endif lda #D_NMIHandler sta nmivec+1 lda #EnterCommand lda #Drv_NewDisk @@ -1127,16 +1193,27 @@ NewDsk2: __ReadBlock: _ReadLink: jsr CheckParams - bcc RdLink1 + bcc RdLink1_ +.ifdef config128 + jsr DoCacheWrite + bne RdLink1_ +.endif RdLink0: jsr e990b jsr Hst_RecvByte jsr GetDError - beqx RdLink1 + beqx RdLink1_ inc errCount cpy errCount - beq RdLink1 + beq RdLink1_ bcs RdLink0 +RdLink1_: +.ifdef config128 + txa + bne RdLink1 + jsr DoCacheRead +.endif + RdLink1: ldy #0 rts @@ -1183,7 +1260,11 @@ VWrBlock1: cpx #0 bne VWrBlock2 tax +.ifdef config128 + beq VWrBlock3_ +.else beq VWrBlock3 +.endif ldx #$25 VWrBlock2: dec tryCount @@ -1200,6 +1281,11 @@ VWrBlock2: VWrBlock3: rts +VWrBlock3_: +.ifdef config128 + jmp DoCacheRead +.endif + e990b: ldx #>Drv_ReadSec lda #D_IRQHandler + sta $0315 + sta $0319 + lda #EnterCommand ; 960B A2 96 .. + lda #HDCommand ; 9677 A2 96 .. + lda #WriteCommand ; 96CD A2 96 .. + lda #ChngDskDev_Command ; 977D A2 97 .. + lda #L9BF5 ; 97C1 A9 9B .. sta $8C ; 97C3 85 8C .. - lda #$F5 ; 97C5 A9 F5 .. + lda #MemReadCommand ; 99CE A2 99 .. + lda # Date: Tue, 27 Jun 2017 22:08:15 +0200 Subject: [PATCH 008/125] Initial checkin of TopDesk 64 DE source project that builds a binary compatible version of TopDesk 1.2. --- Makefile | 34 +- README.md | 0 config.inc | 0 inc/const.inc | 0 inc/diskdrv.inc | 0 inc/geosmac.inc | 46 + inc/geossym.inc | 0 inc/inputdrv.inc | 0 inc/kernal.inc | 0 inc/printdrv.inc | 0 reference/wheels/reux.bin | Bin regress.sh | 0 topdesk/BitMap.bf | Bin 0 -> 64 bytes topdesk/C64Icon.bf | Bin 0 -> 64 bytes topdesk/CloseMap.map | Bin 0 -> 32 bytes topdesk/DeskInclude/CopyFile.inc | 538 +++++ topdesk/DeskInclude/DiskCopy.inc | 523 ++++ topdesk/DeskInclude/DosFormat.s.inc | 130 + topdesk/DeskInclude/EditText.inc | 435 ++++ topdesk/DeskInclude/SearchDisk.inc | 205 ++ topdesk/DeskInclude/SizeRectangle.inc | 95 + topdesk/DeskInclude/Validate+Undelet.inc | 451 ++++ topdesk/Drive.map | Bin 0 -> 85 bytes topdesk/Folder.bf | Bin 0 -> 64 bytes topdesk/GetDrivers.dir/GetDrivers.s | 96 + topdesk/GetDrivers.dir/SaveDrivers.s | 40 + topdesk/IconA.map | 1 + topdesk/IconB.map | 1 + topdesk/IconC.map | 1 + topdesk/IconD.map | 1 + topdesk/Include/DeskMain2.inc | 995 ++++++++ topdesk/Include/SubDir.src.inc | 1114 +++++++++ topdesk/Include/Symbol/CiMac.inc | 62 + topdesk/Include/Symbol/CiSym.inc | 20 + topdesk/Include/Symbol/Sym128.erg.inc | 16 + topdesk/Include/Symbol/TopMac.inc | 345 +++ topdesk/Include/Symbol/TopSym.inc | 397 ++++ topdesk/Main/DeskTop.main.s | 2767 ++++++++++++++++++++++ topdesk/Main/DeskTop.sub.s | 348 +++ topdesk/Main/DeskTop.sub10.s | 458 ++++ topdesk/Main/DeskTop.sub2.s | 218 ++ topdesk/Main/DeskTop.sub3.s | 752 ++++++ topdesk/Main/DeskTop.sub4.s | 334 +++ topdesk/Main/DeskTop.sub5.s | 367 +++ topdesk/Main/DeskTop.sub6.s | 576 +++++ topdesk/Main/DeskTop.sub7.s | 638 +++++ topdesk/Main/DeskTop.sub8.s | 166 ++ topdesk/Main/DeskTop.sub9.s | 463 ++++ topdesk/Main/DeskWindows.akt.inc | 2051 ++++++++++++++++ topdesk/Main/DeskWindows.ext.inc | 83 + topdesk/Main/Dos.lnk.txt | 14 + topdesk/Main/Ende.s | 2 + topdesk/MultiFileIcon.bf | Bin 0 -> 64 bytes topdesk/PrintMap.bf | Bin 0 -> 64 bytes topdesk/Protect/Desksub0.s | 30 + topdesk/Protect/RemProt.mod.s | 113 + topdesk/Protect/RemProtection.s | 104 + topdesk/Protect/SetProt.mod.s | 89 + topdesk/Protect/SetProtection.s | 106 + topdesk/Protect/Sources/ProtectDisk.s | 102 + topdesk/Protect/Sources/SetBAM.s | 119 + topdesk/Protect/TopMac(a).inc | 425 ++++ topdesk/Temp.bf | Bin 0 -> 64 bytes topdesk/TextSprite.bf | Bin 0 -> 64 bytes topdesk/TrashMap.bf | Bin 0 -> 64 bytes topdesk/WinInclude/InvFrame.inc | 263 ++ topdesk/WinInclude/SpeedFrame.inc | 90 + topdesk/topdesk.cfg | 83 + topdesk/topdesk.grc | 11 + topdesk/university6.fnt | Bin 0 -> 502 bytes 70 files changed, 16316 insertions(+), 2 deletions(-) mode change 100755 => 100644 README.md mode change 100755 => 100644 config.inc mode change 100755 => 100644 inc/const.inc mode change 100755 => 100644 inc/diskdrv.inc mode change 100755 => 100644 inc/geosmac.inc mode change 100755 => 100644 inc/geossym.inc mode change 100755 => 100644 inc/inputdrv.inc mode change 100755 => 100644 inc/kernal.inc mode change 100755 => 100644 inc/printdrv.inc mode change 100755 => 100644 reference/wheels/reux.bin mode change 100755 => 100644 regress.sh create mode 100644 topdesk/BitMap.bf create mode 100644 topdesk/C64Icon.bf create mode 100644 topdesk/CloseMap.map create mode 100644 topdesk/DeskInclude/CopyFile.inc create mode 100644 topdesk/DeskInclude/DiskCopy.inc create mode 100644 topdesk/DeskInclude/DosFormat.s.inc create mode 100644 topdesk/DeskInclude/EditText.inc create mode 100644 topdesk/DeskInclude/SearchDisk.inc create mode 100644 topdesk/DeskInclude/SizeRectangle.inc create mode 100644 topdesk/DeskInclude/Validate+Undelet.inc create mode 100644 topdesk/Drive.map create mode 100644 topdesk/Folder.bf create mode 100644 topdesk/GetDrivers.dir/GetDrivers.s create mode 100644 topdesk/GetDrivers.dir/SaveDrivers.s create mode 100644 topdesk/IconA.map create mode 100644 topdesk/IconB.map create mode 100644 topdesk/IconC.map create mode 100644 topdesk/IconD.map create mode 100644 topdesk/Include/DeskMain2.inc create mode 100644 topdesk/Include/SubDir.src.inc create mode 100644 topdesk/Include/Symbol/CiMac.inc create mode 100644 topdesk/Include/Symbol/CiSym.inc create mode 100644 topdesk/Include/Symbol/Sym128.erg.inc create mode 100644 topdesk/Include/Symbol/TopMac.inc create mode 100644 topdesk/Include/Symbol/TopSym.inc create mode 100644 topdesk/Main/DeskTop.main.s create mode 100644 topdesk/Main/DeskTop.sub.s create mode 100644 topdesk/Main/DeskTop.sub10.s create mode 100644 topdesk/Main/DeskTop.sub2.s create mode 100644 topdesk/Main/DeskTop.sub3.s create mode 100644 topdesk/Main/DeskTop.sub4.s create mode 100644 topdesk/Main/DeskTop.sub5.s create mode 100644 topdesk/Main/DeskTop.sub6.s create mode 100644 topdesk/Main/DeskTop.sub7.s create mode 100644 topdesk/Main/DeskTop.sub8.s create mode 100644 topdesk/Main/DeskTop.sub9.s create mode 100644 topdesk/Main/DeskWindows.akt.inc create mode 100644 topdesk/Main/DeskWindows.ext.inc create mode 100644 topdesk/Main/Dos.lnk.txt create mode 100644 topdesk/Main/Ende.s create mode 100644 topdesk/MultiFileIcon.bf create mode 100644 topdesk/PrintMap.bf create mode 100644 topdesk/Protect/Desksub0.s create mode 100644 topdesk/Protect/RemProt.mod.s create mode 100644 topdesk/Protect/RemProtection.s create mode 100644 topdesk/Protect/SetProt.mod.s create mode 100644 topdesk/Protect/SetProtection.s create mode 100644 topdesk/Protect/Sources/ProtectDisk.s create mode 100644 topdesk/Protect/Sources/SetBAM.s create mode 100644 topdesk/Protect/TopMac(a).inc create mode 100644 topdesk/Temp.bf create mode 100644 topdesk/TextSprite.bf create mode 100644 topdesk/TrashMap.bf create mode 100644 topdesk/WinInclude/InvFrame.inc create mode 100644 topdesk/WinInclude/SpeedFrame.inc create mode 100644 topdesk/topdesk.cfg create mode 100644 topdesk/topdesk.grc create mode 100644 topdesk/university6.fnt diff --git a/Makefile b/Makefile index b160b31c..4ee9d4b3 100755 --- a/Makefile +++ b/Makefile @@ -329,12 +329,15 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg echo \*\*\* Created fresh $@.; \ fi; -$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/config.cvt +$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt $(BUILD_DIR)/config.cvt @if [ -e $(D81_TEMPLATE) ]; then \ cp $(D81_TEMPLATE) $@; \ echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ + echo delete \"desk top\" | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ + echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ @@ -344,6 +347,16 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/conf echo \*\*\* Created fresh $@.; \ fi; +$(BUILD_DIR)/topdesk/topdesk.o: + @mkdir -p `dirname $@` + $(GRC) -s $(BUILD_DIR)/topdesk/topdesk.s -o $(BUILD_DIR)/topdesk/topdesk.c topdesk/topdesk.grc + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/topdesk/topdesk.s -o $@ + +$(BUILD_DIR)/configure/configure.o: + @mkdir -p `dirname $@` + $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure.grc + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ + $(BUILD_DIR)/configure/configure.o: @mkdir -p `dirname $@` $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure.grc @@ -355,7 +368,24 @@ $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configu $(LD) -C configure/configure.cfg -o $@ $(BUILD_DIR)/configure/configure.o -m $(BUILD_DIR)/configure.map $(BUILD_DIR)/configure/r0.o \ $(BUILD_DIR)/configure/r2.o $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o \ $(BUILD_DIR)/configure/r5.o $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o - + +$(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Main/DeskTop.main.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub2.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub3.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub4.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub5.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub6.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub7.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub8.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o + $(LD) -C topdesk/topdesk.cfg -o $@ $(BUILD_DIR)/topdesk/topdesk.o -m $(BUILD_DIR)/topdesk.map $(BUILD_DIR)/topdesk/Main/DeskTop.main.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub2.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub3.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub4.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub5.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub6.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub7.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub8.o \ + $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/config.inc b/config.inc old mode 100755 new mode 100644 diff --git a/inc/const.inc b/inc/const.inc old mode 100755 new mode 100644 diff --git a/inc/diskdrv.inc b/inc/diskdrv.inc old mode 100755 new mode 100644 diff --git a/inc/geosmac.inc b/inc/geosmac.inc old mode 100755 new mode 100644 index 25b93e2d..c8029d32 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -29,6 +29,11 @@ LoadB dest+0, <(value) .endmacro +.macro LoadW___ dest, value + LoadB dest+0, <(value) + LoadB dest+1, >(value) +.endmacro + .macro MoveB source, dest lda source sta dest @@ -110,6 +115,16 @@ .endif .endmacro +.macro AddVW__ value, dest + lda #<(value) + clc + adc dest + sta dest + lda #>(value) + adc dest + 1 + sta dest + 1 +.endmacro + .macro sub source sec sbc source @@ -138,6 +153,16 @@ sta dest+1 .endmacro +.macro SubVW_ value, dest + lda dest+0 + sec + sbc #<(value) + sta dest+0 + lda dest+1 + sbc #>(value) + sta dest+1 +.endmacro + .macro CmpB source, dest lda source cmp dest @@ -381,3 +406,24 @@ ASSERT_NOT_BELOW_IO .macro END_IO_128 .endmacro .endif + +.macro bge addr + bcs addr +.endmacro + +.macro bgt addr + .local @done + beq @done + bcs addr +@done: +.endmacro + +.macro blt addr + bcc addr +.endmacro + +.macro ble addr + beq addr + bcc addr +.endmacro + \ No newline at end of file diff --git a/inc/geossym.inc b/inc/geossym.inc old mode 100755 new mode 100644 diff --git a/inc/inputdrv.inc b/inc/inputdrv.inc old mode 100755 new mode 100644 diff --git a/inc/kernal.inc b/inc/kernal.inc old mode 100755 new mode 100644 diff --git a/inc/printdrv.inc b/inc/printdrv.inc old mode 100755 new mode 100644 diff --git a/reference/wheels/reux.bin b/reference/wheels/reux.bin old mode 100755 new mode 100644 diff --git a/regress.sh b/regress.sh old mode 100755 new mode 100644 diff --git a/topdesk/BitMap.bf b/topdesk/BitMap.bf new file mode 100644 index 0000000000000000000000000000000000000000..0a735c60cd735df68fdd06734b188fd702f9eeeb GIT binary patch literal 64 zcmdnLYSpUH|NmDru!Ys1Uc(?1`CoYhgHr-S^8rS-|NnR!n53GUOy_^fYHqsPz`Uyd LZzxE8D1rn4-DMu) literal 0 HcmV?d00001 diff --git a/topdesk/C64Icon.bf b/topdesk/C64Icon.bf new file mode 100644 index 0000000000000000000000000000000000000000..e17e22ccd14ee06319908da8952d50cfb3b006ab GIT binary patch literal 64 zcmWN`!3_W*3non Geos + MoveB CopyMemHigh,r4H + MoveW_ dirEntryBuf+19,r1 + jsr ReadBlock ;InfoBlock + txa + bne @errD + lda dirEntryBuf+21 + beq CopySeq ;=>VLIR + jmp CopyVLIR +@errD: jmp DoneWithIO + +CopySeq: MoveB dirEntryBuf+2,r1H + MoveB dirEntryBuf+1,r1L + beq @90 ;=>keine Daten +@10: MoveB CopyMemLow,r4H + LoadB r4L,0 + jsr ReadChain + txa + bne errD + MoveW_ r1,r15 + ldx #r11 + jsr Search_Turbo + txa + bne @err + lda r9L + bne @80 + jsr Get1stBlock + txa + bne errD + MoveW_ r9,dirEntryBuf+1 +@80: MoveB CopyMemLow,r4H + LoadB r4L,0 + PushW r9 + jsr WriteChain + PopW r1 + txa + bne errD + MoveB CopyMemLow,r4H + LoadB r4L,0 + jsr VerifyChain + txa + bne errD + lda r15L + bne @60 +@90: jmp WriteInfo +@60: ldx #r10 + jsr Search_Turbo + txa + bne @err + MoveW_ r15,r1 + jmp @10 +@err: rts +errD: jmp DoneWithIO + +CopyVLIR: LoadB r2L,$ff + MoveW_ dirEntryBuf+1,r1 + LoadW___ r4,fileTrScTab ;Index-Block + jsr ReadBlock ;nach + txa ;fileTrScTab + bne errD + LoadB r15L,$ff + MoveB CopyMemLow,r4H + LoadB r4L,0 + ldy #2 ;erstes Record + sty r14H ;letzter Zeiger +@10: lda fileTrScTab,y + sta r1L + iny + sty r14L ;aktueller Zeiger + ldx fileTrScTab,y + stx r1H + tay + bne @20 ;Buffer voll +@70: ldy r14H + iny + iny + sty r14H + beq @100 ;fertig + lda fileTrScTab,y + bne @80 + lda fileTrScTab+1,y + beq @100 + bne @70 +@80: inc r4H + lda r4H + cmp CopyMemHigh + bcs @100 + lda r9L + sta fileTrScTab,y + lda r9H + sta fileTrScTab+1,y + jmp @60 +@100: PopB r14H + PopW r1 + txa + bne @errD2 + + MoveB CopyMemLow,r4H + LoadB r4L,0 +@110: jsr VerifyChain + txa +@errD2: bne @errD + ldy #0 + lda (r4),y + bne @190 ;=>Buffer voll +@120: ldy r14H + iny + iny + sty r14H + beq WriteInfo ;=>fertig + ldx fileTrScTab+1,y + stx r1H + lda fileTrScTab,y + sta r1L + bne @130 ;letzter Block + lda r3L + sta (r4),y + iny + lda r3H + sta (r4),y +@10: jsr WriteBlock + txa + bne @err + MoveB r3L,r1L + sta r9L + MoveB r3H,r1H + sta r9H + ldy #0 + lda (r4),y + beq @err ;=>letzter Block + lda r4H + tay + iny + cpy CopyMemHigh + bcc @20 +@err: rts + +;Par: r1 - Track/Sektor des ersten zu lesenden Blocks +; r4 - Zeiger auf den freien Speicherbereich +;Ret: x - Fehlernummer +VerifyChain2: inc r4H +VerifyChain: jsr VerWriteBlock + txa + bne @err + ldy #1 + lda (r4),y + sta r1H + dey + lda (r4),y + sta r1L + beq @30 + lda r4H + tay + iny + cpy CopyMemHigh + bcc VerifyChain2 +@30: ldx #0 +@err: rts + +Get1stBlock: ldy #1 + sty r3L + dey + sty r3H + jsr SetNextFree + MoveW_ r3,r9 + rts + +UeberschreibenBox: .byte $81 + .byte DBVARSTR,$10,$10,r13 + .byte DBTXTSTR,$10,$20 + .word @t1 + .byte DBTXTSTR,$10,$30 + .word @t2 + .byte DBTXTSTR,$10,$40 + .word @t3 + .byte YES,1,72 + .byte NO,17,72 + .byte NULL +@t1: .byte BOLDON,"ist bereits vorhanden.",0 +@t2: .byte "Soll die Datei }berschrieben",0 +@t3: .byte "werden ?",PLAINTEXT,0 + +nichtUeberschreibenbox: + .byte $81 + .byte DBVARSTR,$10,$10,r13 + .byte DBTXTSTR,$10,$20 + .word @t1 + .byte DBTXTSTR,$10,$30 + .word @t2 + .byte OK,17,72 + .byte NULL +@t1: .byte BOLDON,"ist bereits vorhanden",0 +@t2: .byte "und schreibgesch}tzt.",PLAINTEXT,0 + +Search_Turbo: PushB r2L + lda $00,x + sta r6L + lda $01,x + sta r6H + stx SearchDrive + lda Flag1581 + beq @noretdir3 + cpx #r10L + bne @noretdir3 + jsr i_MoveData + .word dir3Head,fileHeader,256 +@noretdir3: jsr DoneWithIO + jsr NewSearchDisk + txa + bne @err + lda r9L + bne @noinit + jsr @initsearchturbo + txa + beq @nogetdir3 +@err: PopB r2L +@err2: rts +@noinit: lda Flag1581 + beq @nogetdir3 + lda SearchDrive + cmp #r11L + bne @nogetdir3 + jsr i_MoveData + .word fileHeader,dir3Head,256 +@nogetdir3: jsr EnterTurbo + txa + bne @err + PopB r2L + jmp InitForIO + +@initsearchturbo: jsr OpenDisk ; BAM holen + txa + bne @err2 + ldx #0 ; Flag1581 entspr. setzen + lda curType + and #DRIVE_MASK + cmp #3 + bne @no1581 + ldx #$ff +@no1581: stx Flag1581 + ldy #9 ; Werte retten +@10: lda r9L,y + pha + dey + bpl @10 + ldy #$1d ; dirEntryBuf retten +@20: lda dirEntryBuf,y + pha + dey + bpl @20 + + MoveB r13L,r6L ; Zeiger auf Filenamen + sta fileHeader + MoveB r13H,r6H + sta fileHeader+1 + jsr FindFile + cpx #5 + bne @evtlfehler + ldx #0 ; File existiert noch nicht + beq @getwerte +@evtlfehler: txa + bne @getwerte + lda dirEntryBuf + and #%01000000 + beq @nocare + +;XXX LoadW___ r0, nichtUeberschreibenbox + LoadWr0 nichtUeberschreibenbox + jsr NewDoDlgBox + jmp @dberr +@nocare: +;XXX lda SureFlag +;XXX beq @notsure +;XXX jmp @delete + +@notsure: +;XXX LoadW___ r0, UeberschreibenBox + LoadWr0 UeberschreibenBox + jsr NewDoDlgBox + lda sysDBData + cmp #YES + beq @delete +@dberr: ldx #$41 + bne @getwerte +@delete: + MoveW_ fileHeader,r0 + jsr DeleteFile +@getwerte: ldy #0 ; gerettete Werte holen +@30: pla + sta dirEntryBuf,y + iny + cpy #$1e + bcc @30 + ldy #0 +@40: pla + sta r9L,y + iny + cpy #10 + bcc @40 + rts diff --git a/topdesk/DeskInclude/DiskCopy.inc b/topdesk/DeskInclude/DiskCopy.inc new file mode 100644 index 00000000..ded4cb53 --- /dev/null +++ b/topdesk/DeskInclude/DiskCopy.inc @@ -0,0 +1,523 @@ +;CopyDisk +; Date: 21.6.1991 +; Par: r6 - Zeiger auf den SourceDiskNamen (mu~ nicht unbedingt eingelegt sein) +; Ret: x - Fehlernummer +; Des: alles + +dir3Head = $9c80 +INV_TRACK = $02 +IDD_DDr: .byte "B:" +DestinationName: .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +MyInterleave: .byte 0 +VerifyFlag: .byte $ff +Make2SFlag: .byte 0 +CopyDrives: .word 0 +SourceName: .word 0 +SourceType: .byte 0 +StartCopyDisk: ldy #0 + lda #0 + jsr ChangeDisk + txa + beq @01 + rts +@01: MoveB curType,SourceType + ldy #0 + sty r1H + sty r11H + iny + sty r1L + sty r11L +@00: LoadW___ r0,ReadBlock + jsr @100 + cpx #INV_TRACK + beq @05 + txa + bne @err +@05: MoveW_ r1,r10 + ldy #1 + tya + jsr ChangeDisk + txa + bne @err + MoveW_ r11,r1 + LoadW___ r0,DirTrack + jsr @100 + cpx #INV_TRACK + beq @07 + txa + bne @err +@07: lda VerifyFlag + beq @10 + MoveW_ r11,r1 + LoadW___ r0,VerWriteBlock + jsr @100 +@10: cpx #INV_TRACK + beq @30 + txa + bne @err + ldy #0 + lda #1 + jsr ChangeDisk + txa + bne @err + lda r10L + sta r1L + sta r11L + lda r10H + sta r1H + sta r11H + jmp @00 +@30: ldy #1 + lda #0 + jsr ChangeDisk + ldx Make2SFlag + beq @err + jsr Make2Sides + ldx #0 +@err: rts +@100: jsr InitCount + txa + bne @130 + LoadW___ r4,MemBegin + jsr EnterTurbo + txa + bne @130 + jsr InitForIO +@110: MoveW_ r1,r6 + jsr FindBAMBit + bne @115 + lda r0L + ldx r0H + jsr CallRoutine + txa + bne @130 + ldy r4H + iny + cpy CopyMemHigh + beq @120 + sty r4H +@115: jsr CountBlock + txa + beq @110 + bne @130 +@120: ldx #0 +@130: jmp DoneWithIO +DirTrack: lda #00 + cmp r1L + bne @40 + lda r1H + bne @40 + ldy #144 +@30: lda DestinationName-144,y + beq @20 + sta (r4),y + iny + cpy #160 + bcc @30 + bcs @10 +@20: lda #$a0 + sta (r4),y + iny + cpy #160 + bcc @20 +@10: ldx Make2SFlag + beq @40 + ldy #3 + lda #$80 + sta (r4),y +@40: jmp WriteBlock +ChangeDisk: ;wechselt Source- nach Destinationdisk usw. +; Par: y - 0 f}r Source einlegen und 1 entspr. f}r Destination +; a - 0 f}r vollst{ndigen Diskettenwechsel +; Ret: x - evtl. Fehlernummer (0-kein Fehler) +; Use: CopyDrives,SourceName,DestinationName +; Des: a,x,y, + tax + MoveW_ SourceName,r6 + tya + beq @20 + LoadW___ r6,DestinationName +@20: txa + bne @30 + jmp SearchDisk +@30: lda SourceType + and #DRIVE_MASK + cmp #3 + bne @noretdir3 + jsr i_MoveData + .word dir3Head,fileHeader,256 +@noretdir3: jsr NewSearchDisk + txa + bne @err + lda SourceType + and #DRIVE_MASK + cmp #3 + bne @err + jsr i_MoveData + .word fileHeader,dir3Head,256 +@err: rts +;InitCount +; initialisiert CountBlock +; Par: r1 - Track/Sektor des erstenBlocks +; Ret: x - Fehlernummer (0=kein Fehler) +; Use: SeperTr,FirstSektor,Track,Sektor,GetSectors +; Des: a,x,y,r6-r9 +InitCount: MoveB r1L,Track + lda r1H + pha + sta Sektor + jsr GetSectors + txa + bne @10 + MoveB r1H,SeperTr + lda #0 + sta r6H + sta r7H + MoveB Sektor,r6L + MoveB MyInterleave,r7L + ldx #r6L + ldy #r7L + jsr Ddiv + MoveB r8L,FirstSektor + ldx #0 +@10: pla + sta r1H + rts + +Track: .byte 0 +Sektor: .byte 0 +SeperTr: .byte 0 +FirstSektor: .byte 0 +;CountBlock +; z{hlt in Abh{ngigkeit von MyInterleave 1 Block weiter +; Par: keine +; Ret: r1 - n{chster Track/Sektor +; x - Fehlernummer +; Use: SeperTr,FirstSektor,Track,Sektor,InitCount2 +; Des: a,y +CountBlock: + lda Sektor + clc + adc MyInterleave + sta Sektor + sta r1H + cmp SeperTr + bcc @10 + inc FirstSektor + lda FirstSektor + cmp MyInterleave + bcs @20 + sta r1H + sta Sektor +@10: MoveB Track,r1L + ldx #0 + rts +@20: inc Track + MoveB Track,r1L + LoadB r1H,0 + jmp InitCount +;GetSectors gibt zu einem bestimmten Track die Anzahl der +;m|glichen Sektoren. +;Par: r1L - Track +;Ret: r1H - Sektoren +; x - Fehlernummer: +; $00 - kein Fehler +;Des: a,y +GetSectors: + lda SourceType + and #DRIVE_MASK + tay + lda r1L + beq @err + dey + bne @10 + cmp #36 ;1541 + bcc @20 +@err: ldx #INV_TRACK + rts +@10: dey + bne @50 + cmp #71 ;1571 + bcs @err +@20: ldy #7 ;1571/41 +@30: cmp Tracks,y + bcs @40 + dey + bpl @30 + bmi @err +@40: tya + and #%00000011 + tay + lda Sectors,y +@45: sta r1H + ldx #0 + rts +@50: cmp #81 + bcs @err + lda #40 + bne @45 + +Tracks: .byte 1,18,25,31,36,53,60,66 +Sectors: .byte 21,19,18,17 +Make2Sides: jsr i_FillRam + .word 256,dir2Head + .byte 0 + LoadW___ r0,Content18 + jsr InitRam + jmp PutDirHead +Content18: .word curDirHead+221 + .byte 35 + .byte $15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15,$15 + .byte 0,$13,$13,$13,$13,$13,$13,$12,$12,$12,$12,$12,$12 + .byte $11,$11,$11,$11,$11 +Content53: .word dir2Head + .byte 105 + .byte $ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f + .byte $ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f + .byte $ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f + .byte $ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f,$ff,$ff,$1f + .byte $ff,$ff,$1f,$00,$00,$00 + .byte $ff,$ff,$07,$ff,$ff,$07,$ff,$ff,$07,$ff,$ff,$07,$ff,$ff,$07,$ff,$ff,$07 + .byte $ff,$ff,$03,$ff,$ff,$03,$ff,$ff,$03,$ff,$ff,$03,$ff,$ff,$03,$ff,$ff,$03 + .byte $ff,$ff,$01,$ff,$ff,$01,$ff,$ff,$01,$ff,$ff,$01,$ff,$ff,$01 + .word 0 +CopyDisk: +; Par: r6 - Zeiger auf den SourceDiskNamen (mu~ nicht unbedingt eingelegt sein) + MoveW_ r6,SourceName + jsr SearchDisk + txa + beq @00 + rts +@00: MoveB curDirHead,DirTrack+1 + MoveB interleave,MyInterleave + lda curType + and #DRIVE_MASK + cmp #2 + bne @05 + ldx curDirHead+3 + bmi @05 + lda #1 +@05: sta SourceType + lda curDrive + sta CopyDrives + sta CopyDrives+1 + jsr NextDrive + txa + bne @err + LoadW___ @IDD_DIT,DummyDIconTab + lda CopyDrives + cmp CopyDrives+1 + beq @10 + LoadW___ @IDD_DIT,DrivesIconTab +@10: lda CopyDrives + clc + adc #'A'-8 + sta IDD_SDr +@15: ldx #DISK + lda curType + and #%10000000 + beq @20 + ldx #0 +@20: stx @IDD_RAM +@25: lda CopyDrives+1 + clc + adc #'A'-8 + sta IDD_DDr + LoadW___ r0,@InsertDiskDial + jsr DoDlgBox + lda r0L + cmp #OK + bne @30 + lda curDirHead+189 + cmp #$50 + beq @27 + cmp #$42 + bne @28 +@27: LoadW___ r0,@NoSystemBox + jsr DoDlgBox + ldx #12 + rts +@28: jmp StartCopyDisk +@30: cmp #DISK + bne @40 + jsr InsertNewDisk + txa + beq @25 +@err: rts +@40: cmp #128 + bne @50 + jsr NextDrive + txa + beq @15 + bne @err +@50: ldx #CANCEL_ERR + rts +@InsertDiskDial: .byte $81,DB_USR_ROUT + .word InitClickingOutSide + .byte DBOPVEC + .word ClickOutSide + .byte OK,17,6 + .byte CANCEL,17,72 + .byte DBTXTSTR,4,14 + .word @IDD_t1 + .byte DBTXTSTR,4,30 + .word @IDD_t2 + .byte DBTXTSTR,4,58 + .word @IDD_t3 + .byte DBTXTSTR,18,88 + .word @IDD_t4 + .byte DBTXTSTR,10,69 + .word IDD_DDr + .byte DBUSRICON,17,50 +@IDD_DIT: .word DrivesIconTab +@IDD_RAM: .byte DISK,17,28,0 +@IDD_t1: .byte BOLDON,"Zieldiskette ausw{hlen:",0 +@IDD_t2: .byte "Startdiskette",0 +@IDD_t3: .byte "Zieldiskette",PLAINTEXT,0 +@IDD_t4: .byte "Verify",0 +@NoSystemBox: + .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte $0b,$10,$30 + .word @t3 + .byte OK,17,72,NULL +@t1: .byte "Die Zieldiskette darf keine ",0 +@t2: .byte "System- oder Hauptdiskette",0 +@t3: .byte "sein.",0 + +IDD_SDr: .byte "A:",0 +NextDrive: ldy CopyDrives+1 +@10: iny + cpy #12 + bcc @20 + ldy #8 +@20: lda driveType-8,y + beq @10 + and #DRIVE_MASK + cmp SourceType ;mit Sourcetype vergleichen + beq @30 + tax + lda SourceType + cmp #1 + bne @10 + cpx #2 + bne @10 +@30: cpy CopyDrives + bne @40 + lda driveType-8,y + and #%10000000 + beq @40 + lda CopyDrives + cmp CopyDrives+1 + bne @10 + ldx #115 + rts +@40: tya + sta CopyDrives+1 + jsr NewSetDevice +InsertNewDisk: jsr OpenDisk + txa + bne @30 + ldy #15 +@10: lda curDirHead+144,y + cmp #$a0 + bne @20 + lda #0 +@20: sta DestinationName,y + dey + bpl @10 + LoadW___ r5,DestinationName + MoveW_ SourceName,r6 + ldx #r5L + ldy #r6L + jsr CmpString + bne @40 +@30: lda curDrive + clc + adc #'A'-8 + sta @IZD_Dr + LoadW___ r0,@InsertZielDial + jsr DoDlgBox + lda r0L + cmp #OK + beq InsertNewDisk + ldx #CANCEL_ERR + rts +@40: lda interleave + cmp MyInterleave + bcc @50 + sta MyInterleave +@50: ldx #0 + lda SourceType + cmp #1 + bne @60 + lda curType + and #DRIVE_MASK & %11111101 + bne @60 + lda curDirHead+3 + bpl @60 + dex +@60: stx Make2SFlag + lda SourceType + cmp #2 + bne @70 + lda curType + and #DRIVE_MASK & %11111101 + bne @70 + lda curDirHead+3 + bpl @30 +@70: ldx #0 + rts +@InsertZielDial: .byte $81,OK,1,72,CANCEL,17,72 + .byte DBTXTSTR,16,16 + .word @IZD_t1 + .byte DBTXTSTR,16,32 + .word @IZD_t2 + .byte 0 +@IZD_t1: .byte BOLDON,"Bitte Zieldisk in Laufwerk " +@IZD_Dr: .byte "A",0 +@IZD_t2: .byte "einlegen.",PLAINTEXT,0 +InitClickingOutSide: LoadW___ r0,IDD_SDr + LoadW___ r11,74 + LoadB r1H,75 + jsr PutString + MoveW_ SourceName,r0 + jsr PutString + jsr i_FrameRectangle + .byte 82+32,88+32 + .word 8+64,14+64 + .byte %11111111 + lda VerifyFlag + beq @10 + jsr InvertRectangle +@10: rts +ClickOutSide: lda mouseData + beq @10 + LoadB r2L,82+32 + LoadB r2H,88+32 + LoadW___ r3,8+64 + LoadW___ r4,14+64 + jsr IsMseInRegion + beq @10 + lda VerifyFlag + eor #$ff + sta VerifyFlag + jmp InvertRectangle +@10: rts + +MemBegin = (CopyDisk&$ff00)+$100 +DummyDIconTab: .word 0 + .byte 0,0,1,1 + .word 0 +DrivesIconTab: .word DrivesIcon + .byte 0,0,6,16 + .word DrivesIconRout +DrivesIconRout: LoadB sysDBData,128 + jmp RstrFrmDialogue +DrivesIcon: + +.incbin "topdesk/Drive.map" + diff --git a/topdesk/DeskInclude/DosFormat.s.inc b/topdesk/DeskInclude/DosFormat.s.inc new file mode 100644 index 00000000..70e7d4c5 --- /dev/null +++ b/topdesk/DeskInclude/DosFormat.s.inc @@ -0,0 +1,130 @@ +;DosFormat (27.06.1991) +;formatiert die Diskette im aktuellen Laufwerk +;Das aktuelle Laufwerk darf keine RAM sein !!! +; Par: r0: Zeiger auf Name als Geos-String +; r1L: Flag bei 1571-Floppies +; = 0 -> ein- sonst doppelseitig formatieren +;Des: r0-r15 (Durch InitForIO und Kernalroutinen ?) +; a0,a1,a,x,y +;if .p +WaitTime = $2000 +SetFilePar = $ffba +SetFileName = $ffbd +Open = $ffc0 +Close = $ffc3 +Listen = $ffb1 +SecListen = $ff93 +UnListen = $ffae +Talk = $ffb4 +SecTalk = $ff96 +UnTalk = $ffab +IECIn = $ffa5 +IECOut = $ffa8 +;endif +DosFormat: PushW r0 + MoveB r1L,a1L + jsr PurgeTurbo + jsr InitForIO + lda #$01 ;Open + ldx curDrive + ldy #$6f + jsr SetFilePar + lda #$00 + jsr SetFileName + jsr Open + lda curDrive + jsr Listen + lda #$6f + jsr SecListen + lda curType + and #DRIVE_MASK + cmp #02 + bne @10 + LoadW___ a0,@u0mx + LoadB @u0mx+4,'0' + lda a1L + beq @20 + LoadB @u0mx+4,'1' +@20: jsr SendString +@10: lda #'N' + jsr IECOut + lda #'0' + jsr IECOut + lda #':' + jsr IECOut + PopW a0 + jsr SendString + LoadW___ a0,@fm + jsr SendString + lda curType + and #DRIVE_MASK + cmp #2 + bne @30 + lda a1L + bne @30 + LoadW___ a0,@u0mx + LoadB @u0mx+4,'1' + jsr SendString +@30: lda curDrive + jsr UnListen + LoadB $90,0 + lda curDrive + jsr Talk + lda #$6f + jsr SecTalk + jsr IECIn + sec + sbc #$30 + asl + sta a1H + asl + asl + clc + adc a1H + sta a1H + jsr IECIn + sec + sbc #$30 + clc + adc a1H + sta a1H +@40: jsr IECIn + bit $90 + bvc @40 + lda curDrive + jsr UnTalk + lda #$01 + jsr Close + jsr DoneWithIO + ldx a1H + bne @err + LoadW___ r0,WaitTime +@waitloop: ldx #r0L + jsr Ddec + bne @waitloop + jsr OpenDisk + txa + bne @err + jmp SetGEOSDisk +@err: rts +@fm: .byte ",TD",$0d,0 +@u0mx: .byte "U0>MX",$0d,"I",$0d,0 +SendString: ldy #0 +@10: lda (a0),y + beq @20 + sty a1H + pha + jsr IECOut + pla + cmp #$0d + bne @nocr + lda curDrive + jsr UnListen + lda curDrive + jsr Listen + lda #$6f + jsr SecListen +@nocr: ldy a1H + iny + bne @10 +@20: rts diff --git a/topdesk/DeskInclude/EditText.inc b/topdesk/DeskInclude/EditText.inc new file mode 100644 index 00000000..122a3c8b --- /dev/null +++ b/topdesk/DeskInclude/EditText.inc @@ -0,0 +1,435 @@ +EditText: ; Text-Editierung +; Par: keine +; Ret: keine +; Des: alles + lda dirEntryBuf+22 + bne @05 + rts +@05: MoveW_ otherPressVec,oldotherPress + LoadW___ otherPressVec,MouseRoutine + LoadW___ keyVector,TextKeyRoutine + lda curHeight + jsr InitTextPrompt + ldy #MaxTextLength-1 +@testcodeloop: lda Text,y + beq @codeok + cmp #$0d + beq @codeok + cmp #32 + bcc @undefinedcode + cmp #127 + bcc @codeok +@undefinedcode: lda #'*' + sta Text,y +@codeok: dey + bpl @testcodeloop + ldy #5 +@10: lda PositionYO,y + sta r2L,y + sta windowTop,y + dey + bpl @10 + dec r2L + inc r2H + ldx #r3L + jsr Ddec + inc r4L + bne @20 + inc r4H +@20: lda #$ff + jsr FrameRectangle + LoadB ActualCharacter,0 + jmp NewText +oldotherPress: .word 0 + +TextKeyRoutine: lda keyData + cmp #32 + bcs @100 +@noputkey: cmp #128+20 + bne @noclose + jmp RstrFrmDialog +@noclose: cmp #08 + bne @10 + lda ActualCharacter + beq @99 + dec ActualCharacter + jmp NewDisplay +@10: cmp #30 + bne @20 + ldy ActualCharacter + iny + cpy TextLength + bcs @99 + inc ActualCharacter + jmp NewDisplay +@20: cmp #17 + bne @30 + lda stringY + clc + adc #10 +@25: sta r1H + MoveW_ stringX,r11 + jmp SetTextPtr +@30: cmp #16 + bne @40 + ldy ActualCharPointer + beq @99 + lda stringY + sec + sbc #10 + jmp @25 +@40: ldx #$ff + stx AlternateFlag + cmp #29 + bne @50 + ldy ActualCharacter + beq @99 + jsr DeleteChar + dec ActualCharacter + jmp NewText +@50: cmp #$0d + beq @102 +@70: +@99: rts ;Sonderzeichen +@100: cmp #127 + bcs @noputkey +@102: ldx #$ff + stx AlternateFlag + ldy TextLength + cpy #MaxTextLength + bcs @99 + jsr InsertChar + inc ActualCharacter + ldy ActualCharacter + cpy TextLength + bcs @110 + jmp NewText +@110: jsr RethinkText + MoveW_ stringX,r11 + MoveW_ stringX,r0 + lda stringY + clc + adc #7 + sta r1H + lda keyData + jsr GetCharWidth + beq @117 + clc + adc r0L + sta r0L + bcc @115 + inc r0H +@115: CmpW r0,PositionXR + bcc @118 +@117: inc ActualCharPointer + jmp NewText +@118: lda keyData + jsr PutChar + jmp NewDisplay +MouseRoutine: lda mouseData + bpl @10 +@05: lda oldotherPress + ldx oldotherPress+1 + jmp CallRoutine +@10: ldy #5 +@15: lda PositionYO,y + sta r2L,y + dey + bpl @15 + jsr IsMseInRegion + beq @05 + MoveW_ mouseXPos,r11 + MoveB mouseYPos,r1H +SetTextPtr: jsr TextPosition + bcc @20 + ldx ActualCharacter + beq @20 + dex + dex + stx ActualCharacter + jsr InitForIO + inc $d020 + jsr DoneWithIO + jsr NewDisplay + LoadB keyData,30 + jmp TextKeyRoutine +@20: jmp NewDisplay +NewText: +; rechnet alle Zeiger neu aus und gibt alle Zeilen ab der aktuellen aus + jsr RethinkText + jsr RethinkActChrPtr + PushB ActualCharPointer + lda ActualCharPointer + beq @10 + dec ActualCharPointer +@10: jsr RefreshLine + inc ActualCharPointer + lda ActualCharPointer + cmp #MaxZeilen + bcc @10 + PopB ActualCharPointer + jmp NewDisplay +NewDisplay: +; aktualisiert den Cursor + jsr RethinkActChrPtr + lda ActualCharPointer + asl + sta r1H + asl + asl + clc + adc r1H + adc PositionYO + bcs @draussen + cmp PositionYU + bcc @drin +@draussen: lda PositionYU + clc + adc #3 +@drin: sta r1H + MoveW_ PositionXL,r11 + ldy ActualCharPointer + ldx Pointer,y +@30: cpx ActualCharacter + beq @40 + lda Text,x + jsr GetCharWidth + clc + adc r11L + sta r11L + bcc @35 + inc r11H +@35: inx + bne @30 +@40: CmpW r11,PositionXR + bcc @50 + MoveW_ PositionXR,r11 +@50: MoveW_ r11,stringX + MoveB r1H,stringY + jmp PromptOn +RethinkText: +; aktualisiert Pointer und TextLength +; Des: a,x,y,r0-r2 + ldy #0 ;Variablen initialisieren + sty r2L + sty Pointer +@loop2: LoadB r2H,0 + MoveW_ PositionXL,r0 + ldy r2L + ldx Pointer,y + dex +@loop: inx + lda Text,x + beq @ende + cmp #$0d + beq @15 + cmp #32 + bne @05 + stx r1L + dec r2H +@05: jsr GetCharWidth ;CRSR-Pos aktualisieren + clc + adc r0L + sta r0L + bcc @10 + inc r0H +@10: CmpW r0,PositionXR ;Rechter Rand erreicht + bcc @loop + lda r2H ;Space vorhanden + beq @20 + ldx r1L ;Space = gew. Position +@15: inx ;n{chstes Zeichen +@20: ldy r2L ;MaxZeilen erreicht + cpy #MaxZeilen-1 + bcs @search0 + inc r2L + txa + sta Pointer+1,y + jmp @loop2 +@search0: lda Text,x + beq @ende + inx + bne @search0 +@ende: inc r2L + ldy r2L + inx + txa + sta TextLength +@30: sta Pointer,y + iny + cpy #MaxZeilen + bcc @30 + rts +TextPosition: +; Par: r11,r1H: gew}nschte Textposition +; Ret: ActualCharacter: Zeichenposition +; Des: a,x,y,r0-r3 + MoveW_ PositionXL,r0 + MoveW_ r11,r2 + SubW r0,r2 + lda r1H + sec + sbc PositionYO + ldy #0 +@10: sec + sbc #10 + bcc @20 + iny + bne @10 +@20: sty r3H + ldx Pointer,y + cpx TextLength + bcs @ende + stx r3L +; inx +; cpx Pointer+1,y +; bne :initloop +; lda Text-1,x +; cmp #$0d +; bne :initloop +; +;::initloop ldx r3L +@loop: lda Text,x + beq @40 + cmp #$0d + bne @nocr + lda #'M' +@nocr: jsr GetCharWidth + clc + adc r0L + sta r0L + bcc @30 + inc r0H +@30: MoveW_ r0,r1 ;Abstand errechnen + SubW r11,r1 + txa + pha + ldx #r1L + jsr Dabs + pla + tax + inx + CmpW r2,r1 ;kleinerer Abstand ? + bcc @groesser + MoveW_ r1,r2 ;neuen Abstand merken + stx r3L ;Offset merken +@groesser: ldy r3H + inx + txa + dex + cmp Pointer+1,y + bcc @loop +@40: clc +@50: MoveB r3L,ActualCharacter + rts +@ende: ldx TextLength + dex + stx ActualCharacter + clc + rts +RethinkActChrPtr: +; rechnet ActualCharPointer neu aus + ldy #0 +@05: lda Pointer,y + cmp ActualCharacter + beq @20 + bcs @10 + iny + cpy #MaxZeilen + bcc @05 +@10: dey +@20: sty ActualCharPointer + rts +RefreshLine: +; gibt die aktuelle Zeile neu aus +; Des: a,y + lda ActualCharPointer + asl + sta r2L + asl + asl + clc + adc r2L + clc + adc PositionYO + sta r2L + bcs @20 + cmp PositionYU + bcs @20 + clc + adc #9 + cmp PositionYU + bcc @01 + lda PositionYU +@01: sta r2H + MoveW_ PositionXL,r3 + MoveW_ PositionXR,r4 + lda #0 + jsr SetPattern + jsr Rectangle + lda r2L + clc + adc #7 + sta r1H + MoveW_ PositionXL,r11 + ldy ActualCharPointer + lda Pointer,y + cmp TextLength + bcs @20 + sta r15L + lda Pointer+1,y + sta r15H +@10: ldy r15L + lda Text,y + beq @15 + jsr PutChar +@15: inc r15L + lda r15L + cmp r15H + bcc @10 +@20: rts +InsertChar: +; InsertChar f}gt an der aktuellen Position den Inhalt von keyData ein +; Par: keyData: einzuf}gendes Zeichen +; Des: a,y + ldy TextLength + iny +@10: dey + lda Text,y + sta Text+1,y + cpy ActualCharacter + beq @20 + bcs @10 +@20: lda keyData + sta Text,y + rts +DeleteChar: +; DeleteChar nimmt aus dem Text das aktuelle Zeichen heraus +; Des: a,y + ldy ActualCharacter +@10: lda Text,y + sta Text-1,y + iny + cpy TextLength + bcc @10 + rts +;Position der EingabeBox : +PositionYO: .byte 136 +PositionYU: .byte 136+39 +PositionXL: .word 80 +PositionXR: .word 80+160 +MaxTextLength = 96 +TextLength: .byte 0 +; Offset des Abschlu~byte Null des Textes +ActualCharacter: .byte 0 +; ActualCharacter enth{lt den Offset des aktuell zu bearbeitenden Zeichens +ActualCharPointer: .byte 0 +; ActualCharPointer enth{lt die Nummer der aktuellen Zeile +MaxZeilen = 5 +Pointer: + .repeat MaxZeilen+1 + .byte 0 + .endrep + +; Pointer enth{lt f}r jede Zeile einen Offset auf das erste Zeichen der Zeile +; max. 22 Zeilen diff --git a/topdesk/DeskInclude/SearchDisk.inc b/topdesk/DeskInclude/SearchDisk.inc new file mode 100644 index 00000000..f3bf09ff --- /dev/null +++ b/topdesk/DeskInclude/SearchDisk.inc @@ -0,0 +1,205 @@ +; SearchDisk (11.02.1991) sucht nach der korrekten Diskette +; NewSearchDisk sucht nach der korrekten Diskette, ohne DirHead zu zerst|ren +; Par: r6: Diskettenname als String +; Ret: curType: (1571 einseitig=1541) ??? +; x: Fehlernummer +; x: CANCEL_ERR Vorgang abgebrochen +; Des: a,y,curDirHead(SearchDisk),diskBlkBuf(NewSearchDisk) +;DRIVE_MASK = %00011111 +;CANCEL_ERR = $0c +SearchDisk: LoadB OpenDiskFlag,1 + jsr MemSearchDisk + jsr DriveSearchDisk + txa + bne Ende + lda curType + cmp #2 ; 1571 ? + bne @10 + LoadB interleave,8 +@10: jmp OpenDisk +.if 0 + jsr MemSearchDisk + lda OpenDiskFlag + beq @03 + LoadB OpenDiskFlag,0 + jsr OpenDisk + clc +@03: bcc @05 + php + jsr NewDisk + plp +@05: php + jsr DriveSearchDisk + txa + bne @end + bcs @10 ; wenn kein SetDevice u. NewDisk ausgef}hrt + plp + bcc Ende + bcs @20 +@10: pla +@20: jmp OpenDisk ; wurde, braucht auch kein OpenDisk ausgef}hrt +@end: pla +.endif +Ende: rts ; zu werden + +NewSearchDisk: LoadB OpenDiskFlag,0 + jsr MemSearchDisk + txa + bne DriveSearchDisk + lda curType + cmp #2 ; 1571 ? + bne Ende + LoadB interleave,8 + bne Ende +DriveSearchDisk: ldx #1 + .byte $2c +MemSearchDisk: ldx #0 + LoadB @d,0 + ldy #29 +@20: lda r0L,y + pha + dey + bpl @20 + stx r7H +@50: ldy curDrive + sty r7L +@10: tya + jsr @TestDisk + txa + beq @end + ldy numDrives + dey + beq @19 + ldy curDrive +@18: iny + lda driveType-8,y + beq @18 + cpy #12 + bcc @17 + ldy #8 +@17: cpy r7L + bne @10 +@19: lda r7H + beq @err + lda AskDiskFlag + beq @err + PushW r6 + PushW r7 + LoadW___ r0,@insertdial + jsr NewDoDlgBox + ldx r0L + PopW r7 + PopW r6 + cpx #CANCEL + bne @50 +@err: ldx #CANCEL_ERR +@end: ldy #0 +@30: pla + sta r0L,y + iny + cpy #30 + bcc @30 + lda @d + bne @n30 + clc +@n30: rts +@insertdial: + .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0c,$10,$20,r6 + .byte $0b,$10,$30 + .word @t2 + .byte OK + .byte 1,72 + .byte CANCEL + .byte 17,72 + .byte NULL +@t1: .byte $18,"Bitte legen Sie die Disk",$1b,NULL +@t2: .byte $18,"ein.",$1b,NULL + +@TestDisk: +; cmp curDrive +; beq @n10 +; inc @d + jsr NewSetDevice + ldy r7H + beq @110 ;beq :n10 + lda OpenDiskFlag + beq @n01 + jsr OpenDisk + txa + beq @n10 + jmp @240 +@n01: jsr NewDisk +@n10: ldy r7H + beq @110 + LoadB r1H,0 + lda curType + and #DRIVE_MASK + cmp #2 + beq @d05 + cmp #1 + bne @d10 +@d05: LoadB r1L,18 + bne @d20 +@d10: cmp #3 + bne @d05 ; bei unbek. Laufwerk wird von 1541 ausgegangen + LoadB r1L,40 +@d20: LoadW___ r4,$8000 + jsr GetBlock + LoadW___ r5,$8000+144 + txa + bne @240 + beq @120 +@110: ldx #r5L + jsr GetPtrCurDkNm +@120: ;jsr ConvCurType + ldy #0 +@210: lda (r6),y + beq @220 + cmp (r5),y + bne @240 + iny + cpy #16 + bne @210 + beq @230 +@220: lda (r5),y + cmp #$a0 + bne @240 +@230: jsr @sub + ldx #0 + rts +@240: jsr @sub + ldx #1 + rts +@d: .byte 0 +@sub: lda r7H + beq @e10 + ldx #r4 + jsr GetPtrCurDkNm + ldy #15 +@loop: lda $8000+144,y + sta (r4),y + dey + bpl @loop +@e10: rts + +.if 0 +ConvCurType: +;Par: r4 - Zeiger auf den ersten BAM-Block einer Diskette +;Ret: curType (1571 einseitig = 1541) +;Des: a,y + lda curType + and #DRIVE_MASK + cmp #2 + bne @10 + ldy #3 + lda (r4),y + bne @10 + lda curType + and #%1100 0000 + ora #1 + sta curType +@10: rts +.endif diff --git a/topdesk/DeskInclude/SizeRectangle.inc b/topdesk/DeskInclude/SizeRectangle.inc new file mode 100644 index 00000000..26eb2ef3 --- /dev/null +++ b/topdesk/DeskInclude/SizeRectangle.inc @@ -0,0 +1,95 @@ +;SizeRectangle (mod. 24.07.1990) (mod. 24.4.91) +;Par: r0 - Zahl, die der Maximalgr|~e entspricht +; r1 - Darzustellende Zahl +; r2L - y-oben +; r2H - y-unten +; r3 - linke x-Koordinate +; r4 - rechte x-Koordinate +;Des: r0,r1,r5-r9,r11 +SizeRectangle: + lda #1 + jsr SetPattern + ldy #5 +@loop: lda r2L,y + pha + dey + bpl @loop + jsr NewRectangle + ldy #0 +@loop2: pla + sta r2L,y + iny + cpy #6 + bne @loop2 +; lda #$ff +; jsr FrameRectangle + lda #0 + ldy #5 +@10: sta r5L,y + dey + bpl @10 + lda r2H + sec + sbc r2L ; H|he ermitteln + sbc #2 ; -2 + sta r5L ; ->r5L + ldx #r0L + ldy #r5L + jsr NewDdiv ; Max / H|he + ldy #$ff +@20: iny + CmpW r6,r1 + bge @40 + AddW r0,r6 + AddW r8,r7 + CmpW r7,r5 + blt @20 + SubW r5,r7 + inc r6L + bne @20 + inc r6H + bne @20 +@40: tya + beq @30 + iny +@30: sty r9L +; lda r2H +; sec +; sbc r9L +; sta r2L +; lda #1 + lda r2H + sec + sbc r2L + sec + sbc r9L + clc + adc r2L + sta r2H + inc r2L + IncW r3 + DecW r4 + lda #0 + jsr SetPattern + jmp NewRectangle + +;NewDdiv +; behebt den Fehler von Ddiv und kann auch kleine bzw. 0 +; durch gr|~ere Werte dividieren. +; Par & Ret: s. Ddiv +NewDdiv: + lda $01,x + cmp $01,y + bne @10 + lda $00,x + cmp $00,y +@10: bcc @20 + jmp Ddiv +@20: lda $00,x + sta r8L + lda $01,x + sta r8H + lda #0 + sta $00,x + sta $01,x + rts diff --git a/topdesk/DeskInclude/Validate+Undelet.inc b/topdesk/DeskInclude/Validate+Undelet.inc new file mode 100644 index 00000000..99b859aa --- /dev/null +++ b/topdesk/DeskInclude/Validate+Undelet.inc @@ -0,0 +1,451 @@ +;letzte Modifizierungen der Routinen: 21.06.1991 +dir3Head = $9c80 +.if 0 +:UndeleteFile +; Par: r5 - Zeiger auf den Directory-Eintrag +; (wird aktualisiert) +; Ret: x - Fehlernummer +; Des: diskBlkBuf,fileTrScTab,a,y,r7,r8H,r2,r4,r1 + jsr EnterTurbo + txa + beq @05 + rts +@05: jsr InitForIO + jsr ValidateFile + txa + bne @err + ldx #$82 + ldy #21 + lda (r5),y + beq @10 + inx +@10: txa + ldy #0 + sta (r5),y + ldx #0 +@err: jmp DoneWithIO +.endif + +Validate: +;Des: diskBlkBuf,fileTrScTab,curDirHead,fileHeader,ValidateBuffer,a,y,r1-r2,r4-r8 + jsr OpenDisk + txa + bne @10 + jsr ClearBAM + txa + bne @10 + jsr EnterTurbo + txa + beq @20 +@10: rts +@20: jsr InitForIO + ldy #63 + lda #0 +@15: sta ValidateBuffer,y + dey + bpl @15 + lda curType + jsr Get1stDirBlock +@70: jsr @ValidateDirBlock + txa + bne @err + MoveB fileHeader+1,r1H + MoveB fileHeader,r1L + bne @70 + lda isGEOS + bmi @80 + MoveB curDirHead+172,r1H + MoveB curDirHead+171,r1L + beq @80 + jsr @ValidateDirBlock + txa + beq @80 +@err: jmp DoneWithIO +@80: lda curType + jsr Get1stDirBlock + jsr @200 + txa + bne @err + lda isGEOS + bmi @85 + MoveB curDirHead+172,r1H + MoveB curDirHead+171,r1L + beq @85 + jsr @200 + txa + bne @err +@85: jsr DoneWithIO + jmp PutDirHead +@200: LoadW___ r4,fileHeader +@110: jsr ReadBlock + txa + bne @err2 + PushB fileHeader+1 + MoveB fileHeader+32,fileHeader+1 + lda #2 +@90: tay + lda (r4),y + beq @100 + dey + lda (r4),y + tax + lda ValidateBuffer,x + bne @95 + sta (r4),y +@95: iny +@100: tya + clc + adc #32 + bcc @90 + MoveB fileHeader+1,fileHeader+32 + PopB fileHeader+1 + jsr WriteBlock + txa + bne @err2 + jsr VerWriteBlock + txa + bne @err2 + MoveB fileHeader+1,r1H + MoveB fileHeader,r1L + bne @110 +@err2: rts +@ValidateDirBlock: LoadW___ r4,fileHeader + PushW r1 + jsr ReadBlock + txa + bne @err3 + lda r4L + clc + adc #2 + sta r5L + lda r4H + adc #00 + sta r5H +@360: ldy #0 + lda (r5),y + beq @350 + ldy #22 + lda (r5),y + cmp #11 + bne @340 + ldy #19 + lda (r5),y + sta r1L + iny + lda (r5),y + sta r1H + LoadW___ r4,diskBlkBuf + jsr ReadBlock + txa + bne @err3 + ldx diskBlkBuf+117 + inc ValidateBuffer,x +@340: jsr ValidateFile + txa + bne @err3 +@350: lda r5L + clc + adc #32 + sta r5L + bcc @360 + PopW r1 + LoadW___ r4,fileHeader + jsr WriteBlock + txa + bne @err4 + jmp VerWriteBlock +@err3: PopW r1 +@err4: rts +; ClearBAM +; l|scht alle Bl|cke in der BAM +; Par: curDirHead +; Ret: x - Fehlernummer +; Des: a,y,r1,r4,r5-r8 +ClearBAM: lda curType + and #DRIVE_MASK + cmp #3 + bne @no1581 + ldy #16 +@3a: lda #40 + sta dir2Head,y + sta dir3Head,y + iny + ldx #4 + lda #$ff +@3b: sta dir2Head,y + sta dir3Head,y + iny + dex + bpl @3b + tya + bne @3a + LoadB dir2Head,40 + LoadB dir2Head+1,2 + LoadB dir3Head,0 + LoadB dir3Head+1,$ff + LoadB dir2Head+250,37 + LoadB dir2Head+251,%11111000 + jmp @allocdir +@no1581: pha + LoadB r1L,1 + ldy #4 +@1a: sty r0L + jsr GetSectors + ldy r0L + lda r1H + sta curDirHead,y + lda #$ff + sta curDirHead+1,y + sta curDirHead+2,y + lda r1H + sec + sbc #16 + tax + lda @setbits-1,x + sta curDirHead+3,y + iny + iny + iny + iny + inc r1L + cpy #144 + bcc @1a + dec curDirHead+72 + LoadB curDirHead+73,%11111110 + pla + cmp #2 + bne @allocdir + lda curDirHead+3 + beq @allocdir + jsr i_FillRam + .word 256,dir2Head + .byte 0 + jsr i_FillRam + .word 105,dir2Head + .byte $ff + LoadB r1L,36 + LoadB r0H,2 + ldy #221 +@2a: sty r0L + jsr GetSectors + ldy r0L + lda r1H + sta curDirHead,y + lda r1H + sec + sbc #16 + tax + lda @setbits-1,x + ldx r0H + sta dir2Head,x + AddVB 3,r0H + inc r1L + iny + bne @2a + LoadB curDirHead+238,0 + sta dir2Head+51 + sta dir2Head+52 + sta dir2Head+53 +@allocdir: lda curType + jsr Get1stDirBlock + MoveW_ r1,curDirHead + jsr EnterTurbo + txa + bne @err + jsr InitForIO + jsr AllocChain + jsr DoneWithIO + txa + bne @err + lda isGEOS + beq @err + MoveW_ curDirHead+171,r6 + jmp AllocAllDrives +@err: rts +@setbits: .byte 1,3,7,15,31 +ValidateFile: +; Par: r5 - Zeiger auf den Directory-Eintrag +; (wird aktualisiert) +; Ret: x - Fehlernummer +; Des: diskBlkBuf,fileTrScTab,a,y,r7,r8H,r2,r4,r1 + lda #0 + sta r2L + sta r2H + ldy #22 + lda (r5),y + beq @10 ;>nicht GEOS + ldy #19 + jsr @100 + jsr AllocChain ;Info-Block + txa + bne @err + ldy #21 + lda (r5),y + beq @10 + ldy #1 + jsr @100 + LoadW___ r4,fileTrScTab + jsr ReadBlock + txa + bne @err + ldy #2 +@25: lda fileTrScTab,y + sta r1L + iny + ldx fileTrScTab,y + stx r1H + cpy #1 + beq @10 + iny + lda r1L + beq @15 +@20: tya + pha + jsr AllocChain + pla + tay + txa + bne @err + beq @25 +@15: txa + bne @25 +@10: ldy #1 + jsr @100 + jsr AllocChain + txa + bne @err +@30: ldy #28 + lda r2L + sta (r5),y + iny + lda r2H + sta (r5),y + ldx #0 +@err: rts +@100: lda (r5),y + sta r1L + iny + lda (r5),y + sta r1H + rts +AllocChain: +; Date: 5.9.1990 +; Par: r1 - Track/Sektor des ersten Blocks +; r2 - f}r Anzahl belegter Bl|cke +; Ret: x - Fehlernummer +; r2 - hier wurden die allokierten Bl|cke addiert +; Des: diskBlkBuf,a,y,r7,r8H + lda r1L + tax + beq @err + LoadW___ r4,diskBlkBuf +@10: ldx #>ReadLink + ldy #ReadBlock + ldy #V8Ot^aCk!knEW7-Zg+b_f<*3)&l}RupWpC!LjwO910c!X cyW#V`1on1=+c2GA?TyTA{~POB|MTnz0O1-U?*IS* literal 0 HcmV?d00001 diff --git a/topdesk/Folder.bf b/topdesk/Folder.bf new file mode 100644 index 0000000000000000000000000000000000000000..a652bfb9e60e8922f67e4b03907872996372a309 GIT binary patch literal 64 hcmdnb!1#}WiP8QaqXPp7)&Kw7z`#r#VygfD2LSxr51;@5 literal 0 HcmV?d00001 diff --git a/topdesk/GetDrivers.dir/GetDrivers.s b/topdesk/GetDrivers.dir/GetDrivers.s new file mode 100644 index 00000000..492c2ee0 --- /dev/null +++ b/topdesk/GetDrivers.dir/GetDrivers.s @@ -0,0 +1,96 @@ + n "GetDrivers" + c "GetDrivers V1.0" + a "Walter Knupe" + iif .p + t "TopSym" + t "TopMac" + t "Sym128.erg" + t "CiMac" +endif +:DRIVER_LEN = $d80 +:Start lda #2 + jsr SetPattern + jsr i_Rectangle + b 0,199 + w 0,319 + jsr LoadDrivers + LoadW r0,Driver1541Space + lda #1 + jsr SaveDriver + LoadW r0,Driver1571Space + lda #2 + jsr SaveDriver + LoadW r0,Driver1581Space + lda #3 + jsr SaveDriver + jmp EnterDeskTop + t "SaveDriver.s" + :LoadDrivers LoadW r10,KonfClass + lda c128Flag + bpl :64 + LoadW r10,Konf128Class +::64 LoadB r7L,14 + LoadB r7H,1 + LoadW r6,KonfName + jsr FindFTypes + txa + bne :err + lda r7H + bne :err2 + LoadW r0,KonfName + jsr OpenRecordFile + txa + beq :geht +::err2 LoadW r0,:db + jsr DoDlgBox + jmp EnterDeskTop +::geht lda #2 + jsr PointRecord + LoadW r7,Driver1541Space + LoadW r2,-1 + jsr ReadRecord + txa + bne :err + jsr NextRecord + txa + bne :err + LoadW r7,Driver1571Space + LoadW r2,-1 + jsr ReadRecord + txa + bne :err + jsr NextRecord + txa + bne :err + LoadW r7,Driver1581Space + LoadW r2,-1 + jsr ReadRecord + txa + bne :err + rts +::err LoadW r0,:db2 + jsr DoDlgBox + jmp EnterDeskTop +::db b $81 + b $0b,$10,$10 + w :t1 + b $0b,$10,$20 + w :t2 + b OK,17,72,NULL +::t1 b BOLDON,"KONFIGURIEREN ist nicht",0 +::t2 b "zu finden !",PLAINTEXT,0 +::db2 b $81 + b $0b,$10,$10 + w :t3 + b $0b,$10,$20 + w :t4 + b OK,17,72,NULL +::t3 b "Fehler beim Lesen der ",0 +::t4 b "DiskDriver",0 +:KonfClass b "Configure",0 +:Konf128Class b "128 Config",0 +:KonfName s 17 + :Driver1541Space +:Driver1571Space = Driver1541Space+DRIVER_LEN +:Driver1581Space = Driver1571Space+DRIVER_LEN + diff --git a/topdesk/GetDrivers.dir/SaveDrivers.s b/topdesk/GetDrivers.dir/SaveDrivers.s new file mode 100644 index 00000000..761342ee --- /dev/null +++ b/topdesk/GetDrivers.dir/SaveDrivers.s @@ -0,0 +1,40 @@ +:SaveDriver ; Speichert einen Diskdriver + ; Par: r0: Zeiger auf Driver + ; a - DriveType (keine RAM und kein Shadow!) + tay + MoveW r0,DriverAdr + AddVW $d80,r0 + MoveW r0,DriverAdr+2 + lda HighDrives-1,y + sta DriverVersion + lda LowDrives-1,y + sta DriverVersion+1 + LoadW r0,DriverName + jsr DeleteFile + txa + beq :10 + cpx #5 + beq :10 + rts +::10 LoadB r10L,0 + LoadW r9,Header + jmp SaveFile + +:Header + w DriverName + b 3,21 + j + b $80!USR + b DATA + b SEQUENTIAL +:DriverAdr w $9000,$9d80,0 +:DriverName + b "Drive 15" +:DriverVersion + b "41",0,0 + s 255 + +:HighDrives + b "478",0 +:LowDrives + b "111",0 diff --git a/topdesk/IconA.map b/topdesk/IconA.map new file mode 100644 index 00000000..06454733 --- /dev/null +++ b/topdesk/IconA.map @@ -0,0 +1 @@ + ÿþ€€ƒ‡ƒ‡ƒŒÃŒÃØc˜c˜c€€ÿÿÿ \ No newline at end of file diff --git a/topdesk/IconB.map b/topdesk/IconB.map new file mode 100644 index 00000000..c0678588 --- /dev/null +++ b/topdesk/IconB.map @@ -0,0 +1 @@ + ÿþ€€ÃŒcŒcŒcÃŒcŒcŒcÀ€ÿÿÿ \ No newline at end of file diff --git a/topdesk/IconC.map b/topdesk/IconC.map new file mode 100644 index 00000000..a3493730 --- /dev/null +++ b/topdesk/IconC.map @@ -0,0 +1 @@ + ÿþ€€‡ÃŒc˜˜˜˜˜Œc‡Ã€€ÿÿÿ \ No newline at end of file diff --git a/topdesk/IconD.map b/topdesk/IconD.map new file mode 100644 index 00000000..a40ef076 --- /dev/null +++ b/topdesk/IconD.map @@ -0,0 +1 @@ + ÿþ€€ÃŒcŒcŒcŒcŒcŒcŒcÀ€ÿÿÿ± \ No newline at end of file diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc new file mode 100644 index 00000000..4475a16e --- /dev/null +++ b/topdesk/Include/DeskMain2.inc @@ -0,0 +1,995 @@ +SetWindows: jsr GotoFirstMenu + PushW a0 + LoadB a2L,$ff + ldy #3 +@05: lda windowsOpen,y + beq @10 + inc a2L +@10: dey + bpl @05 + lda a2L + bpl @20 + PopW a0 + rts +@20: asl + tay + lda Gentab,y + sta a1L + lda Gentab+1,y + sta a1H + ldy #03 +@25: sty @y + lda activeWindow,y + tax + lda windowsOpen,x + beq @40 + txa + jsr GetWinAdr + ldy #5 +@35: lda (a1),y + sta (a0),y + dey + bpl @35 + AddVW__ 6,a1 +@40: ldy @y + dey + bpl @25 + PopW a0 + jmp RedrawAll +@y: .byte 0 +.macro WindPos p1, p2, p3, p4 + .byte p1,p2 + .word p3,p4 +.endmacro + +Gentab: .word @tab1,@tab2,@tab3,@tab4 +@tab1: WindPos 15,197,2,272 +@tab2: WindPos 107,197,2,272 + WindPos 15,105,2,272 +@tab3: WindPos 15,105,138,272 + WindPos 15,105,2,136 + WindPos 107,197,2,272 +@tab4: WindPos 15,105,2,136 + WindPos 15,105,138,272 + WindPos 107,197,2,136 + WindPos 107,197,138,272 +SwapFile: jsr GetAktlDisk + tax + beq @05 + jsr ClearMultiFile2 + cpx #12 + beq @03 + jmp FehlerAusgabe +@03: rts +@05: lda a1L + jsr GetName2 + LoadW___ r6,Name + jsr FindFile ; 1. Name suchen + PushW r1 ; Track/Sektor und + PushB r5L ; Index merken + ldy #0 ; Dir-Block nach $8300 +@20: lda $8000,y + sta $8300,y + iny + bne @20 + jsr GetMark ; Nummer des 2. Namens holen + jsr GetFileName ; 2. Name holen + LoadW___ r6,Name + jsr FindFile ; 2. Name suchen + PopB r6L + PopW a7 + CmpW r1,a7 ; Name 1 und Name 2 im gleichen Dir- + bne @25 ; Block ? >nein + LoadB r6H,$80 ; Dir-Block in $8000 benutzen + bne @26 ; sonst +@25: LoadB r6H,$83 ; r6 als Zeiger auf 1. Eintrag in $8300 +@26: ldy #29 +@30: lda (r5),y ; Dir-Eintr{ge austauschen + pha + lda (r6),y + sta (r5),y + pla + sta (r6),y + dey + bpl @30 + LoadW___ r4,$8000 + jsr PutBlock ; 2. Dir-Block schreiben + CmpW r1,a7 + beq @40 + LoadW___ r4,$8300 + MoveW_ a7,r1 + jsr PutBlock ; 1. Dir-Block schreiben +@40: jmp ReloadActiveWindow +SelectAll: lda #1 + .byte $2c +SelectPage: lda #0 + sta @m + jsr GotoFirstMenu + ldx activeWindow + lda windowsOpen,x + bne @05 + rts +@05: stx messageBuffer+1 + jsr MyDCFilesSub + MoveB r2L,a2L + MoveW_ a5,a3 + jsr DispMarking + lda #0 +@loop: pha + ldx activeWindow + ldy @m + beq @08 + cmp fileAnz,x + bcs @10 + jsr CheckMark + bcc @10 + bcs @09 +@08: cmp fileNum,x + bcs @10 + jsr CheckDispMark + bcc @10 +@09: tax + jsr MarkFile +@10: pla + clc + adc #1 + ldy @m + bne @20 + cmp #16 + bne @loop +@15: jmp DispMarking +@20: cmp #144+8 + bne @loop + beq @15 +@m: .byte 0 +DeleteDir: ; Unterverzeichnis mit Kenn-Nr. a1L l|schen + ldx activeWindow + lda aktl_Sub,x + pha + lda a1L + sta aktl_Sub,x +@10: lda #0 + jsr DeleteSub + txa + bne @20 + bcc @10 +@20: txa + tay + ldx activeWindow + pla + sta aktl_Sub,x + tya + tax + rts +NewPutDecimal: ; Par: r0 Zahl + ; r11/r1H Position + ; a Bit 7: 0 - rechstb}ndig, Bit 0-5 Breite des Ausgabefeldes + ; 1 - linksb}ndig + ; Bit 6: wird nicht beachtet (!) + tax + PushB r1H + txa + pha + lda #0 + pha + LoadW___ r1,10 +@loop: ldx #r0 + ldy #r1 + jsr Ddiv + lda r8L + clc + adc #$30 + pha + lda r0L + ora r0H + bne @loop + ldy #$ff +@loop2: iny + pla + sta @zahl,y + bne @loop2 + pla + bpl @10 + PopB r1H + LoadW___ r0,@zahl + jmp NewPutString +@10: pha + LoadW___ r0,@zahl + jsr StringLen + pla + and #%00111111 + clc + adc r11L + sta r11L + bcc @20 + inc r11H +@20: lda r11L + sec + sbc r1L + sta r11L + lda r11H + sbc r1H + sta r11H + PopB r1H + jmp NewPutString +@zahl: .byte 0,0,0,0,0,0 +GetWinName: ; Ermittlung des Fenstertitelstring + ; Par: a: Fensternummer + ; Ret: r1: Pointer auf String + ; y: Index auf das letzte Zeichen (=Endekennz.=0-Byte) + ; Des: a,x + asl + tax + lda NameTab,x + sta r1L + lda NameTab+1,x + sta r1H + ldy #00 +@10: lda (r1),y + beq @end + iny + bne @10 +@end: rts +GetSubDirXList: ; Ermittlung der SubDirXList + ; Par: x: Nummer (0-3) + ; Ret: r0: Adresse der SubDirXList + ; Des: a + lda SubDirListTabL,x + sta r0L + lda SubDirListTabH,x + sta r0H + rts +GetWinTabAdr: ; x : Nummer (bleibt erhalten und in a) r1: Adresse + txa + asl ; File/Icontabellenadresse nach r0 + tay + lda WinTabAdr,y + sta r1L + iny + lda WinTabAdr,y + sta r1H + txa + rts +GetAktlWinDisk: ; wie GetWinDisk, jedoch immer f}r das aktuelle Fenster + ; Par: --- + ldx activeWindow +GetWinDisk: ; Diskettennamen aus dem Pfadnamen eines Fensters ermitteln + ; Par: x: Fensternummer + ; Ret: Diskettenname abgelegt in DiskName + ; z-Flag gesetzt, wenn DiskName mit Diskname des aktl. + ; Fensters identisch + ; r0: Zeiger auf Disknamen (nicht DiskName) des Fensters x + txa + asl + tay + lda NameTab,y + sta r0L + lda NameTab+1,y + sta r0H + lda activeWindow + asl + tay + lda NameTab,y + sta r1L + lda NameTab+1,y + sta r1H + ldy #0 + sty r2L +@10: lda (r0),y + cmp (r1),y + beq @11 + cpy #18 ; "x:" + Diskname + beq @11 + ldx #01 + stx r2L +@11: tax + beq @20 + cmp #PLAINTEXT + beq @20 + cmp #'/'+$80 + beq @20 + sta DiskName,y + iny + bne @10 +@20: lda #00 + sta DiskName,y + lda r2L + rts +GetEqualWindows: ; Ermittlung der Fensternummern, deren Pfadname genau mit dem + ; Pfadnamen eines bestimmten Fensters }bereinstimmt + ; Par: x: FensterNummer + ; Ret: ab a6L stehen 4 FlagBytes $01 bei gleich, sonst $00 + ; Des: a,x,y,a2-a7 + ldy #07 +@03: lda NameTab,y ; Nametab nach a2-a5 }bertragen + sta a2L,y + dey + bpl @03 + txa ; a2 <=> a2,x + asl a + tay + txa + pha + lda a2L,y + ldx a2L + stx a2L,y + sta a2L + lda a2H,y + ldx a2H + stx a2H,y + sta a2H + ; Zeiger auf Source: in a2 + ; a3: 2. Window, wenn S <> 2, sonst 1. Window + ; a4: 3. Window, wenn S <> 3, sonst 1. Window + ; a5: 4. Window, wenn S <> 4, sonst 1. Window + lda #01 + sta a6H + sta a7L + sta a7H + ldx #00 + ldy #00 +@05: lda (a2),y ; S-Zeichen holen + cmp (a3),y ; Mit D1 vergleichen + beq @10 + stx a6H ; D1 ungleich +@10: cmp (a4),y ; Mit D2 vergleichen + beq @20 + stx a7L ; D2 ungleich +@20: cmp (a5),y ; Mit D3 vergleichen + beq @30 + stx a7H ; D3 ungleich +@30: cmp #00 + beq @40 + iny + bne @05 +@40: pla + tax + lda a6L,x ; Ordnung in a6-a7 wiederherstellen + sta a6L + ldy #00 + sty a6L,x + ; Jetzt stehen in a6-a7 4 Flagbytes der jeweiligen Fenster + ; $01 : Fenster-Name gleich Source, beim Source ist $00 eingetragen + ldy #3 +@loop: lda windowsOpen,y + bne @50 + sta a6L,y +@50: dey + bpl @loop + rts +ClxL = 240 +ClxR = 319 +ClyO = 1 +ClyU = ClyO+12 +TimeX = 55 +TimeY = 9 +DateX = 5 +DateY = TimeY +; InitClock +; Bereich festlegen +; Prozess initialisieren +; Prozess starten +; otherPressVector auf IsClock +InitClock: + jsr i_GraphicsString + .byte NEWPATTERN,0 + .byte MOVEPENTO + .word ClxL + .byte ClyO + .byte RECTANGLETO + .word ClxR + .byte ClyU + .byte FRAME_RECTO + .word ClxL + .byte ClyO + .byte NULL + LoadW___ r0,ProzessTab + lda #1 + jsr InitProcesses + ldx #$00 + jsr RestartProcess + jsr EnableProcess + rts +ProzessTab: .word ShowClock + .word 500 +year = $8516 +ShowClock: LoadB dispBufferOn,%10000000 + php + sei + ldy #4 +@10: lda year,y + sta MyJahr,y + dey + bpl @10 + plp + ldx MyTag + lda #TagZehner-TagZehner + jsr DivnSet + ldx MyMonat + lda #MonZehner-TagZehner + jsr DivnSet + ldx MyJahr + lda #JahZehner-TagZehner + jsr DivnSet + ldx MyStd + lda #StdZehner-TagZehner + jsr DivnSet + ldx MyMin + lda #MinZehner-TagZehner + jsr DivnSet +@Ausg: LoadW___ rightMargin,ClxR-1 + jsr i_PutString + .word ClxL+DateX + .byte ClyO+DateY + .byte PLAINTEXT +TagZehner: .byte "0" + .byte PLAINTEXT +TagEiner: .byte "0" + .byte PLAINTEXT + .byte "." + .byte PLAINTEXT +MonZehner: .byte "0" + .byte PLAINTEXT +MonEiner: .byte "0" + .byte PLAINTEXT + .byte "." + .byte PLAINTEXT +JahZehner: .byte "0" + .byte PLAINTEXT +JahEiner: .byte "0" + .byte PLAINTEXT + .byte " " + .byte GOTOXY + .word ClxL+TimeX + .byte ClyO+TimeY + .byte PLAINTEXT +StdZehner: .byte "0" + .byte PLAINTEXT +StdEiner: .byte "0" + .byte PLAINTEXT + .byte ":" + .byte PLAINTEXT +MinZehner: .byte "0" + .byte PLAINTEXT +MinEiner: .byte "0" + .byte PLAINTEXT + .byte " " + .byte NULL + LoadW___ rightMargin,319 + rts +DivnSet: pha + stx r0L +Div10: LoadB r0H,0 + ldx #r0L + LoadW___ r1,10 + ldy #r1L + jsr Ddiv + pla + tax + lda r0L + clc + adc #$30 + sta TagZehner,x + inx + inx + lda r8L + adc #$30 + sta TagZehner,x + rts +MyJahr: .byte 0 +MyMonat: .byte 0 +MyTag: .byte 0 +MyStd: .byte 0 +MyMin: .byte 0 +CopyService: pha + ldx messageBuffer+1 + jsr GetWinDisk + ldy #18 +@10: lda DiskName,y ; Name2:=DiskName + sta Name2,y + dey + bpl @10 + jsr GetAktlWinDisk ; aktl Disknamen nach DiskName + pla + jsr GetFileName + bcc @13 ; Name vorhanden? + txa + bne @err + lda #$ff + rts ; Nein, also mit C=1 zur}ck +@13: sec + jsr DispDCFName + ldx #5 +@dloop: lda @data,x + sta r10L,x + dex + bpl @dloop + ldx messageBuffer+1 + lda aktl_Sub,x + sta DestinationDir + MoveB r12L,r13L + sta r6L + MoveB r12H,r13H + sta r6H + jsr FindFile + txa + beq @14 +@err: txa + pha + jsr DoHauptMenu + pla + tax + cpx #$41 + bne @e10 + clc + rts +@e10: jsr FehlerAusgabe + lda #$00 + sec + rts +@14: lda $8400+22 + cmp #11 ; Directory + bne @15 + jmp CopyDir +@15: jsr CopyFile + txa + bne @err + lda #$00 + clc + rts +@data: .word DiskName+2,Name2+2,Name + +DispDCFName: PushB dispBufferOn + php + LoadB dispBufferOn,%10000000 + lda #0 + jsr SetPattern + jsr i_Rectangle + .byte 0,13 + .word 0,MAIN_RIGHT + lda #$ff + jsr FrameRectangle + jsr MaxTextWin + jsr i_PutString + .word 3 + .byte 9,BOLDON,0 + LoadWr0 Name + jsr PutString + plp + bcc @10 + LoadWr0 @t1 + jmp @20 +@10: LoadWr0 @t2 +@20: jsr PutString + PopB dispBufferOn + rts +@t1: .byte PLAINTEXT," wird kopiert",0 +@t2: .byte PLAINTEXT," wird gel|scht",0 + +TrashService: +DeskDelete: jsr GotoFirstMenu + ldx MultiCount + dex + bpl @geht + rts +@geht: LoadB DialBoxFlag,5 + LoadW___ r2,MultiFileTab + jsr BubbleSort +@10: jsr GetMark + tax + bmi @20 + jsr DeleteSub + txa + beq @15 + cmp #12 ; Schreibschutz-Fehler? + beq @20 ; >ja + txa + pha + jsr FehlerAusgabe + pla + cmp #6 ; bei BAD_BAM Dir erneut + beq @30 ; einlesen + jmp DoHauptMenu + jmp @20 +@15: bcc @10 +@20: ldx DialBoxFlag + LoadB DialBoxFlag,0 + cpx #5 + beq @30 + jsr RecoverActiveWindow + jmp DoHauptMenu +@30: jsr ReloadActiveWindow + jmp DoHauptMenu +DeleteSub: ; Par: a: File-Nummer + ; Ret: c = 1 : File Nr. a nicht mehr vorhanden oder Diskettenfehler + pha + jsr GetFileName + bcc @10 + jmp @20 +@10: jsr DispDCFName ; Carry is clear! + LoadW___ r6,Name + jsr FindFile + txa + bne @20a + lda $8400 + and #$40 + beq @geht + LoadW___ r0,@db + jsr NewDoDlgBox + pla + ldx #12 + rts +@geht: lda $8400+22 + cmp #$0b ; Sub-Dir + bne @ns ; >nein + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr GetBlock + lda $8000+OFF_DIR_NUM + sta a1L + jsr DeleteDir ; SubDir-Inhalt l|schen + txa +@20a: bne @20 +@ns: pla + pha + jsr GetFileName + LoadW___ r6,Name + LoadW___ r10L,0 + jsr MoveFileInDir + LoadWr0 Name + jsr DeleteFile + txa + beq @19 + lda $8400+22 ; Sub-Dir gel|scht ? + cmp #$0b + bne @20 ; >nein, Fehler da x <> 0 + jsr GetDirHead ; DeleteFile-Fehler bei SubDirs + txa + bne @19a + MoveW_ $8400+19,r6 ; korrigieren (BAM einlesen, + jsr FreeBlock ; Infoblock freigeben, BAM schreiben) + jsr PutDirHead + txa + beq @19 +@19a: sec + pla + rts +@19: ldx #0 + clc +@20: pla + rts +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte $0b,$10,$30 + .word @t3 + .byte $0b,$10,$40 + .word @t4 + .byte $0b,$10+40,$10 + .word Name + .byte OK,17,72,NULL +@t1: .byte "Die Datei ",0 +@t2: .byte "ist schreibgesch}tzt",0 +@t3: .byte "und kann nicht gel|scht",0 +@t4: .byte "werden.",0 +BubbleSort: ; Sortieren von Byte-Werten in absteigender Reihenfolge + ; Par: r2: Zeiger auf zu sortierenden Bereich + ; EndeKennzeichen: $ff + ; Des: a,y,a2L + LoadB a2L,0 + ldy #01 +@10: lda (r2),y + cmp #$ff + beq @30 + dey + cmp (r2),y + bcc @19 + ; austauschen + lda (r2),y + pha + iny + lda (r2),y + dey + sta (r2),y + iny + pla + sta (r2),y + LoadB a2L,1 + bne @20 +@19: iny +@20: iny + bne @10 +@30: lda a2L + bne BubbleSort + rts +GetAktlDisk: ; Die Diskette des aktuellen Fensters wird zur Verf}gung gestellt + ; Par: --- + ; Ret: curDrive + ; x : aktuelle Fensternummer + ; a : Fehlernummer (!), bei 0 ist C=0 , sonst C=1 + ; Des: a,x,y,r1-r5,r7-r15 (u.a. wegen DoDlgBox!) + ; Alt: Laufwerks-, u. Diskparameter (OpenDisk wird ausgef}hrt!) + ldx activeWindow + PushW r0 + PushW r6 + jsr GetDisk + stx a9H + PopW r6 + PopW r0 + ldx activeWindow + clc + lda a9H + beq @10 + sec +@10: rts +GetDisk: ;Die einem Fenster zugeh|rige Diskette wird zur Verf}gung gestellt + ; Par: x : Fensternummer + ; Ret: curDrive + ; x : Fehlernummer, bei 0 ist C=0 , sonst C=1 + ; Des: a,y + ; Alt: Laufwerks-, u. Diskparameter (OpenDisk wird ausgef}hrt?) + txa + pha + jsr GetWinDisk + PushW r0 + LoadW___ r6,DiskName+2 + jsr SearchDisk + PopW r0 + clc + txa + beq @10 + pla + sec + rts +@10: pla + tax + lda curDrive + sta winDrives,x + clc + adc #57 + ldy #0 + sta (r0),y + ldx #0 + clc + rts +FehlerAusgabe2: ; Fehler, mit autom. Schlie~en des Fensters messageBuffer+1 + ldy messageBuffer+1 + lda #0 + sta windowsOpen,y +FehlerAusgabe: ; Dialogbox-Anzeige f}r Diskettenfehlermeldungen + ; Par: x: Fehlernummer + ; bei x = $80 Doppelseitig-Fehler + cpx #$80 + bne @05 + LoadWr0 @db2 + jmp @30 +@05: cpx #12 + beq @40 + lda curDrive + clc + adc #57 + sta @dr + txa + and #$f0 + lsr + lsr + lsr + lsr + clc + adc #$30 + cmp #$3a + bcc @10 + adc #$06 +@10: sta @nr + txa + and #$0f + clc + adc #$30 + cmp #$3a + bcc @20 + adc #$06 +@20: sta @nr+1 + txa + ldy #3 +@loop: cmp @errtab,y + beq @22 + dey + bpl @loop + LoadW___ a2,@notext + jmp @24 +@22: tya + asl + tax + lda @tab,x + sta a2L + inx + lda @tab,x + sta a2H +@24: LoadWr0 @db +@30: LoadB DialBoxFlag,2 + jsr DoDlgBox +@40: jsr ClearMultiFile + jsr MaxTextWin + PushB messageBuffer+1 + jsr RedrawAll + PopB messageBuffer+1 + rts +@db: .byte $81 + .byte $01,17,72 + .byte $0b,$10,14 + .word @t1 + .byte $0b,$10,28 + .word @t2 + .byte $0b,$10,42 + .word @t3 + .byte $0c,$10,56,a2 + .byte $0b,$10,70 + .word @t4 + .byte NULL +@t1: .byte BOLDON,"Achtung!",PLAINTEXT,0 +@t2: .byte "Operation abgebrochen aufgrund",0 +@t3: .byte "des Diskettenfehlers $" +@nr: .byte "..",0 +@t4: .byte "auf Laufwerk " +@dr: .byte ".",0 +@db2: .byte $81 + .byte $0b,$10,$10 + .word @t1b + .byte $0b,$10,$20 + .word @t2b + .byte OK,17,72,0 +@t1b: .byte BOLDON,"Fehler!",0 +@t2b: .byte "Doppelseitige Disk in 1541.",0 + +@errtab: .byte $21,FILE_EXISTS,3,10 +@tab: .word @et1,@et2,@et3,@et4 +@et1: .byte "keine formatierte Diskette",0 +@et2: .byte "Name bereits vergeben",0 +@et3: .byte "Diskette voll",0 +@et4: .byte "unpassende Dateistruktur",0 +@notext: .byte 0 +GenTab: .byte 0,0,0,0 +GenData: .word GenTab,$7f80 +MySubMenuDA: LoadW___ GenData+2,DARecSpace + bne MySub2 +MySubMenu: LoadW___ GenData+2,$7f80 +MySub2: pla + clc + adc #1 + sta @r0 + sta r0L + pla + adc #0 + sta @r0+1 + sta r0H + LoadB OpenDiskFlag,1 + ldy #00 + lda (r0),y + sta GenTab+1 + iny + lda (r0),y + clc + adc #01 + sta GenTab+3 + iny + lda (r0),y + sta r1L + iny + lda (r0),y + lsr + lda r1L + ror + lsr + lsr + sta GenTab+0 + iny + lda (r0),y + sta r1L + iny + lda (r0),y + lsr + lda r1L + ror + lsr + lsr + clc + adc #01 + sta GenTab+2 + ldy #3 +@dloop: lda GenData,y + sta r0L,y + dey + bpl @dloop + jsr SaveFG + MoveW_ @r0,r0 + MoveW_ RecoverVector,@r0 + LoadW___ RecoverVector,@10 + rts +@10: ldy #3 +@dloop2: lda GenData,y + sta r0L,y + dey + bpl @dloop2 + jsr RecvFG + MoveW_ @r0,RecoverVector + rts +@r0: .word 0 +SaveFG: ; Vordergrundbereich retten + ; r0: Zeiger auf Tabelle der Rechteckdaten + ; r1: Zeiger auf Ablagebereich + ; Zerst|rt: r2,r3,r5,r6 + lda #<(-1) + .byte $2c +RecvFG: ; Vordergrundbereich wiederherstellen + ; r0: Zeiger auf Tabelle der Rechteckdaten + ; r1: Zeiger auf Ablagebereich + ; Zerst|rt: r2,r3,r5,r6 + lda #00 + sta r3L + lda dispBufferOn + pha + LoadB dispBufferOn,%10000000 + ldy #01 + lda (r0),y + sta r2L +@05: tax + jsr GetScanLine + ldy #00 + lda (r0),y + sta r2H +@10: asl + asl + asl + tay + PushW r5 + bcc @14 + inc r5H +@14: lda r3L + beq @15 + lda (r5),y + ldy #00 + sta (r1),y + jmp @16 +@15: sty r3H + ldy #00 + lda (r1),y + ldy r3H + sta (r5),y +@16: PopW r5 + IncW r1 + inc r2H + ldy #2 + lda r2H + cmp (r0),y + bne @10 + inc r2L + lda r2L + ldy #3 + cmp (r0),y + bne @05 + pla + sta dispBufferOn + rts +SubDir1List: ; SubDirxLists m}ssen aufeinander folgen! +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 +Name2 = DiskName + 19 +RegBuf = Name2 + 19 +FileTab1 = RegBuf + r15H + ; Aufbau: 16 Eintr{ge mit jew. 16 Bytes Filename + ; 2 Bytes Info-Tr/Sc + ; 16 Eintr{ge mit jew. 64 Bytes Icon +FileTab2 = FileTab1+16*18+16*64 +FileTab3 = FileTab2+16*18+16*64 +FileTab4 = FileTab3+16*18+16*64 +ModStart = FileTab4+16*18+16*64 +DASpace = ModStart ; s 137 +DARecSpace = DASpace+137 + +.export __MODSTART__ := ModStart diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc new file mode 100644 index 00000000..90c79a64 --- /dev/null +++ b/topdesk/Include/SubDir.src.inc @@ -0,0 +1,1114 @@ +; FindDirFiles +; Parameter +; r3 - Zeiger auf einen Puffer f}r kompl. FileEintr{ge +; r10L - Nummer des Verzeichnisses +; - b7=1 alle Verzeichnisse +; r11L - Anzahl der einzulesenden Files im akt. Dir +; +; r11H - Anzahl der zu }berlesenden Eintr{ge +; 0 f}r keinen Eintrag }berlesen +; r12L - b7=1 b6=1 gel|schte Files und Leereintr{ge +; }berlesen +; - b7=1 b6=0 gel|schte Files einlesen, +; Leereintr{ge }berlesen +; - b7=0 auch gel|schte Files und Leereintr{ge +; einlesen +; r12H - GEOS-Filetyp oder +; b7=1 - alle Filetypen +; r13L - Anzahl der Bytes eines Fileeintrages, die +; eingelesen werden sollen +; r13H - Anzahl der zu }berlesenden Bytes im Eintrag +; CopyMemHigh ; Obergrenze des Puffers in r3 (HighByte) +; +; Returns +; x = 0 (No Error) +; x = 11 (Puffer}berlauf beim Laden, CopyMemHigh w}rde }berschritten) +; r11L - vermindert um die Anzahl der eingelesenen Files +; bzw. 0 +; r14L - Anzahl der vorhandenen Files im (Sub)-Dir +; +; Destroys +; r0-r5,r11H, +; a,x,y +; +; Uses +; - DiskInitTurboIO +; - ReadTrScBlock +; - SortDirFiles +; - SortInBuffer +; +; Description +; +; Ab dem Puffer, auf den r3 zeigt, sind alle Files +; in der gleichen Reihenfolge abgelegt. +; Jeder Fileeintrag ist auf Diskette 31 Bytes lang. +; Sofern r13H = 0 ist, wird als erstes Byte die Nummer +; des Unterverzeichnisses abgelegt. +; Die restlichen Bytes sind genauso abgelegt, wie +; sie im Directory stehen! +; Es wird solange eingelesen bis CopyMemHigh erreicht ist (Kn 22.5.91) +; OpenDisk wird nicht aufgerufen !!! (Kn 7.5.91) +; +; FindDirFiles sucht auch auf dem BorderBlock +; evtl. Verzeichnisnummern sind auch hier +; g}ltig! + +FindDirFiles: +;XXX MoveW_ r3,@r3 ; Kn 22.9.91 +@10: +;XXX MoveW_ @r3,r3 + LoadB r14L,0 + jsr DiskInitTurboIO + txa + bne @100 ; DoneWithIO beq :20 +@20: jsr @200 + txa + bne @100 + lda r11L + beq @allesvoll +; jetzt BorderBlock + lda isGEOS + beq @allesvoll + MoveW_ curDirHead+171,TrSc + jsr @200 + txa + bne @100 +@allesvoll: ldx #$00 +@100: jsr DoneWithIO +;XXX cpx #$50 ; Kn 22.9.91 +;XXX bne @125 +;XXX jmp @10 +;XXX@125: + rts +@200: jsr ReadTrScBlock + txa + bne @1000 + jsr SortDirFiles + jsr SortInBuffer + txa ; Kn 22.5.91 + bne @1000 + lda TrSc + bne @200 ; Kn 7.5.91 +@99: ldx #$00 +@1000: rts +;XXX @r3: .word 0 ; Kn 22.9.91 +TrSc: .word 0 + +; SortDirFiles ; (Kn 7.5.91 Copy31Byte weggek}rzt!) +; internal Routine +; - CopyFW +; +; Destroys +; r0,r5 +; a,x,y + +SortDirFiles: + LoadW___ r0,diskBlkBuf ;MyBuffer + LoadW___ r5,diskBlkBuf+2 + ldx #6 + ldy #0 + lda diskBlkBuf+32 + sta (r0),y + AddVW__ 1,r0 + ldy #30 + jsr CopyFW + LoadW___ r5,diskBlkBuf+33 + SubVW_ 1,r0 +@20: AddVW__ 32,r0 + ldy #31 + + jsr CopyFW + + AddVW__ 32,r5 + dex + bpl @20 + rts + +; SortInBuffer +; Internal Routine +; Ret: x - Fehlernummer ; Kn 22.05.91 +SortInBuffer: + ldx #7 + LoadW___ r5,diskBlkBuf ;MyBuffer +; AddSW__ r13H,r5 +@10: MoveB r3L,r0L ; Kn 22.05.91 + MoveB r3H,r0H + cmp CopyMemHigh + bcc @16 + ldx #11 + rts +@16: +; MoveW_ r3,r0 + bit r10L + bmi @15 +.if 0 + ldy #1 ; Kn 22.9.91: autom. l|schen von + lda (r5),y ; tempor{r-Dateien + beq @16a + ldy #23 + lda (r5),y + cmp #13 ; tempor{r-Filetyp + bne @16a + ldy #4 +@16c: lda (r5),y + sta Name-4,y + cmp #$a0 + bne @16b +@16d: lda #0 + sta Name-4,y + jsr DoneWithIO + LoadW___ r0,Name + jsr DeleteFile + jsr InitForIO + ldx #$50 + rts +@16b: iny + cpy #16+4 + bne @16c + beq @16d +@16a: +.endif + ldy #$00 + lda (r5),y + cmp r10L + bne @1000 +@15: bit r12H + bmi @12 + ldy #23 + lda (r5),y + cmp r12H + bne @1000 +@12: ldy #1 + lda (r5),y ; CBM Filetyp = 0 (DEL) + bne @11 + bit r12L + bpl @11 + bvs @1000 + ldy #4 + lda (r5),y ; Filename = 0 + bne @11 + beq @1000 +@11: lda r11H + beq @20 + dec r11H + jmp @1000 + +@20: AddSW r13H,r5 + inc r14L + ldy r11L + beq @30 + ldy r13L + jsr CopyFW +@30: SubSW r13H,r5 + AddSW r13L,r3 + lda r11L + beq @1000 + dec r11L +@1000: AddVW__ 32,r5 + dex + bmi @9999 + jmp @10 +@9999: ldx #0 ; Kn 22.05.91 + rts + +; DiskInitTurboIO ; (Kn 7.5.91: CopyFString2 entfernt!) +; Internal Routine +; - kein OpenDisk (Kn 7.5.91) +; - EnterTurbo +; - TrSc = First Track & Sector +; - InitForIO, if No Error (=0) + +DiskInitTurboIO: +; jsr OpenDisk + LoadW___ r4,diskBlkBuf + jsr EnterTurbo + txa + bne @5 + MoveW_ curDirHead,TrSc + lda TrSc + bne @10 + ldx #$02 ; INV_TRACK +@5: rts +@10: jsr InitForIO + rts + +; ReadTrScBlock +; Internal Routine +; - Kopiert TrSc nach r1 +; - ReadBlock +; - setzt TrSc neu, falls x <> 0 +; Achtung!!! +; EnterTurbo und InitForIO m}ssen gesetzt sein !! + +ReadTrScBlock: + MoveW_ TrSc,r1 + jsr ReadBlock + txa + bne @100 + MoveW_ diskBlkBuf,TrSc +@100: rts + +;XXX> + +; CopyFW +; Ersatz f}r CopyFString und CopyFString2 +; funktioniert sicher auch, wenn InitForIO +; Im Gegensatz von CopyFString2 wird aufw{rts +; gez{hlt. +; +; Parameter +; r5 Source +; r0 Dest +; y Count-1 (0 = 256) +; +; Destroys +; a,y, + +CopyFW: + sty @10+1 + ldy #$00 +@30: lda (r5),y + sta (r0),y + iny +@10: cpy #00 + bne @30 + rts + +;XXX< + +; FormString +; +; durchsucht einen Text auf $a0, setzt beim ersten $a0 +; den Wert $00 als Stringendekennzeichen. +; Wird kein $a0 gefunden, wird das letzte Zeichen mit +; $00 belegt. +; Kopiert gleichzeitig den String durch Setzen von +; Dest = Source ist ein "In-sich-Kopieren" m|glich. +; +; Parameter +; r0 - Zeiger auf Source +; r1 - Zeiger auf Dest +; r2L - Anzahl der zu durchsuchenden Bytes +; Achtung r2L > 0 !!! +; +; Destroys +; y,a + +FormString: + ldy #$00 +@10: cpy r2L + beq @20 + lda (r0),y + cmp #$a0 + beq @30 + sta (r1),y + iny + bne @10 +@20: dey +@30: lda #$00 + sta (r1),y + rts + +; MoveFileInDir +; schiebt ein File (auch Directory) in ein Verzeichnis +; +; Parameter +; r6 - Zeiger auf Filenamen +; r10L - Nummer des Dest-Dirs +; +; +; Returns +; x = 0 No Error +; r1 - Track und Sector des Directoryblocks der den +; Fileeintrag enth{lt +; r5 - Zeiger auf den Directoryeintrag +; ohne (!) Dir-Ebene +; +; Destroys +; a,y,r4,r6 +; + +MoveFileInDir: + jsr FindFile + txa + bne @1000 + CmpWI r5,diskBlkBuf+2 + bne @10 + ldy #30 + bne @20 +@10: DecW r5 + ldy #0 + jsr @20 + IncW r5 +@1000: rts +@20: lda r10L + sta (r5),y + LoadW___ r4,diskBlkBuf + jmp PutBlock + +ChangeC: ldx #10 +; ChangeDrive ; tauscht Drive a gegen x + ; Par: a,x - DriveNummer (8,9,10,11) + ; Bem: mind. 1. RAM-Disk bei 4 Laufwerken +ChangeDrive: sta @a + stx @x + lda numDrives + cmp #4 + bcs @10 + LoadB @y,11 + bne @20 +@10: ldy #0 +@loop: lda driveType,y + and #%11000000 + cmp #%10000000 + beq @habneRam + iny + cpy #3 + bne @loop + rts ; kein Tausch +@habneRam: tya + clc + adc #8 + tay + sty @y + cpy @x + bne @15 ; falls :x die gefundene Ram ist, + lda @a ; :a mit :x tauschen + sta @x + sty @a +@15: tya ; RAM-Disk vor}bergehend inaktivieren + jsr SetDevice + jsr i_MoveData ; RAM-Driver merken + .word $9000,$7ff0-$d80,$d80 + ldy curDrive + lda driveType-8,y + sta @ramdrivetyp + lda #0 + sta driveType-8,y + lda ramBase-8,y + sta @rambase + lda #0 + sta ramBase-8,y + ldx @x +@20: txa + jsr SetDevice + lda @y + jsr Change + lda @a + cmp @y + bne @25 + ldy @x + bpl @50 +@25: lda @a + jsr SetDevice + lda @x + jsr Change + lda @y + jsr SetDevice + lda @a + jsr Change + ldy @y +@50: lda @ramdrivetyp + sta driveType-8,y + lda @rambase + sta ramBase-8,y + lda DriverHigh-8,y + sta r1H + lda DriverLow-8,y + sta r1L + LoadW___ r0,$7ff0-$d80 + LoadW___ r2,$0d80 + LoadB r3L,0 + jsr StashRAM + lda sysRAMFlg + and #%00100000 + beq @60 + lda #8 + jsr SetDevice + LoadW___ r0,$8400 + LoadW___ r1,$7900 + LoadW___ r2,$500 + LoadB r3L,0 + jsr StashRAM +@60: rts +@a: .byte 0 +@x: .byte 0 +@y: .byte 0 +@ramdrivetyp: .byte 0 +@rambase: .byte 0 +Change: pha + tay + lda DriverHigh-8,y + sta r1H + lda DriverLow-8,y + sta r1L + LoadW___ r0,$9000 + LoadW___ r2,$0d80 + LoadB r3L,0 + jsr StashRAM + pla + sta r0L + lda curDrive + + pha + tay + lda ramBase-8,y + pha + lda driveType-8,y + pha + bpl @NoRAM + lda r0L + jsr SetDevice + + ldy curDrive + lda driveType,y + sta curType + + jmp @RAM +@NoRAM: + lda r0L + jsr ChangeDiskDevice +@RAM: ldy curDrive + pla + sta driveType-8,y +;XXX sta curType + pla + sta ramBase-8,y + pla + tay + lda #$00 + sta ramBase-8,y + sta driveType-8,y + rts + +DriverHigh: .byte $83,$90,$9e,$ab +DriverLow: .byte $00,$80,$00,$80 + +; SubDirNrInList +; holt die Unterverzeichnisnummer +; schreibt Verzeichnis in SubDir-Tabelle +; Nur auf Unterverzeichnisse anwenden !! +; +; Parameter +; r0 - Zeiger auf die SubDir-Tabelle +; r6 - Zeiger auf den Filenamen +; +; Returns +; x = 0 No_Error +; REKURSIV +; NO_DIR_FREE +; sonst x-Fehler durch +; - FindFile +; - GetBlock +; r10L - Verzeichnisnummer (undefiniert, wenn Fehler!) +; y - Schachteltiefe +; Destroys +; a +; r1,r4,r6, +; +; Description +; ]blicherweise }bergibt man in r0 einen +; Zeiger auf SubDirxList (x=1,2,3,4) +; + +SubDirNrInList: + jsr GetSubDirNr + txa + bne @error + ldy #$00 +@1: lda (r0),y + bmi @10 + cmp r10L ; rekursiv + bne @20 + ldx #REKURSIV +@error: rts + +@20: iny + cpy #63 + bne @1 + ldx #NO_DIR_FREE + rts + +@10: lda r10L + sta (r0),y + rts + +; UpperDir +; holt das dem aktuellen Directory vorangehende +; Directory und l|scht gleichzeitig den +; letzten Eintrag in der SubDirxList +; +; Parameter +; r0 - Zeiger auf Directory-Liste (SubDirxList) +; +; Returns +; r10L - Nummer des neuen Verzeichnisses +; a - wie r10L +; +; Destroys +; y + +UpperDir: + ldy #63 +@10: lda (r0),y + bpl @20 + dey + bne @10 + lda #$00 + sta (r0),y + jmp @1000 + +@20: lda #$ff + sta (r0),y + dey + lda (r0),y +@1000: + sta r10L + rts + +; ClearList +; l|scht SubDirxList +; setzt Verzeichnisebene Main (0) +; +; Parameter +; r0 - Zeiger auf SubDirxList +; +; Destroys +; a,y + +ClearList: + ldy #63 + lda #$ff +@10: sta (r0),y + dey + bne @10 + lda #$00 + sta (r0),y + rts + +; GetSubDirNr +; holt die Unterverzeichnisnummer +; +; Parameter +; r6 - Zeiger auf den Filenamen +; +; Returns +; x = 0 No_Error +; r10L - Verzeichnisnummer (undefiniert, wenn Fehler!) +; +; Destroys +; a,y +; r1,r4,r6, +; + +GetSubDirNr: + jsr GetInfoBlock + MoveB diskBlkBuf+OFF_DIR_NUM,r10L + rts + +; GetInfoBlock +; holt InfoBlock +; +; Parameter +; r6 - Zeiger auf den Filenamen +; +; Returns +; x = 0 No_Error +; +; Destroys +; a,y +; r1,r4,r6, +; + +GetInfoBlock: + jsr FindFile + txa + bne GetErr +GetInfo: + ldy #19 + lda (r5),y + sta r1L + iny + lda (r5),y + sta r1H + LoadW___ r4,diskBlkBuf + jsr GetBlock +GetErr: rts + +; SetNumDrives setzt die Anzahl der verf}gbaren Laufwerke +; Parameter keine +; Alters numDrives +; Uses: GetMaxDrives (s.u.) +; Destroys a,x,y + +SetNumDrives: + jsr GetMaxDrives + sta numDrives + rts + +; GetMaxDrives +; Parameter - keine +; R}ckgabewert +; a - Anzahl der verf}gbaren Drives +GetMaxDrives: ldy numDrives + cpy #2 + bge @10 + lda curDrive + eor #1 ; aus 8 mach 9 und umgekehrt + tax + lda driveType-8,x + beq @05 + iny +@05: tya + rts +@10: ldy #2 + bit sysRAMFlg + bvs @20 + lda driveType + cmp driveType+2 ; C + bne @30 + iny + cmp driveType+3 ; D + bne @30 + iny +@30: tya + rts +@20: lda driveType+2 + beq @30 + iny + lda driveType+3 + beq @30 + iny + bne @30 + rts + +TestNumDrives: + lda DiskDriverFlag + beq @10 + LoadB numDrives,1 + rts +@10: LoadB numDrives,2 + rts + +; NewGetFile +; Parameter +; r6 - Filename +; r0 - Zeiger auf SubDirxList +; r1L - PrintFlag (negativ = Drucken!) +; Returns +; x = 0 No_Error (DA,Printer,Input) +; x = SUB_DIR, UNDEFINED_CLASS,NOT_PRINTING_FILE +; r10L - bei SubDirs Nummer +; FileClassNr enth{lt die Class auch +; wenn x = UNDEFINED_CLASS +; Destroys +; a,y +; r1,r4,r6,r0,r15,r0-r15 +NewGetFile: + MoveB r1L,XPrintFlag + MoveW_ r6,r15 + jsr FindFile + txa + bne XError + ldy dirEntryBuf+22 + sty FileClassNr + cpy #16 + bcc X50 +; ldy #15 +;X10: sty FileClassNr +; cpy dirEntryBuf+22 +; beq X50 +; dey +; bpl X10 +; lda dirEntryBuf+22 +; sta FileClassNr + ldx #UNDEFINED_CLASS +XError: rts +X50: bit XPrintFlag + bpl X60 + cpy #APPL_DATA + beq X60 + ldx #NOT_PRINTING_FILE + rts +X60: ldx XJumpTabHi,y + lda XJumpTabLo,y + jmp CallRoutine +XJumpTabHi: + .byte >XOld,>XBasic,>XAssembly,>XData + .byte >XSystem,>XDAcc,>XAppl,>XDocument + .byte >XFont,>XPrinter,>XInput64,>XSubDir + .byte >XStart,>XSwap,>XAutoExec,>XInput128 +XJumpTabLo: + .byte (data) + jsr Loadr0AX +.endmacro + +.macro SubVB data, data2 + sec + lda data2 + sbc #data + sta data2 +.endmacro diff --git a/topdesk/Include/Symbol/CiSym.inc b/topdesk/Include/Symbol/CiSym.inc new file mode 100644 index 00000000..136a7ac4 --- /dev/null +++ b/topdesk/Include/Symbol/CiSym.inc @@ -0,0 +1,20 @@ +RstrFrmDialog = RstrFrmDialogue +; RstrFrmDialogue falsch in TopSym!! +DIRECTORY = 11 + +; Label in MegaSym enthalten +END_MOUSE = $fffa +; +OFF_DIR_NUM = 117 + +; Fehlernummern +NO_DIR_FREE = $40 +FILE_EXISTS = $41 +REKURSIV = $42 +WRONG_DIR = $43 +SUB_DIR = $44 +UNDEFINED_CLASS = $45 +NOT_PRINTING_FILE= $46 + +DRIVE_MASK = %00011111 +CANCEL_ERR = $0c diff --git a/topdesk/Include/Symbol/Sym128.erg.inc b/topdesk/Include/Symbol/Sym128.erg.inc new file mode 100644 index 00000000..2f9de73d --- /dev/null +++ b/topdesk/Include/Symbol/Sym128.erg.inc @@ -0,0 +1,16 @@ +; Systemvariablen f}r den C128 +; Version 13.07.89 + +ADD1_W = $2000 +DoBOp = $c2ec +DOUBLE_B = $80 +DOUBLE_W = $8000 +graphMode = $3f +HideOnlyMouse = $c2f2 +MoveBData = $c2e3 +NormalizeX = $c2e0 +SetMsePic = $c2da +SetNewMode = $c2dd +SwapBData = $c2e6 +TempHideMouse = $c2d7 +VerifyBData = $c2e9 diff --git a/topdesk/Include/Symbol/TopMac.inc b/topdesk/Include/Symbol/TopMac.inc new file mode 100644 index 00000000..0497b86e --- /dev/null +++ b/topdesk/Include/Symbol/TopMac.inc @@ -0,0 +1,345 @@ +; Makrodefinitionen +; Revision 28.06.89 + +:LoadB m + lda #@1 + sta @0 + / + +:LoadW m + lda #<@1 + sta @0 + lda #>@1 + sta @0+1 + / + +:MoveB m + lda @0 + sta @1 + / + +:MoveW m + lda @0 + sta @1 + lda @0+1 + sta @1+1 + / + +:add m + clc + adc #@0 + / + +:adda m + clc + adc @0 + / + +:AddB m + clc + lda @0 + adc @1 + sta @1 + / + +:AddW m + lda @0 + clc + adc @1 + sta @1 + lda @0+1 + adc @1+1 + sta @1+1 + / + + :AddVB m + lda @1 + clc + adc #@0 + sta @1 + / + +:AddVW m + lda #<@0 + clc + adc @1 + sta @1 + lda #>@0 + adc @1+1 + sta @1+1 + / + +:sub m + sec + sbc #@0 + / + +:suba m + sec + sbc @0 + / + +:SubB m + sec + lda @1 + sbc @0 + sta @1 + / + +:SubW m + lda @1 + sec + sbc @0 + sta @1 + lda @1+1 + sbc @0+1 + sta @1+1 + / + +:SubVB m + sec + lda @1 + sbc #@0 + sta @1 + / + +:SubVW m + lda @1 + sec + sbc #<@0 + sta @1 + lda @1+1 + sbc #>@0 + sta @1+1 + / + + :CmpB m + lda @0 + cmp @1 + / + +:CmpBI m + lda @0 + cmp #@1 + / + +:CmpW m + lda @0+1 + cmp @1+1 + bne :ende + lda @0 + cmp @1 +::ende + / + + +:CmpWI m + lda @0+1 + cmp #>@1 + bne :ende1 + lda @0 + cmp #<@1 +::ende1 + / + +:PushB m + lda @0 + pha + / + +:PushW m + lda @0+1 + pha + lda @0 + pha + / + + +:PopB m + pla + sta @0 + / + +:PopW m + pla + sta @0 + pla + sta @0+1 + / + +:bra m + clv + bvc @0 + / + + :bge m + bcs @0 + / + +:bgt m + beq :done + bcs @0 +::done + / + +:blt m + bcc @0 + / + +:ble m + beq @0 + bcc @0 + / + +:sbn m + ora #2^@0 + / + +:sbBn m + lda @0 + ora #2^@1 + sta @0 + / + +:sbWn m + lda @0 + ora #<2^@1 + sta @0 + lda @0+1 + ora #>2^@1 + sta @0+1 + / + +:cbn m + and #$ff-2^@0 + / + +:cbBn m + lda @0 + and #$ff-2^@1 + sta @0 + / + +:cbWn m + lda @0 + and #<$ffff-2^@1 + sta @0 + lda @0+1 + and #>$ffff-2^@1 + sta @0+1 + / + + :roln m + ldx #@0 + beq :done +::10 rol + dex + bne :10 +::done + / + +:rolBn m + ldx #@1 + beq :done +::10 rol @0 + dex + bne :10 +::done + / + +:rolWn m + ldx #@1 + beq :done +::10 rol @0 + rol @0+1 + dex + bne :10 +::done + / + +:rorn m + ldx #@0 + beq :done +::10 ror + dex + bne :10 +::done + / + +:rorBn m + ldx #@1 + beq :done +::10 ror @0 + dex + bne :10 +::done + / + +:rorWn m + ldx #@1 + beq :done +::10 ror @0+1 + ror @0 + dex + bne :10 +::done + / + + :asln m + ldx #@0 + beq :done +::10 asl + dex + bne :10 +::done + / + +:aslBn m + ldx #@1 + beq :done +::10 asl @0 + dex + bne :10 +::done + / + +:aslWn m + ldx #@1 + beq :done +::10 asl @0 + rol @0+1 + dex + bne :10 +::done + / + +:lsrn m + ldx #@0 + beq :done +::10 lsr + dex + bne :10 +::done + / + + +:lsrBn m + ldx #@1 + beq :done +::10 lsr @0 + dex + bne :10 +::done + / + +:lsrWn m + ldx #@1 + beq :done +::10 lsr @0+1 + ror @0 + dex + bne :10 +::done + / + + diff --git a/topdesk/Include/Symbol/TopSym.inc b/topdesk/Include/Symbol/TopSym.inc new file mode 100644 index 00000000..672df9f2 --- /dev/null +++ b/topdesk/Include/Symbol/TopSym.inc @@ -0,0 +1,397 @@ +; Systemlabels gek}rtzt am 250691 f}r TopDesk +; Version 04.07.89 + +APPLICATION = $06 +APPL_DATA = $07 +ASSEMBLY = $02 +AUTO_EXEC = $0e +AllocateBlock = $9048 +AppendRecord = $c289 +BACK_SCR_BASE = $6000 +BASIC = $01 +BBMult = $c160 +BMult = $c163 +BOLDON = $18 +BitmapUp = $c142 +BlkAlloc = $c1fc +BlockProcess = $c10c +CANCEL = $02 +CBM = $05 +COLOR_MATRIX = $8c00 +CRC = $c20e +CalcBlksFree = $c1db +CallRoutine = $c1d8 +ChangeDiskDevice = $c2bc +ChkDkGEOS = $c1de +ClearRam = $c178 +CloseRecordFile = $c277 +CmpFString = $c26e +CmpString = $c26b +CopyFString = $c268 +CopyString = $c265 +DATA = $03 +DBGETSTRING = $0d +DBGRPHSTR = $0f +DBOPVEC = $11 +DBSYSOPV = $0e +DBTXTSTR = $0b +DBUSRICON = $12 +DBVARSTR = $0c +DB_USR_ROUT = $13 +DESK_ACC = $05 +DISK = $06 +DMult = $c166 +DSdiv = $c16c +DShiftLeft = $c15d +DShiftRight = $c262 +DYN_SUB_MENU = $40 +Dabs = $c16f +Ddec = $c175 +Ddiv = $c169 +DeleteFile = $c238 +DeleteRecord = $c283 +DisablSprite = $c1d5 +Dnegate = $c172 +DoDlgBox = $c256 +DoIcons = $c15a +DoMenu = $c151 +DoPreviousMenu = $c190 +DoRAMOp = $c2d4 +DoneWithIO = $c25f +DrawLine = $c130 +DrawPoint = $c133 +DrawSprite = $c1c6 +ESC_GRAPHICS = $10 +ESC_PUTSTRING = $06 +EnablSprite = $c1d2 +EnableProcess = $c109 +EnterDeskTop = $c22c +EnterTurbo = $c214 +ExitTurbo = $c232 +FALSE = $00 +FONT = $08 +FRAME_RECTO = $07 +FetchRAM = $c2cb +FillRam = $c17b +FindBAMBit = $c2ad +FindFTypes = $c23b +FindFile = $c20b +FirstInit = $c271 +FollowChain = $c205 +FrameRectangle = $c127 +FreeBlock = $c2b9 +FreeFile = $c226 +FreezeProcess = $c112 +GOTOX = $14 +GOTOXY = $16 +GOTOY = $15 +Get1stDirEntry = $9030 +GetBlock = $c1e4 +GetCharWidth = $c1c9 +GetDirHead = $c247 +GetFHdrInfo = $c229 +GetFile = $c208 +GetFreeDirBlk = $c1f6 +GetNextChar = $c2a7 +GetNxtDirEntry = $9033 +GetPtrCurDkNm = $c298 +GetRandom = $c187 + +GetRealSize = $c1b1 +GetScanLine = $c13c +GetSerialNumber = $c196 +GetString = $c1ba +GotoFirstMenu = $c1bd +GraphicsString = $c136 +HorizontalLine = $c118 +INCOMPATIBLE = $0e +INPUT_128 = $0f +INPUT_DEVICE = $0a +ITALICON = $19 +ImprintRectangle = $c250 +InitForIO = $c25c +InitMouse = $fe80 +InitProcesses = $c103 +InitRam = $c181 +InitTextPrompt = $c1c0 +InsertRecord = $c286 +InterruptMain = $c100 +InvertLine = $c11b +InvertRectangle = $c12a +IsMseInRegion = $c2b3 +LINETO = $02 +LdApplic = $c21d +LdDeskAcc = $c217 +LdFile = $c211 +LoadCharSet = $c1cc +MENU_ACTION = $00 + +MOVEPENTO = $01 +MouseOff = $c18d +MouseUp = $c18a +MoveData = $c17e +NEWPATTERN = $05 +NO = $04 +NOT_GEOS = $00 +NULL = $00 +NewDisk = $c1e1 +NextRecord = $c27a +NxtBlkAlloc = $c24d +OK = $01 +OPEN = $05 +OUTLINEON = $1a +OpenDisk = $c2a1 +OpenRecordFile = $c274 +PLAINTEXT = $1b +PRG = $02 +PRINTER = $09 +PointRecord = $c280 +PosSprite = $c1cf +PreviousRecord = $c27d +PrntDiskName = $8476 +PrntFileName = $8465 +PrntFilename = $8465 +PromptOff = $c29e +PromptOn = $c29b +PurgeTurbo = $c235 +PutBlock = $c1e7 +PutChar = $c145 +PutDecimal = $c184 +PutDirHead = $c24a +PutString = $c148 +RECTANGLETO = $03 +REV_OFF = $13 +REV_ON = $12 +ReDoMenu = $c193 +ReadBlock = $c21a +ReadByte = $c2b6 +ReadFile = $c1ff +ReadLink = $904b +ReadRecord = $c28c +RecoverAllMenus = $c157 +RecoverLine = $c11e +RecoverMenu = $c154 +RecoverRectangle = $c12d + +RecoverVector = $84b1 +Rectangle = $c124 +RenameFile = $c259 +RestartProcess = $c106 +RstrAppl = $c23e +RstrFrmDialogue = $c2bf +SEQUENTIAL = $00 +SHORTCUT = $80 +STATUS = $90 +STRUCT_MISMAT = $0a +ST_WR_BACK = $40 +ST_WR_FORE = $80 +SUB_MENU = $80 +SYSTEM = $04 +SYSTEM_BOOT = $0c +SaveFile = $c1ed +SetDevice = $c2b0 +SetGDirEntry = $c1f0 +SetGEOSDisk = $c1ea +SetMouse = $fe89 + +SetNextFree = $c292 +SetPattern = $c139 +Sleep = $c199 +SlowMouse = $fe83 +SmallPutChar = $c202 +StartAppl = $c22f +StartMouseMode = $c14e +StashRAM = $c2c8 +StopPrint = $7909 +StringFaultVec = $84ab +SwapRAM = $c2ce +TAB = $09 +TEMPORARY = $0d +TRUE = $ff +TestPoint = $c13f +ToBasic = $c241 +ULINEOFF = $0f +ULINEON = $0e +UN_CONSTRAINED = $00 +UPLINE = $0c +USELAST = $7f +USR = $03 +UnblockProcess = $c10f +UnfreezeProcess = $c115 +UpdateMouse = $fe86 +UpdateRecordFile = $c295 +UseSystemFont = $c14b +VERTICAL = $80 +VLIR = $01 +VerWriteBlock = $c223 +VerifyRAM = $c2d1 +VerticalLine = $c121 +WriteBlock = $c220 +WriteFile = $c1f9 +WriteRecord = $c28f +YES = $03 +a0 = $fb +a0H = $fc +a0L = $fb +a1 = $fd +a1H = $fe +a1L = $fd +a2 = $70 +a2H = $71 +a2L = $70 +a3 = $72 +a3H = $73 +a3L = $72 +a4 = $74 +a4H = $75 +a4L = $74 +a5 = $76 +a5H = $77 +a5L = $76 +a6 = $78 +a6H = $79 +a6L = $78 +a7 = $7a + +a7H = $7b +a7L = $7a +a8 = $7c +a8H = $7d +a8L = $7c +a9 = $7e +a9H = $7f +a9L = $7e +appMain = $849b +baselineOffset = $26 +c128Flag = $c013 +curDevice = $ba +curDirHead = $8200 +curDrive = $8489 +curPattern = $22 +curRecord = $8496 +curType = $88c6 +currentMode = $2e +dataDiskName = $8453 +dataFileName = $8442 +day = $8518 +dblClickCount = $8515 +dir2Head = $8900 +dirEntryBuf = $8400 +diskBlkBuf = $8000 +diskOpenFlg = $848a +dispBufferOn = $2f +dlgBoxRamBuf = $851f +driveData = $88bf +driveType = $848e +fileHeader = $8100 +fileSize = $8499 +fileTrScTab = $8300 +fileWritten = $8498 +firstBoot = $88c5 +i_FillRam = $c1b4 +i_FrameRectangle = $c1a2 +i_GraphicsString = $c1a8 +i_ImprintRectangle = $c253 +i_MoveData = $c1b7 +i_PutString = $c1ae +i_RecoverRectangle = $c1a5 +i_Rectangle = $c19f +iconSelFlag = $84b5 +inputData = $8506 +inputDevName = $88cb +inputVector = $84a5 + +intBotVector = $849f +intTopVector = $849d +interleave = $848c +isGEOS = $848b +keyData = $8504 +keyVector = $84a3 +leftMargin = $35 +menuNumber = $84b7 +mouseBottom = $84b9 +mouseData = $8505 +mouseFaultVec = $84a7 +mouseLeft = $84ba +mouseOn = $30 +mouseRight = $84bc +mouseTop = $84b8 +mouseVector = $84a1 +mouseXPos = $3a +mouseYPos = $3c +nationality = $c010 +numDrives = $848d +otherPressVec = $84a9 +pressFlag = $39 +r0 = $02 +r0H = $03 +r0L = $02 +r1 = $04 +r10 = $16 +r10H = $17 +r10L = $16 +r11 = $18 +r11H = $19 +r11L = $18 +r12 = $1a +r12H = $1b +r12L = $1a +r13 = $1c +r13H = $1d +r13L = $1c +r14 = $1e +r14H = $1f +r14L = $1e +r15 = $20 + +r15H = $21 +r15L = $20 +r1H = $05 +r1L = $04 +r2 = $06 +r2H = $07 +r2L = $06 +r3 = $08 +r3H = $09 +r3L = $08 +r4 = $0a +r4H = $0b +r4L = $0a +r5 = $0c +r5H = $0d +r5L = $0c +r6 = $0e +r6H = $0f +r6L = $0e +r7 = $10 +r7H = $11 +r7L = $10 +r8 = $12 +r8H = $13 +r8L = $12 +r9 = $14 +r9H = $15 +r9L = $14 +ramBase = $88c7 +ramExpSize = $88c3 +random = $850a +returnAddress = $3d +rightMargin = $37 +scr80colors = $88bd +scr80polar = $88bc +screencolors = $851e +seconds = $851b +selectionFlash = $84b3 +string = $24 +stringX = $84be +stringY = $84c0 +sysDBData = $851d +sysFlgCopy = $c012 +sysRAMFlg = $88c4 +turboFlags = $8492 +usedRecords = $8497 +vdcClrMode = $88be +version = $c00f + +windowBottom = $34 +windowTop = $33 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s new file mode 100644 index 00000000..dca9f15f --- /dev/null +++ b/topdesk/Main/DeskTop.main.s @@ -0,0 +1,2767 @@ +; a "DPT KnCiGo" +; z $c0 ; ehem. $40 +; i +; p Start +.feature force_range + +.segment "STARTUP" + + +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +;.include "topdesk/Main/DeskWindows.ext.inc" +;endif +; d "DeskWin $400" +.include "topdesk/Main/DeskWindows.akt.inc" + +; n "Dos.res" +; c "TopDesk V1.3" +__NewSetDevice: + jmp NewSetDevice +__DispMarking: + jmp DispMarking +__ClearMultiFile: + jmp ClearMultiFile +.include "topdesk/DeskInclude/CopyFile.inc" +.include "topdesk/DeskInclude/SearchDisk.inc" +.include "topdesk/DeskInclude/SizeRectangle.inc" +.include "topdesk/Include/SubDir.src.inc" + +.global __NewSetDevice +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global MultiFileTab +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +.global fileNum +.global GetWinTabAdr +.global NewPutDecimal + +.global GetWinName +.global GetEqualWindows +.global MyCurRec +.global NewSetDevice +.global Start2 +.global SetCopyMemLow +.global NewGetFile +.global GetPrefs2 +.global GetIconService +.global DispJumpTable +.global DeskOther +.global newAppMain +.global DeskMain +.global NewDoIcons +.global IconTab +.global SetNumDrives +.global KeyHandler +.global backPattern +.global RedrawHead +.global DoWindows +.global WindowTab +.global windowsOpen +.global RamTopFlag +.global PrintDriveNames +.global RedrawAll +.global FileClassNr + +.global NewSearchDisk +.global GetWinDisk + +.global CopyService +.global FindDirFiles +.global MoveFileInDir +.global subTab + +.global Start +.global RegBuf +.global FileTab1 +.global PruefSumme +.global RamStart +.global ModStartAdress +.global MainAdr +.global MyName +.global SearchDeskTop +.global __STARTUP_RUN__ + + +__STARTUP_RUN__: +Start: +;XXX lda RamTopFlag +;XXX bne @10 +;XXX ldy #4 +;XXX@tloop: lda @t,y +;XXX cmp $81a0,y +;XXX bne @10 +;XXX dey +;XXX bpl @tloop +;XXX LoadB SureFlag,1 +@10: lda mouseData + ora #$80 + sta mouseData + + LoadW___ ModStartAdress,ModStart + LoadB dispBufferOn,%10000000 + ldy #0 +@loop: lda $8403,y + cmp #$a0 + bne @01 + lda #0 + sta MyName,y + beq @02 +@01: sta MyName,y + iny + bne @loop +@02: jmp StartUp + +;XXX @t: .byte "SURE",$0d + +Loadr0AX: sta r0L + stx r0H + rts + +MoveWr0r1: MoveW_ r0,r1 + rts +MoveWr1r0: MoveW_ r1,r0 + rts +OpenDiskFlag: .byte 0 +DiskDriverFlag: .byte 0 + +NewSetDevice: ldy DiskDriverFlag + bpl @04 + rts +@04: bne @10 +@05: jmp SetDevice +@10: tay + lda driveType-8,y + bne @15 + tya + bne @05 +@15: cmp DiskDriverFlag + beq @21 + tya + bne @05 +@21: ldx #29 +@20: lda r0L,x + pha + dex + bpl @20 + tya + pha + jsr ExitTurbo + LoadW___ r0,$7200 + LoadW___ r1,$9000 + ldy #0 +@loop: lda (r0),y + tax + lda (r1),y + sta (r0),y + txa + sta (r1),y + IncW r0 + IncW r1 + CmpWI r1,$9d80 + bne @loop + MoveB curType,DiskDriverFlag + pla + tax + ldy #0 +@30: pla + sta r0L,y + iny + cpy #30 + bcc @30 + txa + jmp SetDevice + +CopyMemHigh: .byte $7f +CopyMemLow: .byte $60 +SetCopyMemLow: ldx #>(ModStart+$100) + +SCML: stx CopyMemLow + rts + +GetPrefs2: + ldx activeWindow + lda windowsOpen,x + beq GetPrefs + jsr GetWinDisk +GetPrefs: LoadW___ r6,@name + jsr FindFile + txa + beq @10 + rts +@10: MoveW_ $8401,r1 + LoadW___ r4,$8000 + jsr GetBlock + txa + beq @20 + rts +@20: ldy #2 +@25: lda $8000+2,y + sta $8501,y ; maxMouseSpeed + dey + bpl @25 + jsr InitForIO + lda $8005 + ora $8006 + sta screencolors + MoveB $8000+5,$d021 + MoveB $8000+7,$d027 + MoveB $8000+71,$d020 + lda $8001 + cmp #73 ; c128-Preferences ? + bne @26 ; >nein + MoveB $8000+72,$88bd ; scr80colors + MoveB $8000+73,$88bc ; scr80polar +@26: jsr DoneWithIO + ldy #62 +@30: lda $8000+8,y + sta $84c1,y ; mousePicData + dey + bpl @30 + jmp SetColor +@name: .byte "Preferences",0 +SetColor: lda screencolors ; Farben wiederherstellen + sta @col + jsr i_FillRam + .word 1000,$8c00 +@col: .byte 0 + rts +University: ;d "University 6" +.incbin "topdesk/university6.fnt" + +BitMap: ;j +.incbin "topdesk/BitMap.bf" +BitX = 3 +BitY = 15 +TrashMap: ;j +.incbin "topdesk/TrashMap.bf" +TrashX = 3 +TrashY = 21 +PrintMap: ;j +.incbin "topdesk/PrintMap.bf" +PrintX = 3 +PrintY = 21 + +Start2: lda RamTopFlag + bne @10 + lda ramExpSize + beq @09 + jsr SearchDeskTop + bcs @08 + lda #' ' + ldx $8091 + beq @05 + lda #'*' +@05: sta AutoSwapFlag + lda $8090 + beq @08 + CmpWI $88ee,$ffa0 ; DrDCurDkNm + bne @07 + + LoadW___ $8090,0 + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jmp PutBlock +@07: jmp MakeRamTop +@08: rts +@09: jmp GetDiskDrivers +@10: jmp ReLoadAll2 +; jmp GetWindowStat +; jmp OpenNext + +JmpSub2: pha + txa + pha + jsr GotoFirstMenu + ldx activeWindow + lda windowsOpen,x + bne @geht + pla + pla + rts + +@geht: pla + tax + pla +JmpSub: pha + txa + jsr GetModule + bcs @10 + pla + sta r0L + clc + adc r0L + adc r0L + adc ModStartAdress + sta r0L + lda ModStartAdress+1 + adc #0 + sta r0H + jmp (r0) +@10: pla + rts +StartUp: lda #7 + jsr GetModule + MoveW_ ModStart+3*3+1,r1 + SubVW_ 2,r1 + ldy #0 + lda (r1),y + iny + ora (r1),y + beq @10 + jsr @sub + AddVW__ 2,r1 + jmp (r1) +@10: lda r7L + sec + sbc #ModStart + sta r2H + LoadW___ r7,ModStart + MoveW_ ModStart+3*3+1,r1 + SubVW_ 2,r1 + jsr GetSerialNumber + ldy #0 + lda r0L + sta (r1),y + iny + lda r0H + sta (r1),y + jsr @sub + LoadW___ r0,MyName + jsr OpenRecordFile + lda #7 + jsr PointRecord + jsr WriteRecord + jsr CloseRecordFile + jmp StartUp +@sub: ldy #0 +@loop: lda (r1),y + eor #%1011101 + sta (r1),y + iny + bne @loop + rts +ModDepth: .byte 0 +RamTopFlag: .byte 0 +;XXXSureFlag: .byte 0 + +GetTextService: ldx #6 ; im Akku Nr. des Anzeigemodus + .byte $2c ; }bergeben +GetIconService: ldx #5 ; im Akku 0 }bergeben + pha + txa + pha + jsr GotoFirstMenu + LoadW___ ModStartAdress,DispJumpTable +ServiceMod: pla + jsr GetModule + LoadW___ ModStartAdress,ModStart + bcs @10 + pla + sta DispMode + jmp ReLoadAll +@10: pla + rts +DispMode: .byte 0 +.macro JmpMod para1, para2 ; 7 Bytes + ldx #para1 + lda #para2 + jmp JmpSub +.endmacro + +.macro JmpMod2 para1, para2 ; 7 Bytes + ldx #para1 + lda #para2 + jmp JmpSub2 +.endmacro + +.if 0 +SaveWindowStat: jsr GotoFirstMenu + lda #9 ; ramDrive + bne @05 + rts +@05: jsr SetDevice + jsr OpenDisk + ldy #0 +@10: lda SubDir1List,y + sta $6000,y + dey + bne @10 + LoadW___ a2,$6100 + ldx #3 +@loop2: stx a1L + jsr GetWinDisk + ldy #16 +@loop: lda DiskName+2,y + sta (a2),y + dey + bpl @loop + AddVB 16,a2L + ldx a1L + dex + bpl @loop2 + jsr i_MoveData + .word windowsOpen,$6140,4 + jsr i_MoveData + .word WindowTab,$6140+4,6 + jsr i_MoveData + .word WindowTab+11,$6140+4+6,6 + jsr i_MoveData + .word WindowTab+22,$6140+4+12,6 + jsr i_MoveData + .word WindowTab+33,$6140+4+18,6 + LoadW___ r0,StatName + jsr DeleteFile + LoadW___ $8100,StatName + LoadB $8102,$03 + LoadB $8103,$15 + LoadB $8104,$bf + LoadB $8144,$82 ; USR + LoadB $8145,3 ; DATA + LoadB $8146,0 ; SEQ + LoadW___ $8147,$6000 ; LadrAdr + LoadW___ $8149,$61f0 ; = 2 Bl|cke + LoadB $81a0,0 ; kein Info + LoadW___ r9,$8100 + LoadB r10L,0 + jmp SaveFile +StatName: .byte "TopDesk.inf",0 +.endif + +DeskDosNew: JmpMod2 1,0 +DValidate: JmpMod2 1,1 +GetWindowStat: JmpMod 1,2 +GetDiskDrivers: JmpMod 1,3 +;SelectPage: JmpMod2 2,0 +EmptyAllDirs: JmpMod2 2,1 +DispInfo: jsr GotoFirstMenu + JmpMod 2,2 +DeskRename: JmpMod2 2,3 +DeskDuplicate: JmpMod2 2,4 +;SelectAll: JmpMod2 2,5 +GetTime: jsr GotoFirstMenu + JmpMod 3,0 +Ordnen: JmpMod2 3,1 +ThreeDrives: rts +; JmpMod 3,0 +DispFileInfo: JmpMod2 4,0 +;SwapFile: JmpMod 7,0 +DeskRelabel: JmpMod2 7,1 +DeskFormat: jsr GotoFirstMenu + JmpMod 7,2 +InstallDriver: JmpMod 7,4 +DCopy: JmpMod2 8,0 +;SetWindows: JmpMod2 8,1 +NeuerOrdner: JmpMod2 9,0 +CopyDir: JmpMod 9,1 +;DeleteDir: JmpMod 9,2 +MakeRamTop: jsr GotoFirstMenu + LoadB MyCurRec,0 + ldx #10 + lda #0 + jsr JmpSub + txa + beq @10 + rts +@10: jmp ReLoadAll + +StashMain: lda RamTopFlag + bne @geht + rts +@geht: LoadB MyCurRec,0 + ldy #r15H-r0L +@loop: lda r0L,y + sta RegBuf,y + dey + bpl @loop + JmpMod 10,2 + +STARTA_X = 39-BitX +STARTA_Y = 32 +STARTB_X = 39-BitX +STARTB_Y = 64 +STARTC_X = 39-BitX +STARTC_Y = 96 +STARTD_X = 39-BitX +STARTD_Y = 128 + + +IconTab: + .byte 0,0,0,0 ; Anzahl wird berechnet + .word TrashMap + .byte 39-TrashX,191-TrashY,TrashX,TrashY + .word TrashService + .word PrintMap + .byte 2,193-PrintY,PrintX,PrintY + .word PrintService + .word BitMap + .byte STARTA_X,STARTA_Y,BitX,BitY + .word OpenD8 + .word BitMap + .byte STARTB_X,STARTB_Y,BitX,BitY + .word OpenD9 + .word BitMap + .byte STARTC_X,STARTC_Y,BitX,BitY + .word OpenD10 + .word BitMap + .byte STARTD_X,STARTD_Y,BitX,BitY + .word OpenD11 +OpenD11: lda #11 + .byte $2c +OpenD10: lda #10 + .byte $2c +OpenD9: lda #9 + .byte $2c +OpenD8: lda #8 +OpenDa: pha + lda numDrives + cmp #2 + bcc @10 + lda KSFlag + bne @09 + jsr CheckKlick + bcs @10 +@09: pla + sta @dr + LoadW___ r4,BitMap+1 + LoadB r3L,1 + jsr DrawSprite + LoadB ghostFile,$ff + jsr InitForIO + MoveB $d027,$d028 ; Farbe des Ghost-Sprites von Mauszeiger + jsr DoneWithIO + LoadB KSFlag,0 + rts +@10: lda @dr + beq @20 + lda ghostFile + bpl @20 + ldx @dr + pla + jsr ChangeDrive + LoadB @dr,0 + LoadB AskDiskFlag,0 + ldx #3 +@loop: lda windowsOpen,x + beq @15 + txa + pha + jsr GetDisk + pla + tax +@15: dex + bpl @loop + LoadB AskDiskFlag,$ff + jmp RedrawAll +@20: ldx numDrives ; bei numDrives=1 kein Laufwerkswechsel + dex + bne @25 + pla + cmp curDrive + beq @26 +@24: rts +@25: pla + pha + tay + lda driveType-8,y + beq @27 + pla +@26: jsr NewSetDevice + jmp OpenNext +@27: pla + rts + +@dr: .byte 0 +DeskMain: lda ghostFile + beq @rts + lda $3a + sec + sbc #10 + sta r4L + lda $3b + sbc #00 + sta r4H + lda $3c + sec + sbc #10 + sta r5L + LoadB r3L,1 + jsr PosSprite + jsr EnablSprite + LoadB mouseTop,15 +@rts: rts +DeskOther: lda mouseData + bpl @10 + rts +@10: LoadW___ r3,ClxL + LoadW___ r4,ClxR + LoadB r2L,ClyO + LoadB r2H,ClyU + jsr IsMseInRegion + bne @20 + jmp EndGhost +@20: jmp GetTime + +KSFlag: .byte 0 +KS8: lda #8 + .byte $2c +KS9: lda #9 + .byte $2c +KS10: lda #10 + .byte $2c +KS11: lda #11 + ldx #1 + stx KSFlag + jmp OpenDa + +.macro mpt p1, p2, p3 + .word p1 + .byte p2 + .word p3 +.endmacro + +MAIN_RIGHT = 214 + +HauptMenu: .byte 0,13 + .word 0,MAIN_RIGHT + .byte 6 + mpt @t1,DYN_SUB_MENU,geos_Menue + mpt @t2,DYN_SUB_MENU,Datei_Menue + mpt @t3,DYN_SUB_MENU,Anzeige_Menue + mpt @t4,DYN_SUB_MENU,Disk_Menue + mpt @t6,DYN_SUB_MENU,WindowMenue + mpt @t5,DYN_SUB_MENU,Speziell_Menue +@t1: .byte "geos",NULL +@t2: .byte "Datei",NULL +@t3: .byte "Anzeige",NULL +@t4: .byte "Diskette",NULL +@t5: .byte "Speziell",NULL +@t6: .byte "Fenster",NULL + +DISKRIGHT = 177 +Disk_Menue: jsr MySubMenu + .byte 13,84 + .word 98,DISKRIGHT + .byte $85 + mpt @t1,MENU_ACTION,DeskRelabel + mpt @t2,MENU_ACTION,DeskDosNew + mpt @t3,MENU_ACTION,DeskFormat + mpt @t4,MENU_ACTION,DCopy + mpt @t5,MENU_ACTION,DValidate +@t1: .byte "Umbenennen",GOTOX + .word DISKRIGHT-20 + .byte 128,BOLDON,"N",PLAINTEXT,0 +@t2: .byte "L|schen",GOTOX + .word DISKRIGHT-20 + .byte 128,BOLDON,"E",PLAINTEXT,0 +@t3: .byte "Formatieren",GOTOX + .word DISKRIGHT-20 + .byte 128,BOLDON,"F",PLAINTEXT,0 +@t4: .byte "Kopieren",GOTOX + .word DISKRIGHT-20 + .byte 128,BOLDON,"K",PLAINTEXT,0 +@t5: .byte "Aufr{umen",GOTOX + .word DISKRIGHT-20 + .byte 128,BOLDON,"V",PLAINTEXT,0 +DATEIRIGHT = 112 +Datei_Menue: jsr MySubMenu + .byte 13,98+14 + .word 28,DATEIRIGHT + .byte $87 + mpt @t1,MENU_ACTION,DateiOeffnen + mpt @t2,MENU_ACTION,DeskDuplicate + mpt @t3,MENU_ACTION,DeskRename + mpt @t4,MENU_ACTION,DispFileInfo + mpt @t5,MENU_ACTION,DateiDrucken + mpt @t6,MENU_ACTION,DeskDelete + mpt @t7,MENU_ACTION,Ordnen +@t1: .byte "\ffnen",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"Z",PLAINTEXT,0 +@t2: .byte "Duplizieren",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"H",PLAINTEXT,0 +@t3: .byte "Umbenennen",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"M",PLAINTEXT,0 +@t4: .byte "Info",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"Q",PLAINTEXT,0 +@t5: .byte "Drucken",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"P",PLAINTEXT,0 +@t6: .byte "L|schen",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"D",PLAINTEXT,0 +@t7: .byte "Vorsortieren",GOTOX + .word DATEIRIGHT-22 + .byte 128,BOLDON,"T",PLAINTEXT,0 +Anzeige_Menue: jsr MySubMenu + .byte 13,7*14+14 + .word 57,132 + .byte $87 + mpt @t1,$00,@rout + mpt @t2,$00,@rout + mpt @t3,$00,@rout + mpt @t4,$00,@rout + mpt @t5,$00,@rout + mpt KBytesFlag,$00,@rout2 + mpt @t7,$00,@rout3 +@t1: .byte "* Icons",0 +@t2: .byte " nach Namen",0 +@t3: .byte " nach Datum",0 +@t4: .byte " nach Gr|~e",0 +@t5: .byte " nach Typ",0 +@t7: .byte "* in KBytes",0 +@rout: pha + lda #' ' + sta @t1 + sta @t2 + sta @t3 + sta @t4 + sta @t5 + pla + pha + asl + tay + lda @tab,y + sta r0L + lda @tab+1,y + sta r0H + ldy #0 + lda #'*' + sta (r0),y + pla + bne @r10 + jmp GetIconService +@r10: jmp GetTextService +@tab: .word @t1,@t2,@t3,@t4,@t5 +@rout2: lda #' ' + ldx #'*' +@rout23: sta @t7 + stx KBytesFlag + jsr GotoFirstMenu + jmp RedrawAll +@rout3: lda #'*' + ldx #' ' + jmp @rout23 +KBytesFlag: .byte " in Bl|cken",0 + +WINWDOWRIGHT = 256 +WindowMenue: jsr MySubMenu + .byte 13,28+28+14 + .word 137,WINWDOWRIGHT + .byte $84 + mpt @t1,MENU_ACTION,SetWindows + mpt @t2,MENU_ACTION,CloseAll + mpt @t3,MENU_ACTION,SelectAll + mpt @t4,MENU_ACTION,SelectPage +@t1: .byte "plazieren",GOTOX + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"S",PLAINTEXT,0 +@t2: .byte "alle schlie~en",GOTOX + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"C",PLAINTEXT,0 +@t3: .byte "Inhalt anw{hlen",GOTOX + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"W",PLAINTEXT,0 +@t4: .byte "Ausschnitt anw{hlen",GOTOX + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"X",PLAINTEXT,0 + +SPCRIGHT = 267 + +Speziell_Menue: lda #PLAINTEXT + ldx RamTopFlag + beq @10 + lda #ITALICON +@10: sta @t3 + jsr MySubMenu + .byte 13,28+28+14+14+14 + .word 174,SPCRIGHT + .byte $86 + mpt @t1,MENU_ACTION,NeuerOrdner + mpt @t2,MENU_ACTION,GetTime + mpt @t3,MENU_ACTION,MakeRamTop + mpt @t4,MENU_ACTION,Reset + mpt AutoSwapFlag,MENU_ACTION,AutoSwap + mpt @t5,MENU_ACTION,GoToBasic +; mpt @t2,MENU_ACTION,EmptyAllDirs +; mpt @t4,MENU_ACTION,SaveWindowStat +@t1: .byte "Neuer Ordner",GOTOX + .word SPCRIGHT-20 + .byte 128,BOLDON,"O",PLAINTEXT,0 +@t2: .byte "Uhr stellen",GOTOX + .word SPCRIGHT-20 + .byte 128,BOLDON,"A",PLAINTEXT,0 +@t3: .byte PLAINTEXT,"RamDeskTop",GOTOX + .word SPCRIGHT-20 + .byte 128,BOLDON,"L",PLAINTEXT,0 +@t4: .byte "Reset",GOTOX + .word SPCRIGHT-20 + .byte 128,BOLDON,"R",PLAINTEXT,0 +@t5: .byte "Basic",0 +;@t2: .byte "Ordner entleeren",0 +;@t4: .byte "Arbeit sichern",0 +AutoSwapFlag: .byte " autom. Tauschen",0 +CloseAll: jsr GotoFirstMenu + lda #0 + ldx #3 +@loop: sta windowsOpen,x + dex + bpl @loop + jsr ClearMultiFile + jmp RedrawAll + +AutoSwap: jsr GotoFirstMenu + ldx #$2a + lda AutoSwapFlag + cmp #$20 + beq @10 + ldx #$20 +@10: stx AutoSwapFlag + lda RamTopFlag + bne @15 + jsr SearchDeskTop + bcc @20 +@15: rts +@20: MoveB RamTopFlag,$8090 ; immer 0, aber egal + MoveB AutoSwapFlag,$8091 + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr PutBlock + rts + +RecoverActiveWindow: ldx activeWindow + jsr GetEqualWindows + ldx #3 +@loop: lda a6L,x + bne ReloadActiveWindow2 + dex + bpl @loop + ldx activeWindow + jsr ReLoad2 + bcc @10 + jsr FehlerAusgabe +@10: jmp RecoverLast + +ReloadActiveWindow: ldx activeWindow + jsr GetEqualWindows +ReloadActiveWindow2: ldx #3 +@g20: lda a6L,x + bne @g10 + dex + bpl @g20 + jmp @10 ; nur aktives Window aktualisieren +@g10: ldx #3 +@g30: lda a6L,x + beq @g40 ; > bei ungleich + txa + pha + jsr ReLoad2 + bcc @e10 + jsr FehlerAusgabe + pla + rts +@e10: pla + tax +@g40: dex + bpl @g30 +@09: ldx activeWindow + jsr ReLoad2 + bcc @e20 + jsr FehlerAusgabe +@e20: jmp RedrawAll +@10: ldx activeWindow + jsr ReLoad2 + bcc @e30 + jsr FehlerAusgabe +@e30: jmp Redraw +EndGhost: ldx #0 + stx ghostFile + stx mouseTop + pha + lda #1 + sta r3L + jsr DisablSprite + pla + rts + +GoToBasic: jsr GotoFirstMenu + lda #0 + sta r5L + sta r5H + sta $5000 + LoadW___ r0,$5000 + lda c128Flag + bpl @10 + lda #0 + sta $1c00 + sta $1c01 + sta $1c02 + sta $1c03 + beq @20 +@10: lda #0 + sta $800 + sta $801 + sta $802 + sta $803 +@20: jmp ToBasic + +TestTopDesk: lda c128Flag + bpl @11 + lda graphMode + bpl @11 +@05: clc + rts +@11: lda driveType + and #$80 + beq @05 + lda driveType+1 + and #$80 + beq @05 + ldy #r15H-r0L +@loop: lda r0L,y + pha + dey + bpl @loop + PushB curDrive + LoadB sysDBData,1 + lda #8 + jsr @sub + txa + beq @15 + lda #9 + jsr @sub + txa + beq @15 + LoadW___ r0,@db + jsr NewDoDlgBox +@15: pla + jsr SetDevice + jsr OpenDisk + ldy #0 +@loop2: pla + sta r0L,y + iny + cpy #r15H-r0L+1 + bne @loop2 + lda sysDBData + cmp #1 + bne @20 + clc + rts +@20: sec + rts +@sub: jsr SetDevice + jsr OpenDisk + LoadW___ r6,MyName + jmp FindFile +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte OK,2,72,CANCEL,17,72,NULL +@t1: .byte "Kein DeskTop auf den",0 +@t2: .byte "RAM-Disks A und B!",0 + +AskDiskFlag: .byte $ff +ReLoadAll: ldy #3 +@loop: lda windowsOpen,y + bne Reset2 + dey + bpl @loop + bmi ReLoadAll2 +Reset: jsr GotoFirstMenu +Reset2: jsr ClearScreen +ReLoadAll2: ldx #03 +@10: txa + pha + lda activeWindow,x + pha + tax + lda windowsOpen,x + beq @15 + LoadB AskDiskFlag,0 + jsr ReLoad2 + LoadB AskDiskFlag,$ff + bcc @13 + pla + tax + lda #0 + sta windowsOpen,x + beq @17 +@13: pla + pha + tax + jsr DrawWindow +@15: pla +@17: pla + tax + dex + bpl @10 +;Rts: + rts + +RedrawHead: lda #2 + jsr SetPattern + jsr i_Rectangle + .byte 0,15 + .word 0,319 + jsr MaxTextWin + jsr DoHauptMenu + lda #0 + jsr SetPattern + jsr i_Rectangle + .byte 1,13 + .word 221,237 + lda #$ff + jsr FrameRectangle + jmp InitClock + +geos_Menue: + jsr DA_Init + txa + beq @05 + brk +@05: jsr MySubMenuDA +geosoben: .byte 13 +geosunten: .byte 28 ; wird berechnet! + .word 0,80 +geosanz: .byte 1 ; wird eingesetzt! + mpt DeskInfoText,MENU_ACTION,DispInfo + mpt DASpace + 0*17,MENU_ACTION,DA_Call + mpt DASpace + 1*17,MENU_ACTION,DA_Call + mpt DASpace + 2*17,MENU_ACTION,DA_Call + mpt DASpace + 3*17,MENU_ACTION,DA_Call + mpt DASpace + 4*17,MENU_ACTION,DA_Call + mpt DASpace + 5*17,MENU_ACTION,DA_Call + mpt DASpace + 6*17,MENU_ACTION,DA_Call + mpt DASpace + 7*17,MENU_ACTION,DA_Call +DeskInfoText: .byte "TopDesk Info",0 + +maxDesks = 8 ; maximale Anzahl der angezeigten DA's +DA_Init: ; Erstellung der Liste der DA's + ; der aktuellen Diskette + LoadB MyCurRec,0 ; da DASpace=$6000 + ldx activeWindow + lda windowsOpen,x + beq @l05 + LoadB AskDiskFlag,0 + jsr GetAktlDisk + ldx #$ff + stx AskDiskFlag + tax + bne @l05 +@10: ldy #3 +@dloop: lda @data,y + sta r6L,y + dey + bpl @dloop + LoadW___ r10,0 ; Keine Class-Angabe + jsr FindFTypes + txa + beq @l10 +@l05: LoadB r7H,maxDesks +@l10: lda #maxDesks ; Anzahl ermitteln + sec + sbc r7H + clc + adc #01 ; Men}punktanzahl ermitteln + sta a0 ; und merken + ora #$80 + sta geosanz ; und speichern + LoadB a1,14 ; Untere Men}grenze + ldx #a0 ; berechnen + ldy #a1 + jsr BBMult + ldx a0 + inx + txa ; Ergebnis zur + clc ; oberen Grenze aufaddieren + adc geosoben + sta geosunten ; und speichern + ldx #0 +@err: rts +@data: .word DASpace + .byte DESK_ACC,maxDesks +DA_Call: ; Nummer des Men}punktes in a + tax + dex ; minus 1 + stx a0L + jsr GotoFirstMenu + LoadB a1,17 + ldx #a0 + ldy #a1 + jsr BBMult ; mal 17 + lda a0L + clc + adc #DASpace + sta r6H ; ergibt Filenamen des DA's + LoadW___ r0,Name + ldx #r6 + ldy #r0 + jsr CopyString + LoadW___ r6,Name + LoadB r0L,0 + jsr StashMain +DA_Call2: jsr GetFile ; DA laden und ausf}hren +DAReturn: txa + pha + lda c128Flag + bpl @04 + lda graphMode + bpl @04 + eor #$80 + sta graphMode + jsr SetNewMode +@04: jsr SetColor + jsr RedrawHead + pla + tax + bne @05 + ldx activeWindow + jsr ReLoad2 + bcc @10 +@05: jsr FehlerAusgabe + ldx #0 + rts +@10: jsr RedrawAll + ldx #0 + rts + +KeyHandler: lda menuNumber + beq @05 + rts +@05: ldy #0 +@10: lda KeyTab,y + beq @20 + cmp keyData + beq @30 + iny + bne @10 +@20: lda keyData + bpl @25 + and #$7f + cmp #$30 + bcc @25 + cmp #$3a + bcs @25 + sec + sbc #$31 + bpl @24 + lda #9 +@24: jmp SelectFileA +@25: rts +@30: tya + asl + tay + lda KeyServiceTab+1,y + tax + lda KeyServiceTab,y + jmp CallRoutine +.macro ShortCutKey value + .byte value+$80 +.endmacro +KeyTab: ShortCutKey 'm' + ShortCutKey 'd' + ShortCutKey 'r' + ShortCutKey 'q' + ShortCutKey 'v' + ShortCutKey 's' + ShortCutKey 'n' + ShortCutKey 'f' + ShortCutKey 'e' + ShortCutKey 'z' + ShortCutKey 'h' + ShortCutKey 'k' + ShortCutKey 'p' + ShortCutKey 'o' + .byte 1,3,5,14 ; F1,F3,F5,F7 + ShortCutKey 1 + ShortCutKey 3 + ShortCutKey 5 + ShortCutKey 14 + ShortCutKey 'w' + ShortCutKey 'x' + ShortCutKey 'c' + ShortCutKey 'l' + ShortCutKey 't' + ShortCutKey 'a' + .byte 16,17,8,30 ; CRSR + ShortCutKey 20 ; Pfeil nach links - Taste + ShortCutKey 'b' + .byte NULL +KeyServiceTab: .word DeskRename,DeskDelete,Reset,DispFileInfo + .word DValidate,SetWindows,DeskRelabel,DeskFormat + .word DeskDosNew,DateiOeffnen,DeskDuplicate,DCopy + .word PrintService,NeuerOrdner + .word OpenD8,OpenD9,OpenD10,OpenD11,KS8,KS9,KS10,KS11 + .word SelectAll,SelectPage,CloseAll,MakeRamTop + .word Ordnen,GetTime + .word ScrollUp,ScrollDown,ScrollLeft,ScrollRight + .word CloseService2,BackWindow +ScrollUp: lda #WN_SCROLL_U + .byte $2c +ScrollDown: lda #WN_SCROLL_D + .byte $2c +ScrollLeft: lda #WN_SCROLL_L + .byte $2c +ScrollRight: lda #WN_SCROLL_R + sta messageBuffer + MoveB activeWindow,messageBuffer+1 + tax + lda windowsOpen,x + beq @10 + jmp Handler +@10: rts + +SelectFileA: pha + ldy activeWindow + lda windowsOpen,y + bne @10 + pla + rts +@10: sty messageBuffer+1 + jsr MyDCFilesSub + MoveB r2L,a2L + MoveW_ a5,a3 + pla + pha + jsr GetFileRect + pla + tax + jmp File_Selected +BackWindow2: LoadB messageBuffer,WN_HIDE + MoveB activeWindow,messageBuffer+1 + tax + lda windowsOpen,x + beq @10 + jmp BackWindow +@10: rts + +OpenNext: ldx activeWindow ; eventuell selektierte Files + lda windowsOpen,x ; deselektieren + beq @05 + stx messageBuffer+1 + jsr DispMarking + jsr ClearMultiFile +@05: jsr GetNext ; freie WindowNummer holen + bcc @11 + jmp OpenNext10 ; >keine mehr frei +@11: txa + pha + jsr GetDiskName + txa + beq @0xx + pla + jmp FehlerAusgabe +@0xx: ldx curType + dex + bne @0x1 + lda curDirHead+3 + bpl @0x1 + pla + ldx #$80 + jmp FehlerAusgabe +@0x1: pla + pha + jsr GetDiskInfo + pla + pha + tax + lda curDrive ; Laufwerk merken + sta winDrives,x + lda #0 + sta windowOffs,x + sta xOffsL,x + sta xOffsH,x + jsr GetSubDirXList + jsr ClearList + pla + tax +OpenNextNr: lda #0 + sta aktl_Sub,x ; aktl Ebene setzen + txa + pha + jsr ReLoad2 + txa + beq @0xx + pla + jmp FehlerAusgabe +@0xx: jsr GetStartPos + pla + pha + tax + sec + jsr SpeedWinMax + pla + tax + jsr OpenWindow + jsr GetPrefs + lda DiskDriverFlag + bpl OpenNext10 + lda MyCurRec + cmp #1 + bne OpenNext10 + jsr GetDiskDrivers +OpenNext10: rts + +GetZielPos: ldx #6 + .byte $2c +GetStartPos: ldx #00 + ldy curDrive + lda @xL-8,y + sta r3L,x + clc + adc #21 + sta r4L,x + lda @xH-8,y + sta r3H,x + adc #0 + sta r4H,x + lda @y-8,y + sta r2L,x + clc + adc #21 + sta r2H,x + rts +@xL: .byte <(STARTA_X*8),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) +@xH: .byte >(STARTA_X*8),>(STARTB_X*8),>(STARTC_X*8),>(STARTD_X*8) +@y: .byte STARTA_Y,STARTB_Y,STARTC_Y,STARTD_Y + +ReLoad2: jsr GetWinTabAdr + pha + LoadWr0 FILE_ANZ*82 + jsr ClearRam + pla + tax +ReLoad: ; NeuEinladen der Files / Icons + ; Par: x : WindowNummer (0-3) + ; Ret: x : Fehlernummer, bei x=0 ist c=0, sonst 1 + txa + pha + jsr GetDisk + bcc @f10 + pla + rts +@f10: pla + tax + jsr GetWinTabAdr + pha ; ehem. x-Reg. retten + PushW r1 + LoadWr0 FILE_ANZ*18 + jsr ClearRam + PopW r3 + pla + pha + tax + lda aktl_Sub,x ; aktuelles Verzeichnis + sta r10L + lda windowOffs,x + sta r11H ; aktueller Offset + LoadB r11L,16 ; Anzahl der Files + LoadB r12L,%11000000 ; gel|schte Files nicht einlesen + LoadB r12H,$80 ; alle Filetypen + ldx #4 + lda DispMode + beq @10 + lda #0 + sec + sbc #ModStart + sta r0H + LoadW___ r1,ModStart + jsr ClearRam + LoadB MyCurRec,0 + LoadW___ r3,ModStart+2 + ldx #01 + LoadB r11L,144 ; Anzahl der Files korrigieren + LoadB r11H,0 ; OffSet auf 0 setzen + lda #30 + .byte $2c +@10: lda #18 + sta r13L ; Anzahl der Bytes pro Eintrag + stx r13H ; davon x }berlesen + jsr FindDirFiles + txa + beq @15 + pla + cmp #11 ; Puffer}berlauf? + bne @14 + ldy #3 + lda #0 +@14a: sta windowsOpen,y + dey + bpl @14a + jsr FehlerAusgabe + sec + rts +@14: sec + rts +@15: pla + tax + lda r14L + clc + adc windowOffs,x + sta fileAnz,x + lda #16 + sec + sbc r11L + sta fileNum,x + txa + pha + jsr GetDiskInfo + pla + pha + tax + lda DispMode + beq @20 + lda windowOffs,x + jsr SortFileBuffer +@20: pla + tax + lda DispMode + sta winMode,x + ldx #0 + clc + rts +;Stashdata: .word $6000,$2000,8000 +; .byte 0 +MainAdr: .word 0 + +DispMarking: ; File-Markierungen darstellen + ; Par: messageBuffer+1 : Window-Nummer + jsr MyDCFilesSub + MoveW_ a5,a3 + MoveB r2L,a2L + lda #00 +@e0: pha + ldx messageBuffer+1 + jsr CheckDispMark + bcs @e1 + ldx messageBuffer+1 + pla + cmp fileNum,x + bcs @e2 + pha + jsr GetFileRect + bcs @e1 + jsr InvertRectangle +@e1: pla +@e2: clc + adc #01 + cmp #16 + bne @e0 + rts +MyDCFilesSub: ldx messageBuffer+1 + jsr GetWorkArea + ldx messageBuffer+1 + lda xOffsL,x + clc + adc r3L + sta a5L + lda xOffsH,x + adc r3H + sta a5H + lda r2L + sec + sbc #5 + sta r2L + AddVW__ 6,r3 + rts + +WindowTab: .byte 15 ; y oben + .byte 15+90 ; y unten + .word 2 ; x links + .word 2+270 ; x rechts + .byte $ff ; alle Gadgets + .word WinName1 + .word Handler + .byte 107 ; y oben + .byte 107+90 ; y unten + .word 2 ; x links + .word 2+270 ; x rechts + .byte $ff ; alle Gadgets + .word WinName2 + .word Handler + .byte 24 ; y oben + .byte 24+90 ; y unten + .word 30 ; x links + .word 30+270 ; x rechts + .byte $ff ; alle Gadgets + .word WinName3 + .word Handler + .byte 44 ; y oben + .byte 44+90 ; y unten + .word 50 ; x links + .word 50+265 ; x rechts + .byte $ff ; alle Gadgets + .word WinName4 + .word Handler +FILE_ANZ = 16 ; nicht {ndern ! +MOVE_OFFS = 60 + +WinTabAdr: .word FileTab1,FileTab2,FileTab3,FileTab4 +winDrives: .byte 0,0,0,0 +windowOffs: .byte 0,0,0,0 +xOffsL: .byte 0,0,0,0 +xOffsH: .byte 0,0,0,0 +fileNum: .byte 0,0,0,0 +fileAnz: .byte 0,0,0,0 +aktl_Sub: .byte 0,0,0,0 +subTab: .byte 0,0,0,0,0,0,0,0 +freeAnz: .byte 0,0,0,0,0,0,0,0 +maxAnz: .byte 0,0,0,0,0,0,0,0 +winMode: .byte 0,0,0,0 +NameTab: .word WinName1,WinName2,WinName3,WinName4 +WinName1: .byte "x:" + .repeat 78 + .byte 0 ; Pfadname: "D:Disk/Sub1/Sub2/Sub3" + .endrep +WinName2: .byte "x:" ; beim "/" bit 7 gesetzt! + .repeat 78 + .byte 0 ; Pfadname: "D:Disk/Sub1/Sub2/Sub3" + .endrep +WinName3: .byte "x:" + .repeat 78 + .byte 0 ; Pfadname: "D:Disk/Sub1/Sub2/Sub3" + .endrep +WinName4: .byte "x:" + .repeat 78 + .byte 0 ; Pfadname: "D:Disk/Sub1/Sub2/Sub3" + .endrep +SubDirListTabL: .byte SubDir1List,>SubDir2List,>SubDir3List,>SubDir4List + +GetDiskName: ; Einlesen des Diskettennamens + ; Par: x: WindowNummer + ; Alt: WinNameX + ; Des: a,x,y,diskBlkBuf + txa + pha + jsr OpenDisk + txa + beq @10 + pla + rts +@10: pla + jsr GetWinName + lda curDrive + clc + adc #57 + ldy #0 + sta (r1),y + + AddvW 2,r1 + ldy #00 +@20: lda (r5),y + cmp #$a0 + bne @30 + lda #$1b +@30: sta (r1),y + iny + cpy #16 + bne @20 + lda #00 + sta (r1),y + ldx #0 + rts + +GetSubName: ; Der Name, der in Name steht, wird als Subdirectory-Name im + ; Titelstring des aktuellen Fensters eingetragen + lda activeWindow +GetSubName2: jsr GetWinName + lda #'/'+$80 + sta (r1),y + iny + tya + clc + adc r1L + sta r1L + bcc @10 + inc r1H +@10: LoadWr0 Name + LoadB r2L,17 + jmp FormString + +RemSubName: ; Der zuletzt im Titelstring des aktuellen Fensters eingetragene SubDir- + ; Name wird entfernt + lda activeWindow + jsr GetWinName +@10: lda (r1),y + cmp #'/'+$80 + beq @20 + dey + bne @10 + sec + rts +@20: lda #0 + sta (r1),y + clc + rts + +PrintDiskInfo: PushW r0 + ldx messageBuffer+1 + jsr GetWorkArea + bcs @10 + jsr RestoreTextWin +@10: SubVW_ 10,r4 + ldx r2H + inx + inx + stx r2L + txa + clc + adc #8 + sta r2H + lda r3L + clc + adc #10 + sta r11L + lda r3H + adc #00 + sta r11H + ldx r2H + dex + stx r1H + jsr SetTextWin + bcs @21 + lda messageBuffer+1 + asl + pha + tax + lda freeAnz,x + sta r0L + lda freeAnz+1,x + sta r0H + jsr @sub + LoadWr0 @t4 + jsr NewPutString + pla + tax + lda maxAnz,x + sec + sbc freeAnz,x + sta r0L + lda maxAnz+1,x + sbc freeAnz+1,x + sta r0H + jsr @sub + LoadWr0 @t3 + jsr NewPutString +@20: jsr RestoreTextWin +@21: PopW r0 + rts + ; ==> + +@sub: lda KBytesFlag + cmp #' ' + beq @kbytes + lda #%11000000 + jsr NewPutDecimal + LoadWr0 @t1 + jmp NewPutString +@kbytes: lsr r0H + ror r0L + lsr r0H + ror r0L + lda #%11000000 + jsr NewPutDecimal + LoadWr0 @t2 + jmp NewPutString +@t1: .byte " Bl|cke",0 +@t2: .byte " KBytes",0 +@t3: .byte " belegt ",0 +@t4: .byte " frei ",0 + +GetAkltDiskInfo: lda activeWindow +GetDiskInfo: pha + LoadW___ r5,curDirHead + jsr CalcBlksFree + pla + asl + tax + lda r4L + sta freeAnz,x + lda r4H + sta freeAnz+1,x + lda r3L + sta maxAnz,x + lda r3H + sta maxAnz+1,x + rts + +NormHandler: ; Behandlung der Messages Activate,Close,Restore + lda messageBuffer +@20: cmp #WN_CLOSE + bne @40 + jsr DispMarking + jsr ClearMultiFile + ldx activeWindow + lda winDrives,x + jsr SetDevice + ldx activeWindow + jsr CloseWindow + jsr GetZielPos + ldx activeWindow + clc + jsr SpeedWinMax ; actives Win. nach Ziel bewegen + ldy #00 ; n{chstes Window aktivieren +@w10: lda activeWindow,y + tax + lda windowsOpen,x + bne @w15 + iny + cpy #4 + bne @w10 + ldx #$ff +@w15: txa + bmi @w19 + clc + jmp FrontWindow +@w19: rts +@40: cmp #WN_RESTORE + bne @99 + jsr PrintDriveNames +@99: rts + + +PrintDriveNames: MoveB numDrives,a7L + LoadWr0 University + jsr LoadCharSet + dec a7L +@loop: ldx a7L + lda @data,x + sta r1H + LoadW___ r11,272+16 + jsr PutDrive + dec a7L + bpl @loop + jsr i_PutString + .word 5 + .byte 196,0 + LoadW___ r0,PrntFileName + jsr NewPutString + jmp UseSystemFont + +@data: .byte 55,87,119,151 +PutDrive: ; schreibt DriveName +; Par: x: Index f}r driveType / r11;r1H f}r NewPutStr +; Ret: r0 - Zeiger auf den String + txa + pha + lda driveType,x + and #%00000011 + tay + dey + bne @10 + LoadB @ty,'4' + bne @30 +@10: dey + bne @20 + LoadB @ty,'7' + bne @30 + dey + bne @30 +@20: LoadB @ty,'8' +@30: lda driveType,x + bpl @40 + lda #PLAINTEXT + sta @nr + sta @nr+1 + LoadW___ r0, @dr + SubVB 10,r11L ; nur low, da immer noch }ber 256 + jmp @50 +@40: LoadB @nr+1,':' + LoadW___ r0, @nr +@50: pla + ldy #0 + clc + adc #'A' + sta (r0),y + jmp NewPutString +@dr: .byte "x:RAM " +@nr: .byte PLAINTEXT,PLAINTEXT,"15" +@ty: .byte "41",0 + +CheckKlick: ; Ermittlung, ob Knopf gehalten oder nicht + LoadB dblClickCount,20 +@10: lda dblClickCount + beq @30 + lda mouseData + bpl @10 + sec ; Maus-Knopf nicht gehalten + rts +@30: clc ; Maus-Knopf gehalten + rts + +Handler: ldx messageBuffer+1 ; File/Icontabellenadresse nach r0 + jsr GetWinTabAdr + jsr MoveWr1r0 + lda messageBuffer + cmp #WN_ACTIVATE + beq @002 + cmp #WN_ACTIVATE2 + bne @03 + lda ghostFile + beq @002 + bpl @02 +; clc +; ldx messageBuffer+1 +; jsr FrontWindow +@002: lda messageBuffer+1 + pha + MoveB activeWindow,messageBuffer+1 + jsr DispMarking + pla + sta messageBuffer+1 + jsr ClearMultiFile + jsr EndGhost + ldx messageBuffer+1 + lda winMode,x + cmp DispMode + beq @n10 + jsr ReLoad2 + bcc @n05 + jmp FehlerAusgabe +@n05: sec + bcs @n20 +@n10: clc +@n20: jsr FrontWindow + ldx activeWindow + lda winDrives,x + jmp NewSetDevice +@02: jmp MoveService +@03: cmp #WN_USER + bne @03a + jmp @10 +@03a: jsr EndGhost + cmp #WN_REDRAW + beq @05 + cmp #WN_SCROLL_D + bne @03b + jmp @30 +@03b: cmp #WN_SCROLL_U + bne @03c + jmp @50 +@03c: cmp #WN_SCROLL_L + beq @06 + cmp #WN_SCROLL_R + beq @08 + cmp #WN_CLOSE + bne @04 + jmp CloseService +@04: jmp NormHandler +@05: jsr PrintDiskInfo + ldx messageBuffer+1 + jsr GetWorkArea + bcs @05a + jsr DispSizeRectangle + jsr MyDispFiles + txa + beq @05a + jsr FehlerAusgabe2 +@05a: jmp MaxTextWin + +@06: ; Scroll-Links-Bearbeitung + ldy #0 + .byte $2c +@08: ; Scroll-Rechts-Bearbeitung + ldy #6 + jsr CheckKlick + bcs @08a + ldx messageBuffer+1 + lda @tab1,y + sta xOffsL,x + iny + lda @tab1,y + sta xOffsH,x + iny + jmp @09 +@08a: iny + iny + ldx messageBuffer+1 + lda xOffsL,x + cmp @tab1,y + bne @08a1 + iny + lda xOffsH,x + cmp @tab1,y + beq @09 + dey +@08a1: iny + iny + lda xOffsL,x + clc + adc @tab1,y + sta xOffsL,x + iny + lda xOffsH,x + adc @tab1,y + sta xOffsH,x +@09: jsr GetWorkArea + jsr MyDispFiles + txa + beq @e10 + jsr FehlerAusgabe2 +@e10: rts +@tab1: .word 0,(3*MOVE_OFFS),MOVE_OFFS + .word -(3*MOVE_OFFS),-(3*MOVE_OFFS),-MOVE_OFFS +@10: jsr MyCheckFiles + txa + bmi @20 + pha + jsr MyDCFilesSub + MoveB r2L,a2L + MoveW_ a5,a3 + pla + pha + jsr GetFileRect + pla + tax + jmp File_Selected +@20: jsr TestCBMKey + bcs @25 + jsr EndGhost + jsr DispMarking + jsr ClearMultiFile +@25: rts +@30: ; Scroll-down-Bearbeitung + jsr GetAktlDisk + bcc @31 + rts +@31: jsr CheckKlick + bcs @33 + ldx messageBuffer+1 + lda fileNum,x + cmp #16 + beq @31a + rts +@31a: lda #12 + clc + adc windowOffs,x + sta windowOffs,x + PushW r0 + jsr MoveWr0r1 + LoadWr0 FILE_ANZ*82 + jsr ClearRam + PopW r0 +@33: ldx messageBuffer+1 + lda fileNum,x + cmp #5 + bcs @33a + rts +@33a: PushW r0 + AddVW__ FILE_ANZ*18,r0 ; r0>Anfang Icons + jsr MoveWr0r1 ; r1=r0 + inc r0H ; r0=r0+4*64 + LoadW___ r2,(FILE_ANZ-4)*64 + jsr MoveData + PopW r1 + PushW r1 + AddVW__ FILE_ANZ*18+(FILE_ANZ-4)*64,r1 + LoadWr0 4*64 + jsr ClearRam + ldx messageBuffer+1 + lda #4 + clc + adc windowOffs,x + sta windowOffs,x + sta r11H + jsr GetWorkArea + ldx activeWindow + jsr ReLoad + PopW r0 + jsr MyDispFiles + txa + beq @e20 + jsr FehlerAusgabe2 +@e20: rts +@50: ; Scroll-up-Bearbeitung + ldx messageBuffer+1 + lda windowOffs,x + bne @53 + rts +@53: jsr GetAktlDisk + bcc @53a + rts +@53a: jsr CheckKlick + bcs @54 + ldx messageBuffer+1 + lda windowOffs,x + sec + sbc #12 + sta windowOffs,x + PushW r0 + jsr MoveWr0r1 + LoadWr0 FILE_ANZ*82 + jsr ClearRam + PopW r0 +@54: PushW r0 + AddVW__ FILE_ANZ*18,r0 ; r0>Anfang Icons + jsr MoveWr0r1 ; r1=r0 + inc r1H ; r1=r1+4*64 + LoadW___ r2,(FILE_ANZ-4)*64 + jsr MoveData + PopW r1 + PushW r1 + AddVW__ FILE_ANZ*18,r1 + LoadWr0 4*64 + jsr ClearRam + ldx messageBuffer+1 ;CheckKlick + lda windowOffs,x + sec + sbc #4 + bpl @55 + lda #0 +@55: sta windowOffs,x + sta r11H + jsr GetWorkArea + ldx activeWindow + jsr ReLoad + PopW r0 + jsr MyDispFiles + txa + beq @e30 + jsr FehlerAusgabe2 +@e30: rts + +MultiFileIcon: ;j +.incbin "topdesk/MultiFileIcon.bf" + + +PrintFlag: .byte 0 +PrintService: +DateiDrucken: lda #$ff + .byte $2c +DateiOeffnen: lda #0 + sta PrintFlag + jsr GotoFirstMenu + ldx MultiCount + dex + bmi @15 + bne @10 + jsr DispMarking + jsr GetMark + jsr GetFileName + bcs @15 + jmp OpenFile +@10: LoadB DialBoxFlag,0 + LoadWr0 NoMultiFileBox + jmp NewDoDlgBox +@15: rts +NoMultiFileBox: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte $0b,$10,$30 + .word @t3 + .byte OK,17,72 + .byte NULL +@t1: .byte BOLDON,"Diese Operation kann nicht",0 +@t2: .byte "mit Multi-File ausgef}hrt",0 +@t3: .byte "werden",0 + +;SizeRectangle +;Par: r0 - Zahl, die der Maximalgr|~e entspricht +; r1 - Darzustellende Zahl +; r2-r4 Rechteck +DispSizeRectangle: PushW r0 + lda messageBuffer+1 + asl + tax + lda maxAnz,x + sta r0L + sec + sbc freeAnz,x + sta r1L + lda maxAnz+1,x + sta r0H + sbc freeAnz+1,x + sta r1H + lda r3L + clc + adc #5 + sta r4L + lda r3H + adc #00 + sta r4H + jsr SizeRectangle + PopW r0 + rts + +DispJumpTable: + .repeat $500 + .byte 0 + .endrep + +.export __DISPJUMPTABLE__ := DispJumpTable + +MyDispFiles = DispJumpTable +DispFiles = MyDispFiles+3 +MyCheckFiles = DispFiles+3 +CheckFiles = MyCheckFiles+3 +GetFileRect = CheckFiles+3 +SortFileBuffer = GetFileRect+3 ; nur im Text-Modus +GetRealPos = SortFileBuffer+3 ; nur im Text-Modus + +GetFileName: ; Einlesen eines Filenames des aktuellen Fensters + ; Par: a : Nummer (0-143) + ; Ret: r0: Adresse (Name) + ; c = 1: Name mit Nummer a nicht vorhanden + ; (Dir hat weniger als a Files oder Diskettenfehler) + pha + jsr GetAktlDisk + tax + beq @05 + pla + sec + rts +@05: pla + sta r11H + LoadB Name,0 + ldx activeWindow + LoadB r11L,1 + LoadW___ r3,Name + ldy #3 +@dloop: lda @data,y + sta r12L,y + dey + bpl @dloop + lda aktl_Sub,x + sta r10L + jsr FindDirFiles + lda Name + beq @10 + ldy #15 +@loop: lda Name,y + cmp #$a0 + bne @f10 + dey + bpl @loop +@f10: lda #0 + sta Name+1,y + clc + rts +@10: sec + rts +@data: .byte %11000000,$80,16,4 + +File_Selected: ; Auswertung einer File-Selection + ; x: Nummer des Files in der Darstellung (0-15) + MoveB dblClickCount,a9L + stx a1L + ldx activeWindow + lda a1L + cmp fileNum,x + bcc @002 +@001: jsr EndGhost + jsr DispMarking + jmp ClearMultiFile +@0015: lda MultiCount + cmp #01 + bne @001 + jsr GetIndex + cmp MultiFileTab + beq @001 + jsr SwapFile + jmp @001 +@002: lda ghostFile + bne @0015 + ldx a1L + jsr TestCBMKey + bcc @003 + jmp Multi_Select +@003: lda a9L ; DoppelKlick ? + bne @004 ; >ja + txa + ldx activeWindow + jsr CheckDispMark + bcs @004 + jmp @p_d_k +@004: jsr DispMarking + jsr ClearMultiFile + jsr GetIndex + pha + jsr MarkFile + jsr DispMarking + lda a9L ; DoppelKlick? + bne @020 ; >ja + pla + sta @dbl + LoadB dblClickCount,20 +@112: rts +@dbl: .byte 0 +@020: pla + cmp @dbl ; DoppelKlick auf gleichem File? + bne @112 ; >nein + lda a1L + jsr GetName2 + LoadB PrintFlag,0 + jmp OpenFile +@p_d_k: ; Pause-Doppelklick + lda DispMode + beq @p10 + LoadW___ a2,TextSprite+1 + jmp @p20 +@p10: LoadB a2H,0 + sta a3H + lda a1L + sta a2L + LoadB a3L,64 + ldx #a2 + ldy #a3 + jsr DMult + ldx activeWindow + jsr GetWinTabAdr + AddVW__ FILE_ANZ*18+1,r1 + AddW r1,a2 +@p20: LoadB r3L,1 + MoveW_ a2,r4 + lda MultiCount + cmp #1 + beq @p20a + LoadW___ r4,MultiFileIcon+1 +@p20a: jsr DrawSprite + jsr InitForIO + jsr DoneWithIO + LoadB ghostFile,1 + jsr InitForIO + MoveB $d027,$d028 ; Farbe des Ghost-Sprites von Mauszeiger + jsr DoneWithIO + rts + +OpenFile: jsr ClearMultiFile2 + jsr MaxTextWin +@04: jsr GetAktlDisk + bcc @05 + rts +@05: LoadB a7L,0 + jsr CheckKlick + bcs @d10 + LoadB a7L,1 +@d10: jsr GetSubDirXList + LoadW___ r6,Name + MoveB PrintFlag,r1L + jsr NewGetFile + txa + bne @10a + jmp @10 +@10a: cmp #SUB_DIR + beq @10b + jmp @15 +@10b: lda a7L + beq @w10 + lda r10L + sta OpenNextNr+1 + jsr GetNext ; freie WindowNummer holen + bcc @11 + jmp @w09 ; >keine mehr frei +@11: stx @new + lda #0 + sta windowOffs,x + jsr GetSubDirXList + ldx activeWindow + lda SubDirListTabL,x + sta r1L + lda SubDirListTabH,x + sta r1H + ldy #63 +@w05: lda (r1),y + sta (r0),y + dey + bpl @w05 + lda @new + jsr GetWinName + jsr MoveWr1r0 + lda activeWindow + jsr GetWinName +@w07: lda (r1),y + sta (r0),y + dey + bpl @w07 + ldx activeWindow + ldy @new + lda winDrives,x + sta winDrives,y + tya + jsr GetSubName2 + lda r10L + sta OpenNextNr+1 + ldx activeWindow + jsr GetSubDirXList + jsr UpperDir + ldx @new + jsr OpenNextNr +@w08: LoadB OpenNextNr+1,0 + rts +@w09: ldx activeWindow + jsr GetSubDirXList + jsr UpperDir + LoadB OpenNextNr+1,0 + rts +@new: .byte 0 +@w10: ldx activeWindow + lda r10L + sta aktl_Sub,x + txa + pha + jsr GetSubName + pla + tax + jsr NewDirLoad + txa + beq @e10 + jsr FehlerAusgabe +@e10: ; rts +@10: +@14: rts +@15: cmp #14 ; INCOMPATIBLE + bne @16 + jsr StashMain + jsr TestTopDesk + bcs @18 + lda graphMode + eor #$80 + sta graphMode + jsr SetNewMode + jmp @04 +@16: cpx #15 + bne @17 + jsr SetNumDrives + jsr MaxTextWin + LoadWr0 @db + jmp NewDoDlgBox +@17: cpx #16 + bne @18 + jsr SetNumDrives + jsr MaxTextWin + LoadWr0 @db2 + jmp NewDoDlgBox +@18: ; bei x=18 ist auf RAM A und B kein DeskTop gewesen! + jsr SetNumDrives + rts +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte OK,17,72,NULL +@t1: .byte "Dieses Programm ist nur",0 +@t2: .byte "unter GEOS 64 lauff{hig.",0 +@db2: .byte $81 + .byte $0b,$10,$10 + .word @t1b + .byte $0b,$10,$20 + .word @t2b + .byte OK,17,72,NULL +@t1b: .byte "Programmstart von Laufwerk",0 +@t2b: .byte "C bzw. D nicht m|glich.",0 +activeFile: .byte $ff +Multi_Select: jsr InvertRectangle + ldx activeWindow + lda a1L + jsr CheckDispMark + bcc @10 + tax + jmp MarkFile +@10: tax + jmp UnMarkFile +TextSprite: +;j +.incbin "topdesk/TextSprite.bf" + +TestCBMKey: jsr InitForIO + LoadB $dc00,$7f + lda $dc01 + and #$20 + pha + jsr DoneWithIO + pla + clc + bne @10 + sec +@10: rts +GetIndex: ldx activeWindow + lda DispMode + beq @110 + lda a1L + jsr GetRealPos + tax + jmp @111 +@110: lda a1L + clc + adc windowOffs,x + tax +@111: rts + +GetName2: ; Kopieren des Namens Nr. a (0-15) des aktuellen Fensters nach Name + sta r0L + LoadB r0H,0 + LoadW___ r1,18 + ldx #r0 + ldy #r1 + jsr DMult + ldx activeWindow + jsr GetWinTabAdr + AddW r1,r0 + LoadW___ r1,Name + LoadB r2L,17 + jmp FormString + +CloseService2: LoadB messageBuffer,WN_CLOSE + MoveB activeWindow,messageBuffer+1 + tax + lda windowsOpen,x + bne CloseService + rts + +CloseService: jsr CheckKlick + bcc @05 + ldx messageBuffer+1 + lda aktl_Sub,x + bne @10 +@05: lda activeWindow + jsr GetWinName + lda #'x' + ldy #00 + sta (r1),y + jmp NormHandler +@10: jsr RemSubName + ldx messageBuffer+1 + jsr GetSubDirXList + jsr UpperDir + sta aktl_Sub,x + jsr NewDirLoad + txa + beq @e10 + jsr FehlerAusgabe +@e10: rts + +MarkFile: ; Markierung eines Files in der Multi-File-Tabelle + ; Par: x: Nummer des Files (0-143) + ldy MultiCount + txa + sta MultiFileTab,y + inc MultiCount + jmp DispMultiCount +UnMarkFile: ; L|schen der Markierung + ; Par: x: Nummer des Files (0-143) + ldy #144 ; Nummer in MultiFileTab suchen + txa +@10: cmp MultiFileTab-1,y + beq @20 + dey + bne @10 + rts +@20: lda MultiFileTab,y ; alle folgenden Eintr{ge nachr}cken + sta MultiFileTab-1,y + iny + cpy #144 + bne @20 + LoadB MultiFileTab+143,$ff + dec MultiCount + jmp DispMultiCount +ClearMultiFile2: txa + pha + jsr DispMarking + pla + tax +ClearMultiFile: ; x bleibt erhalten ! + ldy #145 + lda #$ff +@10: sta MultiFileTab-1,y + dey + bne @10 + LoadB MultiCount,0 + jmp DispMultiCount +GetMark: ; markierte Filenummer holen + ; Ret: a : Filenummer + lda MultiFileTab + bmi @10 + pha + tax + jsr UnMarkFile + ldx activeWindow + pla +@10: rts + +MultiFileFlag: .byte 0 +MultiCount: .byte 0 +CheckDispMark: ; Test ob File a markiert ist + ; Par: a: Nummer des Files (0-15) + ; x: Nummer des Windows + ; Ret: c: 0: Markierung vorhanden + ; 1: " nicht " + ; a: Filenummer (0-143) + ; x: unchanged + ; Des: y + pha + lda DispMode + beq @110 + pla + stx @x + jsr GetRealPos + ldx @x + jmp CheckMark +@x: .byte 0 +@110: pla + clc + adc windowOffs,x +CheckMark: ; Test ob File a markiert ist + ; Par: a: Nummer des Files (0-143) + ; Ret: c: 0: Markierung vorhanden + ; 1: " nicht " + ; a: unchanged + ; Des: y + ldy #144 +@10: cmp MultiFileTab-1,y + beq @20 + dey + bne @10 + sec + rts +@20: clc + rts +DispMultiCount: txa + pha + ldy #5 +@loop1: lda windowTop,y + pha + dey + bpl @loop1 + jsr MaxTextWin + lda #0 + jsr SetPattern + jsr i_Rectangle + .byte 2,12 + .word 222,236 + MoveB MultiCount,r0L + LoadB r0H,0 + LoadW___ r11,223 + LoadB r1H,9 + lda #%11000000 + jsr PutDecimal + ldy #0 +@loop2: pla + sta windowTop,y + iny + cpy #6 + bne @loop2 + pla + tax + rts + +NewDirLoad: ldx activeWindow + lda #0 + sta windowOffs,x + sta xOffsL,x + sta xOffsH,x + jsr ReLoad2 + bcs @10 + jsr Redraw + ldx #0 +@10: rts +MoveService: ; Verschieben/Kopieren von Files zwischen aktivem und + ; (messageBuffer+1)-Fenster mit Multi-File-Bearbeitung + LoadB DialBoxFlag,1 + PushB messageBuffer+1 + MoveB activeWindow,messageBuffer+1 + jsr DispMarking + PopB messageBuffer+1 + LoadB a8L,0 + ldx messageBuffer+1 + jsr GetWinDisk ; Kopieren ? + beq @05 ; >nein + LoadB DialBoxFlag,120 +@03: LoadB a8L,1 + bne @10 +@05: LoadW___ r2,MultiFileTab + jsr BubbleSort +@10: jsr GetMark + tax + bpl @c00 + jmp @20 +@c00: pha + ldy a8L + bne @c01 + jmp @c20 +@c01: jsr CopyService + bcc @c05 + LoadB DialBoxFlag,120 + bne @c10 +@c05: lda MultiFileTab + bpl @c20 +@c10: jsr ClearMultiFile + LoadB MyCurRec,0 + jsr SetCopyMemLow + ldx DialBoxFlag + cpx #120 + beq @c20 + PushB messageBuffer+1 + jsr RecoverLast + PopB messageBuffer+1 +@c20: pla + tax + ldy a8L + bne @10 + jsr GetFileName + bcc @c20a +@err2: jsr FehlerAusgabe + jsr ClearMultiFile + jmp @10 +@c20a: ldx messageBuffer+1 + lda aktl_Sub,x + sta r10L + LoadW___ r6,Name + jsr FindFile + txa + bne @err2 + lda $8400+22 + cmp #11 ; Directory + bne @d05 + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr GetBlock + lda $8000+OFF_DIR_NUM + jsr CheckDirNum + bcs @d10 +@d05: LoadW___ r6,Name + jsr MoveFileInDir + txa + bne @err2 +@d10: jmp @10 +@20: LoadB DialBoxFlag,0 + lda activeWindow + pha + ldx messageBuffer+1 + jsr GetDisk + txa + beq @e10 +@err: pla + jmp FehlerAusgabe +@e10: ldx messageBuffer+1 + jsr ReLoad2 + bcs @err + ldx messageBuffer+1 + sec + jsr FrontWindow + ldy a8L + beq @010 + pla + tax + clc + jsr FrontWindow + jmp @020 +@010: pla + pha + tax + jsr ReLoad2 + bcs @err + pla + tax + sec + jsr FrontWindow +@020: ldx #0 + stx ghostFile + lda #1 + sta r3L + jsr DisablSprite +DoHauptMenu: php + sei + PushW $3a + PushB $3c + LoadWr0 HauptMenu + jsr DoMenu + PopB $3c + PopW $3a + plp + rts +CheckDirNum: sta r1L + ldx messageBuffer+1 + jsr GetSubDirXList + ldy #0 +@loop: lda (r0),y + bmi @geht + cmp r1L + beq @gehtnicht + iny + bne @loop +@geht: clc + rts +@gehtnicht: sec + rts + +.include "topdesk/Include/DeskMain2.inc" diff --git a/topdesk/Main/DeskTop.sub.s b/topdesk/Main/DeskTop.sub.s new file mode 100644 index 00000000..b06e10f9 --- /dev/null +++ b/topdesk/Main/DeskTop.sub.s @@ -0,0 +1,348 @@ +; n "DeskMod A" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + +.segment "OVERLAY1" + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 + + + jmp DeskDosNew + jmp _Validate + rts + .word 0 +; jmp GetWindowStat + jmp GetDDrivers +INV_TRACK = 2 +GetDDrivers: lda ramExpSize + beq @noram +@rts: rts +@noram: lda c128Flag + bmi @rts ; C128 hat seine Driver schon + lda driveType + cmp driveType+1 ; zwei Gleichartige Laufwerke ? + beq @rts ; >ja + lda driveType + cmp curType + bne @10 + lda driveType+1 +@10: pha + jsr GetDriver ; Treiber nach $7200 laden + txa + beq @20 + LoadB DiskDriverFlag,$80 +@20: pla + sta DiskDriverFlag + rts +GetDriver: ; Par: a - DriveTyp + pha + jsr MaxTextWin + pla + pha + tax + dex + bne @10 + LoadB DriverType,$34 + bne @30 +@10: dex + bne @20 + LoadB DriverType,$37 + bne @30 +@20: ;dex + ;bne :flash + LoadB DriverType,$38 +; bne @30 +@30: LoadW___ r6,DriverName + jsr FindFile + txa + beq @40 + LoadB r7L,14 ; autoexec + LoadB r7H,1 + LoadW___ r10,KonfClass + LoadW___ r6,KonfName + jsr FindFTypes + txa + bne @34 + lda r7H + bne @34 + LoadW___ r6,KonfName + jsr FindFile + txa + beq @35 +@34: pla + LoadB numDrives,1 + tax + rts +@35: MoveW_ $8401,r1 + LoadW___ r4,$8000 + jsr GetBlock + pla + asl + tax + lda $8004,x + sta r1L + lda $8005,x + sta r1H + jmp @45 +@40: pla + MoveW_ $8401,r1 +@45: LoadW___ r7,$7200 + LoadW___ r2,$d90 + jsr ReadFile + txa + bne @50 + LoadB CopyMemHigh,$71 + ldx #0 +@50: rts +DriverName: .byte "Drive 15" +DriverType: .byte "x1",0 +KonfClass: .byte "Configure",0 +DeskDosNew: jsr DeskDosSub1 + jsr DosNew + ldx activeWindow + jsr GetSubDirXList + jsr ClearList + ldx activeWindow + lda #0 + sta aktl_Sub,x ; aktl Ebene setzen +@loop: jsr RemSubName ; alle SubDir-namen entfernen + bcc @loop + LoadB DialBoxFlag,0 + jmp RecoverActiveWindow + +DeskDosSub1: LoadB DialBoxFlag,25 ; irgendein Wert, m|glichst hoher Wert + jsr GotoFirstMenu + jsr GetAktlWinDisk + LoadW___ r6,DiskName+2 + lda DiskName + tax + lda driveType-65,x + sta r7L + rts +_Validate: jsr ClearMultiFile2 + jsr GetAktlDisk + tax + bne @err + jsr Validate + txa + beq @10 +@err: cpx #12 + beq @10 + jmp FehlerAusgabe +@10: jmp ReloadActiveWindow +;DosNew +;l|scht eine Diskette +;Par: r6 - name der Diskette +;Ret: x - Fehlernummer +;Des: a,y,r0-r15 +DosNew: + jsr SearchDisk + txa + bne @end + LoadW___ r0,@box + jsr NewDoDlgBox + ldy r0L + cpy #CANCEL + beq @canceled + jsr ClearBAM + lda curType + jsr Get1stDirBlock + LoadW___ r4,diskBlkBuf + jsr EnterTurbo + txa + bne @20 + jsr InitForIO +@10: jsr ReadBlock + txa + bne @20 + ldy #2 +@15: lda #0 + sta diskBlkBuf,y + tya + clc + adc #32 + tay + bcc @15 + jsr WriteBlock + txa + bne @20 + lda diskBlkBuf+1 + sta r1H + lda diskBlkBuf + sta r1L + bne @10 +@20: jsr DoneWithIO + jmp PutDirHead +@canceled: ldx #CANCEL_ERR +@end: rts +@box: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0c,$10,$20,r6 + .byte $0b,$10,$30 + .word @t2 + .byte OK + .byte 4,72 + .byte CANCEL + .byte 17,72 + .byte NULL +@t1: .byte "Inhalt von",NULL +@t2: .byte "l|schen?",NULL + +.include "topdesk/DeskInclude/Validate+Undelet.inc" +.if 0 +:GetWindowStat lda #9 + jsr SetDevice + LoadW___ r6,StatName + jsr FindFile + txa + beq @05 + rts +@05: MoveW_ $8401,r1 + LoadW___ r7,$6800 + LoadW___ r2,$200 + jsr ReadFile + ldy #0 +@loop: lda $6800,y + sta SubDir1List,y + dey + bne @loop +; jsr i_MoveData +; .word $6940,windowsOpen,4 + LoadW___ a2,$6800+$f0 + LoadW___ a3,SubDir4List + LoadB a4L,4 + jsr @sub + LoadW___ a3,SubDir3List + jsr @sub + LoadW___ a3,SubDir2List + jsr @sub + LoadW___ a3,SubDir1List + jsr @sub + jsr i_MoveData + .word $6940+4,WindowTab,6 + jsr i_MoveData + .word $6940+4+6,WindowTab+11,6 + jsr i_MoveData + .word $6940+4+12,WindowTab+22,6 + jsr i_MoveData + .word $6940+4+18,WindowTab+33,6 + jmp RedrawAll + +@sub: ; Par: a2 - DiskName - $10 + ; a3 - Zeiger auf SubDirXList + ; a4L WindowNummer + 1 + AddVW__ $10,a2 + dec a4L + ldy a4L + lda $6940,y + bne @s05 + rts +@s05: ldy #16 +@loop2: lda (a2),y + sta DiskName,y + dey + bpl @loop2 + LoadW___ r6,DiskName + jsr SearchDisk + txa + bne @err + ldx a4L + jsr GetDiskName + ldy #1 +@loop3: sty a4H + lda (a3),y + bmi @endloop + ldx a4L + sta aktl_Sub,x ; aktl Ebene setzen + jsr GetDirName + txa + bne @err + lda a4L + jsr GetSubName2 + ldy a4H + iny + bne @loop3 +@endloop: ldx a4L + jsr ReLoad2 + ldx a4L + jsr DrawWindowB + ldx #0 + rts +@err: inc 53280 + rts +GetDirName: ; Errmitteln eines Directory-Namens + ; Par: a - Nummer + ; Ret: Name + sta :num + jsr i_FillRam + .word $0b00,$7000 + .byte 0 + LoadW___ r3,$7000 + ldy #7 +@dloop: lda @data,y + sta r10L,y + dey + bpl @dloop + jsr FindDirFiles + LoadW___ a5,$7000 +@loop: ldy #16 + lda (a5),y + beq @endloop + sta r1L + iny + lda (a5),y + sta r1H + LoadW___ r4,$8000 + jsr GetBlock + lda $8000+OFF_DIR_NUM + cmp @num + beq @habsie + AddVW__ 18,a5 + jmp @loop +@endloop: ldx #1 + rts +@habsie: ldy #0 +@hloop: lda (a5),y + sta Name,y + iny + cpy #16 + bne @hloop + ldx #0 + rts +@num: .byte 0 +@data: .byte %10000000,0,144,0,%11000000,11,18,4 +.endif +KonfName: diff --git a/topdesk/Main/DeskTop.sub10.s b/topdesk/Main/DeskTop.sub10.s new file mode 100644 index 00000000..3825802d --- /dev/null +++ b/topdesk/Main/DeskTop.sub10.s @@ -0,0 +1,458 @@ +.segment "OVERLAY10" +; n "DeskMod J" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +.global fileNum +.global GetWinTabAdr +.global NewPutDecimal + +.global GetWinName +.global GetEqualWindows +.global MyCurRec +.global NewSetDevice +.global Start2 +.global SetCopyMemLow +.global NewGetFile +.global GetPrefs2 +.global GetIconService +.global DispJumpTable +.global DeskOther +.global newAppMain +.global DeskMain +.global NewDoIcons +.global IconTab +.global SetNumDrives +.global KeyHandler +.global backPattern +.global RedrawHead +.global DoWindows +.global WindowTab +.global windowsOpen +.global RamTopFlag +.global PrintDriveNames +.global RedrawAll +.global FileClassNr + +.global NewSearchDisk +.global GetWinDisk + +.global CopyService +.global FindDirFiles +.global MoveFileInDir +.global subTab + +.global Start +.global RegBuf +.global FileTab1 +.global PruefSumme +.global RamStart +.global ModStartAdress +.global MainAdr +.global MyName +.global SearchDeskTop + + + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 +Name2 = DiskName + 19 + + jmp MakeRamTop + jmp LoadRest + jmp StashMain +MakeRamTop: lda RamTopFlag + beq @geht + ldy #6 +@dl: lda @dd,y + sta r0L,y + dey + bpl @dl + jsr StashRAM + lda curDrive + and #%00001101 + jsr SetDevice + LoadW___ $88ee,$ffa0 ; DrDCurDkNm + jmp EnterDeskTop +@dd: .word $0400,$0400,$3900-$400 ; MoveData-Bereich einfach + .byte 0 ; ]berschreiben +@gehtnicht: ldx #13 + rts +@geht: lda ramExpSize + beq @gehtnicht + LoadB RamTopFlag,1 + jsr SearchDeskTop + bcc @10 + rts +@10: MoveB RamTopFlag,$8090 + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr PutBlock + LoadWr0 MyName + jsr OpenRecordFile + lda #1 + jsr PointRecord + LoadW___ a0,$0420 + LoadB a1L,0 + +@loop: LoadW___ r7,DataSpace + LoadW___ r2,$2000 + jsr ReadRecord + SubVW_ DataSpace,r7 + LoadW___ r0,DataSpace + MoveW_ a0,r1 + MoveW_ r7,r2 + LoadB r3L,0 + jsr StashRAM + jsr @stashadr + AddW r7,a0 + jsr NextRecord + txa + beq @loop + jsr @stashadr + MoveB a0L,StashMainAdr + sta MainAdr + MoveB a0H,StashMainAdr+1 + sta MainAdr+1 + ldy #6 +@dloop: lda @data,y + sta r0L,y + dey + bpl @dloop + jsr StashRAM + lda sysRAMFlg ; REU-MoveData ausschalten + and #$7f + sta sysRAMFlg + jsr i_MoveData + .word NewGetModule,SearchDeskTop,NewGetModuleEnd-NewGetModule + jmp StashMain +@stashadr: ldy a1L + lda a0L + sta ModTab,y + iny + lda a0H + sta ModTab,y + iny + sty a1L + rts +@data: .word StashMainAdr,$0400,$1e + .byte 0 +StashMainAdr: .word 0 +ModTab: .word 0,0,0,0,0,0,0,0,0,0,0,0 + + +; NewGetModule mu~ positionsunabh{ngig sein! +NewGetModule: rts ; f}r SearchDeskTop-Einsprung + nop + nop + ; Par: a - Modulnummer + ; Ret: r7 - Adresse des letzten geladenen Byte +1 + cmp MyCurRec ; eigentlicher GetModule-Einsprung + bne @nichtmehrda + clc + rts +@nichtmehrda: sta MyCurRec + pha + MoveW_ ModStartAdress,r0 + LoadW___ r1,$0400 + LoadB r2L,$1e + LoadB r2H,0 + sta r3L + jsr FetchRAM + pla + asl + tay + lda (r0),y + sta r1L + iny + lda (r0),y + sta r1H + iny + lda (r0),y + sec + sbc r1L + sta r2L + iny + lda (r0),y + sbc r1H + sta r2H +; MoveW_ ModStartAdress,r0 ; noch gesetzt +; LoadB r3L,0 + jsr FetchRAM + lda r0L + clc + adc r2L + sta r7L + lda r0H + clc + adc r2H + sta r7H + clc + rts +NewGetModuleEnd: + +SearchRAMDisk: ldy #8 ; SearchRAMDisk + 2 = :loop !! +@loop: lda driveType-8,y + beq @keinsda + bmi @habeins + iny + bne @loop +@keinsda: ldx #13 ; DEV_NOT_FOUND + rts +@habeins: tya + jsr NewSetDevice + jmp OpenDisk +StashMain: LoadB r2H,$78 + lda c128Flag + bpl @64 + LoadB r2H,$38 +@64: LoadB r2L,$ff + MoveW_ MainAdr,r1 + LoadW___ r0,$400 + SubW r1,r2 + MoveW_ r1,TopMainAnf + MoveW_ r2,TopMainLen + LoadW___ r1,$100 + LoadW___ r0,RamStart + jsr CRC + MoveW_ r2,PruefSumme + LoadW___ r0,$400 + MoveW_ TopMainAnf,r1 + MoveW_ TopMainLen,r2 + jsr StashRAM + PushB curDrive + jsr SearchRAMDisk + txa + beq @05 + jmp @gehtnicht +@d: .byte 0 +@05: LoadB @d,0 + LoadW___ r6,MyName + jsr FindFile + txa + bne @06 + lda r5L + cmp #2 + beq @05a + DecW r5 + jmp @05b +@05a: AddVW__ $1e,r5 +@05b: ldy #0 + lda (r5),y + sta @d + LoadW___ r6,MyName + LoadB r10L,0 + jsr MoveFileInDir + LoadW___ r0,MyName + jsr DeleteFile +@06: LoadW___ r9,TopInfo + LoadB r10L,0 + jsr SaveFile + txa + beq @ne1 + jmp @err +@err2: jsr CloseRecordFile +@err: LoadW___ r6,MyName + LoadB r10L,0 + jsr MoveFileInDir + LoadW___ r0,MyName + jsr DeleteFile + ldy curDrive + iny + jsr SearchRAMDisk+2 + txa + bne @ne0 + jmp @05 +@ne0: jmp @gehtnicht +@ne1: LoadW___ r6,MyName + MoveB @d,r10L + jsr MoveFileInDir + LoadW___ r0,MyName + jsr OpenRecordFile + jsr AppendRecord + LoadW___ r7,NewEDT128 + LoadW___ r2,NewEDT128Len + jsr WriteRecord + txa +@err1: bne @err2 + jsr AppendRecord + MoveB TopMainLen,r7L ; LadeAdr = Stashl{nge + $400 + lda TopMainLen+1 + clc + adc #4 + sta r7H + PushW r7 + lda #FileTab1 + sbc r7H + sta r2H + bmi @10 ; kein 2. Datensatz erzeugen + jsr WriteRecord + txa + beq @10 + pla + pla + jmp @err1 +@10: jsr CloseRecordFile + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr GetBlock + LoadB $8047,NewEDT128 + sta $804c + LoadB $8060,$40 ; lauff{hig unter Geos 64 u. 128 (40/80) + lda #0 + sta $8061 ; kein Autor + sta $80a0 ; kein Infotext + PopW $8086 ; Ladeadresse 2. Datensatz + jsr PutBlock +@gehtnicht: stx @x + pla + jsr NewSetDevice +@20: ldy #r15-2 +@loop: lda RegBuf,y + sta r0L,y + dey + bpl @loop + ldx @x + rts +@x: .byte 0 +TopInfo: .word MyName + .byte 3,21 + ;j +.incbin "topdesk/Temp.bf" + .byte $83,6,1 + .word 0,0,0 + .byte "TopDeskTemp V1.0",0 + +LoadRest: LoadW___ r6,MyName + jsr FindFile + txa + beq @10 + rts ; Load NormTopDesk +@10: MoveW_ $8400+19,r1 + LoadW___ r4,$8100 + jsr GetBlock + PushW $8186 + LoadW___ r0,MyName + jsr OpenRecordFile + jsr NextRecord + PopW r7 + LoadW___ r2,-1 + jsr ReadRecord + jmp Start + +NewEDT128: +@05: ldx #6 +@loop2: lda TopData,x + sta r0L,x + dex + bpl @loop2 + jsr FetchRAM + txa + bne @NormTop + LoadW___ r1,$100 + LoadW___ r0,RamStart + jsr CRC + CmpW r2,PruefSumme + bne @NormTop +@10: jmp RamStart +@name: .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +@NormTop: ldy #0 +@loop: lda $8400+3,y + cmp #$0a + beq @03 + sta @name,y + iny + cpy #16 + bne @loop +@03: lda #0 + sta @name,y + LoadW___ r0,@name + jsr DeleteFile + LoadW___ $88ee,$ffa0 ; DrDCurDkNm + jmp EnterDeskTop +TopData: .word $0400 +TopMainAnf: .word 0 +TopMainLen: .word 0 + .byte 0 +NewEDT128End: +NewEDT128Len = NewEDT128End-NewEDT128 + +DataSpace: diff --git a/topdesk/Main/DeskTop.sub2.s b/topdesk/Main/DeskTop.sub2.s new file mode 100644 index 00000000..7ceebfc8 --- /dev/null +++ b/topdesk/Main/DeskTop.sub2.s @@ -0,0 +1,218 @@ +.segment "OVERLAY2" + +; n "DeskMod B" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 +Name2 = DiskName + 19 + +; jmp SelectPage + nop + nop + nop + jmp EmptyAllDirs + jmp DispInfo + jmp Rename + jmp Duplicate +; jmp SelectAll +DispInfo: LoadW___ r0,@db + jmp NewDoDlgBox +@db: .byte $01 + .byte 32,138 + .word 54,265 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte $0b,$10,$30 + .word @t3 + .byte $0b,$10,$30+10 + .word @t4 + .byte $0b,$10,$30+20 + .word @t5 + .byte $0b,$0a,$5e + .word @t7 + .byte $0e,NULL +@t1: .byte BOLDON,"TopDesk",PLAINTEXT," Version 1.2",0 +@t2: .byte "geschrieben von",BOLDON,0 +@t3: .byte "Walter Knupe",0 +@t4: .byte "H.J. Ciprina",0 +@t5: .byte "Volker Goehrke",PLAINTEXT,0 +@t7: .byte "(C) 1991 by GEOS-USER-CLUB, GbR",0 + +EmptyAllDirs: rts +.if 0 + jsr GotoFirstMenu + jsr GetAktlDisk +@05: lda curDirHead + bne @10 + jsr GetDirHead + jmp ReLoadAll +@10: sta r1L + MoveB curDirHead+1,r1H + LoadW___ r4,$8000 + jsr GetBlock + lda #00 + sta $8020 + ldy #$21 +@20: lda #00 + sta $8000,y + tya + clc + adc #$20 + bcs @30 + tay + bne @20 +@30: jsr PutBlock + MoveW_ $8000,curDirHead + jmp @05 +.endif +RenameFlag: .byte 0 +Duplicate: ldx MultiCount + dex + bpl @geht + rts +@geht: lda #$ff + bne RenameDupl +Rename: ldx MultiCount + dex + bpl @geht + rts +@geht: lda #0 +RenameDupl: sta RenameFlag + jsr GetAktlDisk + tax + beq @05 + jsr ClearMultiFile2 + cpx #12 + beq @15 + jmp FehlerAusgabe +@05: LoadW___ r2,MultiFileTab +@10: jsr GetMark + tax + bmi @20 + jsr GetFileName + jsr MyRename + bcc @10 +@15: rts +@20: LoadB DialBoxFlag,0 + jmp RecoverActiveWindow + +MyRename: lda RenameFlag + beq @05 + LoadW___ r6,Name + jsr FindFile + txa + bne @err + lda $8400+22 + cmp #11 ; Directory + bne @05 + ldx #10 + bne @err +@05: LoadB @t2,0 + ldy #0 +@10: lda Name,y + sta Name2,y + beq @20 + iny + bne @10 +@20: LoadB DialBoxFlag,2 + LoadW___ a1,Name2 + LoadW___ r0,@db + jsr NewDoDlgBox + lda r0L + cmp #2 + bne @22 + clc + rts +@22: LoadW___ r6,Name2 + jsr FindFile + txa + beq @schonda + cpx #5 + beq @geht +@err: jsr FehlerAusgabe + sec + rts +@schonda: LoadB @t2,BOLDON + bne @20 +@geht: lda RenameFlag + beq @25 + LoadW___ r12,Name ; Filename + LoadW___ r10,DiskName+2 ; SourceDisk (ohne 'x:') + MoveW_ r10,r11 + LoadW___ r13,Name2 ; NewFilename + ldx messageBuffer+1 + lda aktl_Sub,x + sta DestinationDir ; Ziel-Dir setzen + PushB CopyMemLow + LoadB CopyMemLow,<(DuplCopyMem) + jsr CopyFile + PopB CopyMemLow + txa + bne @err + clc + rts + +@25: LoadW___ r0,Name2 + LoadW___ r6,Name + jsr RenameFile + txa + beq @30 + jmp @err +@30: clc + rts +@db: .byte $81 + .byte $0b,$10,$10 + .word @t2 + .byte $0b,$10,$20 + .word @t1 + .byte $0d,$10,$35,a1,16 + .byte $02,17,72 + .byte NULL +@t1: .byte "Neuen Filenamen eingeben:",0 +@t2: .byte 0,"Name schon vergeben!",PLAINTEXT,0 + +ModEnde: +DuplCopyMem = >(ModEnde+$100) diff --git a/topdesk/Main/DeskTop.sub3.s b/topdesk/Main/DeskTop.sub3.s new file mode 100644 index 00000000..3d06b0ef --- /dev/null +++ b/topdesk/Main/DeskTop.sub3.s @@ -0,0 +1,752 @@ +.segment "OVERLAY3" + +; n "DeskMod C" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + jmp GetTime +; jmp Ordnen +; jmp _ThreeDrives + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global MultiFileTab +.global Loadr0AX + + +KEY_RIGHT = 30 +KEY_LEFT = 8 +KEY_DELETE = 29 +CR = $0d +month = $8517 +year = $8516 +hour = $8519 +minutes = $851a + +Ordnen: ; alle selektierten Files nach vorne ins Inhaltsverzeichnis ordnen + ; 1. Dir-Track einlesen + tsx + stx @sp + jsr GetAktlDisk + tax + beq @10 +@err: txa + ldx @sp + txs + tax + jsr ClearMultiFile2 + cpx #12 + beq @05 + jmp FehlerAusgabe +@05: rts +@sp: .byte 0 +@10: lda curDirHead+189 + cmp #$50 + beq @11 + cmp #$42 + bne @12 +@11: LoadWr0 @db + jsr NewDoDlgBox + ldx #12 + bne @err +@12: ldx activeWindow + lda aktl_Sub,x + sta @dir + MoveW_ curDirHead,r1 + LoadW___ r4,DataSpace + lda #$fe + pha +@loop: jsr GetBlock + txa + bne @err + ldy #0 + lda (r4),y + pha + sta r1L + lda #0 + sta (r4),y + iny + lda (r4),y + pha + sta r1H + ldy #$20 + lda (r4),y + tax + lda #0 + sta (r4),y + ldy #1 + txa + sta (r4),y + dey + tya + sta (r4),y + ldy r4H + iny + cpy CopyMemHigh + bcc @20 + ldx #11 +@err2: bne @err +@20: sty r4H + lda r1L + bne @loop + lda isGEOS + bne @30 + dec r4H + bne @40 +@30: MoveB curDirHead+171,r1L + pha + MoveB curDirHead+172,r1H + pha + jsr GetBlock + txa +@err4: bne @err2 +@40: ; 2. Ordnen + ldy #0 +@loop2: lda MultiFileTab,y + bmi @50 + iny + bne @loop2 +@50: cpy #0 + beq @65 + dey +@loop3: lda MultiFileTab,y + sta r5H + lda #$ff + sta MultiFileTab,y + sty r5L + lda r5H + jsr @sub + ldy #0 +@loop4: lda MultiFileTab,y + bmi @63 + cmp r5H + bcs @60 + clc + adc #1 + sta MultiFileTab,y +@60: iny + bne @loop4 +@63: ldy r5L + dey + cpy #$ff + bne @loop3 + ; 3. Dir-Track wieder schreiben +@65: lda isGEOS ; Borderblock + bpl @71 + pla + sta r1H + pla + sta r1L + ; r4 ist noch gesetzt + jsr PutBlock + txa +@err3: bne @err4 + dec r4H +@71: ldy #1 + lda (r4),y + ldy #$20 + sta (r4),y + ldy #1 + pla + sta (r4),y + pla + dey + sta (r4),y ; $00,$ff Setktorverkettung des letzten DirBlks +@loop5: dec r4H + pla + cmp #$fe + bne @75 + inc r4H + MoveW_ curDirHead,r1 + jsr PutBlock + txa + bne @err3 + beq @end +@75: pha + ldy #1 + lda (r4),y + ldy #$20 + sta (r4),y + ldy #1 + pla + sta r1H + sta (r4),y + dey + pla + sta r1L + sta (r4),y + inc r4H + jsr PutBlock + dec r4H + txa + bne @err3 + beq @loop5 +@end: jsr ClearMultiFile + jmp ReloadActiveWindow +@dir: .byte 0 +@sub: ; File Nr. a des Ordners :dir ordnen + tax + inx + LoadW___ r0,DataSpace +@sloop: ldy #02 + lda (r0),y + bne @s04 + dey + lda #0 + sta (r0),y ; bei gel|schten Files 0 als DirNum schreiben + beq @s05 ; und nicht mitz{hlen +@s04: dey + lda (r0),y + cmp @dir + bne @s05 + dex + beq @habs +@s05: AddvW $20,r0 + jmp @sloop +@habs: LoadW___ r1,$8000 + LoadW___ r2,$20 + jsr MoveData ; zu ordnenden Fileeintrag merken + lda r0L + sec + sbc #DataSpace + sta r2H + LoadB r0L,DataSpace + adc #0 + sta r1H + jsr MoveData + jsr i_MoveData + .word $8000,DataSpace,32 + rts +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte $0b,$10,$30 + .word @t3 + .byte OK,17,72,NULL +@t1: .byte "Diese Operation darf nicht auf",0 +@t2: .byte "System- oder Hauptdisketten",0 +@t3: .byte "angewendet werden.",0 +GetTime: LoadB ModDepth,1 + jsr StopClock + jsr MouseOff + ldx #1 + jsr BlockProcess + MoveW_ keyVector,Oldkey + LoadW___ keyVector,Mykey + LoadB Obergrenze,$33 + ldx #0 + stx TabZeiger + LoadB TagZehner-1,REV_ON + jsr ShowClock +@20: rts +Oldkey: .word 0 +; Mykey +Mykey: lda keyData + cmp Obergrenze + bgt @5 + cmp #$30 + blt @5 + pha + jsr SetPlain + pla + sta TagZehner,x + jmp @7 +@5: cmp #KEY_RIGHT + bne @10 + jsr SetPlain +@7: iny + cpy #10 + bne @15 + ldy #0 +@15: jmp SetRev +@10: cmp #KEY_DELETE + beq @11 + cmp #KEY_LEFT + bne @100 +@11: jsr SetPlain + dey + bpl @25 + ldy #9 +@25: jmp SetRev +@100: cmp #CR + bne @1000 + jsr SetPlain + jsr TestTime + beq @120 + tya + pha + lda #2 + jsr Beep + pla + tay + jmp SetRev +@120: jsr RunClock + jsr ShowClock + jsr MouseUp + ldx #1 + jsr UnblockProcess + MoveW_ Oldkey,keyVector + LoadB ModDepth,0 +@1000: rts +DPA = $dc00 +ampm: .byte 0 + +SetTime: + jsr InitForIO + lda TagZehner + ldx TagEiner + jsr ASCDEZ + sta day + lda MonZehner + ldx MonEiner + jsr ASCDEZ + sta month + lda JahZehner + ldx JahEiner + jsr ASCDEZ + sta year + LoadB ampm,0 + lda StdZehner + ldx StdEiner + jsr ASCDEZ + cmp #24 + bne @ci + lda #0 +@ci: sta hour + cmp #12 + blt @am + pha + LoadB ampm,$80 + pla + sec + sbc #12 +@am: jsr DezBCD + clc + adc ampm + sta DPA+$0b + + lda MinZehner + ldx MinEiner + jsr ASCDEZ + sta minutes + jsr DezBCD + sta DPA+$0a + rts +RunClock: + jsr SetTime + lda #$00 + sta DPA+$09 + sta DPA+$08 + jsr DoneWithIO + rts + + +SetPlain: + ldy TabZeiger + ldx RevTab,y + lda #PLAINTEXT + sta TagZehner-1,x + rts + +SetRev: + ldx RevTab,y + lda #REV_ON + sta TagZehner-1,x + sty TabZeiger + jsr SetTime + jsr DoneWithIO + jsr SetObUn + jmp ShowClock + +SetObUn: + ldy TabZeiger + lda ObTab,y + sta Obergrenze + rts + +ObTab: .byte $33,$39,$31,$39 + .byte $39,$39,$32,$39,$35,$39 + + +;ASCDEZ +; a High +; x Low +; Return a + +ASCDEZ: + sec + sbc #$30 + sta @Dings + asl + asl + asl + clc + adc @Dings + adc @Dings + sta @Dings + txa + sec + sbc #$30 + clc + adc @Dings + rts + +@Dings: .byte 0 +StopClock: + jsr InitForIO + LoadB ampm,0 + lda hour + cmp #12 + blt @am + LoadB ampm,$80 + lda hour + sec + sbc #12 +@am: + jsr DezBCD + clc + adc ampm + sta DPA+$0b + jsr DoneWithIO + rts + +DezBCD: + sta r0L + LoadB r0H,0 + ldx #r0L + LoadW___ r1,10 + ldy #r1L + jsr Ddiv + lda r0L + asl + asl + asl + asl + clc + adc r8L + rts +; TestTime +; ]berpr}fung +; return +; a = 0 OK +; a = $ff false; y Wert f}r TabZeiger + +TestTime: + lda day + bne @10 + ldy #1 +@00: + lda #$ff + rts +@10: cmp #32 + blt @05 + ldy #0 + beq @00 + +@05: lda month + bne @20 +@31: ldy #3 + bne @00 +@20: cmp #13 + blt @30 + ldy #2 + bne @00 +@30: cmp #2 ; Feb + bne @40 + lda day + cmp #29 + beq @35 + bgt @31 + jmp @th +@35: lda year + ror ; /2 + bcc @32 +@33: ldy #1 + jmp @00 +@32: ror ; /4 + bcs @33 + jmp @th +@40: cmp #8 + bge @45 + ror + bcc @42 +@43: jmp @th ; ungerade +@42: lda day + cmp #31 + bne @43 + ldy #1 + jmp @00 +@45: ror + bcs @42 +@th: clc + lda hour + cmp #24 + bge @th1 + lda #$00 + rts +@th1: ldy #6 + jmp @00 +; Beep +; a - Anzahl Beep +Beep: sta @AnzBeep + jsr InitForIO + lda #$0f + sta $d418 + lda #$00 + sta $d405 + lda #$f7 + sta $d406 + lda #$11 + sta $d404 + lda #$32 + sta $d401 + lda #$00 + sta $d400 +@10: lda #$0f + sta $d418 + jsr @Wait + lda #$00 + sta $d418 + jsr @Wait + dec @AnzBeep + bne @10 + lda #$10 + sta $d404 + lda #$00 + sta $d418 + jsr DoneWithIO + rts +@Wait: ldy #$80 +@loop1: ldx #$ff +@loop2: dex + bne @loop2 + dey + bne @loop1 + rts +@AnzBeep: .byte 2 +TabZeiger: + .byte 0 +RevTab: + .byte 0,2,6,8,12,14 + .byte 23,25,29,31 +OldmouseOn: + .byte 0 +Obergrenze: + .byte "3" +.if 0 +; kann in DiskDriver Lfwk 2 No Ram Disk +ThreeDrives: + rts + jsr GetAktlDisk + PushW r15 + jsr :Appl2 + PopW r15 + rts +@Appl2: bit ChangeDiskFlag + bmi @Appl10 + rts + +@Appl10: ldy curDrive + lda @DrDialTabLo-8,y + sta @Appl3 + lda @DrDialTabHi-8,y + sta @Appl3+1 + lda @DrDialCountTabLo-8,y + sta @Appl4 + lda @DrDialCountTabHi-8,y + sta @Appl4+1 + jsr i_MoveData +@Appl3: .word 0 + .word @V1 +@Appl4: .word 0 + lda curDrive +; sta @MycurDrive + cmp #10 + bne @Appl5 + ora #$80 +@Appl5: sta @MycurDrive + lda curDrive + clc + adc #$41-8 + sta @Zeile2_1 + LoadW___ r0,DrACurDkNm + LoadW___ r1,@DrANm + LoadB r2L,17 + jsr FormString + LoadW___ r0,DrBCurDkNm + LoadW___ r1,@DrBNm + jsr FormString + LoadW___ r0,DrCCurDkNm + LoadW___ r1,@DrCNm + jsr FormString + + LoadW___ r0,@ChangeDial + jsr NewDoDlgBox + lda r0L + cmp #YES ; A <-> C + bne @Appl1 + lda #8 + jsr ChangeC + jmp @Appl7 +@Appl1: cmp #DISK ; B <-> C + bne @Appl6 + lda #9 + jsr ChangeC +@Appl7: jsr OpenDisk + lda @MycurDrive + bmi @DA ; Drive C ausgetauscht + bpl @DA1 +@Appl6: lda @MycurDrive + bpl @DA1 + and #%01111111 +@DA1: sta @MycurDrive +@DA: lda @MycurDrive + jsr SetDevice + jsr OpenDisk + rts +@DrDialTabLo: + .byte <@ChBC,<@ChAC,<@ChAC +@DrDialTabHi: + .byte >@ChBC,>@ChAC,>@ChAC +@DrDialCountTabLo: + .byte <(@V2-@V1),<(@V2-@V1),<(@V3-@V1) +@DrDialCountTabHi: + .byte >(@V2-@V1),>(@V2-@V1),>(@V3-@V1) + +@MycurDrive: + .byte 0 + +@ChangeDial: + .byte $81 + .byte DBTXTSTR + .byte 4,10 + .word @Zeile1 + .byte DBVARSTR + .byte 55,10 + .byte r15 + .byte DBTXTSTR + .byte 4,22 + .word @Zeile2 + .byte DBTXTSTR + .byte 4,34 + .word @Zeile3 + .byte NO + .byte 1,76 + .byte DBTXTSTR + .byte 60,50 + .word @Zeile4 + .byte DBTXTSTR + .byte 60,68 + .word @Zeile5 + .byte DBTXTSTR + .byte 60,86 + .word @Zeile6 +@V1: .byte DBUSRICON + .byte 1,40 + .word @IconACTab +@V2 .byte NULL + .byte DBUSRICON + .byte 1,58 + .word @IconBCTab +@V3: .byte NULL + .byte NULL + +@Zeile1: .byte "Programm: ",0 +@Zeile2: .byte "wurde von Drive " +@Zeile2_1: .byte "C gestartet!",0 +@Zeile3: .byte BOLDON,"Tauschen ?",PLAINTEXT,0 +@Zeile4: .byte "A:" +@DrANm: .byte " " +@Zeile5: .byte "B:" +@DrBNm: .byte " " +@Zeile6: .byte "C:" +@DrCNm: .byte " " + +@ChAC: .byte DBUSRICON + .byte 1,40 + .word @IconACTab +@ChBC: .byte DBUSRICON + .byte 1,58 + .word @IconBCTab +@ChCC: .byte 0 +@IconACTab: + .word @IconAC + .word 0 + .byte 6 + .byte 16 + .word @IconACRout +@IconBCTab: + .word @IconBC + .word 0 + .byte 6 + .byte 16 + .word @IconBCRout + +@IconAC: + +@IconBC: + +@IconACRout: + lda #YES +@ICgem: sta sysDBData + jmp RstrFrmDialog +@IconBCRout: + lda #DISK + bne @ICgem + +.endif +DataSpace: diff --git a/topdesk/Main/DeskTop.sub4.s b/topdesk/Main/DeskTop.sub4.s new file mode 100644 index 00000000..280b4c1a --- /dev/null +++ b/topdesk/Main/DeskTop.sub4.s @@ -0,0 +1,334 @@ +.segment "OVERLAY4" + +; Datum: 6.8.91 +curHeight = $29 +; n "DeskMod D" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart +; jmp FileInfo + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 + +; FileBox-Position: +FIB_OBEN = 40 +FIB_UNTEN = 180 +FIB_LINKS = 70 +FIB_RECHTS = 250 +FileInfo: jsr GetAktlDisk + tax + beq @05 + jsr ClearMultiFile2 + cpx #12 + beq @07 + jmp FehlerAusgabe +@05: ldx MultiCount + dex + bpl @geht +@07: rts +@geht: LoadW___ r2,MultiFileTab +@10: jsr GetMark + tax + bmi @20 + jsr GetFileName + LoadB DialBoxFlag,2 + jsr DispThisInfo + txa + beq @10 + jmp FehlerAusgabe +@20: LoadB DialBoxFlag,0 + jmp RecoverLast +.macro DbText x0, y0, adr + .byte $0b,x0,y0 + .word adr +.endmacro + +Text = fileHeader+$a0 +AlternateFlag: .byte 0 +DispThisInfo: ; File-Info des Files Name darstellen + LoadW___ r6,Name + jsr FindFile + txa + bne @err + PushW r1 + PushW r5 + jsr i_FillRam + .word $ff,$8100 + .byte 0 + lda $8400+22 + beq @10 + MoveW_ $8400+19,r1 + LoadW___ r4,$8100 + jsr GetBlock + txa + beq @10 + PopW r5 + PopW r1 +@err: rts +@10: LoadW___ r0,Name + jsr StringLen + lsr r1L + lda #(FIB_RECHTS-FIB_LINKS)/2-10 + sec + sbc r1L + sta @titelpos+1 + LoadW___ a1,$8100+77 + LoadW___ a3,$8100+97 + LoadW___ a4,@ta + ldx $8100+70 + beq @20 + LoadW___ a4,@tb +@20: lda $8400+22 + tay + lda AutTab,y + bne @22 + LoadW___ a3,@tn ; kein Autor anzeigen +@22: tya + asl + tay + lda TypTab,y + sta a2L + lda TypTab+1,y + sta a2H + LoadB AlternateFlag,0 + LoadW___ r0,@db + jsr NewDoDlgBox + PopW r5 + PopW r1 + ldx AlternateFlag + beq @err2 + ldy #0 + lda $8400 + sta (r5),y + sta fileHeader+68 + LoadW___ r4,$8000 + jsr PutBlock + txa + bne @err2 + MoveW_ dirEntryBuf+19,r1 + lda $8400+22 + beq @err2 + LoadW___ r4,fileHeader + jmp PutBlock +@err2: rts +@ta: .byte "sequentiell",0 +@tb: .byte "VLIR" +@tn: .byte 0 +@db: .byte $01 + .byte FIB_OBEN,FIB_UNTEN + .word FIB_LINKS,FIB_RECHTS + DbText 50,10,@boldtext +@titelpos: DbText 70,12,Name + DbText 10,30,@t1 + DbText 10,40,@t2 + DbText 10,50,@t3 + DbText 10,60,@t7 + DbText 10,70,@t4 + DbText 10,80,@t5 + DbText 60,91,@t6 + .byte $0c,55,30,a1 ; Klasse + .byte $0c,55,40,a2 ; Filetyp + .byte $0c,55,50,a3 ; Autor + .byte $0c,55,60,a4 ; Struktur + .byte $13 + .word @PutSize + .byte $13 + .word @PutDate + .byte $13 + .word @Layout + .byte 17 + .word @Check + .byte $13 + .word EditText + .byte 18,21,4 + .word CloseIcon + .byte NULL +@boldtext: .byte BOLDON,0 +@t1: .byte PLAINTEXT,"Klasse:",0 +@t2: .byte "FileTyp:",0 +@t3: .byte "Autor:",0 +@t4: .byte "Datum:",0 +@t5: .byte "Gr|~e: ",0 +@t6: .byte "Schreibschutz",BOLDON,0 +@t7: .byte "Struktur:",0 +@PutSize: MoveW_ $8400+28,r0 + LoadW___ r11,FIB_LINKS+55 + LoadB r1H,FIB_OBEN+80 + lda KBytesFlag + cmp #'*' + beq @ps10 + lda r0L + pha + lsr r0H + ror r0L + lsr r0H + ror r0L + pla + and #%00000011 + beq @noround + inc r0L + lda r0L + bne @noround + inc r0H +@noround: lda #%11000000 + jsr PutDecimal + LoadW___ r0,@KBytes + jmp PutString +@ps10: lda #%11000000 + jsr PutDecimal + LoadW___ r0,@Blocks + jmp PutString +@Blocks: .byte " Bl|cke",0 +@KBytes: .byte " KByte(s)",0 +@PutDate: LoadW___ r11,FIB_LINKS+55 + LoadB r1H,FIB_OBEN+70 + ldy #0 + sty a4L +@pd05: lda @tab1,y + tay + lda $8400,y + sta r0L + LoadB r0H,0 + ldy a4L + lda @tab3,y + beq @pd07 + lda r0L + cmp #10 + bcs @pd07 + lda #'0' + jsr PutChar +@pd07: lda #%11000000 + jsr PutDecimal + ldy a4L + lda @tab2,y + beq @pd10 + jsr PutChar + inc a4L + ldy a4L + bne @pd05 +@pd10: lda #PLAINTEXT + jmp PutChar +@tab1: .byte 25,24,23,26,27 +@tab2: .byte ".","."," ",":",0 +@tab3: .byte 0,0,1,0,1 +@Layout: jsr i_FrameRectangle + .byte FIB_OBEN+2,FIB_UNTEN-2 + .word FIB_LINKS+2,FIB_RECHTS-2 + .byte %11111111 + jsr i_FrameRectangle + .byte FIB_OBEN+4,FIB_OBEN+16 + .word FIB_LINKS+2,FIB_RECHTS-2 + .byte %11111111 + jsr i_FrameRectangle + .byte FIB_OBEN+85,FIB_OBEN+92 + .word FIB_LINKS+50,FIB_LINKS+57 + .byte %11111111 + lda $8400 + and #$40 + beq @l10 + jsr InvertRectangle +@l10: rts +@Check: lda mouseData + bne @c05 + rts +@c05: LoadB r2L,FIB_OBEN+85 + LoadB r2H,FIB_OBEN+92 + LoadW___ r3,FIB_LINKS+50 + LoadW___ r4,FIB_LINKS+57 + jsr IsMseInRegion + beq @c10 + LoadB AlternateFlag,$ff + lda $8400 + eor #$40 + sta $8400 + jmp InvertRectangle +@c10: rts +CloseRoutine: jmp RstrFrmDialog +.include "topdesk/DeskInclude/EditText.inc" +AutTab: .byte 0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1 +TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf +@t0: .byte "Nicht-GEOS",0 +@t1: .byte "BASIC",0 +@t2: .byte "Assembler",0 +@t3: .byte "Data",0 +@t4: .byte "Systemdatei",0 +@t5: .byte "Hilfsprogramm",0 +@t6: .byte "Anwendung",0 +@t7: .byte "Dokument",0 +@t8: .byte "Zeichensatzdatei",0 +@t9: .byte "Druckertreiber",0 +@ta: .byte "Eingabetreiber (64)",0 +@tb: .byte "Directory",0 +@tc: .byte "Startprogramm",0 +@td: .byte "Tempor{r",0 +@te: .byte "selbstausf}hrend",0 +@tf: .byte "Eingabetreiber (128)",0 + +CloseMap: +.incbin "topdesk/CloseMap.map" +;CloseX = .x +;CloseY = .y-3 +CloseX = 2 +CloseY = 16-3 + +CloseIcon: .word CloseMap + .byte 0,0 + .byte CloseX,CloseY + .word CloseRoutine diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s new file mode 100644 index 00000000..3bf831f4 --- /dev/null +++ b/topdesk/Main/DeskTop.sub5.s @@ -0,0 +1,367 @@ +.segment "OVERLAY5" +; n "DeskMod E" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o DispJumpTable + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +FILE_ANZ = 16 + + jmp _MyDispFiles + jmp _DispFiles + jmp _MyCheckFiles + jmp _CheckFiles + jmp _GetFileRect +_MyDispFiles: jsr MyDCFilesSub +_DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow + ; Par: r0: Zeiger auf File/Icontabelle (Aufbau s. Tabelle) + ; a5: x-Koordinate + ; r2L y-Koordinate der linken oberen Ecke der Darstellung + ; Icon wird ggf. nachgeladen + ; messageBuffer+1 : WindowNummer + ; Des: a1, a2, a3, a4, a5 + ldx messageBuffer+1 + lda winMode,x + cmp DispMode + beq @0009 + ldx #0 + rts +@0009: MoveB r2L,a3H + lda #0 + jsr SetPattern + jsr NewRectangle + jsr SetTextWin + LoadB a3L,0 ; a3L = Nummer des aktl. Files + AddVB 10,a3H ; a3H = n{chste y-Koordinate + PushW r0 + LoadW___ r0,University + jsr LoadCharSet + jsr @sub1 ; a4 = xk := auf Zeilenanfang + PopW r0 + lda r0L ; a1 = r0 + sta a1L ; a2 = r0 + FILE_ANZ * 18 + clc + adc #<(FILE_ANZ*18) + sta a2L + lda r0H + sta a1H + adc #>(FILE_ANZ*18) + sta a2H + ; Darstellung des Icons, auf dessen Bitmap a2 zeigt, an der Position + ; a4/a3H +@05: ldy #00 ; Eintrag aktiv ? + lda (a1),y + bne @05a ; >ja + jmp @010 +@05a: lda (a2),y ; Bitmap vorhanden? + cmp #$bf + beq @004 ; >ja + jsr @geticon + txa + beq @004 + txa + pha + jsr UseSystemFont + jsr ClearMultiFile + pla + tax + rts +@004: lda a4L + sta r3L + clc + adc #24 + sta r4L + lda a4H + sta r3H + adc #0 + sta r4H + lda a3H + sta r2L + clc + adc #21 + sta r2H + jsr GetClipRec + jsr CutRec + bcs @005 + MoveW_ a2,r0 + MoveW_ a4,r10 + LoadB r13L,3 ; Breite immer 3 + LoadB r13H,21 ; H|he immer 21 + ldx a3H + jsr DrawMap + ; Darstellung des Filenames, auf dessen Text a1 zeigt, zentriert + ; an der Position a4+12, a3H+27 +@005: lda a4L + clc + adc #12 + sta r11L + lda a4H + adc #00 + sta r11H + MoveW_ a1,r0 ; Filenamenzeiger setzen + ldy #16 + lda (r0),y + pha + lda #00 + sta (r0),y + jsr StringLen ; L{nge ermitteln + MoveW_ r1,r4 + lsr r1H ; L{nge durch 2 + ror r1L + SubW r1,r11 ; xk:=xk-Len / 2 + lda a3H ; yk:=a3H + 27 + clc + adc #27 + sta r1H + lda r11L + sta r3L + clc + adc r4L + sta r4L + lda r11H + sta r3H + adc r4H + sta r4H + lda r1H + clc + adc #1 + sta r2H + sec + sbc #6 + sta r2L + jsr GetClipRec + jsr CutRec + bcs @nicht + jsr NewPutString ; String ausgeben +@nicht: ldy #16 ; Stringende wiederherstellen + pla + sta (a1),y +@010: ldx a3L + inx + stx a3L + cpx #FILE_ANZ + beq @end + txa + and #%11 ; durch 4 teilbar ? + bne @10 ; >nein + AddVB 33,a3H ; yk=yk+33 + jsr @sub1 ; xk auf Zeilenanfang + jmp @20 +@10: AddvW 60,a4 +@20: AddvW 18,a1 ; n{chsten Namen und + AddvW 64,a2 ; n{chstes Icon einstellen + jmp @05 ; Icon darstellen +@end: lda messageBuffer+1 + cmp activeWindow + bne @e10 + jsr DispMarking +@e10: jsr UseSystemFont + ldx #0 + rts +@sub1: lda a5L + clc + adc #30 + sta a4L + lda a5H + adc #00 + sta a4H + jsr DispNumber + rts +@geticon: ; Icon nachladen + ldy #16 + lda (a1),y + beq @g2 + sta r1L + iny + lda (a1),y + sta r1H + LoadW___ r4,$8000 + jsr GetBlock + txa + beq @g0 + rts +@g0: ldy #63 +@g1: lda $8000+4,y + sta (a2),y + dey + bpl @g1 + rts +@g2: ldy #63 +@g3: lda C64Icon,y + sta (a2),y + dey + bne @g3 + lda #$bf + sta (a2),y + ldx #0 + rts +DispNumber: ; Darstellung der aktuellen Filenummer an der Position a4-20/a3H+6 + lda a3L ; Nummer (0-15) holen + ldx messageBuffer+1 ; Windownummer holen + clc + adc windowOffs,x ; Nummer angleichen (0-143) + sta r0L + LoadB r0H,0 + lda a4L + sec + sbc #20 + sta r11L + lda a4H + sbc #00 + sta r11H + lda a3H + clc + adc #10 + sta r1H + lda #%11000000 + jmp PutDecimal +_MyCheckFiles: jsr MyDCFilesSub +_CheckFiles: ; Auswertung eines Mausklicks innerhalb des Textfenstern im Bezug + ; auf die von DispFiles dargestellten Files + ; Par: Textfenster (windowTop-RightMargin) + ; Mauskoordinaten ($3a-$3c) + ; a5/r2L linke obere Ecke der Darstellung + ; Ret: x : Nummer des Eintrags (0-FILE_ANZ, $ff f}r None) + ; r2-r4: Rechteck des Icons + ; Des: a2,a3 + MoveB r2L,a2L + MoveW_ a5,a3 + lda #00 +@05: jsr GetFileRect ; Iconrechteck holen + bcs @06 ; g}ltig? >nein + pha + jsr IsMseInRegion + bne @10 + pla +@06: clc + adc #1 + cmp #FILE_ANZ + bne @05 + ldx #$ff + rts +@10: pla + tax + rts +_GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstellung + ; im Bezug auf das Textfenster + ; Par: Textfenster (windowTop-rightMargin) + ; a: Nummer des Files (0-(FILE_ANZ-1)) + ; a2L,a3: linkere oberere Ecke der Darstellung + ; Ret: r2-r4: Rechteck-Koordinaten + ; Des: x,y,r1,... + pha + and #%11 + sta r3L + LoadB r3H,0 + LoadW___ r4,60 + ldx #r3 + ldy #r4 + jsr DMult + AddvW 30,r3 + ; Jetzt steht in r3 die linke x-Koordinate + pla ; Nummer holen + pha + lsr ; durch 4 + lsr + sta r2L + LoadB r2H,0 + LoadW___ r4,33 + ldx #r2 + ldy #r4 + jsr DMult + lda r2L + clc + adc #10 + sta r2L + ; Jetzt steht in r2L die obere y-Koordinate + AddW a3,r3 + AddB_ a2L,r2L + bcs @err ; y-Koordinate zu gro~! + clc + adc #20 + sta r2H + ; Jetzt steht in r2H die untere y-Koordinate + lda r3L + clc + adc #23 + sta r4L + lda r3H + adc #00 + sta r4H + ; Jetzt steht in r4 die rechte x-Koordinate + jsr GetClipRec + jsr CutRec ; Schnittfl{che berechnen, Ende + pla + rts +@err: pla + sec ; Rechteck ung}ltig + rts +C64Icon: ;j +.incbin "topdesk/C64Icon.bf" + diff --git a/topdesk/Main/DeskTop.sub6.s b/topdesk/Main/DeskTop.sub6.s new file mode 100644 index 00000000..68b04f92 --- /dev/null +++ b/topdesk/Main/DeskTop.sub6.s @@ -0,0 +1,576 @@ +.segment "OVERLAY6" + +; n "DeskMod F" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o DispJumpTable + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +.global fileNum +.global GetWinTabAdr +.global NewPutDecimal + + +FILE_ANZ = 16 + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 +Name2 = DiskName + 19 +RegBuf = Name2 + 19 +FileTab1 = RegBuf + r15H + ; Aufbau: 16 Eintr{ge mit jew. 16 Bytes Filename + ; 2 Bytes Info-Tr/Sc + ; 16 Eintr{ge mit jew. 64 Bytes Icon +FileTab2 = FileTab1+16*18+16*64 +FileTab3 = FileTab2+16*18+16*64 +FileTab4 = FileTab3+16*18+16*64 +ModStart = FileTab4+16*18+16*64 + + + jmp __MyDispFiles + jmp __DispFiles + jmp __MyCheckFiles + jmp __CheckFiles + jmp __GetFileRect + jmp __SortFileBuffer + jmp __GetRealPos +__MyDispFiles: jsr MyDCFilesSub +__DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow + ; Par: r0: Zeiger auf File/Icontabelle (Aufbau s. Tabelle) + ; r3: x-Koordinate + ; r2L y-Koordinate der linken oberen Ecke der Darstellung + ; Icon wird ggf. nachgeladen + ; messageBuffer+1 : WindowNummer + ; Des: a1, a2, a3, a4, a5, a6 + ldx messageBuffer+1 + lda winMode,x + cmp DispMode + beq @0009 + rts +@0009: lda r0L + clc + adc #<(18*16) + sta a6L + lda r0H + adc #>(18*16) + sta a6H + lda r2L + clc + adc #2 + sta r1H + lda a5L + clc + adc #10 + sta a3L + lda a5H + adc #0 + sta a3H + lda #0 + jsr SetPattern + jsr NewRectangle + jsr SetTextWin + ldx #16 +@05: stx a2L + lda r1H + pha + clc + adc #10 + sta r1H + pla + cmp windowBottom + bcs @22 + lda r1H + cmp windowTop + bcc @22 + MoveW_ a3,r11 + ldy #00 + lda (r0),y + beq @25 +@10: lda (r0),y ; Name ausgeben + cmp #$a0 + beq @20 + sty a2H + jsr SmallPutChar + ldy a2H + iny + cpy #16 + bne @10 +@20: jsr @sub ; weitere Infos ausgeben +@22: AddVW__ 18,r0 + AddVW__ 64,a6 + ldx a2L + dex + bne @05 + +@25: lda messageBuffer+1 + cmp activeWindow + beq @e10 + ldx #0 + rts +@e10: SubVW_ 6,leftMargin + jsr DispMarking + ldx #0 + rts + ; Ab der eigentlichen Iconposition ist eingetragen: CBM-Typ, AltNr, Sektor, + ; FileStruktur, GEOS-Filetyp, Jahr, Monat, Tag, Stunde, Minute +@sub: PushW r0 + lda a3L + clc + adc #90 + sta r11L + lda a3H + adc #0 + sta r11H + ldy #4 + lda (a6),y + asl + tax + lda TypTab,x + sta r0L + lda TypTab+1,x + sta r0H + jsr NewPutString + lda a3L + clc + adc #170 + sta r11L + lda a3H + adc #0 + sta r11H + ldy #7 ; Tag + lda (a6),y + jsr @num + lda #'.' + jsr SmallPutChar + ldy #6 ; Monat + lda (a6),y + jsr @num + lda #'.' + jsr SmallPutChar + ldy #5 ; Jahr + lda (a6),y + jsr @num2 + lda a3L + clc + adc #203 + sta r11L + lda a3H + adc #0 + sta r11H + ldy #8 ; Stunde + lda (a6),y + and #$7f + sta r0L + LoadB r0H,0 + lda #%01000000 + 10 + jsr NewPutDecimal + lda #':' + jsr SmallPutChar + ldy #9 ; Minute + lda (a6),y + jsr @num2 + lda a3L + clc + adc #225 + sta r11L + lda a3H + adc #0 + sta r11H + + ldy #10 + lda (a6),y + sta r0L + iny + lda (a6),y + sta r0H + lda KBytesFlag + cmp #'*' + beq @ps10 + PushB r0L + lsr r0H + ror r0L + lsr r0H + ror r0L + pla + and #%00000011 + beq @ps10 + inc r0L + lda r0L + bne @ps10 + inc r0H +@ps10: lda #%01000000 + 20 + jsr NewPutDecimal + PopW r0 + rts +@num: sta r0L + LoadB r0H,0 + lda #%11000000 + jmp NewPutDecimal +@num2: cmp #10 + bcs @num + pha + lda #'0' + jsr PutChar + pla + jmp @num +TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf +@t0: .byte "Nicht-GEOS",0 +@t1: .byte "BASIC",0 +@t2: .byte "Assembler",0 +@t3: .byte "Data",0 +@t4: .byte "Systemdatei",0 +@t5: .byte "Hilfsprogramm",0 +@t6: .byte "Anwendung",0 +@t7: .byte "Dokument",0 +@t8: .byte "Zeichensatzdatei",0 +@t9: .byte "Druckertreiber",0 +@ta: .byte "Eingabetreiber (64)",0 +@tb: .byte "Directory",0 +@tc: .byte "Startprogramm",0 +@td: .byte "Tempor{r",0 +@te: .byte "selbstausf}hrend",0 +@tf: .byte "Eingabetreiber (128)",0 + +__MyCheckFiles: jsr MyDCFilesSub +__CheckFiles: ; Auswertung eines Mausklicks innerhalb des Textfenstern im Bezug + ; auf die von DispFiles dargestellten Files + ; Par: Textfenster (windowTop-RightMargin) + ; Mauskoordinaten ($3a-$3c) + ; r3/r2L linke obere Ecke der Darstellung + ; Ret: x : Nummer des Eintrags (0-FILE_ANZ, $ff f}r None) + ; r2-r4: Rechteck des Icons + ; Des: a2,a3 + MoveB r2L,a2L + MoveW_ r3,a3 + lda #00 +@05: jsr __GetFileRect ; Iconrechteck holen + bcs @06 ; g}ltig? >nein + pha + jsr IsMseInRegion + bne @10 + pla +@06: clc + adc #1 + cmp #FILE_ANZ + bne @05 + ldx #$ff + rts +@10: pla + tax + rts +__GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstellung + ; in Bezug auf das Textfenster + ; Par: Textfenster (windowTop-rightMargin) + ; a: Nummer des Files (0-(FILE__ANZ-1)) + ; (a2L,a3: linkere oberere Ecke der Darstellung) + ; Ret: r2-r4: Rechteck-Koordinaten + ; Des: x,y,r1,... + pha + sta r2L ; Nummer mal 10 + asl + asl + asl + clc + adc r2L + adc r2L + adc windowTop ; plus obere Grenze + sta r2L ; gleich obere Grenze + adc #9 ; plus 9 + sta r2H ; gleich untere Grenze + lda a3L ; linke Grenze = leftMargin+8 + clc + adc #8 + sta r3L + lda a3H + adc #0 + sta r3H + lda rightMargin ; rechte Grenze = rightMargin-3 + sec + sbc #3 + sta r4L + lda rightMargin+1 + sbc #0 + sta r4H + ldy #5 +@20: lda windowTop,y + sta r5L,y + dey + bpl @20 + AddVW__ 8,r6 + jsr CutRec + pla + rts + +__SortFileBuffer: ; Umsortierung der FilenamenListe ab ModStart + ; Kriterium: s. DispMode + ; Par: a: aktl OffSet + ; x: WindowNumer (0-3) + ; Alt: fileNum,x + ; Ab der eigentlichen Iconposition ist eingetragen: CBM-Typ, AltNr, Sektor, + ; FileStruktur, GEOS-Filetyp, Jahr, Monat, Tag, Stunde, Minute + ; AltNr ist die Position (0-143), die das File auf Disk hat. + sta a5L + stx a6L + jsr GetWinTabAdr ; File/Icontabellenadresse nach r1 + ldx #143 + LoadW___ a4,ModStart+1+143*30+2 + ldy #0 +@110: lda a4H ; nur innerhalb CopyMem durch- + cmp CopyMemHigh ; nummerieren + bcs @115 + txa + sta (a4),y +@115: SubVW_ 30,a4 + dex + bne @110 + LoadB ModStart+3,0 +@05: LoadB a1H,>(ModStart+2) + LoadB a3H,>(ModStart+32) + LoadB a1L,<(ModStart+2) + LoadB a3L,<(ModStart+32) +@10: ldy #03 + lda (a3),y + beq @durch + ldx DispMode + dex + beq @15 + jsr @sortsub + bcc @kleiner + bcs @groesser +@15: lda (a3),y + jsr @grglkl + sta a8L + lda (a1),y + jsr @grglkl + cmp #$a0 + bne @16 + lda #$20 +@16: cmp a8L + bcc @kleiner + beq @gleich +@groesser: jsr SwapEntry + inc @chfl +@kleiner: AddVW__ 30,a1 + AddVW__ 30,a3 + jmp @10 +@grglkl: cmp #'A' + bcc @grglkl10 + cmp #'Z'+1 + bcs @grglkl10 + adc #$20 +@grglkl10: rts +@gleich: iny + cpy #19 + bne @15 + beq @kleiner +@durch: lda @chfl + beq @d1 + LoadB @chfl,0 + jmp @05 +@d1: lda r1L + clc + adc #<(FILE_ANZ*18) + sta r0L + lda r1H + adc #>(FILE_ANZ*18) + sta r0H + LoadW___ a1,ModStart+2 + LoadB a5H,0 + LoadW___ r2,30 + ldx #r2 + ldy #a5 + jsr DMult ; OffSet mit 30 multiplizieren + AddW r2,a1 ; und somit Files }berspringen + LoadB a5L,0 ; Z{hler initialisieren +@005: ldy #0 + lda (a1),y + beq @040 + ldy #2 ; CBM-Type , Tr & Sc }bertragen +@010: lda (a1),y + sta (r0),y + dey + bpl @010 + AddvW 3,a1 + AddvW 3,r0 + ldy #17 ; Name & InfoPos }bertragen +@020: lda (a1),y + sta (r1),y + dey + bpl @020 + AddvW 18,a1 + AddvW 18,r1 + ldy #9 ; G-Type,Struc,Date,Time,Len }bertragen +@030: lda (a1),y + sta (r0),y + dey + bpl @030 + AddvW 9,a1 + AddvW 61,r0 + inc a5L + ldx #16 + cpx a5L + beq @040 + jmp @005 +@040: lda a5L + ldx a6L + sta fileNum,x + clc + rts +; ldx a6L +; jmp GetWorkArea +@chfl: .byte 0 +@sortsub: dex + beq @datum + dex + beq @groesse +;art + ldy #22 + lda (a1),y + cmp (a3),y + beq @a10 + rts +@a10: clc + rts +@groesse: + ldy #28 + sec + lda (a1),y + sbc (a3),y + php + iny + lda (a1),y + sbc (a3),y + bmi @gr1 +@gr0: pla +@gr01: clc + rts +@gr1: pla +@gr11: sec + rts +@datum: + ldy #26 + lda (a3),y + and #$7f + sta (a3),y + lda (a1),y + and #$7f + sta (a1),y + ldy #23 +@d10: lda (a3),y + cmp (a1),y + beq @dweiter + rts +@dweiter: iny + cpy #28 + bne @d10 + clc + rts + +__GetRealPos: ; Par: a: FileNummer (0-15) + ; x: WindowNumer (0-3) + ; Ret: a: FileNummer (0-143) + ; Des: r0,r1,r2,x,y + pha + jsr GetWinTabAdr ; File/Icontabellenadresse nach r1 + AddVW__ 16*18,r1 + pla + sta r0L + LoadW___ r2,64 + ldx #r2 + ldy #r0 + jsr BMult + AddW r2,r1 + ldy #1 + lda (r1),y + rts +SwapEntry: ; a1: Zeiger auf zwei aufeinanderfolgende 30-Byte-Fileeintr{ge, + ; die ausgetauscht werden sollen + ; Ret: a1 unver{ndert + ; Des: a2 + lda a1L + clc + adc #30 + sta a2L + lda a1H + adc #0 + sta a2H + ldy #29 +@10: lda (a1),y + pha + lda (a2),y + sta (a1),y + pla + sta (a2),y + dey + bpl @10 + rts diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s new file mode 100644 index 00000000..d217e794 --- /dev/null +++ b/topdesk/Main/DeskTop.sub7.s @@ -0,0 +1,638 @@ +.segment "OVERLAY7" +; n "DeskMod G" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +.global fileNum +.global GetWinTabAdr +.global NewPutDecimal + +.global GetWinName +.global GetEqualWindows +.global MyCurRec +.global NewSetDevice +.global Start2 +.global SetCopyMemLow +.global NewGetFile +.global GetPrefs2 +.global GetIconService +.global DispJumpTable +.global DeskOther +.global newAppMain +.global DeskMain +.global NewDoIcons +.global IconTab +.global SetNumDrives +.global KeyHandler +.global backPattern +.global RedrawHead +.global DoWindows +.global WindowTab +.global windowsOpen +.global RamTopFlag +.global PrintDriveNames +.global RedrawAll +.global FileClassNr + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 + +; jmp _SwapFile + nop + nop + nop + jmp DeskRelabel + jmp DeskFormat + jmp StartUp + jmp InstallDriver +InstallDriver: lda firstBoot + bpl @10 + jsr GetAktlDisk + tax + beq @10 + cpx #12 + beq @05 + jmp FehlerAusgabe +@05: rts +@10: lda FileClassNr + cmp #PRINTER + bne @Prnt6 + LoadW___ @Prnt3,PrntFileName + LoadW___ r14,@PrntZeile1_1 + jmp @Prnt7 +@Prnt6: LoadW___ @Prnt3,inputDevName + LoadW___ r14,@PrntZeile1_2 +@Prnt7: lda firstBoot + beq @Prnt1 + PushW r15 + LoadW___ r0,@PrntDial + jsr NewDoDlgBox + PopW r15 + lda r0L + cmp #OK + beq @Prnt1 + rts +@Prnt1: lda FileClassNr + cmp #PRINTER + beq @Prnt8 + jsr DA1 + txa + bne @rts + jsr @Prnt8a + jsr StashDrivers + jsr InitMouse +@rts: rts +@Prnt8: lda c128Flag + bpl @Prnt8a + jsr DA1 + LoadW___ r0,$7900 + LoadW___ r1,$d9c0 + LoadW___ r2,$640 + LoadB r3L,$01 + sta r3H ; FrontRam nach FrontRam + PushW r15 + jsr MoveBData + dec r1H ; r1 = $d8c0 + LoadB r0H,$81 + LoadW___ r2,$100 + jsr MoveBData + PopW r15 +@Prnt8a: MoveW_ r15,@Prnt2 + jsr i_MoveData +@Prnt2: .word 0 +@Prnt3: .word PrntFileName + .word 16 + lda firstBoot + bpl @Prnt8b + jsr RedrawAll + jmp StashDrivers +@Prnt8b: jsr PrintDriveNames + jmp StashDrivers +@PrntDial: + .byte $81 + .byte DBTXTSTR,$10,$10 + .word @PrntZeile1 + .byte DBVARSTR,$10,$20,r14 + .byte DBVARSTR,$10,$30,r15 + .byte DBTXTSTR,$10,$40 + .word @PrntZeile2 + .byte OK,1,76 + .byte CANCEL,16,76 + .byte NULL +@PrntZeile1: .byte BOLDON,"Neuen ",0 +@PrntZeile1_1: .byte "Druckertreiber",0 +@PrntZeile1_2: .byte "Eingabetreiber",0 +@PrntZeile2: .byte "installieren?",0 +DA1: MoveW_ r15,r6 + lda #$00 + sta r0L + sta r10L + jmp GetFile + +StashDrivers: lda sysRAMFlg + and #%00100000 + bne @10 +@05: rts +@10: lda c128Flag + bpl @15 + lda sysRAMFlg ; Flag f}r Getfile setzen + ora #$10 + sta sysRAMFlg + ldy #7 +@12: lda @tab2,y + sta r0L,y + dey + bpl @12 + jsr StashRAM ; Druckertreiber nach REU + + LoadW___ r0,$fd00 ; Input 128 + LoadW___ r1,$f940 + jmp @20 + +@15: LoadW___ r0,$fe80 ; bzw. Input 64 nach REU + LoadW___ r1,$fac0 +@20: LoadW___ r2,$0180 + LoadB r3L,0 + jsr StashRAM + lda sysRAMFlg + and #%00100000 + beq @05 + ldy #7 +@22: lda @tab2,y + sta r0L,y + dey + bpl @22 + jmp StashRAM + +@tab1: .word $d8c0,$d500,$e000-$d8c0 + .byte 0 +@tab2: .word $8400,$7900,$0500 + .byte 0 +myserial: .word 0 + + ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +StartUp: lda RamTopFlag + beq @norm + lda sysRAMFlg ; REU-MoveData ausschalten + and #$7f + sta sysRAMFlg +@norm: lda c128Flag + bpl @010 + lda graphMode + bpl @010 + and #$7f + sta graphMode + jsr SetNewMode +@010: LoadB iconSelFlag,0 + ldy #3 +@loop2: lda windowsOpen,y + pha + lda #0 + sta windowsOpen,y + dey + bpl @loop2 + LoadWr0 WindowTab + jsr DoWindows + jsr RedrawHead + lda screencolors + sta @col + jsr i_FillRam + .word 1000,$8c00 +@col: .byte 0 + ldx #$c0 + lda #$95 + sec + adc #0 + inx + jsr CallRoutine + CmpW r0,myserial + bne @neu + jmp @allesok +@neu: LoadW___ r0,@neudb + LoadB RecoverVector,0 + sta RecoverVector+1 + jsr DoDlgBox + jmp EnterDeskTop +@neudb: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte $0b,$10,$30 + .word @t3 + .byte OK,14,72,NULL +@t1: .byte BOLDON,"Bitte neu starten. Gleiche",0 +@t2: .byte "Systemdiskette verwenden wie",0 +@t3: .byte "bei Installation von TopDesk.",0 +@allesok: LoadB backPattern,2 + LoadW___ keyVector,KeyHandler + jsr SetNumDrives + ldx numDrives + inx + inx + stx IconTab + LoadWr0 IconTab + jsr NewDoIcons + LoadW___ newAppMain,DeskMain + LoadW___ otherPressVec,DeskOther + jsr ClearMultiFile + lda DispJumpTable + bne @10 + jsr GetIconService +@10: LoadB firstBoot,0 + lda inputDevName + bne @30 + jsr GetPrefs2 + lda #10 ; Input 64 + ldx c128Flag + bpl @20 + lda #15 ; Input 128 +@20: sta r7L + LoadB r7H,1 + LoadB Name,0 + LoadW___ r6,Name + jsr FindFTypes + lda Name + beq @30 + LoadB r1L,0 + LoadW___ r6,Name + jsr NewGetFile +@30: lda PrntFileName + bne @40 + LoadB r7L,9 ; Printer + LoadB r7H,1 + LoadB Name,0 + LoadW___ r6,Name + jsr FindFTypes + lda Name + beq @40 + LoadB r1L,0 + LoadW___ r6,Name + jsr NewGetFile +@40: LoadB firstBoot,$ff + jsr SetCopyMemLow + ldy #0 +@loop3: pla + sta windowsOpen,y + iny + cpy #4 + bne @loop3 + jmp Start2 + +.include "topdesk/DeskInclude/DosFormat.s.inc" + +DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher +@dloop: lda curType + and #$80 + beq @noram + ldx curDrive + inx + txa + cmp Name+2 + beq @nodrive + lda driveType-8,x + beq @n8 + txa + jsr NewSetDevice + txa + beq @dloop +@n8: lda #8 + cmp Name+2 + beq @nodrive + jsr NewSetDevice + jmp @dloop +@nodrive: rts +@noram: LoadB Name+2,0 + PushB numDrives + cmp #1 + bne @05 + ldy #0 + sty @abhier + beq @08 +@05: LoadB numDrives,4 + tay + dey ; g}ltige Laufwerke ermitteln +@06: lda driveType,y + tax + beq @06a ; d.h. keine nicht vorhandenen Laufwerke + and #%10000000 ; und keine RAM-Disks + bne @06a + sty r1L + jmp @07 +@06a: dec numDrives ; Eine ermittelte RAM-Disk wird nicht + tya ; als zu formatierendes Laufwerk an- + asl ; geboten, in dem das zugeh|rige + tax ; Icon in der Dialogbox nicht + lda @icontab,x ; dargestellt wird, durch + sta r0L ; MoveW 0,:icontab+RamLaufw*2 . + lda @icontab+1,x + sta r0H + ldy #0 + tya + sta (r0),y + iny + sta (r0),y + sta MyCurRec ; beim n{chsten Mal Modul erneut laden + txa ; da Icontabelle modifiziert wurde + lsr + tay +@07: dey + bpl @06 + ldx numDrives ; nur ein g}ltiges Laufw. ? + dex + bne @08 ; >nein + lda #0 + sta @abhier + sta MyCurRec ; beim n{chsten Mal Modul erneut laden + lda r1L ; da Icontabelle modifiziert wurde + clc + adc #8 + jsr NewSetDevice +@08: PopB numDrives + lda curDrive +@08geht: clc + adc #57 + sta @dr +@09: LoadW___ a1,Name+2 + LoadW___ r0,@db + inc DialBoxFlag + jsr NewDoDlgBox + lda r0L + cmp #$02 ; Abbruch-Feld geklickt? + beq @99 ; >ja + cmp #$12 ; Laufwerk ge{ndert ? + bne @10 ; >nein + jmp @09 +@10: lda @dr + sec + sbc #57 + jsr NewSetDevice + lda curType + cmp #2 ; Soll auf 1571 formatiert werden ? + bne @99a ; >nein + LoadW___ r0,@db2 + jsr NewDoDlgBox ; "Doppelseitig formatieren?" + LoadB r1L,0 ; Doppelseitig-Flag + lda r0L + cmp #2 + beq @99 ; Abbruch + cmp #YES + bne @99a + LoadB r1L,1 ; Doppelseitig-Flag +@99a: LoadW___ r0,Name+2 + jsr DosFormat + txa + beq @99 + inc DialBoxFlag + jmp FehlerAusgabe +@99: jmp RedrawAll +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$10+11 + .word @t2 + .byte $0b,$10,$10+22 + .word @t3 + .byte $0d,$10,$10+40,a1,16 + .byte $02,17,72 +@abhier: .byte $12,2,72 + .word @icon1 + .byte $12,5,72 + .word @icon2 + .byte $12,8,72 + .word @icon3 + .byte $12,11,72 + .word @icon4 + .byte NULL +@t1: .byte "Diskette zum Formatieren",0 +@t2: .byte "in Laufwerk " +@dr: .byte ". einlegen ",0 +@t3: .byte "und Name eingeben:",0 +@icontab: .word @icon1,@icon2,@icon3,@icon4 +@icon1: .word IconA,0 + .byte ICON_X,ICON_Y + .word @icon1+8 + LoadB @dr,'A' + LoadB $851d,$12 + jmp RstrFrmDialogue +@icon2: .word IconB,0 + .byte ICON_X,ICON_Y + .word @icon2+8 + LoadB @dr,'B' + LoadB $851d,$12 + jmp RstrFrmDialogue +@icon3: .word IconC,0 + .byte ICON_X,ICON_Y + .word @icon3+8 + LoadB @dr,'C' + LoadB $851d,$12 + jmp RstrFrmDialogue +@icon4: .word IconD,0 + .byte ICON_X,ICON_Y + .word @icon4+8 + LoadB @dr,'D' + LoadB $851d,$12 + jmp RstrFrmDialogue +@db2: .byte $81 + .byte $0b,$10,$10 + .word @2t1 + .byte $0b,$10,$20 + .word @2t2 + .byte $0b,$10,$30 + .word @2t3 + .byte $02,17,72 + .byte YES,2,72 + .byte NO,9,72 + .byte NULL +@2t1: .byte BOLDON,"Soll die Diskette",0 +@2t2: .byte "doppelseitig formatiert ",0 +@2t3: .byte "werden?",PLAINTEXT,0 +IconA: +.incbin "topdesk/IconA.map" +IconB: +.incbin "topdesk/IconB.map" +IconC: +.incbin "topdesk/IconC.map" +IconD: +.incbin "topdesk/IconD.map" + + +ICON_X = 2 +ICON_Y = 16 + +DeskRelabel: ldx activeWindow + jsr GetEqualWindows + ldx activeWindow + lda #1 + sta a6L,x + LoadB DialBoxFlag,25 ; irgendein Wert, m|glichst hoher Wert + jsr GetAktlWinDisk + LoadW___ r6,DiskName+2 + jsr Relabel + txa + bne @end + sta a5H + ldx #3 +@loop: stx a5L + lda a6L,x + beq @10 + inc a5H + txa + jsr GetWinName + IncW r1 + IncW r1 + ldy #00 +@20: lda (r6),y + beq @30 + sta (r1),y + iny + bne @20 +@30: cpy #16 + beq @10 + lda #PLAINTEXT + sta (r1),y + iny + bne @30 +@10: ldx a5L + dex + bpl @loop + ldx a5H + dex + bne @40 +@end: LoadB DialBoxFlag,0 + jmp RecoverLast +@40: LoadB DialBoxFlag,0 + jmp RedrawAll +; Relabel +; belegt eine Diskette mit einem neuen Namen +; Par: r6 - Zeiger auf den Diskettennamen +; Ret: x=0 kein Fehler +; r6 - neuer Diskettenname +; Des: a,y,r0-r5 +Relabel: + jsr SearchDisk + txa + bne @err + ldy #0 +@a10: lda (r6),y + sta diskBlkBuf,y + beq @a20 + iny + bne @a10 +@a20: PushW r6 + LoadW___ r5,diskBlkBuf ;DoDlgBox vorbereiten + LoadW___ r0,@renbox + jsr NewDoDlgBox + PopW r6 + ldy r0L ;auf Abbruch + cpy #CANCEL ;pr}fen + beq @13 ;ja :13 + lda diskBlkBuf ;auf Leerstring pr}fen + bne @15 ;nein :15 +@13: ldx #CANCEL_ERR +@err: rts +@15: jsr GetDirHead ; + txa + bne @err + ldy #15 ;Diskname +@20: lda #$a0 + sta curDirHead+144,y + dey + bpl @20 + ldy #0 +@30: lda diskBlkBuf,y ;in die BAM + sta (r6),y ;und in die ]bergabe + beq @40 ;}bertragen + sta curDirHead+144,y + iny + cpy #16 + bne @30 +@40: jmp PutDirHead +@renbox: + .byte $81 + .byte DBTXTSTR + .byte 10,20 + .word @rentext + .byte DBTXTSTR + .byte 10,30 + .word @rentxt2 + .byte DBGETSTRING + .byte 10,40,r5,16 + .byte CANCEL + .byte 16,72 + .byte NULL + +@rentext: .byte BOLDON,"Bitte geben Sie den neuen",0 +@rentxt2: .byte "Diskettennamen ein:",PLAINTEXT,0 diff --git a/topdesk/Main/DeskTop.sub8.s b/topdesk/Main/DeskTop.sub8.s new file mode 100644 index 00000000..30d439c0 --- /dev/null +++ b/topdesk/Main/DeskTop.sub8.s @@ -0,0 +1,166 @@ +.segment "OVERLAY8" + +; n "DeskMod H" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +.global fileNum +.global GetWinTabAdr +.global NewPutDecimal + +.global GetWinName +.global GetEqualWindows +.global MyCurRec +.global NewSetDevice +.global Start2 +.global SetCopyMemLow +.global NewGetFile +.global GetPrefs2 +.global GetIconService +.global DispJumpTable +.global DeskOther +.global newAppMain +.global DeskMain +.global NewDoIcons +.global IconTab +.global SetNumDrives +.global KeyHandler +.global backPattern +.global RedrawHead +.global DoWindows +.global WindowTab +.global windowsOpen +.global RamTopFlag +.global PrintDriveNames +.global RedrawAll +.global FileClassNr + +.global NewSearchDisk +.global GetWinDisk + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 + + jmp _BackUp +; jmp _SetWindows + +;:INV_TRACK = 2 +;CopyDisk +; Date: 5.9.1990 +; Par: r6 - Zeiger auf den SourceDiskNamen (mu~ nicht unbedingt eingelegt sein) +; Ret: x - Fehlernummer +; Des: alles + +_RTS: rts +_BackUp: PushW RecoverVector + jsr ClearMultiFile2 + lda #0 + sta MyCurRec + LoadW___ RecoverVector,_RTS + jsr GetAktlWinDisk + LoadW___ r6,DiskName+2 + jsr CopyDisk + PopW RecoverVector + txa + beq @10 + cmp #CANCEL_ERR + beq @end + jmp FehlerAusgabe +@10: ldx #3 +@loop2: stx a7L + jsr GetWinDisk + ldy #2 +@loop: lda DestinationName-2,y +; cmp #$a0 + beq @20 + cmp (r0),y + bne @nicht + iny + bne @loop +@20: lda (r0),y + cmp #PLAINTEXT + beq @doch + cmp #'/'+$80 + beq @doch +@nicht: ldx a7L + dex + bpl @loop2 +@end: jmp RedrawAll +@doch: ldx a7L + lda #0 + sta windowsOpen,x + beq @nicht +; t "DiskCopy" ; mu~ letzte Zeile sein +.include "topdesk/DeskInclude/DiskCopy.inc" diff --git a/topdesk/Main/DeskTop.sub9.s b/topdesk/Main/DeskTop.sub9.s new file mode 100644 index 00000000..9e695f56 --- /dev/null +++ b/topdesk/Main/DeskTop.sub9.s @@ -0,0 +1,463 @@ +.segment "OVERLAY9" + +; n "DeskMod I" +;if .p +.include "topdesk/Include/Symbol/TopSym.inc" +.include "geosmac.inc" +.include "topdesk/Include/Symbol/Sym128.erg.inc" +.include "topdesk/Include/Symbol/CiSym.inc" +.include "topdesk/Include/Symbol/CiMac.inc" +; t "DeskWindows..ext" +; t "DeskTop.main.ext" +;endif +; o ModStart + +.global NewDoDlgBox +.global SearchDisk +.global ReloadActiveWindow +.global FehlerAusgabe +.global GetAktlDisk +.global ClearMultiFile2 +.global SubDir1List +.global GetAktlWinDisk +.global RecoverActiveWindow +.global DialBoxFlag +.global RemSubName +.global aktl_Sub +.global ClearList +.global GetSubDirXList +.global activeWindow +.global CopyMemHigh +.global MaxTextWin +.global DiskDriverFlag + +.global CopyFile +.global CopyMemLow +.global DestinationDir +.global messageBuffer +.global GetFileName +.global GetMark +.global MultiCount + +.global MinEiner +.global MinZehner +.global StdEiner +.global StdZehner +.global JahEiner +.global JahZehner +.global MonEiner +.global MonZehner +.global TagEiner +.global TagZehner +.global ShowClock +.global ModDepth +.global ClearMultiFile +.global Loadr0AX + +.global KBytesFlag +.global StringLen +.global RecoverLast + +.global GetFileRect +.global windowOffs +.global DispMarking +.global NewPutString +.global DrawMap +.global CutRec +.global GetClipRec +.global University +.global SetTextWin +.global NewRectangle +.global DispMode +.global winMode +.global MyDCFilesSub + +.global fileNum +.global GetWinTabAdr +.global NewPutDecimal + +.global GetWinName +.global GetEqualWindows +.global MyCurRec +.global NewSetDevice +.global Start2 +.global SetCopyMemLow +.global NewGetFile +.global GetPrefs2 +.global GetIconService +.global DispJumpTable +.global DeskOther +.global newAppMain +.global DeskMain +.global NewDoIcons +.global IconTab +.global SetNumDrives +.global KeyHandler +.global backPattern +.global RedrawHead +.global DoWindows +.global WindowTab +.global windowsOpen +.global RamTopFlag +.global PrintDriveNames +.global RedrawAll +.global FileClassNr + +.global NewSearchDisk +.global GetWinDisk + +.global CopyService +.global FindDirFiles +.global MoveFileInDir +.global subTab + + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 +DiskName = Name + 19 +Name2 = DiskName + 19 + + jmp NeuerOrdner + jmp _CopyDir +; jmp _DeleteDir +NeuerOrdner: jsr GotoFirstMenu + jsr ClearMultiFile2 + jsr GetAktlDisk + tax + bne @17 + LoadB DialBoxFlag,2 + LoadW___ r0,@db + LoadW___ a1,Name + LoadB Name,0 + jsr NewDoDlgBox + lda r0L + cmp #02 + beq @20 + lda Name + beq @20 + ldx activeWindow + jsr MyNewSubDir + txa + beq @19 +@17: cpx #12 + beq @18 + jmp FehlerAusgabe +@18: rts +@19: LoadB DialBoxFlag,0 + jsr MaxTextWin + jmp RecoverActiveWindow +@20: LoadB DialBoxFlag,0 + jsr MaxTextWin + jmp RecoverLast +@db: .byte $81 + .byte $02,17,72 ; Abbruch-Box + .byte $0b,$10,$10 ; Textausgabe + .word @t + .byte $0d,$10,$20 ; Texteingabe + .byte a1,16 + .byte NULL +@t: .byte BOLDON,"Neuen Ordnernamen eingeben:",PLAINTEXT,0 +MyNewSubDir: ; Par: Filename in Name + ; Windownummer in x + txa + pha + LoadW___ r0,subTab + LoadW___ r3,ModEnd + jsr MakeDirList +@10: LoadW___ r1,Name + jsr MakeDir + txa + bne @err + pla + tax + lda aktl_Sub,x + sta r10L + LoadW___ r6,Name + jmp MoveFileInDir +@err: pla + rts +; MakeDirList +; erstellt eine Liste mit den vorhandenen Verzeichnissen +; Maximal sind 64 Verzeichnisse (= 8 Byte) m|glich +; Parameter +; r0 - Zeiger auf 8 Bytes, wo die Verzeichnisse +; abgelegt werden k|nnen. +; r3 - Zeiger auf einen 128 Byte-Buffer f}r +; Track-Sektor-Liste +; Returns +; x = 0 No Error +; Destroys +; a,y, r1,r5,r15 +MakeDirList: + ldy #7 + lda #00 +@5: sta (r0),y + dey + bne @5 + lda #1 + sta (r0),y + PushW r0 +; LoadW___ r3,$6000 + ldy #127 + lda #0 +@10: sta (r3),y + dey + bpl @10 + sta r11H + lda #%11000000 + sta r10L + sta r12L + LoadB r12H,DIRECTORY + LoadB r11L,64 + LoadB r13L,2 + LoadB r13H,20 + PushW r3 + jsr FindDirFiles + PopW r3 + PopW r0 + txa + bne @error + LoadW___ r4,diskBlkBuf + ldy #0 +@100: lda (r3),y ;$6000,y + sta r1L + beq @end + iny + lda (r3),y ;$6000,y + sta r1H + iny + tya + pha + jsr GetBlock + pla + tay + txa + bne @error + tya + pha + ldy #OFF_DIR_NUM + lda diskBlkBuf,y + jsr PutInList + pla + tay + jmp @100 +@end: ldx #0 +@error: rts +; MakeDir +; erstellt ein Verzeichnis +; +; Parameter +; r0 - Zeiger auf DirList +; r1 - Zeiger auf Filenamen +; r10L - Nummer des aufrufenden Verzeichnisses +; +; Returns +; x = 0 No Error +; FILE_EXISTS +; NO_DIR_FREE +; +; Destroys +; r0 - r10L,r14,r15 +; a,y +; + +MakeDir: + jsr NextFreeDirNum + sta IntBlock+OFF_DIR_NUM + txa + bne @1000 + MoveW_ r1,IntBlock + MoveW_ r1,r6 + jsr FindFile + txa + bne @1 + ldx #FILE_EXISTS + rts +@1: MoveW_ r0,r14 + LoadW___ r9,IntBlock + LoadB r10L,1 + jsr SaveFile +@1000: rts +; NextFreeDirNum +; holt n{chste freie Directory-Nummer aus +; interner Verzeichnislist, die mit MakeDirList +; erstellt wurde +; NextFreeDirNum kennzeichnet nicht (!) den n{chsten +; Eintrag als belegt. +; +; Parameter +; r0 - Zeiger auf Liste +; +; Returns +; x = 0 No Error oder x = NO_DIR_FREE +; a = freie Dir-Nummer +; +; Destroys +; y,a + +NextFreeDirNum: + ldx #$07 + ldy #$00 + sty merky +@10: lda (r0),y +@20: lsr + bcc @100 + inc merky + dex + bpl @20 + ldx #7 + iny + cpy #8 + bne @10 + ldx #NO_DIR_FREE + rts +@100: ldx #$00 + lda merky + rts +; PutInList +; Belegteintrag setzen +; +; Parameter +; a - Directorynummer +; r0 - Zeiger auf Directoryliste +; +; Destroys +; a,y +; +; uses +; - merky +; + +PutInList: +; ldy #$00 + pha +; lda (r15),y + and #%00000111 + tay + lda #$01 + cpy #0 + beq @100 +@10: asl + dey + bne @10 +@100: sta merky + pla +; lda (r15),y ; y = 0 !! + and #%00111000 + lsr + lsr + lsr + tay + lda (r0),y + ora merky + sta (r0),y + rts +merky: .byte 0 +;CopyDir +;Par: diskName+2 - Diskname Source +; Name2+2 - Diskname Dest. +; Name - Name des Ordners als String +;Des: $6000-$7fff,r14,fileWritten +_CopyDir: inc ModDepth + LoadB CopyMemLow,>(ModEnd+$100) + LoadW___ r6,DiskName+2 + jsr SearchDisk + LoadW___ r6,Name + jsr FindFile + txa + bne @err2 + MoveW_ $8400+19,r1 ; Source-Ordnernummer holen + LoadW___ r4,$8000 + jsr GetBlock + txa +@err2: bne @err3 + lda $8000+OFF_DIR_NUM + sta @src + LoadW___ r6,Name2+2 + jsr SearchDisk + txa +@err3: bne @err4 + ldx messageBuffer+1 + jsr MyNewSubDir + txa +@err4: bne @err5 + LoadW___ r6,Name ; Zielordnernummer holen + jsr FindFile + txa +@err5: bne @err6 + MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr GetBlock + txa +@err6: bne @err7 + lda $8000+OFF_DIR_NUM + sta @dest + LoadW___ r6,DiskName+2 + jsr SearchDisk + txa +@err7: bne @err + LoadB @num,0 ; aktl. Filenummer setzen +@loop: ldx activeWindow + lda aktl_Sub,x + pha + lda @src + sta aktl_Sub,x + ldx messageBuffer+1 + lda aktl_Sub,x + pha + lda @dest + sta aktl_Sub,x + PushB @num + jsr CopyService + tay + php + pla + sta @s + PopB @num + ldx messageBuffer+1 + lda aktl_Sub,x + sta @dest + pla + sta aktl_Sub,x + ldx activeWindow + lda aktl_Sub,x + sta @src + pla + sta aktl_Sub,x + lda @s + pha + plp + bcs @ende1 + inc @num + bne @loop +@ende1: tya + bpl @ende + clc + bcc @ende +@err: jsr FehlerAusgabe + sec +@ende: dec ModDepth + rts +@src: .byte 0 +@dest: .byte 0 +@num: .byte 0 +@s: .byte 0 +IntBlock: + .word 0 + .byte 3,21 + ;j +.incbin "topdesk/Folder.bf" + .byte $83 ; PRG + .byte DIRECTORY + .byte SEQUENTIAL + .word 0 + .word 0 + .word 0 + .byte "Directory V1.0",0 + .byte 0,0,0 + .byte "DPT-Team",0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0 +ModEnd: diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc new file mode 100644 index 00000000..b07985a9 --- /dev/null +++ b/topdesk/Main/DeskWindows.akt.inc @@ -0,0 +1,2051 @@ +; n "DeskWin $400" +; c "Windows V1.0" +; a "Walter Knupe" +; o $400 +; f 3 ; DATA + +;if .p +; t "TopSym" +; t "TopMac" +; t "Sym128.erg" +; t "CiSym" +; t "CiMac" +;endif + +Grenze_oben = 15 +GD_CLOSE = $02 +GD_HIDE = $40 +GD_MAX = $04 +GD_MOVE = $01 +GD_SCROLL_LR = $10 +GD_SCROLL_UD = $20 +GD_SIZE = $08 +WN_REDRAW = $01 +WN_MOVE = $02 +WN_SIZE = $03 +WN_CLOSE = $04 +WN_MAX = $05 +WN_ACTIVATE = $06 +WN_RESTORE = $07 +WN_SCROLL_R = $08 +WN_SCROLL_L = $09 +WN_SCROLL_U = $0a +WN_SCROLL_D = $0b +WN_HIDE = $0c +WN_USER = $0d +WN_ACTIVATE2 = $0e + +PruefSumme: .word 0 +RamStart: LoadB MyCurRec,0 + lda #10 + jsr GetModule + MoveW_ ModStartAdress,r0 + AddVW__ 3,r0 + jmp (r0) +MyName: .byte "Dos",0,0,0,0,0,0,0,0,0,0,0,0,0 +;XXX MyClass: .byte "TopDesk V1.3",0 +MyClass: .byte "TopDesk V1.2",0 +MyCurRec: .byte 0 +ghostFile: .byte 0 + +ModStartAdress: .word 0 +SearchDeskTop: jmp SearchDeskTop2 +GetModule: cmp MyCurRec + beq @10 + pha + jsr SearchDeskTop + bcc @20 + pla + rts +@20: LoadW___ r0,MyName + jsr OpenRecordFile + pla + sta MyCurRec + jsr PointRecord + MoveW_ ModStartAdress,r7 + LoadW___ r2,$2000 + jsr ReadRecord +@10: clc + rts +SearchDeskTop2: MoveB curDrive,@a +@loop: jsr OpenDisk + LoadW___ r6,MyName + jsr FindFile + jsr TestDisk + ldx numDrives + dex + beq @40 + lda curDrive + tax + sec + sbc #7 + cmp $848d + bne @30 + ldx #07 +@30: inx + txa + pha + jsr __NewSetDevice + pla + cmp @a + bne @loop +@40: LoadW___ r0,@db + jsr NewDoDlgBox + lda r0L + cmp #1 + bne @50 + jmp SearchDeskTop +@50: sec + rts +@a: .byte $08 +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte OK,2,72,CANCEL,14,72,NULL +@t1: .byte "Bitte eine Diskette mit",0 +@t2: .byte "TopDesk einlegen!",0 + +TestDisk: txa + beq @10 + rts +@10: MoveW_ $8400+19,r1 + LoadW___ r4,$8000 + jsr GetBlock + ldy #0 +@tloop: lda MyClass,y + beq @t20 + cmp $804d,y + bne @t30 + iny + bne @tloop +@t20: pla + pla +@t30: clc + rts + +; Systemvariablen +activeWindow: .byte 0,2,3,1 +messageBuffer: + .repeat 10 + .byte 0 + .endrep +backPattern: .byte 2 +curWinData: .word 0 +windowsOpen: .byte 0, 0, 0, 0 +newAppMain: .word 0 +iconTab: .word 0 +NameIndex: .byte 0, 0, 0, 0 + +DoWindows: lda curWinData + ora curWinData+1 + beq @10 + MoveW_ curWinData,a0 + bne @20 +@10: lda r0L + sta a0L + sta curWinData + lda r0H + sta a0H + sta curWinData+1 + lda #0 + sta windowsOpen + sta windowsOpen+1 + sta windowsOpen+2 + sta windowsOpen+3 +@20: MoveW_ appMain,newAppMain + LoadW___ appMain,MyAppMain + MoveW_ mouseVector,oldMsVec + LoadW___ mouseVector,NewMouseService + MoveW_ RecoverVector,oldRecoverVec + LoadW___ RecoverVector,MyRecoverService + rts +.if 0 +DoneWindows: + ; Zur}cksetzung des Systems + MoveW_ newAppMain,appMain + MoveW_ oldMsVec,mouseVector + MoveW_ oldRecoverVec,RecoverVector + rts +.endif +MyAppMain: LoadW___ mouseVector,NewMouseService + jsr MaxTextWin + jsr AppMoveFrame + lda newAppMain + ldx newAppMain+1 + jmp CallRoutine +GetWinAdrRecImp: jsr GetWinAdrRec + jmp ImprintRectangle +GetWinAdrRec: jsr GetWinAdr + jmp GetWinRec +GetWinAdr: + ; Umrechnung: WindowNummer nach Speicheradresse + ; Par: Nummer (0-3) in x. + ; Ret: Adresse in a0 + ; Des: a + lda winOffs,x + clc + adc curWinData + sta a0L + lda curWinData+1 + adc #00 + sta a0H + rts +winOffs: .byte 0*11,1*11,2*11,3*11 + +GetWinRec3: lda #a4L + .byte $2c +GetWinRec: ; ]bertragung des Window-Rechtecks nach r2-r4 + ; Parameter: Window-Datenadresse in a0 + ; zur}ck: r2-r4 : Window-Rechteck + ; zerst|rt: a,y + lda #r2L + .byte $2c ; Skip +GetWinRec2: ; ]bertragung des Window-Rechtecks nach r5-r7 + ; Parameter: Window-Datenadresse in a0 + ; zur}ck: r5-r7 : Window-Rechteck + ; zerst|rt: a,y + lda #r5L + sta @des+1 + ldy #5 +@10: lda (a0),y +@des: sta r2L,y + dey + bpl @10 + rts +GetClipRec: ldy #5 +@loop: lda windowTop,y + sta r5L,y + dey + bpl @loop + rts +NoClipFlag: .byte 0 +BREITE = 10 +DrawWindow2: ; Par: a4-a6: Window-Rechteck + ldy #5 +@loop0: lda a4L,y + sta r2L,y + dey + bpl @loop0 + lda #0 + sta NoClipFlag + jsr SetPattern + jsr GetClipRec + jsr CutRec + bcc @n10 + rts +@n10: ldy #5 +@nloop: lda r2L,y + cmp a4L,y + bne @n20 + dey + bpl @nloop + LoadB NoClipFlag,1 +@n20: jsr Rectangle + LoadW___ a1,WindowData +@loop2: MoveB a2H,r11L + MoveW_ a3,r3 + ldy #2 +@loop: lda (a1),y + sta a2H,y + dey + bpl @loop + lda a3H + cmp #$ff + bne @05 + clc + rts +@05: tax + and #%11100000 + sta a2L + txa + and #%00011111 + sta a3H + bit a2L + bvs @rechts +@links: AddW a5,a3 + jmp @10 +@rechts: lda a6L + sec + sbc a3L + sta a3L + lda a6H + sbc a3H + sta a3H +@10: bit a2L + bmi @unten +@oben: AddB_ a4L,a2H + jmp @20 +@unten: lda a4H + sec + sbc a2H + sta a2H +@20: lda a2L + and #%00100000 + bne @line + jmp @weiter +@line: MoveW_ a3,r4 + MoveB a2H,r11H + lda NoClipFlag + bne @l40 + ; ins ClipRect einpassen + lda r11H + sta r2L + sta r2H + lda r11L + cmp r11H + bcc @l10 + sta r2H + bcs @l20 +@l10: sta r2L +@l20: lda r3L + sec + sbc r4L + lda r3H + sbc r4H + bmi @l30 + ldx r3L + MoveB r4L,r3L + stx r4L + ldx r3H + MoveB r4H,r3H + stx r4H +@l30: MoveW_ r2,r11 + jsr GetClipRec + jsr CutRec + bcs @weiter + MoveW_ r2,r11 + lda r11L + cmp r11H + bne @l40 + lda r3L + cmp r4L + bne @l40 + lda r3H + cmp r4H + bne @l40 + lda #0 + sec + jsr DrawPoint + jmp @weiter +@l40: lda #0 + sec + jsr DrawLine +@weiter: lda a1L + clc + adc #3 + sta a1L + bcc @30 + inc a1H +@30: jmp @loop2 + +.macro Punkt x0, y0, b6, b7, b5 + .byte y0 + .word x0+b6*$4000+b7*$8000+b5*$2000 +.endmacro + +WindowData: ; LinienEndpunkte in Abh{ngigkeit von den Endpunkten + ; xk: Bit 7: 0 - oberer Eckpunkt + ; 1 - unterer Eckpunkt + ; Bit 6: 0 - linker Eckpunkt + ; 1 - rechter Eckpunkt + ; Bit 5: 0 - nur neuer Ansatzpunkt + ; 1 - Linienendpunkt & neuer Ansatzpunkt + Punkt 0,0,0,0,0 ; Rahmen + Punkt 0,0,1,0,1 + Punkt 0,0,1,1,1 + Punkt 0,0,0,1,1 + Punkt 0,0,0,0,1 + Punkt 0,BREITE,0,0,0 ; Titelrahmen + Punkt 0,BREITE,1,0,1 + Punkt 0,BREITE,0,1,0 ; unterer Rahmen + Punkt 0,BREITE,1,1,1 + Punkt BREITE,0,1,0,0 ; rechter Rahmen eischl. Gadgetrahmen r + Punkt BREITE,0,1,1,1 + Punkt BREITE,0,0,0,0 ; Gadgetrahmen lo + Punkt BREITE,BREITE,0,0,1 + Punkt 0,BREITE,0,1,0 + Punkt BREITE,BREITE,0,1,1 ; Gadgetrahmen lu + + Punkt 4,4,0,0,0 ; CloseGadget + Punkt 6,4,0,0,1 + Punkt 6,6,0,0,1 + Punkt 4,6,0,0,1 + Punkt 4,4,0,0,1 + + Punkt 2*BREITE,0,1,0,0 ; Hide-Gadget + Punkt 2*BREITE,BREITE,1,0,1 + Punkt 2*BREITE-2,2,1,0,0 + Punkt BREITE+4,2,1,0,1 + Punkt BREITE+4,BREITE-4,1,0,1 + Punkt 2*BREITE-2,BREITE-4,1,0,1 + Punkt 2*BREITE-2,2,1,0,1 + Punkt 2*BREITE-4,4,1,0,0 + Punkt BREITE+2,4,1,0,1 + Punkt BREITE+2,BREITE-2,1,0,1 + Punkt 2*BREITE-4,BREITE-2,1,0,1 + Punkt 2*BREITE-4,4,1,0,1 + Punkt 2*BREITE-5,5,1,0,0 + Punkt BREITE+3,5,1,0,1 + Punkt BREITE+3,BREITE-3,1,0,1 + Punkt 2*BREITE-5,BREITE-3,1,0,1 + Punkt 2*BREITE-5,5,1,0,1 + Punkt BREITE-2,2,1,0,0 ; Max-Gadget + Punkt 2,2,1,0,1 + Punkt 2,BREITE-2,1,0,1 + Punkt BREITE-2,BREITE-2,1,0,1 + Punkt BREITE-2,2,1,0,1 + Punkt 6,BREITE+3,1,0,0 ; Pfeil nach oben + Punkt 6,BREITE+7,1,0,1 + Punkt 4,BREITE+7,1,0,1 + Punkt 4,BREITE+3,1,0,1 + Punkt 5,BREITE+2,1,0,0 + Punkt 5,BREITE+6,1,0,1 + Punkt 7,BREITE+4,1,0,0 + Punkt 3,BREITE+4,1,0,1 + Punkt 6,BREITE+3,1,1,0 ; Pfeil nach unten + Punkt 6,BREITE+7,1,1,1 + Punkt 4,BREITE+7,1,1,1 + Punkt 4,BREITE+3,1,1,1 + Punkt 5,BREITE+2,1,1,0 + Punkt 5,BREITE+6,1,1,1 + Punkt 7,BREITE+4,1,1,0 + Punkt 3,BREITE+4,1,1,1 + Punkt BREITE-2,2,1,1,0 ; Size-Gadget + Punkt 2,2,1,1,1 + Punkt 2,BREITE-2,1,1,1 + Punkt BREITE-2,BREITE-2,1,1,1 + Punkt BREITE-2,2,1,1,1 + Punkt BREITE-5,BREITE-2,1,1,0 + Punkt BREITE-5,BREITE-5,1,1,1 + Punkt BREITE-2,BREITE-5,1,1,1 + Punkt 3,6,0,1,0 ; Pfeil nach links + Punkt 7,6,0,1,1 + Punkt 7,4,0,1,1 + Punkt 3,4,0,1,1 + Punkt 2,5,0,1,0 + Punkt 6,5,0,1,1 + Punkt 4,7,0,1,0 + Punkt 4,3,0,1,1 + Punkt BREITE+3,6,1,1,0 ; Pfeil nach rechts + Punkt BREITE+7,6,1,1,1 + Punkt BREITE+7,4,1,1,1 + Punkt BREITE+3,4,1,1,1 + Punkt BREITE+2,5,1,1,0 + Punkt BREITE+6,5,1,1,1 + Punkt BREITE+4,7,1,1,0 + Punkt BREITE+4,3,1,1,1 + Punkt -1,0,0,0,0 ; Ende + +MaxTextWin: ; Ret: x unver{ndert + ldy #5 +@10: lda @b,y + sta windowTop,y + dey + bpl @10 + rts +@b: .byte 0,199 + .word 0,319 +SetTextWin: ; Par: r2-r4 zu setzendes Textfenster + jsr GetClipRec + jsr CutRec + bcs @end + ldy #5 +@loop: lda windowTop,y + sta OldClip,y + lda r2L,y + sta windowTop,y + dey + bpl @loop + clc +@end: rts +RestoreTextWin: ldy #5 +@loop: lda OldClip,y + sta windowTop,y + dey + bpl @loop + rts + +OldClip: .word 0,0,0 +BREITEX = BREITE ; Mu~ durch 2 teilbar sein! +BREITEY = BREITEX ; Mu~ durch 2 teilbar sein! +DrawWindow: ;Darstellung eines Windows. + ; Parameter: Window-Nummer in x + ; Zur}ck: --- + ; Zerst|rt: a,x,y,a1 ..... + +DrawWindowB: cpx activeWindow + bne DrawWindowC + jsr MaxTextWin + lda #0 + .byte $2c +DrawWindowC: lda #1 + sta @flag + stx @num + jsr GetWinAdr + jsr GetWinRec3 + jsr DrawWindow2 + bcc @geht + rts +@geht: MoveB a4L,r2L ; Textfenster f}r Titelstring setzen + clc + adc #BREITEY-1 + sta r2H + lda a5L + clc + adc #3+BREITEX + sta r3L + lda a5H + adc #0 + sta r3H + lda a6L + sec + sbc #1+BREITEX*2 + sta r4L + lda a6H + sbc #0 + sta r4H + MoveW_ r3,r11 ; Titeltext einzeichnen + lda r2L + clc + adc #8 + sta r1H + jsr SetTextWin + bcs @gn + ldy #7 + lda (a0),y + sta r0L + iny + lda (a0),y + sta r0H + ldx @num + jsr PutTitle ; PrintTitle + jsr RestoreTextWin +@gn: ldy #05 +@ploop1: lda windowTop,y + pha + dey + bpl @ploop1 + ldx @num + jsr GetWorkArea + bcs @30 + jsr RestoreTextWin +@30: lda #01 ; Redraw + ldx @num + jsr SendMessage + jsr RestoreTextWin + ldy #0 +@ploop2: pla + sta windowTop,y + iny + cpy #6 + bne @ploop2 + lda @num + cmp activeWindow + bne @end + lda @flag + bne @end + jsr DrawShadow +@end: clc + rts +@num: .byte 0 +@flag: .byte 0 +PutTitle: jmp NewPutString +.if 0 + stx r14L + PushB r1H + lda rightMargin + sec + sbc leftMargin + sta r12L + lda rightMargin+1 + sbc leftMargin+1 + sta r12H + SubVW_ 6,r12 ; Breite von drei Punkten ("...") + ldx r14L + lda #0 + sta NameIndex,x + jsr StringLen +@loop: CmpW r1,r12 + bcc @geht + ldy #0 + lda (r0),y + ldx currentMode + jsr GetRealSize ; Zeichenbreite holen + tya + sta r14H + lda r1L + sec + sbc r14H + sta r1L + lda r1H + sbc #0 + sta r1H + IncW r0 + ldx r14L + inc NameIndex,x + bne @loop +@geht: PopB r1H + ldx r14L + lda NameIndex,x + beq @ganz + LoadB r14L,3 +@ploop lda #"." + jsr SmallPutChar + dec r14L + bne @ploop +@ganz: jmp NewPutString +.endif +NewRectangle: jsr GetClipRec + jsr CutRec + bcs @nicht + jsr Rectangle + clc +@nicht: rts +ClearScreen: ; L|schen des ganzen Bildschirms (mit Ausnahme von Zeile 0-14) + ; Und einzeichnen von Icons + jsr MaxTextWin + lda #Grenze_oben + sta r2L + lda #0 + sta r3L + sta r3H + LoadB r2H,199 + LoadW___ r4,319 + jmp BackgroundRectangle + +RedrawAll: ; Redraw des ganzen Bildschirms (mit Ausnahme von Zeile 0-14) + jsr ClearScreen + ldy #3 +@loop: tya + pha + lda activeWindow,y + tay + tax + lda windowsOpen,y + beq @10 + jsr DrawWindow +@10: pla + tay + dey + bpl @loop + rts +Move1stWin: ldy #5 +@loop: lda r2L,y + pha + sta r5L,y + dey + bpl @loop + jsr RemoveShadow + jsr GetWinRec + jsr RestoreRectangle + ldy #0 +@loop2: pla + sta (a0),y + iny + cpy #6 + bne @loop2 + ldx activeWindow + jmp DrawWindow + +Redraw: ldy activeWindow + lda windowsOpen,y + bne @10 + rts +@10: ldx activeWindow + jmp DrawWindow +RestoreRectangle: ; Wiederstellung des Bereichs r2-r4 durch evtl. teilweises Einzeichnen aller + ; Windows mit Ausnahme des aktiven Windows + PushW a0 + jsr MaxTextWin + jsr SetTextWin + jsr BackgroundRectangle + ldy #3 +@loop: tya + pha + lda activeWindow,y + tax + lda windowsOpen,x + beq @nicht + jsr DrawWindow +@nicht: pla + tay + dey + bne @loop + jsr MaxTextWin + PopW a0 + rts + +DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten + ; (Initialisierung) + ; Par: r2-r4 Rechteck + ; r0 : R}cksprung + ; Des: a,x,y,r0,r1,r5-r12 + ; Alt: mouseTop-mouseRight + MoveW_ r0,moveVector + jsr InvFrame + ldy #05 +@10: lda r2,y + sta moveKoords,y + dey + bpl @10 + php + sei + lda $3a + sec + sbc r3L + sta moveKoords+7 + lda $3b + sbc r3H + sta moveKoords+8 + lda $3c + sec + sbc r2L + sta moveKoords+6 + plp + ; rechter Rand = MausXOffset + MoveW_ moveKoords+7,mouseLeft + ; linker Rand = 319-(xr-xl)+MausXOffset + ; = 319-xr+xl+MausXOffSet + LoadW___ mouseRight,319 + SubW moveKoords+4,mouseRight + AddW moveKoords+2,mouseRight + AddW moveKoords+7,mouseRight + ; oberer Rand = MausYOffset+Grenze_oben + lda moveKoords+6 + clc + adc #Grenze_oben + sta mouseTop + ; unterer Rand = 199 - (yu-yo) + MausYOffSet + ; = 199 - yu + yo + MausYOffSet + lda #199 + sec + sbc moveKoords+1 + clc + adc moveKoords + clc + adc moveKoords+6 + sta mouseBottom + + LoadB moveFlag,$ff + rts +moveKoords: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0 +moveVector: .word 0 +moveFlag: .byte 0 +AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten + ; (MainLoop-Routine) + lda moveFlag + cmp #$ff + beq @10 + jmp AppRubberFrame +@10: php ; Mauszeiger bewegt? + sei + CmpW $3a,@mx + bne @20 ; >ja + lda $3c + cmp @my + beq @30 ; >nein +@20: ldy #05 ; Altes Rechteck l|schen +@25: lda moveKoords,y + sta r2,y + dey + bpl @25 + jsr InvFrame + lda r2H ; aus yu/xr mach h/b + sec + sbc r2L + sta r2H + SubW r3,r4 + MoveW_ $3a,r3 ; neues x holen + SubW moveKoords+7,r3 ; minus Mausabstandx + AddW r3,r4 ; aus b mach xr + lda $3c ; neues y holen + sec + sbc moveKoords+6 ; minus Mausabstandy + sta r2L + clc + adc r2H ; aus h mach yu + sta r2H + ldy #05 ; Neues Rechteck zeichnen +@27: lda r2,y + sta moveKoords,y + dey + bpl @27 + jsr InvFrame + MoveW_ $3a,@mx + MoveB $3c,@my +@30: plp + jmp AppRubberFrame +@mx: .word 0 +@my: .byte 0 +DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der + ; Mauszeiger-Koordinaten + ; (Initialisierung) + MoveW_ r0,moveVector + php + sei + ldy #05 +@10: lda r2,y + sta moveKoords,y + dey + bpl @10 + MoveW_ r4,$3a ; mouseX + MoveB r2H,$3c ; mouseY + ; oberer Rand = yo + 40 + lda r2L + clc + adc #40 + sta mouseTop + sta r2H + ; unterer Rand und rechter Rand auf Maximum + LoadW___ mouseRight,319 + LoadB mouseBottom,199 + ; linker Rand = ml + 40 + lda moveKoords+2 + clc + adc #40 + sta mouseLeft + lda moveKoords+3 + adc #00 + sta mouseLeft+1 + MoveB $3c,r2H + sta moveKoords+1 + lda $3a + sta moveKoords+4 + sta r4L + lda $3b + sta moveKoords+5 + sta r4H + plp + jsr InvFrame + LoadB moveFlag,$80 + rts +AppRubberFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten + ; (MainLoop-Routine) + lda moveFlag + cmp #$80 + beq @10 + rts +@10: php ; Mauszeiger bewegt? + sei + CmpW $3a,@mx + bne @20 ; >ja + lda $3c + cmp @my + beq @30 ; >nein +@20: ldy #05 ; Altes Rechteck l|schen +@25: lda moveKoords,y + sta r2,y + dey + bpl @25 + jsr InvFrame + MoveW_ $3a,r4 + MoveB $3c,r2H + + ldy #05 ; Neues Rechteck zeichnen +@27: lda r2,y + sta moveKoords,y + dey + bpl @27 + jsr InvFrame + MoveW_ $3a,@mx + MoveB $3c,@my +@30: plp + rts +@mx: .word 0 +@my: .byte 0 + +SendMessage2: jsr SendMessage + jmp MaxTextWin +SendMessage: ; a = Kommando , x = WindowNr (0-3) + sta messageBuffer + stx messageBuffer+1 + ldy #10 + lda (a0),y + tax + dey + lda (a0),y + jmp CallRoutine +GetNext: ldx #0 +@10: lda windowsOpen,x + beq @20 + inx + cpx #4 + bne @10 + sec + rts +@20: clc + rts +OpenWindow: lda windowsOpen,x + beq @10 + sec + rts +@10: txa + pha + jsr RemoveShadow + pla + tax + lda #$ff + sta windowsOpen,x + stx r0L + cpx activeWindow + beq @13 + ldy #0 + txa +@11: ldx activeWindow,y + sta activeWindow,y + tya + beq @11a + cpx r0L + beq @13 +@11a: txa + iny + cpy #04 + bne @11 +@13: ldx activeWindow + jsr DrawWindow + ldx r0L + clc + rts +CloseWindow: ; aktives Window schlie~en + ; Des: a,x,y, r5-r8, r11L + jsr RemoveShadow + ldx activeWindow + lda #00 + sta windowsOpen,x + jsr GetWinAdrRec + jsr RestoreRectangle + ldy #00 +@10: lda activeWindow,y + tax + lda windowsOpen,x + bne @15 + iny + cpy #3 + bpl @10 + ldx #$ff +@15: txa + bmi @19 + clc + jsr FrontWindow + jmp SendActivate +@19: rts + +SendActivate: lda #WN_ACTIVATE + ldx activeWindow + jmp SendMessage2 +oldMsVec: .word 0 +NewMouseService: lda mouseData ; Maus-Release? + bpl @10 ; >nein +@05: jmp @35 +@10: lda menuNumber ; Men} downgepullt ? + bne @05 ; >ja + lda moveFlag ; MoveFrame aktiv? + cmp #$ff + beq @20 ; >ja + cmp #$80 ; RubberFrame aktiv? + bne @30 ; >nein +@20: ldy #05 +@22: lda moveKoords,y + sta r2L,y + dey + bpl @22 + jsr InvFrame + LoadB moveFlag,0 + ldy #05 +@29: lda @d,y + sta mouseTop,y + dey + bpl @29 + lda moveVector + ldx moveVector+1 + jmp CallRoutine +@30: jsr CheckWindows + ldx activeWindow + lda windowsOpen,x + beq @35 + lda ghostFile + bne @34 + jsr GetWinAdr + jsr CheckClose + jsr CheckMax + jsr CheckHide + jsr CheckMove + jsr CheckSize + jsr CheckScroll_LR + jsr CheckScroll_UD +@34: jsr CheckUser +@35: jsr MaxTextWin + lda oldMsVec + ldx oldMsVec+1 + jmp CallRoutine +@d: .byte 0,199 + .word 0,319 +CheckUser: ldx activeWindow + jsr GetWorkArea + jsr IsMseInRegion ; Maus innerhalb der Arbeitsfl{che? + bne @10 ; >ja + jsr GetWinRec ; Maus trotzdem auf aktuellem Window? + jsr IsMseInRegion + bne @20 ; >ja, also otherPress u. {. umgehen + rts ; >otherPress u. {. bearbeiten +@10: lda $3a ; Mauskoordinaten relativ zum + sec ; Arbeitsrechteck ermitteln + sbc r3L + sta r3L + lda $3b + sbc r3H + sta r3H + lda $3c + sbc r2L + sta r2L + lda #WN_USER + ldx activeWindow + jsr SendMessage2 +@20: pla + pla + rts +IsMseOnGad: lda r2L + clc + adc #BREITEY + sta r2H + lda r3L + clc + adc #BREITEX + sta r4L + lda r3H + adc #00 + sta r4H + jmp IsMseInRegion +CheckClose: jsr GetWinRec + jsr IsMseOnGad ; Close-Gadget angeklickt + bne @10 ; >ja +@05: rts +@10: pla + pla + lda #WN_CLOSE + ldx activeWindow + jmp SendMessage2 +CheckMax: jsr GetWinRec + lda r4L + sec + sbc #BREITEX + sta r3L + lda r4H + sbc #00 + sta r3H + jsr IsMseOnGad ; Maximal-Gadget angeklickt + bne @10 ; >ja +@05: rts +@10: pla + pla + jsr MaxWindow + jmp Move1stWin +CheckHide: jsr GetWinRec + lda r4L + sec + sbc #BREITEX*2 + sta r3L + lda r4H + sbc #00 + sta r3H +@07: jsr IsMseOnGad ; Hide-Gadget angeklickt? + bne @10 ; >ja +@05: rts +@10: pla + pla + ldx activeWindow + jmp BackWindow + +CheckSize: jsr GetWinRec + lda r2H + sec + sbc #BREITEY + sta r2L + lda r4L + sec + sbc #BREITEX + sta r3L + lda r4H + sbc #00 + sta r3H + jsr IsMseInRegion ; Size-Gadget angeklickt + bne @10 ; >ja +@05: rts +@10: pla + pla + jsr GetWinRec + LoadW___ r0,Move1stWin + jmp DoRubber +CheckScroll_LR: jsr GetWinRec + lda r2H + sec + sbc #BREITEY + sta r2L + jsr IsMseOnGad ; Scroll_L -Gadget angeklickt + bne @10 ; >ja + beq @20 +@05: rts +@10: lda #WN_SCROLL_L + .byte $2c +@30: lda #WN_SCROLL_R + tax + pla + pla + txa + ldx activeWindow + jsr SendMessage2 + rts +@20: jsr GetWinRec + lda r2H + sec + sbc #BREITEY + sta r2L + lda r4L + sec + sbc #BREITEX*2 + sta r3L + lda r4H + sbc #00 + sta r3H + jsr IsMseOnGad ; Scroll_R -Gadget angeklickt + bne @30 ; >ja + rts +CheckScroll_UD: jsr GetWinRec + lda r2L + clc + adc #BREITEY + sta r2L + lda r4L + sec + sbc #BREITEX + sta r3L + lda r4H + sbc #00 + sta r3H + jsr IsMseOnGad ; Scroll_U -Gadget angeklickt + bne @10 ; >ja + beq @20 +@05: rts +@10: pla + pla + lda #WN_SCROLL_U + ldx activeWindow + jmp SendMessage2 +@20: jsr GetWinRec + lda r2H + sec + sbc #BREITEY*2 + sta r2L + lda r4L + sec + sbc #BREITEX + sta r3L + lda r4H + sbc #00 + sta r3H + jsr IsMseOnGad ; Scroll_D -Gadget angeklickt + bne @30 ; >ja + rts +@30: pla + pla + lda #WN_SCROLL_D + ldx activeWindow + jmp SendMessage2 +CheckMove: jsr GetWinRec + lda r2L + clc + adc #BREITEY + sta r2H + jsr IsMseInRegion ; Move-Balken angeklickt + bne @10 ; >ja +@05: rts +@10: pla + pla + jsr GetWinRec + LoadW___ r0,Move1stWin + jmp DoMove +CheckWindows: lda #0 + sta r0L + tay +@10: lda activeWindow,y + tax + lda windowsOpen,x + beq @13 + jsr GetWinAdrRec + jsr IsMseInRegion + bne @20 +@13: inc r0L + ldy r0L + cpy #4 + bne @10 +@15: rts +@20: ldy r0L + beq @15 + ldx activeWindow,y + lda #WN_ACTIVATE2 + jsr SendMessage +; jmp SendMessage ; Window aktivieren und GD's bearbeiten + pla ; Window aktivieren und GD-Bearbeitung + pla ; umgehen + rts +FrontWindow: ; Window nach vorne holen, Nummer in x + ; bei Carry = 1 wird Window x in jedem Fall neu eingezeichnet + php + txa + pha + jsr RemoveShadow + pla + tax + plp +FrontWindow2: + php + LoadB r1H,0 + sta @zw + sta @zw+1 + sta @zw+2 + sta @zw+3 + stx r1L + jsr GetWinAdr + jsr GetWinRec2 + ldy #3 + sty r0H +@10: lda r1L + cmp activeWindow,y + bne @10a + sty @y + lda r1H + sta r0L + lda #00 + sta r1H + beq @11 +@10a: lda activeWindow,y + tax + lda windowsOpen,x + beq @11 + jsr GetWinAdrRec + jsr CutRec ; Schneidet anderes Window? + bcs @11 ; > nein + ldy r0H + lda #1 + sta @zw,y + inc r1H +@11: dec r0H + ldy r0H + bpl @10 +@20: ; jetzt ist in r0L die Anzahl der offenen Windows, die hinter (unter) dem + ; nach vorne zu holenden Fenster liegen, und in r1H die Anzahl der + ; offenen Windows, die vor (}ber) dem nach vorne zu holenden + ; Window liegen. + ; in r1L steht die Nummer des neuen Front-Windows, in :y dessen + ; alter (noch aktueller) Platz in activeWindow + ; Test, ob das Window x sich mit einem anderen Window }berlappt + lda r1H ; Schneidendes Window vorhanden? + beq @26 ; >nein + plp + sec + php +@26: ldx r1L + ldy @y + jsr @sub ; activeWindow korrigieren + plp + bcc @25a + ldx activeWindow + jmp DrawWindow +@25a: jsr DrawShadow + rts +@y: .byte 0 +@sub: ; alle vor (y) liegenden Pl{tze in activeWindows r}cken um eins nach + ; hinten + cpx activeWindow + beq @s20 +@s10: lda activeWindow-1,y + sta activeWindow,y + dey + bne @s10 + stx activeWindow +@s20: rts +@zw: .byte 0, 0, 0, 0 + +BackWindow: ; aktuelles Window nach hinten setzen + ldy #3 +@loop0: lda windowsOpen,y + bne @geht + dey + bne @loop0 + rts +@geht: jsr __DispMarking + jsr __ClearMultiFile + jsr RemoveShadow + jsr MaxTextWin + ldx activeWindow + jsr GetWinAdr + jsr GetWinRec + lda activeWindow + pha +@59: ldy #00 +@60: lda activeWindow+1,y + sta activeWindow,y + iny + cpy #03 + bne @60 + pla + sta activeWindow+3 + tax + lda windowsOpen,x + beq @20 + jsr SetTextWin + ldy #2 +@loop: tya + pha + lda activeWindow,y + tax + lda windowsOpen,x + beq @10 + jsr DrawWindowC +@10: pla + tay + dey + bpl @loop +@20: ldx activeWindow + lda windowsOpen,x + bne @70 + txa + pha + jmp @59 +@70: jsr DrawShadow + jmp SendActivate +CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen + ; Rechteck 1: r2-r4 + ; Rechteck 2: r5-r7 ( bleibt unver{ndert ) + ; Ergebnis-Rechteck: r2-r4 + ; bei c = 1 keine Schnittfl{che vorhanden + ; zerst|rt: A + + ; r3 = MAX(r3,r6) + lda r6L + sec + sbc r3L + lda r6H + sbc r3H + bmi @10 +@05: MoveW_ r6,r3 +@10: ; r2L = MAX (r2L,r5L) + lda r5L + sec + sbc r2L + lda #00 + sbc #00 + bmi @20 + MoveB r5L,r2L +@20: ; r4 = MIN (r4,r7) + lda r7L + sec + sbc r4L + lda r7H + sbc r4H + bpl @30 + MoveW_ r7,r4 +@30: ; r2H = MIN (r2H,r5H) + lda r5H + sec + sbc r2H + lda #00 + sbc #00 + bpl @40 + MoveB r5H,r2H +@40: ; Schnittfl{che jetzt in r2-r4 + ; wenn r4=leftMargin? + cmp r10H + bcc @x0 ; >nein + lda r10L + cmp leftMargin + bcs @x1 ; >ja +@x0: lda leftMargin ; r14 = leftMargin-r10 + ora #%111 + sec + sbc r10L + sta r14L + lda leftMargin+1 + sbc r10H + sta r14H + bpl @a0 +@x1: LoadW___ r14L,0 ; kein Clipping links + beq @c0 +@a0: lsr r14H + ror r14L + lsr r14H + ror r14L + lsr r14H + ror r14L + inc r14L + lda leftMargin + and #%111 + eor #%111 + sta r14H + + ; jetzt steht in r14L die Anzahl der zu }berspringenden Bytes +1, und in + ; r14H die Nummer des Bits, ab dem einmaskiert werden soll +@c0: lda rightMargin ; r15 = rightMargin-r10 + ora #%111 + sec + sbc r10L + sta r15L + lda rightMargin+1 + sbc r10H + sta r15H + bpl @a1 ; wenn rightMargin < r10 + rts ; dann keine Bitmapdarstellung +@a1: lsr r15H + ror r15L + lsr r15H + ror r15L + lsr r15H + ror r15L + inc r15L + lda rightMargin + and #%111 + eor #%111 + sta r15H + ; jetzt steht in r15L die max. Anzahl der darzustellen Bytes+1, und + ; in r15H die Nummer des Bits, ab dem ausmaskiert werden soll + + LoadB r9H,0 + sta r3L + sta r4L + inc windowBottom +@01: LoadB winOutFlag,0 ; Zeile unter windowTop? + txa + pha + sec + sbc windowTop + lda #00 + sbc #00 + bmi @02 ; >nein + pla + pha + sec ; Zeile }ber windowBottom + sbc windowBottom + lda #00 + sbc #00 + bmi @03 ; >ja + LoadB r13H,1 ; Anzeige anbrechen +@02: LoadB winOutFlag,1 ; Zeile nicht anzeigen +@03: PushW r13 + PushB r14L + PushB r15L + jsr @sub ; Zeile ggf. darstellen + PopB r15L + PopB r14L + PopW r13 + pla + tax + inx ; n{chste Zeile + dec r13H + bne @01 + dec windowBottom + rts +@sub: jsr GetScanLine ; Zeilenadresse holen +;XXX lda r5H ; 80-Zeichen ? +;XXX bmi @s10 ; >nein +;XXX rts +@s10: + lda r10H + clc + adc r5H + sta r5H + +;XXX> + lda r10H + clc + adc r6H + sta r6H +; + inc r6H +; + inc r6H +;Letztes Byte maskieren + bpl @05 ; >normal ausgeben + LoadB r15L,0 ; nicht mehr ausgeben + rts +@01: stx @x + sta r15L + ldx r15H + lda (r5),y + and BitMaske0,x + pha + txa + eor #%111 + tax + lda r15L + and BitMaske2,x + sta r15L + pla + ora r15L + ldx #00 + stx r15L + ldx @x +@05: dec r14L ; Behandlung des linken Randes + beq @20 ; >erstes Byte maskieren + bpl @10 ; >noch nicht ausgeben + inc r14L ; normal ausgeben + sta (r5),y + sta (r6),y +@10: rts +@20: stx @x + sta r14L + lda r14H + eor #%111 + tax + lda (r5),y + and BitMaske3,x + pha + txa + eor #%111 + tax + lda r14L + and BitMaske1,x + sta r14L + pla + ora r14L + sta (r5),y + sta (r6),y + LoadB r14L,0 + ldx @x + rts +@x: .byte 0 +BitMaske0: .byte 0 +BitMaske1: .byte %1,%11,%111,%1111,%11111,%111111,%1111111,%11111111 +BitMaske3: .byte 0 +BitMaske2: .byte %10000000,%11000000,%11100000,%11110000 + .byte %11111000,%11111100,%11111110,%11111111 +.if 0 +MyGetScanLine: jsr GetScanLine + MoveW_ r5,Scanr5 + MoveW_ r6,Scanr6 + rts +@Scanr5: w 0 +@Scanr6: w 0 +star5: + + ; nur mit x = r5 oder x = r6 aufrufen! +Sub80: lda $00,x + pha + sec + sbc Scanr5-r5,x + sta $00,x + lda $01,x + pha + sbc Scanr5-r5+1,x + sta $00,x + tya + clc + adc $00,x + sta $00,x + bcc :10 + inc $01,x +10: lsr $01,x + ror $00,x + lsr $01,x + ror $00,x + lsr $01,x + ror $00,x + lda $00,x + sec + sbc Scanr5-r5,x + sta $00,x + lda $01,x + sbc Scanr5-r5+1,x + sta $00,x + ldy ScanMode + beq @store + + + pla + sta $01,x + pla + sta $00,x + rts + +.endif +SpeedWin: ; Aufruf von SpeedFrame mit Window x als + ; Startrechteck c = 0 + ; Zielrechteck c = 1 + jsr SpWinFrame + jmp SpeedFrame +SpeedWinMax: jsr SpWinFrame + jmp SpeedFrame +SpWinFrame: PushW a0 + php + jsr GetWinAdr + plp + bcs @10 + jsr GetWinRec + jmp @20 +@10: jsr GetWinRec2 +@20: PopW a0 + rts +NewDoIcons: MoveW_ oldMsVec,mouseVector + MoveW_ r0,iconTab + jsr DoIcons + MoveW_ curWinData,a0 + MoveW_ mouseVector,oldMsVec + LoadW___ mouseVector,NewMouseService + jmp RedrawAll +NewDoDlgBox: inc DialBoxFlag + PushW r6 + PushB r7L + jsr DoDlgBox + PopB r7L + PopW r6 + rts +BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 + lda backPattern + jsr SetPattern + jsr Rectangle + ; Einzeichnen der Icons der iconTab nur innerhalb des Rechtecks r2-r4 + ldy #05 ; Rette Textwindow +@10: lda windowTop,y ; Textwindow := r2-r4 + pha + lda r2L,y + sta windowTop,y + dey + bpl @10 + PushW a0 + MoveW_ iconTab,a0 + ldy #0 + lda (a0),y + sta @num + iny + iny ; x-K. }berlesen (low) + iny ; x-K. }berlesen (high) + iny ; y-K. }berlesen + .byte $2c ; Skip +@20: ldy #0 ; Daten des aktl. Icons auslesen: + lda (a0),y ; Bitmapadresse + sta r0L + jsr @next + sta r0H + jsr @next + sta r10L ; x-Koordinate + jsr @next + tax ; y-Koordinate + jsr @next + sta r13L ; Breite + jsr @next + sta r13H ; H|he + iny ; Routinenadresse }berlesen + iny + iny + tya + clc + adc a0L + sta a0L + lda #00 + adc a0H + sta a0H + LoadB r10H,0 ; xk:=xk*8 + asl r10L + rol r10H + asl r10L + rol r10H + asl r10L + rol r10H + jsr DrawMap ; Bitmap darstellen + dec @num + bne @20 ; und mit n{chstem Icon weitermachen + MoveW_ curWinData,a0 ; weitere Background-Rekonstruktionen + lda #WN_RESTORE ; einleiten + ldx #0 + jsr SendMessage + PopW a0 + ldy #00 +@30: lda windowTop,y ; windowTop und r2-r4 wiederherstellen + sta r2L,y + pla + sta windowTop,y + iny + cpy #06 + bne @30 + rts +@next: iny + lda (a0),y + rts +@num: .byte 0 +MaxWindow: ; actives Window auf Maximalgr|~e setzen / bzw. zur}ck + ; neue Gr|~e wird in r2-r4 }bergeben + ldy #5 +@10: lda (a0),y + cmp @w,y + bne @20 + dey + bpl @10 + ; gerettete Gr|~e setzen + ldy #05 +@15: lda @w2,y + sta r2L,y + dey + bpl @15 + rts +@20: ; Maximalgr|~e setzen + ldy #05 +@25: lda (a0),y + sta @w2,y + lda @w,y + sta r2L,y + dey + bpl @25 + rts +@w: .byte Grenze_oben,197 + .word 0,270 +@w2: .byte 50,150 + .word 100,219 +NewPutString: ldy #00 + lda (r0),y + beq @10 + cmp #$1b + beq @05 + and #$7f + cmp #$7f + beq @03 + cmp #$20 + bcs @04 +@03: lda #'*' +@04: jsr SmallPutChar +@05: IncW r0 + jmp NewPutString +@10: rts +oldRecoverVec: .word 0 +MyRecoverService: ldy #5 +@loop0: lda r2L,y + sta LastRec,y + dey + bpl @loop0 + lda DialBoxFlag + bne @10 + jmp Recover +@10: dec DialBoxFlag + rts +DialBoxFlag: .byte 0 +LastRec: .word 0,0,0 +RecoverLast: ldy #5 +@loop: lda LastRec,y + sta r2L,y + dey + bpl @loop +Recover: lda c128Flag + bpl @10 + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX +@10: AddVB 8,r2H + AddVW__ 8,r4 + ldy #5 +@loop: lda windowTop,y + pha + dey + bpl @loop + jsr RestoreRectangle + ldy #0 +@loop2: pla + sta windowTop,y + iny + cpy #6 + bne @loop2 + ldx activeWindow + lda windowsOpen,x + bne @geht + rts +@geht: jsr DrawWindowC + jmp DrawShadow +StringLen: + ; Ermittlung einer Stringl{nge in Zeichen und in Pixels + ; Par: r0 : Zeiger auf String, max. 256 Zeichen lang. + ; ( Als Endekennzeichen dient ein 0 oder ein $a0 - Byte) + ; Ret: x : Anzahl der Zeichen + ; r1 : Breite in Pixels + ; Des: a,y,r13 + lda #0 ; Arbeitsvariablen initialisieren + sta r1L + sta r1H + sta r13H + sta r13L +@10: ldy r13L ; aktl. Index holen + lda (r0),y ; aktl. Zeichen holen + beq @90 ; Ende ? >ja + cmp #$a0 + beq @90 ; Ende ? >ja + inc r13H ; Anzahl erh|hen + ldx currentMode + jsr GetRealSize ; Zeichenbreite holen + tya + clc + adc r1L ; Und zur Stringl{nge aufaddieren + sta r1L + bcc @20 + inc r1H +@20: inc r13L ; Index erh|hen + bne @10 +@90: ldx r13H + rts +;InvFrame ; Parameter: r2-r4 + ; Zur}ck: r2-r4 unver{ndert + ; Zerst|rt: a,x,y,r0,r1,r5-r12 + ;t "InvFrame" +.include "topdesk/WinInclude/InvFrame.inc" + +;SpeedFrame ; Parameter : r2-r4 Start r5-r7 Ende r8 Min Breite r9L Min H|he r9H Temp. + ; Des: a,x,y,r0-r12 + ;t "SpeedFrame" +.include "topdesk/WinInclude/SpeedFrame.inc" + +;.Windows_End +;:NewSetDevice = Windows_End +;:DispMarking = NewSetDevice+3 +;:ClearMultiFile = DispMarking+3 \ No newline at end of file diff --git a/topdesk/Main/DeskWindows.ext.inc b/topdesk/Main/DeskWindows.ext.inc new file mode 100644 index 00000000..be74ea17 --- /dev/null +++ b/topdesk/Main/DeskWindows.ext.inc @@ -0,0 +1,83 @@ +;:BackWindow = $0f24 +;:ClearScreen = $093c +;:CloseWindow = $0c41 +;:CutRec = $0f8a +;:DialBoxFlag = $14c3 +;:DoMove = $09d4 +;:DoRubber = $0b19 +;:DoWindows = $0557 +;:DrawMap = $1142 +;:DrawShadow = $0fe8 +;:DrawWindow = $0884 +;:DrawWindowB = $0884 +;:FrontWindow = $0e97 +GD_CLOSE = $02 +GD_HIDE = $40 +GD_MAX = $04 +GD_MOVE = $01 +GD_SCROLL_LR = $10 +GD_SCROLL_UD = $20 +GD_SIZE = $08 +;:GetClipRec = $061a +;:GetModule = $044e +;:GetNext = $0bf7 +;:GetReg = $1716 +;:GetWinAdr = $05ef +;:GetWinAdrRec = $05e9 +;:GetWinAdrRecImp = $05e3 +;:GetWinRec = $0607 +;:GetWinRec2 = $060a +;:GetWorkArea = $1003 +Grenze_oben = $0f +;:MaxTextWin = $0845 +;:MaxWindow = $1452 +;:ModStartAdress = $0449 +;:MyClass = $0436 +;:MyCurRec = $0447 +;:MyName = $0426 +;:NameIndex = $0553 +;:NewDoDlgBox = $1392 +;:NewDoIcons = $1356 +;:NewPutString = $1487 +;:NewRectangle = $092f +;:NoClipFlag = $0626 +;:OpenWindow = $0c07 +;:Pr}fSumme = $0400 +::RamStart = $0402 +::Recover = $14d5 +::RecoverLast = $14ca +;:Redraw = $0997 +;:RedrawAll = $0958 +;:RemoveShadow = $0fe8 +;:RestoreRectangle = $09a6 +;:RestoreTextWin = $0872 +;:SearchDeskTop = $044b +;:SetReg = $170a +;:SetTextWin = $0857 +;:SpeedWin = $132d +;:SpeedWinMax = $1333 +;:StringLen = $151e +;:UnPackMap = $113a +WN_ACTIVATE = $06 +WN_ACTIVATE2 = $0e +WN_CLOSE = $04 +WN_HIDE = $0c +WN_MAX = $05 +WN_MOVE = $02 +WN_REDRAW = $01 +WN_RESTORE = $07 +WN_SCROLL_D = $0b +WN_SCROLL_L = $09 +WN_SCROLL_R = $08 +WN_SCROLL_U = $0a +WN_SIZE = $03 +WN_USER = $0d +;:Windows_End = $17be +;:activeWindow = $053a +;:backPattern = $0548 +;:curWinData = $0549 +;:ghostFile = $0448 +;:iconTab = $0551 +;:messageBuffer = $053e +;:newAppMain = $054f +;:windowsOpen = $054b diff --git a/topdesk/Main/Dos.lnk.txt b/topdesk/Main/Dos.lnk.txt new file mode 100644 index 00000000..8ee38a10 --- /dev/null +++ b/topdesk/Main/Dos.lnk.txt @@ -0,0 +1,14 @@ + n "Dos" + m + - "Dos.res" + - "DeskMod A" + - "DeskMod B" + - "DeskMod C" + - "DeskMod D" + - "DeskMod E" + - "DeskMod F" + - "DeskMod G" + - "DeskMod H" + - "DeskMod I" + - "DeskMod J" + / diff --git a/topdesk/Main/Ende.s b/topdesk/Main/Ende.s new file mode 100644 index 00000000..dbb1dae9 --- /dev/null +++ b/topdesk/Main/Ende.s @@ -0,0 +1,2 @@ +n "Ende" +Ende diff --git a/topdesk/MultiFileIcon.bf b/topdesk/MultiFileIcon.bf new file mode 100644 index 0000000000000000000000000000000000000000..1f7ce117bd0311dd83a77acfeaf063a16c4e99a4 GIT binary patch literal 64 zcmdo0|Ns9621X!S(8#&5(Q(z%%q2@b7eLTlO`v#t0Aq^)V@oh&dq`tTcwxT{{R0P2IfeH)Xo1-rvIOMfI;{F|I-Z&ZjJwZH!wssFqHoP{|Z?> E09y7U82|tP literal 0 HcmV?d00001 diff --git a/topdesk/Protect/Desksub0.s b/topdesk/Protect/Desksub0.s new file mode 100644 index 00000000..8eb35e30 --- /dev/null +++ b/topdesk/Protect/Desksub0.s @@ -0,0 +1,30 @@ + n "Desksub0" +if .p + t "TopSym" + t "TopMac(a)" +endif + ; o 9806 + s 9806-$400 +:Start LoadW r0,:menu + lda #0 + jsr DoMenu + LoadW appMain,:10 + rts +::menu b 0,14 + w 0,100 + b 1 + w :t1 + b MENU_ACTION + w ReDoMenu +::t1 b "geos",0 +::10 jsr DeProtectDisk + LoadW r6,TopName + LoadB r0L,0 + jsr GetFile + jmp EnterDeskTop +:TopName b "TopDesk",0 + + t "RemProtection.s" + +:CopyProtection d "RemProt.mod" +:CopyProtectionEnd diff --git a/topdesk/Protect/RemProt.mod.s b/topdesk/Protect/RemProt.mod.s new file mode 100644 index 00000000..31f9a70d --- /dev/null +++ b/topdesk/Protect/RemProt.mod.s @@ -0,0 +1,113 @@ +if .p + t "TopSym" + t "TopMac(a)" +:NewDataSign = $9 +:OldDataSign = $7 +:EndTrack = 6 +:IndexTrack = 10 +:IndexSektor = 00 +endif + n "RemProt.mod" + o $0300 +:Start jsr SetCopyProtection + jsr LedOn + LoadB $08,IndexTrack + LoadB $09,IndexSektor + LoadB $01,$80 +::waitjob lda $01 + bmi :waitjob + cmp #2 + bcs :joberr + ldy #0 +::loop lda $0404,y + sta $0402,y + iny + cpy #$fc + bcc :loop + LoadB $01,$90 +::waitjob2 lda $01 + bmi :waitjob2 + cmp #2 + bcs :joberr + rts +::joberr ldx #1 + jmp $e60a +:Track b 2 +:Sektor b 0 +:TrackArea b 3 +:DataSignRW b NewDataSign,OldDataSign +:Job b 0 + :LedOn lda $1c00 + ora #%0000 1000 + sta $1c00 + rts +:LedOff lda $1c00 + and #%1111 0111 + sta $1c00 + rts +:SetCopyProtection +::nextblock jsr LedOn + MoveB DataSignRW,$47 + LoadB Job,$80 + jsr ReadWriteBlocks + cmp #2 + bcs :joberr + MoveB DataSignRW+1,$47 + LoadB Job,$90 + jsr ReadWriteBlocks + cmp #2 + bcs :joberr + jsr LedOff + inc Sektor + lda Sektor + cmp #8 + bcc :nextblock + LoadB Sektor,0 + inc Track + lda Track + cmp $fed7,y + bcc :testend + dey + sty TrackArea +::testend cmp #EndTrack + bcc :nextblock +::end LoadB $47,OldDataSign + rts +::joberr pha + jsr :end + pla + inx + jmp $e60a + :ReadWriteBlocks ldx #0 +::readnext jsr :setjob + bcs :next + lda $01,x + cmp #2 + bcs :err +::next inx + cpx #3 + bcc :readnext + lda #1 +::err rts +::setjob txa + asl + tay + asl + asl + clc + adc Sektor + sta $09,y + pha + lda Track + sta $08,y + pla + ldy TrackArea + cmp $fed1,y + bcs :end + lda Job + sta $01,x +::waitjob lda $01,x + bmi :waitjob + clc +::end rts +.CopyProtectionEnd diff --git a/topdesk/Protect/RemProtection.s b/topdesk/Protect/RemProtection.s new file mode 100644 index 00000000..8e0e6957 --- /dev/null +++ b/topdesk/Protect/RemProtection.s @@ -0,0 +1,104 @@ +if .p +:WaitTime = $2000 +:SetFilePar = $ffba +:SetFileName = $ffbd +:Open = $ffc0 +:Close = $ffc3 +:Listen = $ffb1 +:SecListen = $ff93 +:UnListen = $ffae +:Talk = $ffb4 +:SecTalk = $ff96 +:UnTalk = $ffab +:IECIn = $ffa5 +:IECOut = $ffa8 +endif + :DeProtectDisk jsr PurgeTurbo + jsr InitForIO + lda #$01 ;Open + ldx curDrive + ldy #$6f + jsr SetFilePar + lda #$00 + jsr SetFileName + jsr Open + LoadW a0,CopyProtection + LoadW a1,$0300 +::loop lda curDrive + jsr Listen + lda #$6f + jsr SecListen + lda #"M" + jsr IECOut + lda #"-" + jsr IECOut + lda #"W" + jsr IECOut + lda a1L + jsr IECOut + lda a1H + jsr IECOut + lda #1 + jsr IECOut + ldy #0 + lda (a0),y + jsr IECOut + lda curDrive + jsr UnListen + IncW a0 + IncW a1 + CmpWI a0,CopyProtectionEnd + bcc :loop + lda curDrive + jsr Listen + lda #$6f + jsr SecListen + lda #"M" + jsr IECOut + lda #"-" + jsr IECOut + lda #"E" + jsr IECOut + lda #0 + jsr IECOut + lda #3 + jsr IECOut + lda curDrive + jsr UnListen + LoadB $90,0 + lda curDrive + jsr Talk + lda #$6f + jsr SecTalk + jsr IECIn + sec + sbc #$30 + asl + sta a1H + asl + asl + clc + adc a1H + sta a1H + jsr IECIn + sec + sbc #$30 + clc + adc a1H + sta a1H +::40 jsr IECIn + bit $90 + bvc :40 + lda curDrive + jsr UnTalk + lda #$01 + jsr Close + jsr DoneWithIO + ldx a1H + bne :err + LoadW r0,WaitTime +::waitloop ldx #r0L + jsr Ddec + bne :waitloop + jmp OpenDisk +::err rts diff --git a/topdesk/Protect/SetProt.mod.s b/topdesk/Protect/SetProt.mod.s new file mode 100644 index 00000000..eca92fe5 --- /dev/null +++ b/topdesk/Protect/SetProt.mod.s @@ -0,0 +1,89 @@ +if .p + t "TopSym" + t "TopMac(a)" +:NewDataSign = $9 +:OldDataSign = $7 +:EndTrack = 6 +endif + n "SetProt.mod" + o $0300 +:Start jmp SetCopyProtection +:Track b 2 +:Sektor b 0 +:TrackArea b 3 +:DataSignRW b OldDataSign,NewDataSign +:Job b 0 + :LedOn lda $1c00 + ora #%0000 1000 + sta $1c00 + rts +:LedOff lda $1c00 + and #%1111 0111 + sta $1c00 + rts +:SetCopyProtection +::nextblock jsr LedOn + MoveB DataSignRW,$47 + LoadB Job,$80 + jsr ReadWriteBlocks + cmp #2 + bcs :joberr + MoveB DataSignRW+1,$47 + LoadB Job,$90 + jsr ReadWriteBlocks + cmp #2 + bcs :joberr + jsr LedOff + inc Sektor + lda Sektor + cmp #8 + bcc :nextblock + LoadB Sektor,0 + inc Track + lda Track + cmp $fed7,y + bcc :testend + dey + sty TrackArea +::testend cmp #EndTrack + bcc :nextblock +::end LoadB $47,OldDataSign + rts +::joberr pha + jsr :end + pla + inx + jmp $e60a + :ReadWriteBlocks ldx #0 +::readnext jsr :setjob + bcs :next + lda $01,x + cmp #2 + bcs :err +::next inx + cpx #3 + bcc :readnext + lda #1 +::err rts +::setjob txa + asl + tay + asl + asl + clc + adc Sektor + sta $09,y + pha + lda Track + sta $08,y + pla + ldy TrackArea + cmp $fed1,y + bcs :end + lda Job + sta $01,x +::waitjob lda $01,x + bmi :waitjob + clc +::end rts +.CopyProtectionEnd diff --git a/topdesk/Protect/SetProtection.s b/topdesk/Protect/SetProtection.s new file mode 100644 index 00000000..1318e4e0 --- /dev/null +++ b/topdesk/Protect/SetProtection.s @@ -0,0 +1,106 @@ +if .p +:WaitTime = $2000 +:SetFilePar = $ffba +:SetFileName = $ffbd +:Open = $ffc0 +:Close = $ffc3 +:Listen = $ffb1 +:SecListen = $ff93 +:UnListen = $ffae +:Talk = $ffb4 +:SecTalk = $ff96 +:UnTalk = $ffab +:IECIn = $ffa5 +:IECOut = $ffa8 +endif + :ProtectDisk lda #8 + jsr SetDevice + jsr PurgeTurbo + jsr InitForIO + lda #$01 ;Open + ldx curDrive + ldy #$6f + jsr SetFilePar + lda #$00 + jsr SetFileName + jsr Open + LoadW a0,CopyProtection + LoadW a1,$0300 +::loop lda curDrive + jsr Listen + lda #$6f + jsr SecListen + lda #"M" + jsr IECOut + lda #"-" + jsr IECOut + lda #"W" + jsr IECOut + lda a1L + jsr IECOut + lda a1H + jsr IECOut + lda #1 + jsr IECOut + ldy #0 + lda (a0),y + jsr IECOut + lda curDrive + jsr UnListen + IncW a0 + IncW a1 + CmpWI a0,CopyProtectionEnd + bcc :loop + lda curDrive + jsr Listen + lda #$6f + jsr SecListen + lda #"M" + jsr IECOut + lda #"-" + jsr IECOut + lda #"E" + jsr IECOut + lda #0 + jsr IECOut + lda #3 + jsr IECOut + lda curDrive + jsr UnListen + LoadB $90,0 + lda curDrive + jsr Talk + lda #$6f + jsr SecTalk + jsr IECIn + sec + sbc #$30 + asl + sta a1H + asl + asl + clc + adc a1H + sta a1H + jsr IECIn + sec + sbc #$30 + clc + adc a1H + sta a1H +::40 jsr IECIn + bit $90 + bvc :40 + lda curDrive + jsr UnTalk + lda #$01 + jsr Close + jsr DoneWithIO + ldx a1H + bne :err + LoadW r0,WaitTime +::waitloop ldx #r0L + jsr Ddec + bne :waitloop + jmp OpenDisk +::err rts diff --git a/topdesk/Protect/Sources/ProtectDisk.s b/topdesk/Protect/Sources/ProtectDisk.s new file mode 100644 index 00000000..c58fef96 --- /dev/null +++ b/topdesk/Protect/Sources/ProtectDisk.s @@ -0,0 +1,102 @@ +if .p + t "TopSym" + t "TopMac(a)" +endif + n "ProtectDisk" +:Start jsr i_GraphicsString + NewPattern 2 + MovePenTo 0,0 + RectangleTo 319,199 + NewPattern 0 + MovePenTo 64,14 + RectangleTo 255,28 + FrameRecTo 64,14 + EscPutstring 68,25 + b PLAINTEXT,OUTLINEON,"ProtectDisk",PLAINTEXT," v. V. Goehrke",0 + lda driveType + beq :next + and #%1000 1111 + cmp #3 + bcs :next + lda #8 + jsr SetDevice + jmp SetCopy +::next lda driveType+1 + beq :next2 + and #%1000 1111 + cmp #3 + bcs :next2 + lda #9 + jsr SetDevice + jmp SetCopy +::next2 LoadW r0,:db + jsr DoDlgBox + jmp EnterDeskTop +::db b $81 + b DBTXTSTR,8,$10 + w :t1 + b DBTXTSTR,8,$20 + w :t2 + b OK,1,72 + b 0 +::t1 b PLAINTEXT,"Auf Lfwerk 8 oder 9 keine",0 +::t2 b "1541 oder 1571 vorhanden.",0 + :SetCopy jsr OpenDisk + stx Fehler + lda curDrive + clc + adc #"A"-8 + sta :lfwerk + MoveW r5,r0 + LoadW r1,:name + LoadW r2,16 + jsr MoveData + ldy #15 +::loop lda :name,y + cmp #$a0 + bne :noa0 + lda #0 + sta :name,y +::noa0 dey + bpl :loop +::dodb LoadW r0,:db + jsr DoDlgBox + lda r0L + cmp #CANCEL + beq :end + lda r0L + cmp #DISK + beq SetCopy + jsr OpenDisk + jsr ProtectDisk + stx Fehler + jmp :dodb +::end jmp EnterDeskTop +::db b $81 + b DBTXTSTR,8,$10 + w :t1 + b DBTXTSTR,8,$20 + w :t2 + b DBTXTSTR,8,$30 + w :t3 + b DB_USR_ROUT + w :usrrout + b OK,1,72 + b DISK,9,72 + b CANCEL,17,72 + b 0 +::t1 b PLAINTEXT,"Folgende Disk sch}tzen:",0 +::t2 b "Disk " +::lfwerk b "X:" +::name s 17 +::t3 b "Fehlernummer:",0 +::usrrout MoveB Fehler,r0L + LoadB r0H,0 + LoadW r11,140 + LoadB r1H,32+$30 + lda #$c0 + jmp PutDecimal +:Fehler b 0 + :CopyProtection d "SetProt.mod" +:CopyProtectionEnd + t "SetProtection.s" diff --git a/topdesk/Protect/Sources/SetBAM.s b/topdesk/Protect/Sources/SetBAM.s new file mode 100644 index 00000000..844644e7 --- /dev/null +++ b/topdesk/Protect/Sources/SetBAM.s @@ -0,0 +1,119 @@ +if .p + t "TopSym" + t "TopMac(a)" +endif + n "SetBAM" +:Start jsr i_GraphicsString + NewPattern 2 + MovePenTo 0,0 + RectangleTo 319,199 + NewPattern 0 + MovePenTo 64,14 + RectangleTo 255,28 + FrameRecTo 64,14 + EscPutstring 68,25 + b PLAINTEXT,OUTLINEON,"SetBAM",PLAINTEXT," v. V. Goehrke",0 + lda driveType + beq :next + and #%1000 1111 + cmp #3 + bcs :next + lda #8 + jsr SetDevice + jmp SetCopy +::next lda driveType+1 + beq :next2 + and #%1000 1111 + cmp #3 + bcs :next2 + lda #9 + jsr SetDevice + jmp SetCopy +::next2 LoadW r0,:db + jsr DoDlgBox + jmp EnterDeskTop +::db b $81 + b DBTXTSTR,8,$10 + w :t1 + b DBTXTSTR,8,$20 + w :t2 + b OK,1,72 + b 0 +::t1 b PLAINTEXT,"Auf Lfwerk 8 oder 9 keine",0 +::t2 b "1541 oder 1571 vorhanden.",0 + :SetCopy jsr OpenDisk + stx Fehler + lda curDrive + clc + adc #"A"-8 + sta :lfwerk + MoveW r5,r0 + LoadW r1,:name + LoadW r2,16 + jsr MoveData + ldy #15 +::loop lda :name,y + cmp #$a0 + bne :noa0 + lda #0 + sta :name,y +::noa0 dey + bpl :loop +::dodb LoadW r0,:db + jsr DoDlgBox + lda r0L + cmp #CANCEL + beq :end + lda r0L + cmp #DISK + beq SetCopy + jsr OpenDisk + jsr SetBAM + stx Fehler + jmp :dodb +::end jmp EnterDeskTop +::db b $81 + b DBTXTSTR,8,$10 + w :t1 + b DBTXTSTR,8,$20 + w :t2 + b DBTXTSTR,8,$30 + w :t3 + b DB_USR_ROUT + w :usrrout + b OK,1,72 + b DISK,9,72 + b CANCEL,17,72 + b 0 +::t1 b PLAINTEXT,"Systemdiskette einlegen",0 +::t2 b "Disk " +::lfwerk b "X:" +::name s 17 +::t3 b "Fehlernummer:",0 +::usrrout MoveB Fehler,r0L + LoadB r0H,0 + LoadW r11,140 + LoadB r1H,32+$30 + lda #$c0 + jmp PutDecimal +:Fehler b 0 + :SetBAM LoadB r6L,20 + LoadB r6H,0 +::next PushW r6 + jsr :alloc + PopW r6 + inc r6H + lda r6H + cmp #19 + bcc :next + jmp PutDirHead +::alloc ldy curType + and #%0000 1111 + cmp #2 + bcc :alloc1541 + jmp AllocateBlock +::alloc1541 jsr FindBAMBit + beq :10 + MoveW r6,r3 + jsr SetNextFree +::10 rts diff --git a/topdesk/Protect/TopMac(a).inc b/topdesk/Protect/TopMac(a).inc new file mode 100644 index 00000000..de50dd09 --- /dev/null +++ b/topdesk/Protect/TopMac(a).inc @@ -0,0 +1,425 @@ +:MAddW m + lda @0 + clc + adc @1 + sta @2 + lda @0+1 + adc @1+1 + sta @2+1 + / +:MSubW m + lda @0 + sec + sbc @1 + sta @2 + lda @0+1 + sbc @1+1 + sta @2+1 + / +:mpt m + w @0 + b @1 + w @2 + / +:ipt m + w @0 + b @1,@2,@3,@4 + w @5 + / +:GotoXY m + b GOTOXY + w @0 + b @1 + / +:GotoX m + b GOTOX + w @0 + / +:RectangleTo m + b RECTANGLETO + w @0 + b @1 + / +:FrameRecTo m + b FRAME_RECTO + w @0 + b @1 + / +:NewPattern m + b NEWPATTERN,@0 + / +:MovePenTo m + b MOVEPENTO + w @0 + b @1 + / +:EscPutstring m + b ESC_PUTSTRING + w @0 + b @1 + / +:LineTo m + b LINETO + w @0 + b @1 + / + :IncW m + inc @0 + bne :10 + inc @0+1 +::10 / +:DecW m + lda @0 + bne :10 + dec @0+1 +::10 dec @0 + / + ; Makrodefinitionen +; Revision 28.06.89 +; alle Branch-Befehle fkt. nicht mit +; Version 3.9 +; Makros f}r BitSetzen bzw. -L|schen +; k|nnen noch nicht verwendet werden + +:LoadB m + lda #@1 + sta @0 + / + +:LoadW m + lda #<@1 + sta @0 + lda #>@1 + sta @0+1 + / + +:MoveB m + lda @0 + sta @1 + / + +:MoveW m + lda @0 + sta @1 + lda @0+1 + sta @1+1 + / + +:add m + clc + adc #@0 + / + +:adda m + clc + adc @0 + / + +:AddB m + clc + lda @0 + adc @1 + sta @1 + / + +:AddW m + lda @0 + clc + adc @1 + sta @1 + lda @0+1 + adc @1+1 + sta @1+1 + / + + :AddVB m + lda @1 + clc + adc #@0 + sta @1 + / + +:AddVW m + lda #<@0 + clc + adc @1 + sta @1 + lda #>@0 + adc @1+1 + sta @1+1 + / + +:sub m + sec + sbc #@0 + / + +:suba m + sec + sbc @0 + / + +:SubB m + sec + lda @1 + sbc @0 + sta @1 + / + +:SubW m + lda @1 + sec + sbc @0 + sta @1 + lda @1+1 + sbc @0+1 + sta @1+1 + / + +:SubVB m + sec + lda @1 + sbc #@0 + sta @1 + / + +:SubVW m + lda @1 + sec + sbc #<@0 + sta @1 + lda @1+1 + sbc #>@0 + sta @1+1 + / + + :CmpB m + lda @0 + cmp @1 + / + +:CmpBI m + lda @0 + cmp #@1 + / + +:CmpW m + lda @0+1 + cmp @1+1 + bne :ende + lda @0 + cmp @1 +::ende + / + + +:CmpWI m + lda @0+1 + cmp #>@1 + bne :ende1 + lda @0 + cmp #<@1 +::ende1 + / + +:PushB m + lda @0 + pha + / + +:PushW m + lda @0+1 + pha + lda @0 + pha + / + + +:PopB m + pla + sta @0 + / + +:PopW m + pla + sta @0 + pla + sta @0+1 + / + +:bra m + clv + bvc @0 + / + + :bge m + bcs @0 + / + +:bgt m + beq :done + bcs @0 +::done + / + +:blt m + bcc @0 + / + +:ble m + beq @0 + bcc @0 + / + +:sbn m + ora #2^@0 + / + +:sbBn m + lda @0 + ora #2^@1 + sta @0 + / + +:sbWn m + lda @0 + ora #<2^@1 + sta @0 + lda @0+1 + ora #>2^@1 + sta @0+1 + / + +:cbn m + and #$ff-2^@0 + / + +:cbBn m + lda @0 + and #$ff-2^@1 + sta @0 + / + +:cbWn m + lda @0 + and #<$ffff-2^@1 + sta @0 + lda @0+1 + and #>$ffff-2^@1 + sta @0+1 + / + + :roln m + ldx #@0 + beq :done +::10 rol + dex + bne :10 +::done + / + +:rolBn m + ldx #@1 + beq :done +::10 rol @0 + dex + bne :10 +::done + / + +:rolWn m + ldx #@1 + beq :done +::10 rol @0 + rol @0+1 + dex + bne :10 +::done + / + +:rorn m + ldx #@0 + beq :done +::10 ror + dex + bne :10 +::done + / + +:rorBn m + ldx #@1 + beq :done +::10 ror @0 + dex + bne :10 +::done + / + +:rorWn m + ldx #@1 + beq :done +::10 ror @0+1 + ror @0 + dex + bne :10 +::done + / + + :asln m + ldx #@0 + beq :done +::10 asl + dex + bne :10 +::done + / + +:aslBn m + ldx #@1 + beq :done +::10 asl @0 + dex + bne :10 +::done + / + +:aslWn m + ldx #@1 + beq :done +::10 asl @0 + rol @0+1 + dex + bne :10 +::done + / + +:lsrn m + ldx #@0 + beq :done +::10 lsr + dex + bne :10 +::done + / + + +:lsrBn m + ldx #@1 + beq :done +::10 lsr @0 + dex + bne :10 +::done + / + +:lsrWn m + ldx #@1 + beq :done +::10 lsr @0+1 + ror @0 + dex + bne :10 +::done + / + + diff --git a/topdesk/Temp.bf b/topdesk/Temp.bf new file mode 100644 index 0000000000000000000000000000000000000000..b68dff6a56952cb96cf92459bd365063d4e0d29a GIT binary patch literal 64 scmdo0|Ns9621aBwM~QP%u;iq!m6N(W=ltTF(#1KcixXJ^oDI|q0O1}Lpa1{> literal 0 HcmV?d00001 diff --git a/topdesk/TextSprite.bf b/topdesk/TextSprite.bf new file mode 100644 index 0000000000000000000000000000000000000000..7df39582b8c4d748413f97e314c1f4eda8e10612 GIT binary patch literal 64 WcmdnbfDQaht8ZXnL_1uucS?8BpX*}urzhPyM%F@_7?jmVi7DTSV0&V?53-(yy&8fAnKyd?7Mj%UU+!eKE~Zw--mt z+qLSSYfZ(mgV~7<&P+g`d00>TpO-W>?w_1Y7V(#om0PB1Ci14wXKk?KXi*)(QBvM@ z>q<3K*9$()P;;*WE4t&4*VihRain2%Sw_?-S{rlIYI#|2bpAkg%q`A9XLyZ&Z(+(k xm)>$k3&#$#$`w4GH;sWrV!UtEV{H(j1-F&fMHv1M4Q` Date: Fri, 14 Jul 2017 22:29:45 +0200 Subject: [PATCH 009/125] Incooperated 128er version. This build binary compatible as TopDesk 1.2 TopDesk 128 1.3 --- config.inc | 3 +- topdesk/DeskInclude/CopyFile.inc | 9 +- topdesk/DeskInclude/DiskCopy.inc | 17 + topdesk/DeskInclude/EditText.inc | 19 ++ topdesk/Include/DeskMain2.inc | 375 ++++++++++++++++++++- topdesk/Include/SubDir.src.inc | 37 +- topdesk/Main/DeskTop.main.s | 539 ++++++++++++++++++++++++++++-- topdesk/Main/DeskTop.sub2.s | 4 + topdesk/Main/DeskTop.sub4.s | 13 + topdesk/Main/DeskTop.sub5.s | 107 +++++- topdesk/Main/DeskTop.sub6.s | 42 ++- topdesk/Main/DeskTop.sub7.s | 10 +- topdesk/Main/DeskWindows.akt.inc | 391 +++++++++++++++++++++- topdesk/WinInclude/InvFrame.inc | 267 +++++++++++---- topdesk/WinInclude/SpeedFrame.inc | 6 + topdesk/topdesk.cfg | 8 +- 16 files changed, 1722 insertions(+), 125 deletions(-) diff --git a/config.inc b/config.inc index ce6b28e4..3ce86519 100644 --- a/config.inc +++ b/config.inc @@ -142,7 +142,8 @@ config_inc = 1 ; throughout the code .setcpu "4510" - config128 = 1 + topdesk128 = 1 + topdesk13 = 1 .endif .ifdef custom diff --git a/topdesk/DeskInclude/CopyFile.inc b/topdesk/DeskInclude/CopyFile.inc index dfb86e2c..5e6e8a24 100644 --- a/topdesk/DeskInclude/CopyFile.inc +++ b/topdesk/DeskInclude/CopyFile.inc @@ -507,9 +507,12 @@ Search_Turbo: PushB r2L jsr NewDoDlgBox jmp @dberr @nocare: -;XXX lda SureFlag -;XXX beq @notsure -;XXX jmp @delete + +.ifdef topdesk13 + lda SureFlag + beq @notsure + jmp @delete +.endif @notsure: ;XXX LoadW___ r0, UeberschreibenBox diff --git a/topdesk/DeskInclude/DiskCopy.inc b/topdesk/DeskInclude/DiskCopy.inc index ded4cb53..14f71df4 100644 --- a/topdesk/DeskInclude/DiskCopy.inc +++ b/topdesk/DeskInclude/DiskCopy.inc @@ -481,14 +481,22 @@ InsertNewDisk: jsr OpenDisk @IZD_Dr: .byte "A",0 @IZD_t2: .byte "einlegen.",PLAINTEXT,0 InitClickingOutSide: LoadW___ r0,IDD_SDr +.ifdef topdesk128 + LoadW___ r11,74+$8000 +.else LoadW___ r11,74 +.endif LoadB r1H,75 jsr PutString MoveW_ SourceName,r0 jsr PutString jsr i_FrameRectangle .byte 82+32,88+32 +.ifdef topdesk128 + .word 8+64+$8000,14+64+$a000 +.else .word 8+64,14+64 +.endif .byte %11111111 lda VerifyFlag beq @10 @@ -498,8 +506,13 @@ ClickOutSide: lda mouseData beq @10 LoadB r2L,82+32 LoadB r2H,88+32 +.ifdef topdesk128 + LoadW___ r3,8+64+$8000 + LoadW___ r4,14+64+$a000 +.else LoadW___ r3,8+64 LoadW___ r4,14+64 +.endif jsr IsMseInRegion beq @10 lda VerifyFlag @@ -513,7 +526,11 @@ DummyDIconTab: .word 0 .byte 0,0,1,1 .word 0 DrivesIconTab: .word DrivesIcon +.ifdef topdesk128 + .byte 0,0,6+$80,16 +.else .byte 0,0,6,16 +.endif .word DrivesIconRout DrivesIconRout: LoadB sysDBData,128 jmp RstrFrmDialogue diff --git a/topdesk/DeskInclude/EditText.inc b/topdesk/DeskInclude/EditText.inc index 122a3c8b..150f9ce5 100644 --- a/topdesk/DeskInclude/EditText.inc +++ b/topdesk/DeskInclude/EditText.inc @@ -23,6 +23,17 @@ EditText: ; Text-Editierung sta Text,y @codeok: dey bpl @testcodeloop +.ifdef topdesk128 + LoadW___ r3, $8000+80 + ldx #r3 + jsr NormalizeX + MoveW_ r3, PositionXL + LoadW___ r3, $8000 + 80 + 160 + ldx #r3 + jsr NormalizeX + MoveW_ r3, PositionXR +.endif + ldy #5 @10: lda PositionYO,y sta r2L,y @@ -126,6 +137,7 @@ TextKeyRoutine: lda keyData @118: lda keyData jsr PutChar jmp NewDisplay + MouseRoutine: lda mouseData bpl @10 @05: lda oldotherPress @@ -147,13 +159,16 @@ SetTextPtr: jsr TextPosition dex dex stx ActualCharacter +.ifndef topdesk128 jsr InitForIO inc $d020 jsr DoneWithIO +.endif jsr NewDisplay LoadB keyData,30 jmp TextKeyRoutine @20: jmp NewDisplay + NewText: ; rechnet alle Zeiger neu aus und gibt alle Zeilen ab der aktuellen aus jsr RethinkText @@ -169,6 +184,7 @@ NewText: bcc @10 PopB ActualCharPointer jmp NewDisplay + NewDisplay: ; aktualisiert den Cursor jsr RethinkActChrPtr @@ -207,6 +223,7 @@ NewDisplay: @50: MoveW_ r11,stringX MoveB r1H,stringY jmp PromptOn + RethinkText: ; aktualisiert Pointer und TextLength ; Des: a,x,y,r0-r2 @@ -260,6 +277,7 @@ RethinkText: cpy #MaxZeilen bcc @30 rts + TextPosition: ; Par: r11,r1H: gew}nschte Textposition ; Ret: ActualCharacter: Zeichenposition @@ -327,6 +345,7 @@ TextPosition: stx ActualCharacter clc rts + RethinkActChrPtr: ; rechnet ActualCharPointer neu aus ldy #0 diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 4475a16e..5db80231 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -1,3 +1,156 @@ +.ifdef topdesk128 +MultiFileFlag: .byte 0 +MultiCount: .byte 0 +CheckDispMark: ; Test ob File a markiert ist + ; Par: a: Nummer des Files (0-15) + ; x: Nummer des Windows + ; Ret: c: 0: Markierung vorhanden + ; 1: " nicht " + ; a: Filenummer (0-143) + ; x: unchanged + ; Des: y + pha + lda DispMode + beq @110 + pla + stx @x + jsr GetRealPos + ldx @x + jmp CheckMark +@x: .byte 0 +@110: pla + clc + adc windowOffs,x +CheckMark: ; Test ob File a markiert ist + ; Par: a: Nummer des Files (0-143) + ; Ret: c: 0: Markierung vorhanden + ; 1: " nicht " + ; a: unchanged + ; Des: y + ldy #144 +@10: cmp MultiFileTab-1,y + beq @20 + dey + bne @10 + sec + rts +@20: clc + rts +DispMultiCount: txa + pha + ldy #5 +@loop1: lda windowTop,y + pha + dey + bpl @loop1 + jsr MaxTextWin + lda #0 + jsr SetPattern + jsr i_Rectangle + .byte 2,12 + .word 222+DOUBLE_W,236+DOUBLE_W + MoveB MultiCount,r0L + LoadB r0H,0 + LoadW___ r11,223+DOUBLE_W + LoadB r1H,9 + lda #%11000000 + jsr PutDecimal + ldy #0 +@loop2: pla + sta windowTop,y + iny + cpy #6 + bne @loop2 + pla + tax + rts +.endif + +.ifdef topdesk128 +DispMarking: ; File-Markierungen darstellen + ; Par: messageBuffer+1 : Window-Nummer + jsr MyDCFilesSub + MoveW_ a5,a3 + MoveB r2L,a2L + lda #00 +@e0: pha + ldx messageBuffer+1 + jsr CheckDispMark + bcs @e1 + ldx messageBuffer+1 + pla + cmp fileNum,x + bcs @e2 + pha + jsr GetFileRect + bcs @e1 + jsr InvertRectangle +@e1: pla +@e2: clc + adc #01 + cmp #16 + bne @e0 + rts +MyDCFilesSub: ldx messageBuffer+1 + jsr GetWorkArea + ldx messageBuffer+1 + lda xOffsL,x + clc + adc r3L + sta a5L + lda xOffsH,x + adc r3H + sta a5H + lda r2L + sec + sbc #5 + sta r2L + AddVW__ 6,r3 + rts + +GetZielPos: + ldx #6 + jsr GetPos + ldx #r6 + jsr NormalizeX + ldx #r7 + jsr NormalizeX + rts + +GetStartPos: + ldx #00 + jsr GetPos + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX + rts + +GetPos: + ldy curDrive + lda @xL-8,y + sta r3L,x + clc + adc #21 + sta r4L,x + lda @xH-8,y + sta r3H,x + adc #0 + sta r4H,x + lda @y-8,y + sta r2L,x + clc + adc #21 + sta r2H,x + rts +@xL: .byte <(STARTA_X*8),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) +@xH: .byte (>(STARTA_X*8))+$80 + .byte (>(STARTB_X*8))+$80 + .byte (>(STARTC_X*8))+$80 + .byte (>(STARTD_X*8))+$80 +@y: .byte STARTA_Y, STARTB_Y, STARTC_Y, STARTD_Y +.endif + SetWindows: jsr GotoFirstMenu PushW a0 LoadB a2L,$ff @@ -13,9 +166,22 @@ SetWindows: jsr GotoFirstMenu rts @20: asl tay +.ifdef topdesk128 + LoadW___ a1, Gentab + lda graphMode + bpl @40z + LoadW___ a1, Gentab80 +@40z: + lda (a1),y + tax + iny + lda (a1),y + stx a1L +.else lda Gentab,y sta a1L lda Gentab+1,y +.endif sta a1H ldy #03 @25: sty @y @@ -53,6 +219,21 @@ Gentab: .word @tab1,@tab2,@tab3,@tab4 WindPos 15,105,138,272 WindPos 107,197,2,136 WindPos 107,197,138,272 + +.ifdef topdesk128 +Gentab80: .word @tab5,@tab6,@tab7,@tab8 +@tab5: WindPos 15,197,2*2,272*2 +@tab6: WindPos 107,197,2*2,272*2 + WindPos 15,105,2*2,272*2 +@tab7: WindPos 15,105,138*2,272*2 + WindPos 15,105,2*2,136*2 + WindPos 107,197,2*2,272*2 +@tab8: WindPos 15,105,2*2,136*2 + WindPos 15,105,138*2,272*2 + WindPos 107,197,2*2,136*2 + WindPos 107,197,138*2,272*2 +.endif + SwapFile: jsr GetAktlDisk tax beq @05 @@ -161,6 +342,7 @@ DeleteDir: ; Unterverzeichnis mit Kenn-Nr. a1L l|schen tya tax rts + NewPutDecimal: ; Par: r0 Zahl ; r11/r1H Position ; a Bit 7: 0 - rechstb}ndig, Bit 0-5 Breite des Ausgabefeldes @@ -170,6 +352,10 @@ NewPutDecimal: ; Par: r0 Zahl PushB r1H txa pha +.ifdef topdesk128 + ldx #r11 + jsr NormalizeX +.endif lda #0 pha LoadW___ r1,10 @@ -213,6 +399,7 @@ NewPutDecimal: ; Par: r0 Zahl PopB r1H jmp NewPutString @zahl: .byte 0,0,0,0,0,0 + GetWinName: ; Ermittlung des Fenstertitelstring ; Par: a: Fensternummer ; Ret: r1: Pointer auf String @@ -295,6 +482,7 @@ GetWinDisk: ; Diskettennamen aus dem Pfadnamen eines Fensters ermitteln sta DiskName,y lda r2L rts + GetEqualWindows: ; Ermittlung der Fensternummern, deren Pfadname genau mit dem ; Pfadnamen eines bestimmten Fensters }bereinstimmt ; Par: x: FensterNummer @@ -357,8 +545,14 @@ GetEqualWindows: ; Ermittlung der Fensternummern, deren Pfadname genau mit dem @50: dey bpl @loop rts + +.ifdef topdesk128 +ClxL = 240 + DOUBLE_W +ClxR = 319 + DOUBLE_W +.else ClxL = 240 ClxR = 319 +.endif ClyO = 1 ClyU = ClyO+12 TimeX = 55 @@ -481,6 +675,7 @@ MyMonat: .byte 0 MyTag: .byte 0 MyStd: .byte 0 MyMin: .byte 0 + CopyService: pha ldx messageBuffer+1 jsr GetWinDisk @@ -546,7 +741,13 @@ DispDCFName: PushB dispBufferOn jsr SetPattern jsr i_Rectangle .byte 0,13 +.ifdef topdesk128 + .word 0 +DispMenuRight: + .word 214 +.else .word 0,MAIN_RIGHT +.endif lda #$ff jsr FrameRectangle jsr MaxTextWin @@ -674,6 +875,7 @@ DeleteSub: ; Par: a: File-Nummer @t2: .byte "ist schreibgesch}tzt",0 @t3: .byte "und kann nicht gel|scht",0 @t4: .byte "werden.",0 + BubbleSort: ; Sortieren von Byte-Werten in absteigender Reihenfolge ; Par: r2: Zeiger auf zu sortierenden Bereich ; EndeKennzeichen: $ff @@ -754,6 +956,7 @@ GetDisk: ;Die einem Fenster zugeh|rige Diskette wird zur Verf}gung gestellt ldx #0 clc rts + FehlerAusgabe2: ; Fehler, mit autom. Schlie~en des Fensters messageBuffer+1 ldy messageBuffer+1 lda #0 @@ -816,6 +1019,7 @@ FehlerAusgabe: ; Dialogbox-Anzeige f}r Diskettenfehlermeldungen jsr RedrawAll PopB messageBuffer+1 rts + @db: .byte $81 .byte $01,17,72 .byte $0b,$10,14 @@ -851,11 +1055,24 @@ FehlerAusgabe: ; Dialogbox-Anzeige f}r Diskettenfehlermeldungen @et4: .byte "unpassende Dateistruktur",0 @notext: .byte 0 GenTab: .byte 0,0,0,0 +.ifdef topdesk128 +GenData: .word GenTab,DARecSpace +.else GenData: .word GenTab,$7f80 +.endif + MySubMenuDA: LoadW___ GenData+2,DARecSpace bne MySub2 +.ifdef topdesk128 +MySubMenu: LoadW___ GenData+2,DARecSpace +.else MySubMenu: LoadW___ GenData+2,$7f80 -MySub2: pla +.endif +MySub2: +.ifdef topdesk128 + LoadB MyCurRec, 0 +.endif + pla clc adc #1 sta @r0 @@ -864,6 +1081,9 @@ MySub2: pla adc #0 sta @r0+1 sta r0H +.ifdef topdesk128 + jsr MoveShortCuts +.endif LoadB OpenDiskFlag,1 ldy #00 lda (r0),y @@ -916,6 +1136,7 @@ MySub2: pla MoveW_ @r0,RecoverVector rts @r0: .word 0 + SaveFG: ; Vordergrundbereich retten ; r0: Zeiger auf Tabelle der Rechteckdaten ; r1: Zeiger auf Ablagebereich @@ -931,6 +1152,9 @@ RecvFG: ; Vordergrundbereich wiederherstellen lda dispBufferOn pha LoadB dispBufferOn,%10000000 +.ifdef topdesk128 + jsr HideOnlyMouse +.endif ldy #01 lda (r0),y sta r2L @@ -939,16 +1163,38 @@ RecvFG: ; Vordergrundbereich wiederherstellen ldy #00 lda (r0),y sta r2H -@10: asl +@10: +.ifdef topdesk128 + ldx r5H + bmi @11 + tay + clc + bcc @12 +@11: +.endif + asl asl asl tay +.ifdef topdesk128 +@12: +.endif PushW r5 bcc @14 - inc r5H + inc r5H @14: lda r3L beq @15 - lda (r5),y +.ifdef topdesk128 + lda r5H + bmi @64a + jsr ldar5yM + jmp @n10 +@64a: + lda (r5),y +@n10: +.else + lda (r5),y +.endif ldy #00 sta (r1),y jmp @16 @@ -956,7 +1202,17 @@ RecvFG: ; Vordergrundbereich wiederherstellen ldy #00 lda (r1),y ldy r3H - sta (r5),y +.ifdef topdesk128 + tax + lda r5H + bmi @64b + txa + jsr star5yM + jmp @16 +@64b: + txa +.endif + sta (r5),y @16: PopW r5 IncW r1 inc r2H @@ -972,6 +1228,115 @@ RecvFG: ; Vordergrundbereich wiederherstellen pla sta dispBufferOn rts + +.ifdef topdesk128 + +ldar5yM: + tya + pha + txa + pha + DecW r5 + ;lda (r5),y + tya + clc + adc r5L + php + ldx #$13 + jsr SetReg + dex + plp + lda r5H + adc #0 + jsr SetReg + ldx #$1f + jsr GetReg + jsr GetReg + sta @b + IncW r5 + pla + tax + pla + tay + lda @b + rts +@b: .byte 0 + +star5yM: + sta @b + tya + pha + txa + pha + ;sta (r5), y + tya + clc + adc r5L + php + ldx #$13 + jsr SetReg + dex + plp + lda r5H + adc #0 + jsr SetReg + ldx #$1f + lda @b + jsr SetReg + ldx #$12 + jsr GetReg + pla + tax + pla + tay + rts +@b: .byte 0 + +MoveShortCuts: + ldy #4 + lda (r0),y + sta r3L + iny + lda (r0),y + sta r3H + iny + lda (r0),y + and #$3f + sta r2H + iny + SubVW_ 25,r3 +@loop2: + sty r2L + lda (r0),y + sta r1L + iny + lda (r0),y + sta r1H + ldy #0 +@loop: + lda (r1),y + beq @next + cmp #GOTOX + beq @habs + iny + bne @loop +@habs: + iny + lda r3L + sta (r1),y + iny + lda r3H + sta (r1),y +@next: + lda r2L + clc + adc #5 + tay + dec r2H + bne @loop2 + rts +.endif + SubDir1List: ; SubDirxLists m}ssen aufeinander folgen! SubDir2List = SubDir1List + 64 SubDir3List = SubDir2List + 64 diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index 90c79a64..bd9b648c 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -54,9 +54,13 @@ ; g}ltig! FindDirFiles: -;XXX MoveW_ r3,@r3 ; Kn 22.9.91 +.ifdef topdesk13 + MoveW_ r3,@r3 ; Kn 22.9.91 +.endif @10: -;XXX MoveW_ @r3,r3 +.ifdef topdesk13 + MoveW_ @r3,r3 +.endif LoadB r14L,0 jsr DiskInitTurboIO txa @@ -75,10 +79,12 @@ FindDirFiles: bne @100 @allesvoll: ldx #$00 @100: jsr DoneWithIO -;XXX cpx #$50 ; Kn 22.9.91 -;XXX bne @125 -;XXX jmp @10 -;XXX@125: +.ifdef topdesk13 + cpx #$50 ; Kn 22.9.91 + bne @125 + jmp @10 +@125: +.endif rts @200: jsr ReadTrScBlock txa @@ -91,7 +97,9 @@ FindDirFiles: bne @200 ; Kn 7.5.91 @99: ldx #$00 @1000: rts -;XXX @r3: .word 0 ; Kn 22.9.91 +.ifdef topdesk13 + @r3: .word 0 ; Kn 22.9.91 +.endif TrSc: .word 0 ; SortDirFiles ; (Kn 7.5.91 Copy31Byte weggek}rzt!) @@ -141,7 +149,8 @@ SortInBuffer: ; MoveW_ r3,r0 bit r10L bmi @15 -.if 0 + +.ifdef topdesk13 ldy #1 ; Kn 22.9.91: autom. l|schen von lda (r5),y ; tempor{r-Dateien beq @16a @@ -431,11 +440,13 @@ ChangeDrive: sta @a LoadB r3L,0 jsr StashRAM @60: rts + @a: .byte 0 @x: .byte 0 @y: .byte 0 @ramdrivetyp: .byte 0 @rambase: .byte 0 + Change: pha tay lda DriverHigh-8,y @@ -459,11 +470,11 @@ Change: pha bpl @NoRAM lda r0L jsr SetDevice - +.ifndef topdesk13 ldy curDrive lda driveType,y sta curType - +.endif jmp @RAM @NoRAM: lda r0L @@ -471,7 +482,9 @@ Change: pha @RAM: ldy curDrive pla sta driveType-8,y -;XXX sta curType +.ifdef topdesk13 + sta curType +.endif pla sta ramBase-8,y pla @@ -1101,7 +1114,7 @@ CLS: ldy #r15H-r0L bpl @64 jsr i_Rectangle .byte 0,199 - .word 0,319|DOUBLE_W|ADD1_W + .word 0,319|DOUBLE_W|ADD1_W rts @64: jsr i_Rectangle .byte 0,199 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index dca9f15f..0fcdf9bc 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -18,6 +18,7 @@ ; d "DeskWin $400" .include "topdesk/Main/DeskWindows.akt.inc" + ; n "Dos.res" ; c "TopDesk V1.3" __NewSetDevice: @@ -26,6 +27,7 @@ __DispMarking: jmp DispMarking __ClearMultiFile: jmp ClearMultiFile + .include "topdesk/DeskInclude/CopyFile.inc" .include "topdesk/DeskInclude/SearchDisk.inc" .include "topdesk/DeskInclude/SizeRectangle.inc" @@ -143,19 +145,42 @@ __ClearMultiFile: .global SearchDeskTop .global __STARTUP_RUN__ +.ifdef topdesk128 +.global TypTab +.global SchmalFlag +.endif __STARTUP_RUN__: + Start: -;XXX lda RamTopFlag -;XXX bne @10 -;XXX ldy #4 -;XXX@tloop: lda @t,y -;XXX cmp $81a0,y -;XXX bne @10 -;XXX dey -;XXX bpl @tloop -;XXX LoadB SureFlag,1 -@10: lda mouseData +.ifdef topdesk128 + jsr SetMyNewMode +.endif +.ifdef topdesk13 + lda RamTopFlag +.ifdef topdesk128 + beq @05 + lda oldGraphMode + cmp graphMode + beq @10 + jsr SwitchWin + jmp @10 +@05: + jsr StartWin +.endif + ldy #4 +@tloop: lda @t,y + cmp $81a0,y + bne @10 + dey + bpl @tloop + LoadB SureFlag,1 +.endif +@10: +.ifdef topdesk128 + MoveB graphMode, oldGraphMode +.endif + lda mouseData ora #$80 sta mouseData @@ -173,7 +198,9 @@ Start: bne @loop @02: jmp StartUp -;XXX @t: .byte "SURE",$0d +.ifdef topdesk13 + @t: .byte "SURE",$0d +.endif Loadr0AX: sta r0L stx r0H @@ -186,7 +213,11 @@ MoveWr1r0: MoveW_ r1,r0 OpenDiskFlag: .byte 0 DiskDriverFlag: .byte 0 -NewSetDevice: ldy DiskDriverFlag +NewSetDevice: +.ifdef topdesk128 + jmp SetDevice +.else + ldy DiskDriverFlag bpl @04 rts @04: bne @10 @@ -232,6 +263,7 @@ NewSetDevice: ldy DiskDriverFlag bcc @30 txa jmp SetDevice +.endif CopyMemHigh: .byte $7f CopyMemLow: .byte $60 @@ -287,6 +319,7 @@ SetColor: lda screencolors ; Farben wiederherstellen .word 1000,$8c00 @col: .byte 0 rts + University: ;d "University 6" .incbin "topdesk/university6.fnt" @@ -294,6 +327,9 @@ BitMap: ;j .incbin "topdesk/BitMap.bf" BitX = 3 BitY = 15 +.ifdef topdesk128 + .byte 21 +.endif TrashMap: ;j .incbin "topdesk/TrashMap.bf" TrashX = 3 @@ -407,7 +443,9 @@ StartUp: lda #7 rts ModDepth: .byte 0 RamTopFlag: .byte 0 -;XXXSureFlag: .byte 0 +.ifdef topdesk13 +SureFlag: .byte 0 +.endif GetTextService: ldx #6 ; im Akku Nr. des Anzeigemodus .byte $2c ; }bergeben @@ -539,18 +577,192 @@ StashMain: lda RamTopFlag dey bpl @loop JmpMod 10,2 +.ifdef topdesk128 + +oldGraphMode: .byte 0 + +.macro wb argx, argy + .word argx + .byte argy +.endmacro + +.macro ww arg1, arg2 + wb arg1, <(arg2) + wb arg1+1, >(arg2) +.endmacro + +Switch: + jsr GotoFirstMenu + lda graphMode + eor #$80 + sta graphMode + sta oldGraphMode + jsr SetNewMode + jsr SetMyNewMode + jsr SetColor + jsr RedrawHead + jsr DispMultiCount + jsr SwitchWin + jmp RedrawAll +SwitchWin: + lda graphMode + bpl @g40 + jsr G80 + jmp @10 +@g40: + lda #' ' + sta SchmalFlag + jsr G40 +@10: + rts +G40: + LoadW___ r0, Window1 + jsr Halbieren + LoadW___ r0, Window2 + jsr Halbieren + LoadW___ r0, Window3 + jsr Halbieren + LoadW___ r0, Window4 + jmp Halbieren +G80: + LoadW___ r0, Window1 + jsr Doppeln + LoadW___ r0, Window2 + jsr Doppeln + LoadW___ r0, Window3 + jsr Doppeln + LoadW___ r0, Window4 + jmp Doppeln +SetMyNewMode: + lda graphMode + bpl @40 +@80: + LoadW___ r0, @tab2 + jmp @10 +@40: + LoadW___ r0, @tab1 +@10: + ldy #0 + lda (r0),y + sta r1L + iny + lda (r0),y + sta r1H + ora r1L + beq @end + iny + lda (r0),y + ldy #0 + sta (r1),y + AddvW 3, r0 + jmp @10 +@end: + rts + +@tab1: + wb IconTab+6,(39-TrashX) + wb IconTab+14,2 + wb IconTab+22,STARTA_X + wb IconTab+30,STARTB_X + wb IconTab+38,STARTC_X + wb IconTab+46,STARTD_X + ww RightMax, 319 + wb GraphIndex, 8 +; ww HauptMenu+4,182 +; ww DispMenuRight,182 + ww HauptMenu+4,214 + ww DispMenuRight,214 + ww geosoben+4,80 + ww Datei_Menue+2+3,28 + ww Datei_Menue+4+3,112 +; ww Anzeige_Menue+2+3,48 + ww Anzeige_Menue+2+3,57 +; ww Anzeige_Menue+4+3,161 + ww Anzeige_Menue+4+3,170 +; ww Disk_Menue+2+3,79 + ww Disk_Menue+2+3,98 +; ww Disk_Menue+4+3,161 + ww Disk_Menue+4+3,180 +; ww WindowMenue+2+3,103 + ww WindowMenue+2+3,137 +; ww WindowMenue+4+3,222 + ww WindowMenue+4+3,256 +; ww Speziell_Menue+2+15,145 + ww Speziell_Menue+2+15,174 +; ww Speziell_Menue+4+15,238 + ww Speziell_Menue+4+15,267 + .word 0 + +@tab2: + wb IconTab+6,(39-TrashX)*2 + wb IconTab+14,2*2 + wb IconTab+22,STARTA_X*2 + wb IconTab+30,STARTB_X*2 + wb IconTab+38,STARTC_X*2 + wb IconTab+46,STARTD_X*2 + ww RightMax,639 + wb GraphIndex,1 +; ww HauptMenu+4,237 + ww HauptMenu+4,286 +; ww DispMenuRight,237 + ww DispMenuRight,286 + ww geosoben+4,104 +; ww Datei_Menue+2+3,37 + ww Datei_Menue+2+3,36 +; ww Datei_Menue+4+3,149 + ww Datei_Menue+4+3,145 +; ww Anzeige_Menue+2+3,63 + ww Anzeige_Menue+2+3,73 +; ww Anzeige_Menue+4+3,214 + ww Anzeige_Menue+4+3,224 +; ww Disk_Menue+2+3,103 + ww Disk_Menue+2+3,127 +; ww Disk_Menue+4+3,213 + ww Disk_Menue+4+3,234 +; ww WindowMenue+2+3,134 + ww WindowMenue+2+3,177+7 +; ww WindowMenue+4+3,293 + ww WindowMenue+4+3,332+7 +; ww Speziell_Menue+2+15,189 + ww Speziell_Menue+2+15,226+8 +; ww Speziell_Menue+4+15,314 + ww Speziell_Menue+4+15,346+8 + .word 0 +.endif + + -STARTA_X = 39-BitX +STARTA_X = (39-BitX) STARTA_Y = 32 -STARTB_X = 39-BitX +STARTB_X = (39-BitX) STARTB_Y = 64 -STARTC_X = 39-BitX +STARTC_X = (39-BitX) STARTC_Y = 96 -STARTD_X = 39-BitX +STARTD_X = (39-BitX) STARTD_Y = 128 - -IconTab: +IconTab: +.ifdef topdesk128 + .byte 0,0,0,0 ; Anzahl wird berechnet + .word TrashMap + .byte 39-TrashX,191-TrashY,TrashX+DOUBLE_B,TrashY + .word TrashService + .word PrintMap + .byte 2,193-PrintY,PrintX+DOUBLE_B,PrintY + .word PrintService + .word BitMap + .byte STARTA_X,STARTA_Y,BitX+DOUBLE_B,BitY + .word OpenD8 + .word BitMap + .byte STARTB_X,STARTB_Y,BitX+DOUBLE_B,BitY + .word OpenD9 + .word BitMap + .byte STARTC_X,STARTC_Y,BitX+DOUBLE_B,BitY + .word OpenD10 + .word BitMap + .byte STARTD_X,STARTD_Y,BitX+DOUBLE_B,BitY + .word OpenD11 +.else .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap .byte 39-TrashX,191-TrashY,TrashX,TrashY @@ -570,6 +782,8 @@ IconTab: .word BitMap .byte STARTD_X,STARTD_Y,BitX,BitY .word OpenD11 +.endif + OpenD11: lda #11 .byte $2c OpenD10: lda #10 @@ -588,11 +802,35 @@ OpenDa: pha @09: pla sta @dr LoadW___ r4,BitMap+1 +.ifdef topdesk128 + LoadB r3L,2 +.else LoadB r3L,1 +.endif jsr DrawSprite +.ifdef topdesk128 + jsr HideOnlyMouse +.endif LoadB ghostFile,$ff jsr InitForIO +.ifdef topdesk128 + MoveB $d027,$d029 ; Farbe des Ghost-Sprites von Mauszeiger +.else MoveB $d027,$d028 ; Farbe des Ghost-Sprites von Mauszeiger +.endif +.ifdef topdesk128 + lda graphMode + bmi @g80 + lda $d01d + and #%11111011 + sta $d01d + jmp @gend +@g80: + lda $d01d + ora #%100 + sta $d01d +@gend: +.endif jsr DoneWithIO LoadB KSFlag,0 rts @@ -649,7 +887,11 @@ DeskMain: lda ghostFile sec sbc #10 sta r5L +.ifdef topdesk128 + LoadB r3L,2 +.else LoadB r3L,1 +.endif jsr PosSprite jsr EnablSprite LoadB mouseTop,15 @@ -761,9 +1003,21 @@ Datei_Menue: jsr MySubMenu .word DATEIRIGHT-22 .byte 128,BOLDON,"T",PLAINTEXT,0 Anzeige_Menue: jsr MySubMenu +.ifdef topdesk128 + .byte 13,8*14+14 +.else .byte 13,7*14+14 +.endif +.ifdef topdesk128 + .word 57,180 +.else .word 57,132 +.endif +.ifdef topdesk128 + .byte $88 +.else .byte $87 +.endif mpt @t1,$00,@rout mpt @t2,$00,@rout mpt @t3,$00,@rout @@ -771,6 +1025,9 @@ Anzeige_Menue: jsr MySubMenu mpt @t5,$00,@rout mpt KBytesFlag,$00,@rout2 mpt @t7,$00,@rout3 +.ifdef topdesk128 + mpt SchmalFlag,$00,SwapSchmal +.endif @t1: .byte "* Icons",0 @t2: .byte " nach Namen",0 @t3: .byte " nach Datum",0 @@ -809,7 +1066,41 @@ Anzeige_Menue: jsr MySubMenu @rout3: lda #'*' ldx #' ' jmp @rout23 + +.ifdef topdesk128 +SwapSchmal: + lda SchmalFlag + cmp #'*' + beq @10 + jsr G40 + ldx #'*' + jmp @20 +@10: + jsr G80 + ldx #' ' +@20: + stx SchmalFlag + jsr GotoFirstMenu + jsr CheckAll + jmp RedrawAll +.endif + KBytesFlag: .byte " in Bl|cken",0 +.ifdef topdesk128 +SchmalFlag: .byte " schmale Anzeige",GOTOX + .word 180-22 + .byte 128, BOLDON, "G", PLAINTEXT, 0 + +CheckAll: + LoadW___ r0,Window1 + jsr CheckOne + LoadW___ r0,Window2 + jsr CheckOne + LoadW___ r0,Window3 + jsr CheckOne + LoadW___ r0,Window4 + jmp CheckOne +.endif WINWDOWRIGHT = 256 WindowMenue: jsr MySubMenu @@ -945,7 +1236,11 @@ EndGhost: ldx #0 stx ghostFile stx mouseTop pha +.ifdef topdesk128 + lda #2 +.else lda #1 +.endif sta r3L jsr DisablSprite pla @@ -1079,7 +1374,11 @@ RedrawHead: lda #2 jsr SetPattern jsr i_Rectangle .byte 1,13 +.ifdef topdesk128 + .word 221+DOUBLE_W,237+DOUBLE_W +.else .word 221,237 +.endif lda #$ff jsr FrameRectangle jmp InitClock @@ -1095,6 +1394,9 @@ geosunten: .byte 28 ; wird berechnet! .word 0,80 geosanz: .byte 1 ; wird eingesetzt! mpt DeskInfoText,MENU_ACTION,DispInfo +.ifdef topdesk128 + mpt SwitchText,MENU_ACTION, Switch +.endif mpt DASpace + 0*17,MENU_ACTION,DA_Call mpt DASpace + 1*17,MENU_ACTION,DA_Call mpt DASpace + 2*17,MENU_ACTION,DA_Call @@ -1104,6 +1406,9 @@ geosanz: .byte 1 ; wird eingesetzt! mpt DASpace + 6*17,MENU_ACTION,DA_Call mpt DASpace + 7*17,MENU_ACTION,DA_Call DeskInfoText: .byte "TopDesk Info",0 +.ifdef topdesk128 +SwitchText: .byte "switch 40/80",0 +.endif maxDesks = 8 ; maximale Anzahl der angezeigten DA's DA_Init: ; Erstellung der Liste der DA's @@ -1132,7 +1437,11 @@ DA_Init: ; Erstellung der Liste der DA's sec sbc r7H clc - adc #01 ; Men}punktanzahl ermitteln +.ifdef topdesk128 + adc #02; Men}punktanzahl ermitteln +.else + adc #01; Men}punktanzahl ermitteln +.endif sta a0 ; und merken ora #$80 sta geosanz ; und speichern @@ -1153,6 +1462,9 @@ DA_Init: ; Erstellung der Liste der DA's DA_Call: ; Nummer des Men}punktes in a tax dex ; minus 1 +.ifdef topdesk128 + dex +.endif stx a0L jsr GotoFirstMenu LoadB a1,17 @@ -1176,6 +1488,9 @@ DA_Call: ; Nummer des Men}punktes in a DA_Call2: jsr GetFile ; DA laden und ausf}hren DAReturn: txa pha +.ifdef topdesk128 + jsr SetMyNewMode +.else lda c128Flag bpl @04 lda graphMode @@ -1183,6 +1498,7 @@ DAReturn: txa eor #$80 sta graphMode jsr SetNewMode +.endif @04: jsr SetColor jsr RedrawHead pla @@ -1197,7 +1513,7 @@ DAReturn: txa @10: jsr RedrawAll ldx #0 rts - + KeyHandler: lda menuNumber beq @05 rts @@ -1231,6 +1547,7 @@ KeyHandler: lda menuNumber .macro ShortCutKey value .byte value+$80 .endmacro + KeyTab: ShortCutKey 'm' ShortCutKey 'd' ShortCutKey 'r' @@ -1259,6 +1576,9 @@ KeyTab: ShortCutKey 'm' .byte 16,17,8,30 ; CRSR ShortCutKey 20 ; Pfeil nach links - Taste ShortCutKey 'b' +.ifdef topdesk128 + ShortCutKey 'g' +.endif .byte NULL KeyServiceTab: .word DeskRename,DeskDelete,Reset,DispFileInfo .word DValidate,SetWindows,DeskRelabel,DeskFormat @@ -1269,6 +1589,9 @@ KeyServiceTab: .word DeskRename,DeskDelete,Reset,DispFileInfo .word Ordnen,GetTime .word ScrollUp,ScrollDown,ScrollLeft,ScrollRight .word CloseService2,BackWindow +.ifdef topdesk128 + .word SwapSchmal +.endif ScrollUp: lda #WN_SCROLL_U .byte $2c ScrollDown: lda #WN_SCROLL_D @@ -1308,6 +1631,28 @@ BackWindow2: LoadB messageBuffer,WN_HIDE jmp BackWindow @10: rts +.ifdef topdesk128 +TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf +@t0: .byte "Nicht-GEOS",0 +@t1: .byte "BASIC",0 +@t2: .byte "Assembler",0 +@t3: .byte "Data",0 +@t4: .byte "Systemdatei",0 +@t5: .byte "Hilfsprogramm",0 +@t6: .byte "Anwendung",0 +@t7: .byte "Dokument",0 +@t8: .byte "Zeichensatzdatei",0 +@t9: .byte "Druckertreiber",0 +@ta: .byte "Eingabetreiber (64)",0 +@tb: .byte "Directory",0 +@tc: .byte "Startprogramm",0 +@td: .byte "Tempor{r",0 +@te: .byte "selbstausf}hrend",0 +@tf: .byte "Eingabetreiber (128)",0 + +.endif + + OpenNext: ldx activeWindow ; eventuell selektierte Files lda windowsOpen,x ; deselektieren beq @05 @@ -1348,6 +1693,7 @@ OpenNext: ldx activeWindow ; eventuell selektierte Files jsr ClearList pla tax + OpenNextNr: lda #0 sta aktl_Sub,x ; aktl Ebene setzen txa @@ -1375,6 +1721,7 @@ OpenNextNr: lda #0 jsr GetDiskDrivers OpenNext10: rts +.ifndef topdesk128 GetZielPos: ldx #6 .byte $2c GetStartPos: ldx #00 @@ -1397,6 +1744,7 @@ GetStartPos: ldx #00 @xL: .byte <(STARTA_X*8),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) @xH: .byte >(STARTA_X*8),>(STARTB_X*8),>(STARTC_X*8),>(STARTD_X*8) @y: .byte STARTA_Y,STARTB_Y,STARTC_Y,STARTD_Y +.endif ReLoad2: jsr GetWinTabAdr pha @@ -1500,6 +1848,8 @@ ReLoad: ; NeuEinladen der Files / Icons ; .byte 0 MainAdr: .word 0 +.ifndef topdesk128 + DispMarking: ; File-Markierungen darstellen ; Par: messageBuffer+1 : Window-Nummer jsr MyDCFilesSub @@ -1540,35 +1890,80 @@ MyDCFilesSub: ldx messageBuffer+1 sta r2L AddVW__ 6,r3 rts - -WindowTab: .byte 15 ; y oben + +.endif + +WindowTab: +.ifdef topdesk128 +Window1: +.endif + .byte 15 ; y oben .byte 15+90 ; y unten .word 2 ; x links +.ifdef topdesk128 +WR1: +.endif .word 2+270 ; x rechts .byte $ff ; alle Gadgets .word WinName1 .word Handler +.ifdef topdesk128 +Window2: +.endif .byte 107 ; y oben .byte 107+90 ; y unten .word 2 ; x links +.ifdef topdesk128 +WR2: +.endif .word 2+270 ; x rechts .byte $ff ; alle Gadgets .word WinName2 .word Handler +.ifdef topdesk128 +Window3: +.endif .byte 24 ; y oben .byte 24+90 ; y unten .word 30 ; x links +.ifdef topdesk128 +WR3: +.endif .word 30+270 ; x rechts .byte $ff ; alle Gadgets .word WinName3 .word Handler +.ifdef topdesk128 +Window4: +.endif .byte 44 ; y oben .byte 44+90 ; y unten .word 50 ; x links +.ifdef topdesk128 +WR4: +.endif .word 50+265 ; x rechts .byte $ff ; alle Gadgets .word WinName4 .word Handler +.ifdef topdesk128 + +StartWin: + lda @f + beq @10 +@05: rts +@10: + lda graphMode + bpl @05 + LoadW___ WR1, 2+270*2 + LoadW___ WR2, 2+270*2 + LoadW___ WR3, 30+270*2 + LoadW___ WR4, 50+265*2 + LoadB @f, 1 + rts +@f: .byte 0 + +.endif FILE_ANZ = 16 ; nicht {ndern ! MOVE_OFFS = 60 @@ -1800,17 +2195,32 @@ NormHandler: ; Behandlung der Messages Activate,Close,Restore PrintDriveNames: MoveB numDrives,a7L LoadWr0 University jsr LoadCharSet +.ifdef topdesk128 + lda graphMode + bpl @40 + jsr UseSystemFont +@40: +.endif dec a7L @loop: ldx a7L lda @data,x sta r1H +.ifdef topdesk128 + LoadW___ r11,272+16+DOUBLE_W +.else LoadW___ r11,272+16 +.endif jsr PutDrive dec a7L bpl @loop jsr i_PutString +.ifdef topdesk128 + .word 5+DOUBLE_W + .byte 198,0 +.else .word 5 .byte 196,0 +.endif LoadW___ r0,PrntFileName jsr NewPutString jmp UseSystemFont @@ -1865,7 +2275,7 @@ CheckKlick: ; Ermittlung, ob Knopf gehalten oder nicht rts @30: clc ; Maus-Knopf gehalten rts - + Handler: ldx messageBuffer+1 ; File/Icontabellenadresse nach r0 jsr GetWinTabAdr jsr MoveWr1r0 @@ -1976,8 +2386,13 @@ Handler: ldx messageBuffer+1 ; File/Icontabellenadresse nach r0 beq @e10 jsr FehlerAusgabe2 @e10: rts +.ifdef topdesk128 +@tab1: .word 0,(6*MOVE_OFFS),MOVE_OFFS + .word -(6*MOVE_OFFS),-(6*MOVE_OFFS),-MOVE_OFFS +.else @tab1: .word 0,(3*MOVE_OFFS),MOVE_OFFS .word -(3*MOVE_OFFS),-(3*MOVE_OFFS),-MOVE_OFFS +.endif @10: jsr MyCheckFiles txa bmi @20 @@ -2288,21 +2703,61 @@ File_Selected: ; Auswertung einer File-Selection jsr GetWinTabAdr AddVW__ FILE_ANZ*18+1,r1 AddW r1,a2 -@p20: LoadB r3L,1 +@p20: +.ifdef topdesk128 + LoadB r3L,2 +.else + LoadB r3L,1 +.endif MoveW_ a2,r4 lda MultiCount cmp #1 beq @p20a LoadW___ r4,MultiFileIcon+1 -@p20a: jsr DrawSprite +@p20a: +.ifdef topdesk128 + ldy #63 + lda (r4),y + pha + lda #21 + sta (r4),y +.endif + jsr DrawSprite +.ifdef topdesk128 + jsr HideOnlyMouse + pla + ldy #63 + sta (r4),y +.endif jsr InitForIO jsr DoneWithIO LoadB ghostFile,1 jsr InitForIO +.ifdef topdesk128 + MoveB $d027,$d029 ; Farbe des Ghost-Sprites von Mauszeiger +.else MoveB $d027,$d028 ; Farbe des Ghost-Sprites von Mauszeiger +.endif +.ifdef topdesk128 + lda graphMode + bmi @q80 +@q40: + lda $d01d + and #%11111011 + sta $d01d + jmp @qend +@q80: + lda SchmalFlag + cmp #'*' + beq @q40 + lda $d01d + ora #%100 + sta $d01d +@qend: +.endif jsr DoneWithIO rts - + OpenFile: jsr ClearMultiFile2 jsr MaxTextWin @04: jsr GetAktlDisk @@ -2439,6 +2894,7 @@ Multi_Select: jsr InvertRectangle jmp MarkFile @10: tax jmp UnMarkFile + TextSprite: ;j .incbin "topdesk/TextSprite.bf" @@ -2558,6 +3014,7 @@ GetMark: ; markierte Filenummer holen pla @10: rts +.ifndef topdesk128 MultiFileFlag: .byte 0 MultiCount: .byte 0 CheckDispMark: ; Test ob File a markiert ist @@ -2623,6 +3080,7 @@ DispMultiCount: txa pla tax rts +.endif NewDirLoad: ldx activeWindow lda #0 @@ -2736,7 +3194,11 @@ MoveService: ; Verschieben/Kopieren von Files zwischen aktivem und jsr FrontWindow @020: ldx #0 stx ghostFile +.ifdef topdesk128 + lda #2 +.else lda #1 +.endif sta r3L jsr DisablSprite DoHauptMenu: php @@ -2763,5 +3225,28 @@ CheckDirNum: sta r1L rts @gehtnicht: sec rts +.ifdef topdesk128 +Doppeln: + ldy #2 + lda (r0),y + asl + sta (r0),y + iny + lda (r0),y + rol + sta (r0),y + ldy #4 + lda (r0),y + asl + sta (r0),y + iny + lda (r0),y + rol + sta (r0),y + rts +.endif + + + .include "topdesk/Include/DeskMain2.inc" diff --git a/topdesk/Main/DeskTop.sub2.s b/topdesk/Main/DeskTop.sub2.s index 7ceebfc8..eea0fb16 100644 --- a/topdesk/Main/DeskTop.sub2.s +++ b/topdesk/Main/DeskTop.sub2.s @@ -60,7 +60,11 @@ DispInfo: LoadW___ r0,@db jmp NewDoDlgBox @db: .byte $01 .byte 32,138 +.ifdef topdesk128 + .word 54+DOUBLE_W,265+DOUBLE_W +.else .word 54,265 +.endif .byte $0b,$10,$10 .word @t1 .byte $0b,$10,$20 diff --git a/topdesk/Main/DeskTop.sub4.s b/topdesk/Main/DeskTop.sub4.s index 280b4c1a..f8a2ee1d 100644 --- a/topdesk/Main/DeskTop.sub4.s +++ b/topdesk/Main/DeskTop.sub4.s @@ -61,6 +61,10 @@ curHeight = $29 .global StringLen .global RecoverLast +.ifdef topdesk128 +.global TypTab +.endif + SubDir2List = SubDir1List + 64 SubDir3List = SubDir2List + 64 SubDir4List = SubDir3List+ 64 @@ -70,8 +74,13 @@ Name = MultiFileTab + 145 ; FileBox-Position: FIB_OBEN = 40 FIB_UNTEN = 180 +.ifdef topdesk128 +FIB_LINKS = 70+DOUBLE_W +FIB_RECHTS = 250+DOUBLE_W +.else FIB_LINKS = 70 FIB_RECHTS = 250 +.endif FileInfo: jsr GetAktlDisk tax beq @05 @@ -301,8 +310,11 @@ DispThisInfo: ; File-Info des Files Name darstellen jmp InvertRectangle @c10: rts CloseRoutine: jmp RstrFrmDialog + .include "topdesk/DeskInclude/EditText.inc" AutTab: .byte 0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1 + +.ifndef topdesk128 TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf @t0: .byte "Nicht-GEOS",0 @t1: .byte "BASIC",0 @@ -320,6 +332,7 @@ TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf @td: .byte "Tempor{r",0 @te: .byte "selbstausf}hrend",0 @tf: .byte "Eingabetreiber (128)",0 +.endif CloseMap: .incbin "topdesk/CloseMap.map" diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index 3bf831f4..07f8a4ae 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -70,6 +70,9 @@ .global DispMode .global winMode .global MyDCFilesSub +.ifdef topdesk128 +.global SchmalFlag +.endif FILE_ANZ = 16 @@ -147,23 +150,71 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow adc #21 sta r2H jsr GetClipRec +.ifdef topdesk128 + lda SchmalFlag + cmp #'*' + beq @sc10 + lda r3H + ora #$80 + sta r3H + lda r4H + ora #$a0 + sta r4H + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX +@sc10: +.endif jsr CutRec bcs @005 MoveW_ a2,r0 MoveW_ a4,r10 LoadB r13L,3 ; Breite immer 3 LoadB r13H,21 ; H|he immer 21 +.ifdef topdesk128 + lda SchmalFlag + cmp #'*' + beq @sc20 + lda r10H + ora #$80 + sta r10H + LoadB r13L, $83 +@sc20: +.endif + ldx a3H jsr DrawMap ; Darstellung des Filenames, auf dessen Text a1 zeigt, zentriert ; an der Position a4+12, a3H+27 -@005: lda a4L +@005: + lda a4L clc adc #12 sta r11L lda a4H adc #00 sta r11H +.ifdef topdesk128 + lda SchmalFlag + cmp #'*' + beq @sc30 + lda r11H + ora #$80 + sta r11H + ldx #r11 + jsr NormalizeX + LoadB @scy, 27 + lda graphMode + bpl @sc30 + lda SchmalFlag + cmp #'*' + beq @sc30 + jsr UseSystemFont + inc @scy +@sc30: +.endif + MoveW_ a1,r0 ; Filenamenzeiger setzen ldy #16 lda (r0),y @@ -177,7 +228,11 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow SubW r1,r11 ; xk:=xk-Len / 2 lda a3H ; yk:=a3H + 27 clc +.ifdef topdesk128 + adc @scy +.else adc #27 +.endif sta r1H lda r11L sta r3L @@ -217,6 +272,9 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow @20: AddvW 18,a1 ; n{chsten Namen und AddvW 64,a2 ; n{chstes Icon einstellen jmp @05 ; Icon darstellen +.ifdef topdesk128 +@scy: .byte 27 +.endif @end: lda messageBuffer+1 cmp activeWindow bne @e10 @@ -231,8 +289,22 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow lda a5H adc #00 sta a4H +.ifdef topdesk128 + lda graphMode + bpl @send + lda SchmalFlag + cmp #'*' + beq @send + AddVW__ 5, a4 jsr DispNumber + AddVW__ 25, a4 + lsr a4H + ror a4L rts +@send: +.endif + jsr DispNumber + rts @geticon: ; Icon nachladen ldy #16 lda (a1),y @@ -261,7 +333,17 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow sta (a2),y ldx #0 rts + DispNumber: ; Darstellung der aktuellen Filenummer an der Position a4-20/a3H+6 +.ifdef topdesk128 + lda graphMode + bpl @10 + lda SchmalFlag + cmp #'*' + beq @10 + jsr UseSystemFont +@10: +.endif lda a3L ; Nummer (0-15) holen ldx messageBuffer+1 ; Windownummer holen clc @@ -281,6 +363,7 @@ DispNumber: ; Darstellung der aktuellen Filenummer an der Position a4-20/a3H+6 sta r1H lda #%11000000 jmp PutDecimal + _MyCheckFiles: jsr MyDCFilesSub _CheckFiles: ; Auswertung eines Mausklicks innerhalb des Textfenstern im Bezug ; auf die von DispFiles dargestellten Files @@ -308,6 +391,7 @@ _CheckFiles: ; Auswertung eines Mausklicks innerhalb des Textfenstern im Bezug @10: pla tax rts + _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstellung ; im Bezug auf das Textfenster ; Par: Textfenster (windowTop-rightMargin) @@ -340,7 +424,9 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell adc #10 sta r2L ; Jetzt steht in r2L die obere y-Koordinate +.ifndef topdesk128 AddW a3,r3 +.endif AddB_ a2L,r2L bcs @err ; y-Koordinate zu gro~! clc @@ -355,6 +441,25 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell adc #00 sta r4H ; Jetzt steht in r4 die rechte x-Koordinate +.ifdef topdesk128 + lda SchmalFlag + cmp #'*' + beq @sc10 + lda r3H + ora #$80 + sta r3H + lda r4H + ora #$a0 + sta r4H + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX +@sc10: + AddW a3, r3 + AddW a3, r4 +.endif + jsr GetClipRec jsr CutRec ; Schnittfl{che berechnen, Ende pla diff --git a/topdesk/Main/DeskTop.sub6.s b/topdesk/Main/DeskTop.sub6.s index 68b04f92..7fffae2a 100644 --- a/topdesk/Main/DeskTop.sub6.s +++ b/topdesk/Main/DeskTop.sub6.s @@ -76,6 +76,9 @@ .global GetWinTabAdr .global NewPutDecimal +.ifdef topdesk128 +.global TypTab +.endif FILE_ANZ = 16 @@ -183,7 +186,26 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow rts ; Ab der eigentlichen Iconposition ist eingetragen: CBM-Typ, AltNr, Sektor, ; FileStruktur, GEOS-Filetyp, Jahr, Monat, Tag, Stunde, Minute +.ifdef topdesk128 +@ssub: + sta r11L + LoadB r11H, >DOUBLE_W + ldx #r11 + jsr NormalizeX + lda a3L + clc + adc r11L + sta r11L + lda a3H + adc r11H + sta r11H + rts +.endif @sub: PushW r0 +.ifdef topdesk128 + lda #90 + jsr @ssub +.else lda a3L clc adc #90 @@ -191,6 +213,7 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow lda a3H adc #0 sta r11H +.endif ldy #4 lda (a6),y asl @@ -200,6 +223,10 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow lda TypTab+1,x sta r0H jsr NewPutString +.ifdef topdesk128 + lda #170 + jsr @ssub +.else lda a3L clc adc #170 @@ -207,6 +234,7 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow lda a3H adc #0 sta r11H +.endif ldy #7 ; Tag lda (a6),y jsr @num @@ -220,6 +248,10 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow ldy #5 ; Jahr lda (a6),y jsr @num2 +.ifdef topdesk128 + lda #203 + jsr @ssub +.else lda a3L clc adc #203 @@ -227,6 +259,7 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow lda a3H adc #0 sta r11H +.endif ldy #8 ; Stunde lda (a6),y and #$7f @@ -239,6 +272,10 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow ldy #9 ; Minute lda (a6),y jsr @num2 +.ifdef topdesk128 + lda #225 + jsr @ssub +.else lda a3L clc adc #225 @@ -246,7 +283,7 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow lda a3H adc #0 sta r11H - +.endif ldy #10 lda (a6),y sta r0L @@ -283,6 +320,7 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow jsr PutChar pla jmp @num +.ifndef topdesk128 TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf @t0: .byte "Nicht-GEOS",0 @t1: .byte "BASIC",0 @@ -300,7 +338,7 @@ TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf @td: .byte "Tempor{r",0 @te: .byte "selbstausf}hrend",0 @tf: .byte "Eingabetreiber (128)",0 - +.endif __MyCheckFiles: jsr MyDCFilesSub __CheckFiles: ; Auswertung eines Mausklicks innerhalb des Textfenstern im Bezug ; auf die von DispFiles dargestellten Files diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index d217e794..8a4150d6 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -248,13 +248,16 @@ StartUp: lda RamTopFlag lda sysRAMFlg ; REU-MoveData ausschalten and #$7f sta sysRAMFlg -@norm: lda c128Flag +@norm: +.ifndef topdesk128 + lda c128Flag bpl @010 lda graphMode bpl @010 and #$7f sta graphMode jsr SetNewMode +.endif @010: LoadB iconSelFlag,0 ldy #3 @loop2: lda windowsOpen,y @@ -528,8 +531,11 @@ IconC: IconD: .incbin "topdesk/IconD.map" - +.ifdef topdesk128 +ICON_X = 2+DOUBLE_B +.else ICON_X = 2 +.endif ICON_Y = 16 DeskRelabel: ldx activeWindow diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index b07985a9..46526694 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -42,9 +42,22 @@ RamStart: LoadB MyCurRec,0 MoveW_ ModStartAdress,r0 AddVW__ 3,r0 jmp (r0) + MyName: .byte "Dos",0,0,0,0,0,0,0,0,0,0,0,0,0 -;XXX MyClass: .byte "TopDesk V1.3",0 +.ifdef topdesk128 +.ifdef topdesk13 +MyClass: .byte "TopDesk128 V1.3",0 +.else +MyClass: .byte "TopDesk128 V1.2",0 +.endif + +.else +.ifdef topdesk13 +MyClass: .byte "TopDesk V1.3",0 +.else MyClass: .byte "TopDesk V1.2",0 +.endif +.endif MyCurRec: .byte 0 ghostFile: .byte 0 @@ -138,6 +151,11 @@ newAppMain: .word 0 iconTab: .word 0 NameIndex: .byte 0, 0, 0, 0 +.ifdef topdesk128 +RightMax: .word 639 +GraphIndex: .byte 1 +.endif + DoWindows: lda curWinData ora curWinData+1 beq @10 @@ -439,14 +457,25 @@ WindowData: ; LinienEndpunkte in Abh{ngigkeit von den Endpunkten Punkt -1,0,0,0,0 ; Ende MaxTextWin: ; Ret: x unver{ndert +.ifdef topdesk128 + ldy #3 +.else ldy #5 +.endif @10: lda @b,y sta windowTop,y dey bpl @10 +.ifdef topdesk128 + MoveW_ RightMax, rightMargin +.endif rts @b: .byte 0,199 +.ifdef topdesk128 + .byte 0, 0 +.else .word 0,319 +.endif SetTextWin: ; Par: r2-r4 zu setzendes Textfenster jsr GetClipRec jsr CutRec @@ -613,6 +642,9 @@ ClearScreen: ; L|schen des ganzen Bildschirms (mit Ausnahme von Zeile 0-14) sta r3H LoadB r2H,199 LoadW___ r4,319 +.ifdef topdesk128 + MoveW_ RightMax, r4 +.endif jmp BackgroundRectangle RedrawAll: ; Redraw des ganzen Bildschirms (mit Ausnahme von Zeile 0-14) @@ -708,7 +740,11 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten MoveW_ moveKoords+7,mouseLeft ; linker Rand = 319-(xr-xl)+MausXOffset ; = 319-xr+xl+MausXOffSet +.ifdef topdesk128 + MoveW_ RightMax, mouseRight +.else LoadW___ mouseRight,319 +.endif SubW moveKoords+4,mouseRight AddW moveKoords+2,mouseRight AddW moveKoords+7,mouseRight @@ -799,7 +835,11 @@ DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der sta mouseTop sta r2H ; unterer Rand und rechter Rand auf Maximum +.ifdef topdesk128 + MoveW_ RightMax, mouseRight +.else LoadW___ mouseRight,319 +.endif LoadB mouseBottom,199 ; linker Rand = ml + 40 lda moveKoords+2 @@ -953,11 +993,18 @@ NewMouseService: lda mouseData ; Maus-Release? bpl @22 jsr InvFrame LoadB moveFlag,0 +.ifdef topdesk128 + ldy #03 +.else ldy #05 +.endif @29: lda @d,y sta mouseTop,y dey bpl @29 +.ifdef topdesk128 + MoveW_ RightMax, mouseRight +.endif lda moveVector ldx moveVector+1 jmp CallRoutine @@ -981,7 +1028,11 @@ NewMouseService: lda mouseData ; Maus-Release? ldx oldMsVec+1 jmp CallRoutine @d: .byte 0,199 +.ifdef topdesk128 + .byte 0, 0 +.else .word 0,319 +.endif CheckUser: ldx activeWindow jsr GetWorkArea jsr IsMseInRegion ; Maus innerhalb der Arbeitsfl{che? @@ -1481,9 +1532,48 @@ ToggleTitel: ; Anbringen bzw. Entfernen eines Stricherasters im Titelbalken des UnPackMap: ldy r3L iny +.ifdef topdesk128 + sty r3L + lda MapBreite + bmi @10 +.endif lda (r0),y +.ifndef topdesk128 sty r3L +.endif rts +.ifdef topdesk128 +@10: + tya + lsr + tay + lda (r0),y + ldy #7 +@loop: + asl + php + rol @b2 + rol @b1 + plp + rol @b2 + rol @b1 + dey + bpl @loop + + lda r3L + and #1 + tay + lda @b1,y + rts +@b1: .byte 0 +@b2: .byte 0 + +DispTest: + rts +MapBreite: .byte 0 + +.endif + DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen ; Par: ; x y-Koordinate @@ -1492,6 +1582,32 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen ; r13H BitmapH|he ; r0 Zeiger auf Bitmap ; windowTop-rightmargin: Clipping Window +.ifdef topdesk128 + txa + pha + ldx #r10 + jsr NormalizeX + LoadB @off80, 0 + lda graphMode + bmi @n80 + lda r13L + and #$7f + sta MapBreite + bne @schmal +@n80: + lda r13L + sta MapBreite + bpl @schmal + ldx #1 + stx @off80 + and #$7f + asl +@schmal: + sta r13L + pla + tax +.endif + lda leftMargin+1 ; r10>=leftMargin? cmp r10H bcc @x0 ; >nein @@ -1520,7 +1636,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen and #%111 eor #%111 sta r14H - + ; jetzt steht in r14L die Anzahl der zu }berspringenden Bytes +1, und in ; r14H die Nummer des Bits, ab dem einmaskiert werden soll @c0: lda rightMargin ; r15 = rightMargin-r10 @@ -1533,6 +1649,9 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen sta r15H bpl @a1 ; wenn rightMargin < r10 rts ; dann keine Bitmapdarstellung +.ifdef topdesk128 +@off80: .byte 0 +.endif @a1: lsr r15H ror r15L lsr r15H @@ -1548,8 +1667,14 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen ; in r15H die Nummer des Bits, ab dem ausmaskiert werden soll LoadB r9H,0 +.ifdef topdesk128 + sta r4L + lda @off80 + sta r3L +.else sta r3L sta r4L +.endif inc windowBottom @01: LoadB winOutFlag,0 ; Zeile unter windowTop? txa @@ -1582,33 +1707,68 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen bne @01 dec windowBottom rts -@sub: jsr GetScanLine ; Zeilenadresse holen -;XXX lda r5H ; 80-Zeichen ? -;XXX bmi @s10 ; >nein -;XXX rts +@sub: +.ifdef topdesk128 + jsr DispTest +.endif + + jsr GetScanLine ; Zeilenadresse holen +.ifdef topdesk13 + lda r5H ; 80-Zeichen ? + bmi @s10 ; >nein +.ifdef topdesk128 + MoveB r10H, r6H + lda r10L + lsr r6H + ror + lsr r6H + ror + lsr r6H + ror + sta r11L + tay + jmp @s11 +.endif + @s10: +.endif lda r10H clc adc r5H sta r5H + ;XXX> +.ifndef topdesk13 lda r10H clc adc r6H sta r6H +.endif ; +.ifndef topdesk13 inc r6H +.endif ; +.ifndef topdesk13 inc r6H +.endif ;Letztes Byte maskieren bpl @05 ; >normal ausgeben LoadB r15L,0 ; nicht mehr ausgeben rts -@01: stx @x +@01: +.ifndef topdesk128 + stx @x +.endif sta r15L ldx r15H + +.ifdef topdesk128 + lda r5H + bmi @64a + jsr ldar5y + jmp @64b +@64a: +.endif lda (r5),y +.ifdef topdesk128 +@64b: +.endif and BitMaske0,x pha txa @@ -1734,15 +1980,41 @@ StoreBits: ; Speichern von a im Grafikschirm, falls innerhalb der Windowgrenzen beq @20 ; >erstes Byte maskieren bpl @10 ; >noch nicht ausgeben inc r14L ; normal ausgeben +.ifdef topdesk128 + ldx r5H + bmi @64g + jsr star5y + jmp @64h +@64g: +.endif sta (r5),y +.ifndef topdesk128 sta (r6),y +.endif +@64h: +.ifdef topdesk128 + ldx @x +.endif @10: rts -@20: stx @x +@20: +.ifndef topdesk128 + stx @x +.endif sta r14L lda r14H eor #%111 tax +.ifdef topdesk128 + lda r5H + bmi @64c + jsr ldar5y + jmp @64d +@64c: +.endif lda (r5),y +.ifdef topdesk128 +@64d: +.endif and BitMaske3,x pha txa @@ -1753,8 +2025,20 @@ StoreBits: ; Speichern von a im Grafikschirm, falls innerhalb der Windowgrenzen sta r14L pla ora r14L +.ifdef topdesk128 + ldx r5H + bmi @64e + jsr star5y + jmp @64f +@64e: +.endif + sta (r5),y +.ifndef topdesk128 sta (r6),y +.else +@64f: +.endif LoadB r14L,0 ldx @x rts @@ -1919,6 +2203,17 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 @num: .byte 0 MaxWindow: ; actives Window auf Maximalgr|~e setzen / bzw. zur}ck ; neue Gr|~e wird in r2-r4 }bergeben +.ifdef topdesk128 + LoadW___ r0, @w2 + jsr CheckOne + lda graphMode + bpl @03 + LoadW___ @wx,270*2 + bne @05 +@03: + LoadW___ @wx,270 +@05: +.endif ldy #5 @10: lda (a0),y cmp @w,y @@ -1942,10 +2237,23 @@ MaxWindow: ; actives Window auf Maximalgr|~e setzen / bzw. zur}ck bpl @25 rts @w: .byte Grenze_oben,197 +.ifdef topdesk128 + .word 0 +.else .word 0,270 +.endif +.ifdef topdesk128 +@wx: .word 270*2 +.endif @w2: .byte 50,150 .word 100,219 -NewPutString: ldy #00 + +NewPutString: +.ifdef topdesk128 + ldx #r11 + jsr NormalizeX +.endif + ldy #00 lda (r0),y beq @10 cmp #$1b @@ -1971,6 +2279,47 @@ MyRecoverService: ldy #5 jmp Recover @10: dec DialBoxFlag rts + +.ifdef topdesk128 +CheckOne: + ldy #4+1 + lda (r0),y + cmp RightMax+1 + bcc @geht + bne @gehtnicht + dey + lda (r0),y + cmp RightMax + bcc @geht + bne @gehtnicht +@geht: + rts +@gehtnicht: + ;jmp Halbieren + +Halbieren: + ldy #3 + lda (r0),y + lsr + sta (r0),y + dey + lda (r0),y + ror + sta (r0),y + + ldy #5 + lda (r0),y + lsr + sta (r0),y + dey + lda (r0),y + ror + sta (r0),y + + rts +.endif + + DialBoxFlag: .byte 0 LastRec: .word 0,0,0 RecoverLast: ldy #5 @@ -1986,6 +2335,12 @@ Recover: lda c128Flag jsr NormalizeX @10: AddVB 8,r2H AddVW__ 8,r4 +.ifdef topdesk128 + lda graphMode + bpl @z40 + AddVW__ 8, r4 +@z40: +.endif ldy #5 @loop: lda windowTop,y pha @@ -2004,6 +2359,7 @@ Recover: lda c128Flag rts @geht: jsr DrawWindowC jmp DrawShadow + StringLen: ; Ermittlung einer Stringl{nge in Zeichen und in Pixels ; Par: r0 : Zeiger auf String, max. 256 Zeichen lang. @@ -2022,8 +2378,18 @@ StringLen: cmp #$a0 beq @90 ; Ende ? >ja inc r13H ; Anzahl erh|hen +.ifdef topdesk128 + cmp #$1b + bne @15 + ldy #0 + beq @17 +@15: +.endif ldx currentMode jsr GetRealSize ; Zeichenbreite holen +.ifdef topdesk128 +@17: +.endif tya clc adc r1L ; Und zur Stringl{nge aufaddieren @@ -2034,12 +2400,13 @@ StringLen: bne @10 @90: ldx r13H rts + ;InvFrame ; Parameter: r2-r4 ; Zur}ck: r2-r4 unver{ndert ; Zerst|rt: a,x,y,r0,r1,r5-r12 ;t "InvFrame" .include "topdesk/WinInclude/InvFrame.inc" - + ;SpeedFrame ; Parameter : r2-r4 Start r5-r7 Ende r8 Min Breite r9L Min H|he r9H Temp. ; Des: a,x,y,r0-r12 ;t "SpeedFrame" diff --git a/topdesk/WinInclude/InvFrame.inc b/topdesk/WinInclude/InvFrame.inc index f7d3c0c9..fdddd5b3 100644 --- a/topdesk/WinInclude/InvFrame.inc +++ b/topdesk/WinInclude/InvFrame.inc @@ -2,8 +2,33 @@ InvFrame: ; Parameter: r2-r4 Akku: Muster ; Zur}ck: ---- ; Zerst|rt: r0,r1,r5-r7,a,x,y +.ifdef topdesk128 + PushW r2 + PushW r3 + PushW r4 + jsr HideOnlyMouse + PopW r4 + PopW r3 + PopW r2 + lda graphMode + bpl @64n + bmi @64n + PushW r8 + PushW r11 + PushB r2H + MoveB r2L, r11L + jsr InvertLine + Pla + sta r11L + jsr InvertLine + PopW r11 + PopW r8 + rts +@64n: +.endif jsr VLine lda #%10101010 + InvHLine: sta r1L lda r3L and #%11111000 @@ -27,6 +52,18 @@ InvHLine: sta r1L dey bne @10 +.ifdef topdesk128 + lda graphMode + bpl @64e + lsr r0H + ror r0L + lsr r0H + ror r0L + lsr r0H + ror r0L +@64e: +.endif + ldx r2L jsr @15 @@ -48,23 +85,54 @@ InvHLine: sta r1L lda r5H sbc #0 sta r6H +.ifdef topdesk128 + lda graphMode + bpl @64f + lda r6L + clc + adc #7 + sta r6L + lda r6H + adc #0 + sta r6H +@64f: +.endif + ldx r1H ldy #0 @20: -;XXX lda r5H -;XXX bmi @64 -;XXX jsr a128 -;XXX jmp @128 +.ifdef topdesk128 + lda r5H + bmi @64 + jsr a128 + jmp @128 ;XXX rts -;XXX@64: +@64: +.endif lda (r5),y eor r1L sta (r5),y -@128: lda r5L - clc - adc #8 - sta r5L +.ifdef topdesk128 + jmp @64g +@128: + inc r5L + beq @64h2 + bne @22 +@64g: +.else +@128: +.endif + lda r5L + clc + adc #8 + sta r5L +.ifdef topdesk128 +@64h: +.endif bcc @22 +.ifdef topdesk128 +@64h2: +.endif inc r5H @22: dex bne @20 @@ -75,25 +143,39 @@ InvHLine: sta r1L tax lda @maskTab,x and r1L -;XXX ldx r6H +.ifdef topdesk13 + ldx r6H + bmi @65 +.else ;XXX bpl @65 -;XXX jsr c128 -;XXX jmp @129 -;XXX@65: +.endif +.ifdef topdesk128 + jsr c128 + jmp @129 +.endif +@65: eor (r6),y sta (r6),y -;XXX@129: +.ifdef topdesk128 +@129: +.endif lda r4L and #%00000111 tax lda @maskTab,x eor #$ff and r1L -;XXX ldx r5H -;XXX bpl @66 -;XXX jsr d128 -;XXX rts -;XXX@66: +.ifdef topdesk128 + ldx r5H +.ifdef topdesk128 + bmi @66 +.else + bpl @66 +.endif + jsr d128 + rts +@66: +.endif eor (r5),y sta (r5),y rts @@ -119,13 +201,34 @@ VLine: ldy r4H @07: tax +.ifdef topdesk128 + bit graphMode + bmi @g80 +.endif and #%11111000 +.ifdef topdesk128 +@07a: +.endif clc adc r5L sta r6L tya adc r5H sta r6H +.ifdef topdesk128 + jmp @g40 +@g80: + sty r6H + lsr r6H + ror + lsr r6H + ror + lsr r6H + ror + ldy r6H + jmp @07a +@g40: +.endif txa and #7 tax @@ -136,6 +239,21 @@ VLine: lda r2L and #7 +.ifdef topdesk128 + bit graphMode + bpl @09 + pha + tay + iny +@loop: + dey + beq @08 + AddVW__ 80, r6 + jmp @loop +@08: + pla +@09: +.endif tay @10: jsr @110 tya @@ -169,31 +287,47 @@ VLine: ble @55 @60: rts @100: - -;XXX lda r6H +.ifdef topdesk128 + lda r6H ;XXX bpl @64 + bmi @64 ;XXX jsr b128 -;XXX jmp @128 -;XXX@64: + jsr e128 + jmp @128 +@64: +.endif lda (r6),y eor r1L sta (r6),y @128: iny iny +.ifdef topdesk128 + lda graphMode + bpl @g41 + AddVW__ 160,r6 +@g41: +.endif rts @110: jsr @100 cpy #8 blt @110 +.ifdef topdesk128 + lda graphMode + bmi @g81 +.endif AddVW__ 320,r6 ;XXX lda r6H ;XXX bpl @65 ;XXX AddVW__ 320,r6 ;XXX @65: +.ifdef topdesk128 +@g81: +.endif rts Masken: .byte 128,64,32,16,8,4,2,1 -.if 0 +.ifdef topdesk128 d128: ;eor (r5),y ;sta (r5),y sta @a @@ -214,40 +348,61 @@ c128: ;eor (r6),y PopB r1L rts @a: .byte 0 -b128: tya +e128: + MoveW_ r6, VDCMem + tya + pha + ldy #0 + jsr a128x + pla + tay + rts +b128: + MoveW_ r6, VDCMem + jmp a128x + +a128: + MoveW_ r5, VDCMem +a128x: + tya pha - ;lda (r6),y - tya ; Zieladr (r6+y) in Reg $12/$13 setzten - clc - adc r6L - ldx #$13 - jsr SetReg - dex - lda r6H - jmp a128b -a128: tya + txa pha - ;lda (r5),y - tya ; Zieladr (r5+y) in Reg $12/$13 setzten - clc - adc r5L - ldx #$13 - jsr SetReg - dex - lda r5H -a128b: adc #0 - jsr SetReg - ldx #$1f - jsr GetReg ; Inhalt aus $1f holen - eor r1L - ;sta (r?),y ; Zieladr noch gesetzt ! - ldx #$1f - jsr SetReg - ldx #$12 ; Zeichen schreiben durch beliebiges Beschreiben - jsr SetReg ;von Reg. $12 - pla - tax - rts + DecW VDCMem + jsr @setadr + IncW VDCMem + + ldx #$1f + jsr GetReg + jsr GetReg + eor r1L + pha + jsr @setadr + pla + ldx #$1f + jsr SetReg + ldx #$12 + jsr SetReg + pla + tax + pla + tay + rts + +@setadr: + tya + clc + adc VDCMem + php + ldx #$13 + jsr SetReg + dex + plp + lda VDCMem+1 + adc #0 + jmp SetReg + +VDCMem: .word 0 SetReg: stx $d600 @wait: bit $d600 bpl @wait diff --git a/topdesk/WinInclude/SpeedFrame.inc b/topdesk/WinInclude/SpeedFrame.inc index 385a9f94..d887d495 100644 --- a/topdesk/WinInclude/SpeedFrame.inc +++ b/topdesk/WinInclude/SpeedFrame.inc @@ -11,6 +11,12 @@ Schrw = 15 ; r12 - Zielx-rechts (r7) ;Des: r0 bis r13 SpeedFrame: +.ifdef topdesk128 + lda graphMode + bpl @z40 + rts +@z40: +.endif ; **** Verschiebung von r5-r7 nach r10-r12 ldx #5 diff --git a/topdesk/topdesk.cfg b/topdesk/topdesk.cfg index 4a1509b0..95261b85 100644 --- a/topdesk/topdesk.cfg +++ b/topdesk/topdesk.cfg @@ -12,10 +12,10 @@ MEMORY { CVT: file = %O, start = $0, size = $40000; ZP: define = yes, start = $58, size = $1A + $06; VLIR0: define = yes, start = $0400, size = __STACKADDR__ - $0400; - VLIR1: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR2: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR3: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR4: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR1: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR2: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR3: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR4: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; VLIR5: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; VLIR6: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; VLIR7: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; From 7fe067d56f7d9fb1216130826f1b1a236fb1bc96 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 20 Aug 2017 10:21:57 +0200 Subject: [PATCH 010/125] Add missing geossym2.inc file. --- inc/geossym2.inc | 229 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 inc/geossym2.inc diff --git a/inc/geossym2.inc b/inc/geossym2.inc new file mode 100644 index 00000000..f5110d84 --- /dev/null +++ b/inc/geossym2.inc @@ -0,0 +1,229 @@ +; GEOS variable memory locations sorted by address +; reassembled by Maciej 'YTM/Alliance' Witkowiak + + +bootName = $c006 +version = $c00f +nationality = $c010 +sysFlgCopy = $c012 +c128Flag = $c013 +dateCopy = $c018 + + +InterruptMain = $C100 +InitProcesses = $C103 +RestartProcess = $C106 +EnableProcess = $C109 +BlockProcess = $C10C +UnBlockProcess = $C10F +FreezeProcess = $C112 +UnFreezeProcess = $C115 +HorizontalLine = $C118 +InvertLine = $C11B +RecoverLine = $C11E +VerticalLine = $C121 +Rectangle = $C124 +FrameRectangle = $C127 +InvertRectangle = $C12A +RecoverRectangle= $C12D +DrawLine = $C130 +DrawPoint = $C133 +GraphicsString = $C136 +SetPattern = $C139 +GetScanLine = $C13C +TestPoint = $C13F +BitmapUp = $C142 +PutChar = $C145 +PutString = $C148 +UseSystemFont = $C14B +StartMouseMode = $C14E +DoMenu = $C151 +RecoverMenu = $C154 +RecoverAllMenus = $C157 +DoIcons = $C15A +DShiftLeft = $C15D +BBMult = $C160 +BMult = $C163 +DMult = $C166 +Ddiv = $C169 +DSdiv = $C16C +Dabs = $C16F +Dnegate = $C172 +Ddec = $C175 +ClearRam = $C178 +FillRam = $C17B +MoveData = $C17E +InitRam = $C181 +PutDecimal = $C184 +GetRandom = $C187 +MouseUp = $C18A +MouseOff = $C18D +DoPreviousMenu = $C190 +ReDoMenu = $C193 +GetSerialNumber = $C196 +Sleep = $C199 +ClearMouseMode = $C19C +i_Rectangle = $C19F +i_FrameRectangle= $C1A2 +i_RecoverRectangle= $C1A5 +i_GraphicsString= $C1A8 +i_BitmapUp = $C1AB +i_PutString = $C1AE +GetRealSize = $C1B1 +i_FillRam = $C1B4 +i_MoveData = $C1B7 +GetString = $C1BA +GotoFirstMenu = $C1BD +InitTextPrompt = $C1C0 +MainLoop = $C1C3 +DrawSprite = $C1C6 +GetCharWidth = $C1C9 +LoadCharSet = $C1CC +PosSprite = $C1CF +EnablSprite = $C1D2 +DisablSprite = $C1D5 +CallRoutine = $C1D8 +CalcBlksFree = $C1DB +ChkDkGEOS = $C1DE +NewDisk = $C1E1 +GetBlock = $C1E4 +PutBlock = $C1E7 +SetGEOSDisk = $C1EA +SaveFile = $C1ED +SetGDirEntry = $C1F0 +BldGDirEntry = $C1F3 +GetFreeDirBlk = $C1F6 +WriteFile = $C1F9 +BlkAlloc = $C1FC +ReadFile = $C1FF +SmallPutChar = $C202 +FollowChain = $C205 +GetFile = $C208 +FindFile = $C20B +CRC = $C20E +LdFile = $C211 +EnterTurbo = $C214 +LdDeskAcc = $C217 +ReadBlock = $C21A +LdApplic = $C21D +WriteBlock = $C220 +VerWriteBlock = $C223 +FreeFile = $C226 +GetFHdrInfo = $C229 +EnterDeskTop = $C22C +StartAppl = $C22F +ExitTurbo = $C232 +PurgeTurbo = $C235 +DeleteFile = $C238 +FindFTypes = $C23B +RstrAppl = $C23E +ToBASIC = $C241 +FastDelFile = $C244 +GetDirHead = $C247 +PutDirHead = $C24A +NxtBlkAlloc = $C24D +ImprintRectangle= $C250 +i_ImprintRectangle= $C253 +DoDlgBox = $C256 +RenameFile = $C259 +InitForIO = $C25C +DoneWithIO = $C25F +DShiftRight = $C262 +CopyString = $C265 +CopyFString = $C268 +CmpString = $C26B +CmpFString = $C26E +FirstInit = $C271 +OpenRecordFile = $C274 +CloseRecordFile = $C277 +NextRecord = $C27A +PreviousRecord = $C27D +PointRecord = $C280 +DeleteRecord = $C283 +InsertRecord = $C286 +AppendRecord = $C289 +ReadRecord = $C28C +WriteRecord = $C28F +SetNextFree = $C292 +UpdateRecordFile= $C295 +GetPtrCurDkNm = $C298 +PromptOn = $C29B +PromptOff = $C29E +OpenDisk = $C2A1 +DoInlineReturn = $C2A4 +GetNextChar = $C2A7 +BitmapClip = $C2AA +FindBAMBit = $C2AD +SetDevice = $C2B0 +IsMseInRegion = $C2B3 +ReadByte = $C2B6 +FreeBlock = $C2B9 +ChangeDiskDevice= $C2BC +RstrFrmDialogue = $C2BF +Panic = $C2C2 +BitOtherClip = $C2C5 +StashRAM = $C2C8 +FetchRAM = $C2CB +SwapRAM = $C2CE +VerifyRAM = $C2D1 +DoRAMOp = $C2D4 +TempHideMouse = $C2D7 +SetMousePicture = $C2DA +SetNewMode = $C2DD +NormalizeX = $C2E0 +MoveBData = $C2E3 +SwapBData = $C2E6 +VerifyBData = $C2E9 +DoBOp = $C2EC +AccessCache = $C2EF +HideOnlyMouse = $C2F2 +SetColorMode = $C2F5 +ColorCard = $C2F8 +ColorRectangle = $C2FB + +CINT = $FF81 +IOINIT = $FF84 +RAMTAS = $FF87 +RESTOR = $FF8A +VECTOR = $FF8D +SETMSG = $FF90 +SECOND = $FF93 +TKSA = $FF96 +MEMTOP = $FF99 +MEMBOT = $FF9C +SCNKEY = $FF9F +SETTMO = $FFA2 +ACPTR = $FFA5 +CIOUT = $FFA8 +UNTLK = $FFAB +UNLSN = $FFAE +LISTEN = $FFB1 +TALK = $FFB4 +READST = $FFB7 +SETLFS = $FFBA +SETNAM = $FFBD +;OPEN = $FFC0 +CLOSE = $FFC3 +CHKIN = $FFC6 +CKOUT = $FFC9 +CLRCH = $FFCC +BASIN = $FFCF +BSOUT = $FFD2 +LOAD = $FFD5 +SAVE = $FFD8 +SETTIM = $FFDB +RDTIM = $FFDE +STOP = $FFE1 +GETIN = $FFE4 +CLALL = $FFE7 +UDTIM = $FFEA +SCREEN = $FFED +IOBASE = $FFF3 + +dir2Head = $8900 +driveData = $88BF +ramExpSize = $88C3 +sysRAMFlg = $88C4 +firstBoot = $88C5 +curType = $88C6 +ramBase = $88C7 From 56e53fc6b54baadc2e598cba5d4b6ee323a3640f Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 20 Aug 2017 10:45:57 +0200 Subject: [PATCH 011/125] Fixing some integration config/topdesk issues. --- Makefile | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Makefile b/Makefile index 4ee9d4b3..bdaad0ed 100755 --- a/Makefile +++ b/Makefile @@ -337,7 +337,6 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo delete \"desk top\" | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ - echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ @@ -357,11 +356,6 @@ $(BUILD_DIR)/configure/configure.o: $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure.grc $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ -$(BUILD_DIR)/configure/configure.o: - @mkdir -p `dirname $@` - $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure.grc - $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ - $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o From 642e5be834c94a91d4b884edd3af6740561be62f Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Mon, 21 Aug 2017 21:13:15 +0200 Subject: [PATCH 012/125] Fixing build configuration. --- Makefile | 2 +- config.inc | 6 ++++-- configure/configure.grc | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index bdaad0ed..c3990383 100755 --- a/Makefile +++ b/Makefile @@ -334,7 +334,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd cp $(D81_TEMPLATE) $@; \ echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ - echo delete \"desk top\" | $(C1541) $@ >/dev/null; \ + echo delete \"desk top\"| $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ diff --git a/config.inc b/config.inc index 3ce86519..daf4672f 100644 --- a/config.inc +++ b/config.inc @@ -142,8 +142,10 @@ config_inc = 1 ; throughout the code .setcpu "4510" - topdesk128 = 1 - topdesk13 = 1 + ;topdesk128 = 1 + ;topdesk13 = 1 + + ;config128 = 1 .endif .ifdef custom diff --git a/configure/configure.grc b/configure/configure.grc index 51a85041..0e959e83 100644 --- a/configure/configure.grc +++ b/configure/configure.grc @@ -1,4 +1,4 @@ -HEADER APPLICATION "CONFIGURE" "Configure" "V2.1" { +HEADER AUTO_EXEC "CONFIGURE" "Configure" "V2.1" { author "BSW/Jim Collette" info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." date 23 12 91 22 54 From 86e256b5b1bc3b21b73e3611dd580d54bea3a023 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 26 Aug 2017 23:43:38 +0200 Subject: [PATCH 013/125] MEGA65/GEOS65 setup of GEOS that is GEOS128 compatible. --- Makefile | 26 +++++++++++++++++++- config.inc | 6 ++--- configure/configure.grc | 2 +- configure/configure65.grc | 11 +++++++++ configure/r0.s | 5 ++++ inc/kernal.inc | 6 ++--- kernal/conio/conio1.s | 6 ++--- kernal/conio/conio4.s | 2 +- kernal/conio/conio6.s | 4 ++-- kernal/fonts/fonts2.s | 2 +- kernal/fonts/fonts4b.s | 2 +- kernal/graph/bitmapup.s | 12 ++++++---- kernal/graph/line.s | 10 +++++++- kernal/graph/point.s | 13 +++++++--- kernal/header/header.s | 2 ++ kernal/icon/icon1.s | 2 +- kernal/icon/icon2.s | 18 +++++++------- kernal/jumptab/jumptab.s | 41 +++++++++++++++++++++++++++++++- kernal/kernal_mega65.cfg | 1 + kernal/load/load1c.s | 4 +++- kernal/mouse/mouse1.s | 2 +- kernal/mouse/mouse2.s | 2 +- kernal/sprites/sprites.s | 2 +- kernal/start/start64.s | 4 ++++ loader/loader.s | 4 ++-- topdesk/Include/DeskMain2.inc | 3 ++- topdesk/Main/DeskTop.main.s | 12 ++++++---- topdesk/Main/DeskWindows.akt.inc | 7 +++++- topdesk/topdesk65.grc | 11 +++++++++ 29 files changed, 175 insertions(+), 47 deletions(-) create mode 100644 configure/configure65.grc create mode 100644 topdesk/topdesk65.grc diff --git a/Makefile b/Makefile index c3990383..8a35caec 100755 --- a/Makefile +++ b/Makefile @@ -169,6 +169,12 @@ ifeq ($(VARIANT), bsw128) kernal/memory/memory_128.s endif + +ifeq ($(VARIANT), mega65) + KERNAL_SOURCES += \ + kernal/graph/normalize.s +endif + # code that is in C128 back bank KERNAL2_SOURCES= \ kernal/128k/bank_jmptab_back.s \ @@ -346,15 +352,33 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo \*\*\* Created fresh $@.; \ fi; + +ifeq ($(VARIANT), mega65) + +$(BUILD_DIR)/topdesk/topdesk.o: + @mkdir -p `dirname $@` + $(GRC) -s $(BUILD_DIR)/topdesk/topdesk.s -o $(BUILD_DIR)/topdesk/topdesk.c topdesk/topdesk65.grc + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/topdesk/topdesk.s -o $@ +else + $(BUILD_DIR)/topdesk/topdesk.o: @mkdir -p `dirname $@` $(GRC) -s $(BUILD_DIR)/topdesk/topdesk.s -o $(BUILD_DIR)/topdesk/topdesk.c topdesk/topdesk.grc $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/topdesk/topdesk.s -o $@ +endif + +ifeq ($(VARIANT), mega65) +$(BUILD_DIR)/configure/configure.o: + @mkdir -p `dirname $@` + $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure65.grc + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ +else $(BUILD_DIR)/configure/configure.o: @mkdir -p `dirname $@` $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure.grc $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ +endif $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ @@ -385,7 +409,7 @@ $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ $(BUILD_DIR)/compressed_mega65.prg: $(BUILD_DIR)/compressed.bin $(BUILD_DIR)/loader/uncrunch.o $(BUILD_DIR)/loader/loader.o - $(LD) -C loader/loader.cfg $(BUILD_DIR)/loader/loader.o $(BUILD_DIR)/loader/uncrunch.o -o $@ + $(LD) -C loader/loader.cfg $(BUILD_DIR)/loader/loader.o -m $(BUILD_DIR)/kernel.map $(BUILD_DIR)/loader/uncrunch.o -o $@ endif ifeq ($(VARIANT), mega65) diff --git a/config.inc b/config.inc index daf4672f..d1ffa3e2 100644 --- a/config.inc +++ b/config.inc @@ -142,10 +142,10 @@ config_inc = 1 ; throughout the code .setcpu "4510" - ;topdesk128 = 1 - ;topdesk13 = 1 + topdesk128 = 1 + topdesk13 = 1 - ;config128 = 1 + config128 = 1 .endif .ifdef custom diff --git a/configure/configure.grc b/configure/configure.grc index 0e959e83..875e17cd 100644 --- a/configure/configure.grc +++ b/configure/configure.grc @@ -1,4 +1,4 @@ -HEADER AUTO_EXEC "CONFIGURE" "Configure" "V2.1" { +HEADER AUTO_EXEC "CONFIGURE" "128 Config" "V2.1" { author "BSW/Jim Collette" info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." date 23 12 91 22 54 diff --git a/configure/configure65.grc b/configure/configure65.grc new file mode 100644 index 00000000..5f49aab2 --- /dev/null +++ b/configure/configure65.grc @@ -0,0 +1,11 @@ +HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V2.1" { + author "BSW/Jim Collette" + info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." + date 23 12 91 22 54 + structure VLIR +} + +MEMORY { + overlaysize 0x1000 + overlaynums 0,1,2,3,4,5,6 +} diff --git a/configure/r0.s b/configure/r0.s index 64d2a682..b2daf340 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -244,9 +244,14 @@ L050E: jmp EnterDeskTop ; 050E 4C 2C C2 ; ---------------------------------------------------------------------------- configFileClass: .ifdef config128 +.ifdef mega65 + .byte "65 Config V2.1", 0 +.else + .byte "128 Config V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur ; 0519 65 20 20 20 56 32 2E 31 e V2.1 .byte $00 ; 0521 00 . +.endif .else .byte "Configure V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur ; 0519 65 20 20 20 56 32 2E 31 e V2.1 diff --git a/inc/kernal.inc b/inc/kernal.inc index 7d134b71..6c61c37b 100644 --- a/inc/kernal.inc +++ b/inc/kernal.inc @@ -4,7 +4,7 @@ .include "config.inc" ;addresses defined so-so -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) Z45 = $46 Z46 = $47 Z47 = $48 @@ -21,7 +21,7 @@ z8e = $8e z8f = $8f ; GEOS Kernal internal zpage vectors (not for use by apps) -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) IconDescVec = $40 IconDescVecH = $41 CallRLo = $42 @@ -111,7 +111,7 @@ E8800 = $8800 .endif ;A8860 = $8860 ; XXX unused -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) FontTVar1 = $880E FontTVar2 = $880F .elseif .defined(wheels) diff --git a/kernal/conio/conio1.s b/kernal/conio/conio1.s index 9f6d8f92..9f5bb2e2 100644 --- a/kernal/conio/conio1.s +++ b/kernal/conio/conio1.s @@ -27,7 +27,7 @@ .segment "conio1" _PutChar: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) pha ldx #r11 jsr NormalizeX @@ -53,13 +53,13 @@ _PutChar: bcc @2 inc r13H @2: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #rightMargin jsr NormalizeX .endif CmpW rightMargin, r13 bcc @5 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #leftMargin jsr NormalizeX .endif diff --git a/kernal/conio/conio4.s b/kernal/conio/conio4.s index 71bb03c1..9193670a 100644 --- a/kernal/conio/conio4.s +++ b/kernal/conio/conio4.s @@ -38,7 +38,7 @@ PutString = _PutString .segment "conio4" _GetString: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX .endif diff --git a/kernal/conio/conio6.s b/kernal/conio/conio6.s index 09206293..2cc54f26 100644 --- a/kernal/conio/conio6.s +++ b/kernal/conio/conio6.s @@ -96,7 +96,7 @@ _PutDecimal: lda r2L .endif and #$3f -.ifndef bsw128 +.if (!.defined(bsw128)) & (!.defined(mega65)) sub r3H .endif add r11L @@ -104,7 +104,7 @@ _PutDecimal: bcc @X inc r11H @X: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX SubB r3H, r11L diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 197acd9a..d15be6a6 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -30,7 +30,7 @@ .import FontGt2 .import FontGt1 -.if (!.defined(bsw128)) & (!.defined(wheels)) +.if (!.defined(bsw128)) & (!.defined(wheels)) & (!.defined(mega65)) .import FontTVar1 .import FontTVar2 .endif diff --git a/kernal/fonts/fonts4b.s b/kernal/fonts/fonts4b.s index b268e810..a0277d92 100644 --- a/kernal/fonts/fonts4b.s +++ b/kernal/fonts/fonts4b.s @@ -86,7 +86,7 @@ FontGt4_2: beq FontGt2_1 .endif -.ifndef bsw128 +.if !(.defined(bsw128) || .defined(mega65)) .ifndef wheels FontTVar1: diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index e8e9521a..527336aa 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -47,7 +47,7 @@ _BitmapUp: .ifndef wheels_size_and_speed lda #0 .endif -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) sta L888D .endif sta r3L @@ -66,14 +66,17 @@ BitmapUpHelp: ldx r1H jsr _GetScanLine MoveB r2L, r3H -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) bpl @Y bbsf 7, graphMode, @X and #$7F sta r3H bne @Y @X: asl r3H -@Y: bbsf 7, graphMode, @4 +@Y: +.ifndef mega65 + bbsf 7, graphMode, @4 +.endif lda r1L and #$7F cmp #$20 @@ -129,7 +132,8 @@ BitmapUpHelp: .endif BitmapDecode: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) + jmp BitmapDecodeX bbrf 7, graphMode, BitmapDecodeX bbrf 7, r2L, BitmapDecodeX bbrf 0, L888D, @1 diff --git a/kernal/graph/line.s b/kernal/graph/line.s index a8e84b80..ada2ddc2 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -14,9 +14,11 @@ .import BitMaskLeadingSet .import BitMaskLeadingClear .import _GetScanLine -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) .import _TempHideMouse .import _NormalizeX +.endif +.ifdef bsw128 .import VDCFillr4LA .import LF4B7 .import ShareTop @@ -44,8 +46,10 @@ .segment "graph2a" PrepareXCoord: +.if .defined(bsw128) || .defined(mega65) .ifdef bsw128 jsr _TempHideMouse +.endif ldx #r3 jsr _NormalizeX ldx #r4 @@ -693,10 +697,14 @@ Read80Help: ;--------------------------------------------------------------- _VerticalLine: sta r8L +.if .defined(bsw128) || .defined(mega65) .ifdef bsw128 jsr _TempHideMouse +.endif ldx #r4 jsr _NormalizeX +.endif +.ifdef bsw128 bbsf 7, graphMode, VLin80 .endif PushB r4L diff --git a/kernal/graph/point.s b/kernal/graph/point.s index 15a500f6..9808325b 100644 --- a/kernal/graph/point.s +++ b/kernal/graph/point.s @@ -12,11 +12,14 @@ .import BitMaskPow2Rev .import _GetScanLine +.if .defined(bsw128) || .defined(mega65) +.import _TempHideMouse +.import _HorizontalLine +.endif + .ifdef bsw128 .import _Dabs -.import _TempHideMouse .import _DShiftLeft -.import _HorizontalLine .else .import Dabs .endif @@ -51,7 +54,7 @@ ;--------------------------------------------------------------- _DrawLine: php -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) bmi @Y lda r11L cmp r11H @@ -312,8 +315,10 @@ _DrawLine: ;--------------------------------------------------------------- _DrawPoint: php +.if .defined(bsw128) || .defined(mega65) .ifdef bsw128 jsr _TempHideMouse +.endif ldx #r3 jsr _NormalizeX .endif @@ -389,8 +394,10 @@ DrwPointTemp: ; Destroyed: a, x, y, r5, r6 ;--------------------------------------------------------------- _TestPoint: +.if .defined(bsw128) || .defined(mega65) .ifdef bsw128 jsr _TempHideMouse +.endif ldx #r3 jsr _NormalizeX .endif diff --git a/kernal/header/header.s b/kernal/header/header.s index 0b522015..6afcb22a 100644 --- a/kernal/header/header.s +++ b/kernal/header/header.s @@ -64,6 +64,8 @@ sysFlgCopy: c128Flag: .ifdef bsw128 .byte $80 +.elseif .defined(mega65) + .byte $80 .else .byte 0 .endif diff --git a/kernal/icon/icon1.s b/kernal/icon/icon1.s index f9c1306c..2e90a257 100644 --- a/kernal/icon/icon1.s +++ b/kernal/icon/icon1.s @@ -38,6 +38,7 @@ _DoIcons: MoveW r0, IconDescVec jsr Icons_1 jsr ResetMseRegion + lda mouseOn .ifdef wheels_size_and_speed bmi @1 @@ -65,4 +66,3 @@ _DoIcons: tay sec jmp _StartMouseMode - diff --git a/kernal/icon/icon2.s b/kernal/icon/icon2.s index df3a0576..ef6aa97d 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -126,19 +126,19 @@ FindClkIcon: iny lda mouseXPos+1 lsr -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) sta L888F .endif lda mouseXPos ror -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) lsr L888F ror .else lsr .endif lsr -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) pha lda (IconDescVec),y jsr LFCCC @@ -146,7 +146,7 @@ FindClkIcon: pla .endif sec -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) sbc L888F .else sbc (IconDescVec),y @@ -154,7 +154,7 @@ FindClkIcon: bcc @2 iny iny -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) pha lda (IconDescVec),y jsr LFCCC @@ -196,18 +196,18 @@ CalcIconCoords: sta r2L dey lda (IconDescVec),y -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) jsr LFCCC .endif sta r3L iny iny -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) lda (IconDescVec),y jsr LFCCC .endif clc -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) adc r3L .else adc (IconDescVec),y @@ -229,7 +229,7 @@ CalcIconCoords: rts .endif -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) LFCCC: pha and #DOUBLE_B bpl @1 diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 0ed52209..69a22712 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -365,11 +365,14 @@ .global VerifyRAM .global DoRAMOp +.if .defined(bsw128) || .defined(mega65) +.global NormalizeX +.endif + .ifdef bsw128 .global TempHideMouse .global SetMsePic .global SetNewMode -.global NormalizeX .global MoveBData .global SwapBData .global VerifyBData @@ -782,6 +785,42 @@ ColorCard: ColorRectangle: jmp _ColorRectangle +.elseif .defined(mega65) + +.macro UNIMPLEMENTED + rts + nop + nop +.endmacro + +; C128 syscalls +TempHideMouse: + UNIMPLEMENTED +SetMsePic: + UNIMPLEMENTED +SetNewMode: + UNIMPLEMENTED +NormalizeX: + jmp _NormalizeX +MoveBData: + UNIMPLEMENTED +SwapBData: + UNIMPLEMENTED +VerifyBData: + UNIMPLEMENTED +DoBOp: + UNIMPLEMENTED +AccessCache: + UNIMPLEMENTED +HideOnlyMouse: + UNIMPLEMENTED +SetColorMode: + UNIMPLEMENTED +ColorCard: + UNIMPLEMENTED +ColorRectangle: + UNIMPLEMENTED + .elseif .defined(wheels) .macro UNIMPLEMENTED diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 3e8262b0..388e2d62 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -134,6 +134,7 @@ SEGMENTS { conio6: load = KERNAL, type = ro; math2: load = KERNAL, type = ro; graph4: load = KERNAL, type = ro; + graph5: load = KERNAL, type = ro; mouse2: load = KERNAL, type = ro; menu1: load = KERNAL, type = ro; menu2: load = KERNAL, type = ro; diff --git a/kernal/load/load1c.s b/kernal/load/load1c.s index adc615e0..c85f9a7c 100644 --- a/kernal/load/load1c.s +++ b/kernal/load/load1c.s @@ -17,7 +17,9 @@ .segment "load1c" DeskTopName: -.ifdef bsw128 +.ifdef mega65 + .byte "65 DESKTOP", 0 +.elseif .defined(bsw128) .byte "128 DESKTOP", 0 .elseif .defined(gateway) .byte "GATEWAY", 0 diff --git a/kernal/mouse/mouse1.s b/kernal/mouse/mouse1.s index 6f40752b..ed5952c1 100644 --- a/kernal/mouse/mouse1.s +++ b/kernal/mouse/mouse1.s @@ -17,7 +17,7 @@ .segment "mouse1" _IsMseInRegion: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) txa pha ldx #r3 diff --git a/kernal/mouse/mouse2.s b/kernal/mouse/mouse2.s index 4509fce9..f37c7fee 100644 --- a/kernal/mouse/mouse2.s +++ b/kernal/mouse/mouse2.s @@ -48,7 +48,7 @@ _StartMouseMode: lda r11L ora r11H beq @1 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX .endif diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index a41ce1c4..b1948d0e 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -62,7 +62,7 @@ SprTabH: ; Destroyed: a, x, y, r6 ;--------------------------------------------------------------- _PosSprite: -.ifdef bsw128 +.if .defined(bsw128) || .defined(megat65) ldx #r4 jsr NormalizeX .endif diff --git a/kernal/start/start64.s b/kernal/start/start64.s index b8725583..7cf16388 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -148,6 +148,10 @@ OrigResetHandle: cld ldx #$ff jsr _DoFirstInitIO +.ifdef mega65 + lda #0 + sta graphMode +.endif jsr InitGEOEnv .ifdef usePlus60K jsr DetectPlus60K diff --git a/loader/loader.s b/loader/loader.s index 7775ed81..c36ecda0 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -64,8 +64,8 @@ next: .WORD 0 STA 1 .IMPORT uncruncher JSR uncruncher - STZ 53280 - STZ 53281 + ;STZ 53280 + ;STZ 53281 JMP $5000 .ENDPROC diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 5db80231..c75e2bf0 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -611,7 +611,8 @@ ShowClock: LoadB dispBufferOn,%10000000 ldx MyMin lda #MinZehner-TagZehner jsr DivnSet -@Ausg: LoadW___ rightMargin,ClxR-1 +@Ausg: + LoadW___ rightMargin,ClxR-1 jsr i_PutString .word ClxL+DateX .byte ClyO+DateY diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 0fcdf9bc..893ce95f 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -196,7 +196,8 @@ Start: @01: sta MyName,y iny bne @loop -@02: jmp StartUp +@02: + jmp StartUp .ifdef topdesk13 @t: .byte "SURE",$0d @@ -339,7 +340,8 @@ PrintMap: ;j PrintX = 3 PrintY = 21 -Start2: lda RamTopFlag +Start2: + lda RamTopFlag bne @10 lda ramExpSize beq @09 @@ -1746,7 +1748,8 @@ GetStartPos: ldx #00 @y: .byte STARTA_Y,STARTB_Y,STARTC_Y,STARTD_Y .endif -ReLoad2: jsr GetWinTabAdr +ReLoad2: + jsr GetWinTabAdr pha LoadWr0 FILE_ANZ*82 jsr ClearRam @@ -2215,7 +2218,7 @@ PrintDriveNames: MoveB numDrives,a7L bpl @loop jsr i_PutString .ifdef topdesk128 - .word 5+DOUBLE_W + .word 5 +DOUBLE_W .byte 198,0 .else .word 5 @@ -2223,6 +2226,7 @@ PrintDriveNames: MoveB numDrives,a7L .endif LoadW___ r0,PrntFileName jsr NewPutString + jmp UseSystemFont @data: .byte 55,87,119,151 diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 46526694..b61383ca 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -46,7 +46,11 @@ RamStart: LoadB MyCurRec,0 MyName: .byte "Dos",0,0,0,0,0,0,0,0,0,0,0,0,0 .ifdef topdesk128 .ifdef topdesk13 +.ifdef mega65 +MyClass: .byte "TopDesk65 V1.3",0 +.else MyClass: .byte "TopDesk128 V1.3",0 +.endif .else MyClass: .byte "TopDesk128 V1.2",0 .endif @@ -976,7 +980,8 @@ SendActivate: lda #WN_ACTIVATE ldx activeWindow jmp SendMessage2 oldMsVec: .word 0 -NewMouseService: lda mouseData ; Maus-Release? +NewMouseService: + lda mouseData ; Maus-Release? bpl @10 ; >nein @05: jmp @35 @10: lda menuNumber ; Men} downgepullt ? diff --git a/topdesk/topdesk65.grc b/topdesk/topdesk65.grc new file mode 100644 index 00000000..83c2ed87 --- /dev/null +++ b/topdesk/topdesk65.grc @@ -0,0 +1,11 @@ +HEADER APPLICATION "65 DESKTOP" "TopDesk65" "V1.3" { + author "DPT KnCiGo" + info "New desk top." + date 9 10 93 23 54 + structure VLIR +} + +MEMORY { + overlaysize -0x9e7 + overlaynums 0 1 2 3 4 5 6 7 8 9 10 +} From d607fe9234c11107305e43f2e5c3d06fa66cd79f Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 28 Sep 2017 21:38:49 +0200 Subject: [PATCH 014/125] Initial version working with bitplanes, introducing GEOS128 compatibility and support 40 and 80 column screen mode. --- Makefile | 4 ++- configure/configure65.grc | 1 + kernal/dlgbox/dlgbox1c.s | 4 +-- kernal/dlgbox/dlgbox1d.s | 4 +-- kernal/dlgbox/dlgbox1j.s | 2 +- kernal/fonts/fonts2.s | 64 ++++++++++++++++++++++++++++++++----- kernal/graph/bitmapclip.s | 2 +- kernal/graph/bitmapup.s | 26 +++++++++++++-- kernal/graph/clrscr.s | 11 +++++-- kernal/graph/graph2p.s | 4 +++ kernal/graph/line.s | 49 +++++++++++++++++++++++++--- kernal/graph/mode.s | 38 ++++++++++++++++++++-- kernal/graph/point.s | 13 ++++++++ kernal/graph/scanline.s | 60 ++++++++++++++++++++++++++++++++++ kernal/hw/hw1b.s | 30 ++++++++++++++++- kernal/init/init1.s | 4 +-- kernal/jumptab/jumptab.s | 3 +- kernal/kernal_mega65.cfg | 2 ++ kernal/mouse/mouse3.s | 2 +- kernal/sprites/sprites.s | 12 ++++++- kernal/start/start64.s | 6 ++-- kernal/vars/vars.s | 2 +- loader/loader.s | 3 ++ topdesk/Main/DeskTop.main.s | 4 +++ 24 files changed, 315 insertions(+), 35 deletions(-) diff --git a/Makefile b/Makefile index 8a35caec..6b4a88fa 100755 --- a/Makefile +++ b/Makefile @@ -172,7 +172,9 @@ endif ifeq ($(VARIANT), mega65) KERNAL_SOURCES += \ - kernal/graph/normalize.s + kernal/graph/normalize.s \ + kernal/graph/mode.s \ + kernal/graph/graph2p.s endif # code that is in C128 back bank diff --git a/configure/configure65.grc b/configure/configure65.grc index 5f49aab2..2a20c699 100644 --- a/configure/configure65.grc +++ b/configure/configure65.grc @@ -2,6 +2,7 @@ HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V2.1" { author "BSW/Jim Collette" info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." date 23 12 91 22 54 + mode any structure VLIR } diff --git a/kernal/dlgbox/dlgbox1c.s b/kernal/dlgbox/dlgbox1c.s index 25dfbc02..44d24574 100644 --- a/kernal/dlgbox/dlgbox1c.s +++ b/kernal/dlgbox/dlgbox1c.s @@ -121,7 +121,7 @@ DrwDlgSpd1: jsr SetPattern sec jsr CalcDialogCoords -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) lda r3H and #$80 sta L8871 @@ -201,7 +201,7 @@ CalcDialogCoords: rts DBDefinedPos: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) MSB = DOUBLE_W .else MSB = 0 diff --git a/kernal/dlgbox/dlgbox1d.s b/kernal/dlgbox/dlgbox1d.s index ba4c1e42..b3bad9ee 100644 --- a/kernal/dlgbox/dlgbox1d.s +++ b/kernal/dlgbox/dlgbox1d.s @@ -162,7 +162,7 @@ DBDoIcons: adc #>DBDefIconsTab sta r5H jsr DBIconsHelp1 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldy #4 lda (r5),y and #$FF @@ -220,7 +220,7 @@ DBIconsHelp2: cpy #2 bne @2 lda r3L -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ora L8871 .endif @2: cpy #3 diff --git a/kernal/dlgbox/dlgbox1j.s b/kernal/dlgbox/dlgbox1j.s index 064f6059..90ade21a 100644 --- a/kernal/dlgbox/dlgbox1j.s +++ b/kernal/dlgbox/dlgbox1j.s @@ -202,7 +202,7 @@ SetupRAMOpCall: bcc @1 inc r0H @1: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) lda r0H ora L8871 sta r0H diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index d15be6a6..a8bf0f19 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -295,9 +295,27 @@ Font_2: .ifdef bsw128 bbsf 7, graphMode, @LE319 .endif +.ifdef mega65 + ldy #$00 + sty r1L + clc + adc r5L + sta r5L + sta r6L + bcc @4 + inx +@4: + cpx #0 + beq @5 + dex + inc r5H + inc r6H + bra @4 +@5: +.else cpx #0 - bne @4 - cmp #$c0 + bne @4 ; jump if above 255 + cmp #$c0 ; below bcc @6 @4: subv $80 pha @@ -308,6 +326,7 @@ Font_2: inc r6H @5: pla @6: sta r1L +.endif .ifdef bsw128 bra @LE333 @LE319: ldy #$00 @@ -327,7 +346,7 @@ Font_2: inc r6H .endif @LE333: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) lda FontTVar2+1 lsr a sta r7L @@ -424,7 +443,7 @@ Font_2: add r12L tax lda Font_tab2,x -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) adc #(SC_PIX_WIDTH-1) ldy #<(SC_PIX_WIDTH-1) bbrf 7, graphMode, @1 LoadB L8890, $ff +.ifdef bsw128 lda #1 +.endif ldx #>(SCREENPIXELWIDTH-1) ldy #<(SCREENPIXELWIDTH-1) -@1: sta clkreg - stx $38 +@1: +.ifdef bsw128 + sta clkreg ; D030 +.endif + stx rightMargin+1 sty rightMargin jmp UseSystemFont diff --git a/kernal/graph/point.s b/kernal/graph/point.s index 9808325b..9f627a0f 100644 --- a/kernal/graph/point.s +++ b/kernal/graph/point.s @@ -329,11 +329,24 @@ _DrawPoint: .endif lda r3L and #%11111000 +.ifdef mega65 + ldy r3H +@1c: + beq @1b + inc r5H + inc r6H + dey + bra @1c + +@1b: + tay +.else tay lda r3H beq @1 inc r5H inc r6H +.endif @1: lda r3L and #%00000111 tax diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 1bed3fe8..39500076 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -14,6 +14,13 @@ .segment "graph2n" +.ifdef mega65 +; C65/M65 bank 1 addresses +SCREEN_BASE65 = $0000 +BACK_SCR_BASE65 = $9000 +.endif + + ;--------------------------------------------------------------- ; GetScanLine $C13C ; @@ -45,6 +52,11 @@ _GetScanLine: lsr lsr lsr +.ifdef mega65 + bbrf 7, graphMode, @X + ora #$20 +@X: +.endif tax bbrf 7, dispBufferOn, @2 ; ST_WR_FORE .ifdef bsw128 @@ -52,6 +64,8 @@ _GetScanLine: .else bbsf 6, dispBufferOn, @1 ; ST_WR_BACK .endif + + ; foreground only lda LineTabL,x ora r6H sta r5L @@ -68,6 +82,37 @@ _GetScanLine: .else MoveW r5, r6 .endif + +.ifdef mega65 + ; map foregroud and translate ptrs + tya + pha + tza + pha + + ; a/x lower, y/z highter + lda r5H + sub #$a0 + tay + + ldz #$20 ; map $a000-$c000 from bank 1 + lda #0 ; don't map lower in this case + tax + + map + eom + + lda #$a0 + sta r5H + sta r6H + + pla + taz + pla + tay + +.endif + pla tax rts @@ -178,9 +223,24 @@ GSC80_6: .segment "graph2o" +.ifdef mega65 + +; this is the table for the 640 pix width resolution, 320 is needed as well +.define LineTab SCREEN_BASE65+0*320, SCREEN_BASE65+1*320, SCREEN_BASE65+2*320, SCREEN_BASE65+3*320, SCREEN_BASE65+4*320, SCREEN_BASE65+5*320, SCREEN_BASE65+6*320, SCREEN_BASE65+7*320, SCREEN_BASE65+8*320, SCREEN_BASE65+9*320, SCREEN_BASE65+10*320, SCREEN_BASE65+11*320, SCREEN_BASE65+12*320, SCREEN_BASE65+13*320, SCREEN_BASE65+14*320, SCREEN_BASE65+15*320, SCREEN_BASE65+16*320, SCREEN_BASE65+17*320, SCREEN_BASE65+18*320, SCREEN_BASE65+19*320, SCREEN_BASE65+20*320, SCREEN_BASE65+21*320, SCREEN_BASE65+22*320, SCREEN_BASE65+23*320, SCREEN_BASE65+24*320, SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320, SCREEN_BASE65+0*640, SCREEN_BASE65+1*640, SCREEN_BASE65+2*640, SCREEN_BASE65+3*640, SCREEN_BASE65+4*640, SCREEN_BASE65+5*640, SCREEN_BASE65+6*640, SCREEN_BASE65+7*640, SCREEN_BASE65+8*640, SCREEN_BASE65+9*640, SCREEN_BASE65+10*640, SCREEN_BASE65+11*640, SCREEN_BASE65+12*640, SCREEN_BASE65+13*640, SCREEN_BASE65+14*640, SCREEN_BASE65+15*640, SCREEN_BASE65+16*640, SCREEN_BASE65+17*640, SCREEN_BASE65+18*640, SCREEN_BASE65+19*640, SCREEN_BASE65+20*640, SCREEN_BASE65+21*640, SCREEN_BASE65+22*640, SCREEN_BASE65+23*640, SCREEN_BASE65+24*640, SCREEN_BASE65+25*640, SCREEN_BASE65+26*640, SCREEN_BASE65+27*640, SCREEN_BASE65+28*640, SCREEN_BASE65+29*640, SCREEN_BASE65+30*640, SCREEN_BASE65+31*640, SCREEN_BASE65+32*640, SCREEN_BASE65+33*640, SCREEN_BASE65+34*640, SCREEN_BASE65+35*640, SCREEN_BASE65+36*640, SCREEN_BASE65+37*640, SCREEN_BASE65+38*640, SCREEN_BASE65+39*640, SCREEN_BASE65+40*640, SCREEN_BASE65+41*640, SCREEN_BASE65+42*640, SCREEN_BASE65+43*640, SCREEN_BASE65+44*640, SCREEN_BASE65+45*640,SCREEN_BASE65+46*640, SCREEN_BASE65+47*640, SCREEN_BASE65+48*640, SCREEN_BASE65+49*640 + +LineTabL: + .lobytes LineTab +LineTabH: + .hibytes LineTab + + + +.else + .define LineTab SCREEN_BASE+0*320, SCREEN_BASE+1*320, SCREEN_BASE+2*320, SCREEN_BASE+3*320, SCREEN_BASE+4*320, SCREEN_BASE+5*320, SCREEN_BASE+6*320, SCREEN_BASE+7*320, SCREEN_BASE+8*320, SCREEN_BASE+9*320, SCREEN_BASE+10*320, SCREEN_BASE+11*320, SCREEN_BASE+12*320, SCREEN_BASE+13*320, SCREEN_BASE+14*320, SCREEN_BASE+15*320, SCREEN_BASE+16*320, SCREEN_BASE+17*320, SCREEN_BASE+18*320, SCREEN_BASE+19*320, SCREEN_BASE+20*320, SCREEN_BASE+21*320, SCREEN_BASE+22*320, SCREEN_BASE+23*320, SCREEN_BASE+24*320 LineTabL: .lobytes LineTab LineTabH: .hibytes LineTab +.endif diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 851db820..763ca6b4 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -98,8 +98,36 @@ ASSERT_NOT_BELOW_IO lda #$96 sta $d02f - lda #$40 ; 3.5Mhz + ; enable bitplanes + + + lda #$D0 ; 3.5Mhz, H640, bitplanes + bbsf 7, graphMode, @11 + lda #$50 +@11: sta $d031 + + lda #$04 ; 3.5Mhz, H640, bitplanes + sta $d030 + + ; enable bitplace 1 (from 0-7) + lda #2 + sta $d032 + + ; bitplane data @$10000 + lda #0 + sta $d034 + + lda #$33 + sta $d102 + sta $d202 + sta $d302 + lda #$bb + sta $d100 + sta $d200 + sta $d300 + + .endif .if .defined(wheels) || .defined(removeToBASIC) diff --git a/kernal/init/init1.s b/kernal/init/init1.s index cd6e6103..a34a754a 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -24,7 +24,7 @@ _InitMachine: jsr _DoFirstInitIO -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) .import SetRightMargin .import SetNewMode0 _InitMachine2: @@ -33,7 +33,7 @@ _InitMachine2: .endif InitGEOEnv: LoadW r0, InitRamTab -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) jsr _InitRam jmp SetRightMargin .else diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 69a22712..6bb72c11 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -799,7 +799,8 @@ TempHideMouse: SetMsePic: UNIMPLEMENTED SetNewMode: - UNIMPLEMENTED +.import _SetNewMode + jmp _SetNewMode NormalizeX: jmp _NormalizeX MoveBData: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 388e2d62..872e8f90 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -72,6 +72,7 @@ SEGMENTS { graph2f: load = KERNAL, type = ro; graph2g: load = KERNAL, type = ro; graph2h: load = KERNAL, type = ro; + graph2p: load = KERNAL, type = ro; graph2i1: load = KERNAL, type = ro; inline: load = KERNAL, type = ro; graph2j: load = KERNAL, type = ro; @@ -81,6 +82,7 @@ SEGMENTS { graph2m: load = KERNAL, type = ro; graph2n: load = KERNAL, type = ro; graph2o: load = KERNAL, type = ro; + mode: load = KERNAL, type = ro; process1: load = KERNAL, type = ro; process2: load = KERNAL, type = ro; process3a: load = KERNAL, type = ro; diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index e4a67604..c6e43da4 100644 --- a/kernal/mouse/mouse3.s +++ b/kernal/mouse/mouse3.s @@ -21,7 +21,7 @@ ResetMseRegion: sta mouseLeft sta mouseLeft+1 sta mouseTop -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) LoadB mouseBottom, SC_PIX_HEIGHT-1 bbsf 7, graphMode, @2 LoadW mouseRight, SC_PIX_WIDTH-1 diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index b1948d0e..8347d239 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -62,7 +62,7 @@ SprTabH: ; Destroyed: a, x, y, r6 ;--------------------------------------------------------------- _PosSprite: -.if .defined(bsw128) || .defined(megat65) +.if .defined(bsw128) || .defined(mega65) ldx #r4 jsr NormalizeX .endif @@ -86,12 +86,22 @@ _PosSprite: sta r4L @X: .endif +.ifdef mega65 + MoveW r4, r6 + lda graphMode + bpl @X + asr r6H + ror r6L +@X: + AddVW VIC_X_POS_OFF, r6 +.else lda r4L addv VIC_X_POS_OFF sta r6L lda r4H adc #0 sta r6H +.endif lda r6L sta mob0xpos,Y ldx r3L diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 7cf16388..33daf226 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -146,12 +146,12 @@ ASSERT_NOT_BELOW_IO OrigResetHandle: sei cld - ldx #$ff - jsr _DoFirstInitIO .ifdef mega65 - lda #0 + lda #GR_40 sta graphMode .endif + ldx #$ff + jsr _DoFirstInitIO jsr InitGEOEnv .ifdef usePlus60K jsr DetectPlus60K diff --git a/kernal/vars/vars.s b/kernal/vars/vars.s index ecb46188..3631684e 100644 --- a/kernal/vars/vars.s +++ b/kernal/vars/vars.s @@ -147,7 +147,7 @@ DBGFNameTable: .word 0 DBGFTableIndex: .byte 0 DBGFileSelected: .byte 0 A885D: .byte 0 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) L8871: .byte 0 .endif A885E: .byte 0 diff --git a/loader/loader.s b/loader/loader.s index c36ecda0..cbed060a 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -66,7 +66,10 @@ next: .WORD 0 JSR uncruncher ;STZ 53280 ;STZ 53281 + JMP $5000 + +; ======================== .ENDPROC diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 893ce95f..0c31bd99 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -703,7 +703,11 @@ SetMyNewMode: wb IconTab+38,STARTC_X*2 wb IconTab+46,STARTD_X*2 ww RightMax,639 +.ifdef mega65 + wb GraphIndex,8 +.else wb GraphIndex,1 +.endif ; ww HauptMenu+4,237 ww HauptMenu+4,286 ; ww DispMenuRight,237 From c8fd9126822987996e6b40a3fdc155d4b67494a3 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 28 Sep 2017 21:43:42 +0200 Subject: [PATCH 015/125] Some cleanup. --- kernal/graph/mode.s | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 577a91af..4858860b 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -46,10 +46,6 @@ SetNewMode0: jmp SetVDCRegister .else START_IO - ;lda #$a5 - ;sta $d02f - ;lda #$96 - ;sta $d02f lda $d031 bbrf 7, graphMode, @1 From bf3fa97ab3c969cf42a4a366ba8a1dec5e404a1a Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Tue, 13 Mar 2018 22:44:45 +0100 Subject: [PATCH 016/125] Initial bitplanes version for 40/80 col media mode GEOS128 compatible. --- Makefile | 17 +- config.inc | 4 +- configure/configure65.grc | 2 +- configure/r0.s | 122 +- configure/r1.s | 169 +- configure/r4.s | 2 +- configure/r5.s | 6 +- configure/r6.s | 10 +- drv/_drv1581_21hd.s | 2143 ++++++++++++++++++++ drv/drv1571.s | 39 +- drv/drv1581-21hd.s | 14 +- drv/{drv1581-21hd.cfg => drv1581_21hd.cfg} | 2 +- drv/drv1581_21hd.s | 1871 +++++++++++++++++ drv/drvf011.s | 5 + inc/kernal.inc | 7 + kernal/128k/swapdiskdriver.s | 52 +- kernal/c65/map.s | 165 ++ kernal/conio/conio1.s | 28 +- kernal/conio/conio3a.s | 11 +- kernal/conio/conio3b.s | 17 +- kernal/files/files6c.s | 12 +- kernal/fonts/fonts2.s | 69 + kernal/graph/bitmapup.s | 5 +- kernal/graph/scanline.s | 94 +- kernal/hw/hw1b.s | 8 +- kernal/icon/icon1.s | 6 + kernal/init/init2.s | 9 + kernal/jumptab/jumptab.s | 7 + kernal/kernal_mega65.cfg | 20 +- kernal/reu/reu.s | 87 + kernal/start/start64.s | 2 + loader/loader.s | 20 + topdesk/DeskInclude/SearchDisk.inc | 3 + topdesk/Include/DeskMain2.inc | 2 +- topdesk/Main/DeskTop.main.s | 240 ++- topdesk/WinInclude/InvFrame.inc | 73 + topdesk/WinInclude/SpeedFrame.inc | 2 + 37 files changed, 5165 insertions(+), 180 deletions(-) create mode 100644 drv/_drv1581_21hd.s rename drv/{drv1581-21hd.cfg => drv1581_21hd.cfg} (82%) create mode 100644 drv/drv1581_21hd.s create mode 100644 kernal/c65/map.s diff --git a/Makefile b/Makefile index 6b4a88fa..00217978 100755 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ D64_TEMPLATE = GEOS64.D64 D64_RESULT = geos.d64 D81_TEMPLATE = GEOS64.D81 D81_RESULT = geos.d81 -GEOS_OUT = geos65 +GEOS_OUT = autoboot.c65 DESKTOP_CVT = desktop.cvt ASFLAGS = -I inc -I . @@ -174,7 +174,10 @@ ifeq ($(VARIANT), mega65) KERNAL_SOURCES += \ kernal/graph/normalize.s \ kernal/graph/mode.s \ - kernal/graph/graph2p.s + kernal/640/bswfont80.s \ + kernal/graph/graph2p.s \ + kernal/c65/map.s \ + kernal/128k/swapdiskdriver.s endif # code that is in C128 back bank @@ -243,7 +246,7 @@ DRIVER_SOURCES= \ drv/drv1541.bin \ drv/drv1571.bin \ drv/drv1581.bin \ - drv/drv1581-21hd.bin \ + drv/drv1581_21hd.bin \ drv/drv1571ram.bin \ drv/drv1581ram.bin \ input/joydrv.bin \ @@ -288,7 +291,7 @@ ALL_BINS= \ $(BUILD_DIR)/drv/drv1541.bin \ $(BUILD_DIR)/drv/drv1571.bin \ $(BUILD_DIR)/drv/drv1581.bin \ - $(BUILD_DIR)/drv/drv1581-21hd.bin \ + $(BUILD_DIR)/drv/drv1581_21hd.bin \ $(BUILD_DIR)/drv/drv1571ram.bin \ $(BUILD_DIR)/drv/drv1581ram.bin \ $(BUILD_DIR)/input/joydrv.bin \ @@ -343,8 +346,10 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo delete \"desk top\"| $(C1541) $@ >/dev/null; \ + echo delete \"geowrite\"| $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite GW64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ @@ -469,8 +474,8 @@ $(BUILD_DIR)/drv/drv1571.bin: $(BUILD_DIR)/drv/drv1571.o drv/drv1571.cfg $(DEPS) $(BUILD_DIR)/drv/drv1581.bin: $(BUILD_DIR)/drv/drv1581.o drv/drv1581.cfg $(DEPS) $(LD) -C drv/drv1581.cfg $(BUILD_DIR)/drv/drv1581.o -o $@ -$(BUILD_DIR)/drv/drv1581-21hd.bin: $(BUILD_DIR)/drv/drv1581-21hd.o drv/drv1581-21hd.cfg $(DEPS) - $(LD) -C drv/drv1581-21hd.cfg $(BUILD_DIR)/drv/drv1581-21hd.o -o $@ +$(BUILD_DIR)/drv/drv1581_21hd.bin: $(BUILD_DIR)/drv/drv1581_21hd.o drv/drv1581_21hd.cfg $(DEPS) + $(LD) -C drv/drv1581_21hd.cfg $(BUILD_DIR)/drv/drv1581_21hd.o -o $@ $(BUILD_DIR)/drv/drv1571ram.bin: $(BUILD_DIR)/drv/drv1571ram.o drv/drv1571ram.cfg $(DEPS) $(LD) -C drv/drv1571ram.cfg $(BUILD_DIR)/drv/drv1571ram.o -o $@ diff --git a/config.inc b/config.inc index d1ffa3e2..4dd5f133 100644 --- a/config.inc +++ b/config.inc @@ -224,8 +224,10 @@ DRV_TYPE = 1 ; DRV_1541 DRV_TYPE = 2; DRV_1571 .elseif .defined(drv1581) DRV_TYPE = 3; DRV_1581 -.elseif .defined(drvf011) +.elseif .defined(drv1581_21hd) DRV_TYPE = 3; DRV_1581 +.elseif .defined(drvf011) +DRV_TYPE = 4; DRV_F011 .else .error "Unknown drive type!" .endif diff --git a/configure/configure65.grc b/configure/configure65.grc index 2a20c699..9b8eb24e 100644 --- a/configure/configure65.grc +++ b/configure/configure65.grc @@ -8,5 +8,5 @@ HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V2.1" { MEMORY { overlaysize 0x1000 - overlaynums 0,1,2,3,4,5,6 + overlaynums 0,1,2,3,4,5,6,7 } diff --git a/configure/r0.s b/configure/r0.s index b2daf340..ec05463d 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -32,7 +32,7 @@ L6216 = $6216; .export L0616 .export L0672 .export L0739 -.export L073E +.export InitDrive .export L0911 .export L0E19 .export L0FA0 @@ -47,12 +47,13 @@ L6216 = $6216; .export InitShadowed1581 .export InitRAM1571 .export InitRAM1581 +.export InitF011 ;.export L043E ; = $043E; fix! ;.export L0616 ; = $0616; fix! ;.export L0672 ; = $0672; fix! ;.export L0739 ; = $0739; fix! -;.export L073E ; = $073E; fix! +;.export InitDrive ; = $073E; fix! ;.export L0911 ; = $0911; fix! ;.export L0E19 ; = $0E19; fix! ;.export L0FA0 ; = $0FA0; fix! @@ -76,10 +77,11 @@ L6216 = $6216; .import V2130 .import UIEntry .import L180C -.import L1E05 +.import SetupDrive .import V20FA .import V20F2 .import V20EA +.import CheckDrive ; ---------------------------------------------------------------------------- @@ -121,7 +123,7 @@ L0418: bit c128Flag ; 0418 2C 13 C0 sta NUMDRV ; 0438 8D 8D 84 ... jsr L0558 ; 043B 20 58 05 X. L043E: lda V2104 ; 043E AD 04 21 ..! - jsr L073E ; 0441 20 3E 07 >. + jsr InitDrive ; 0441 20 3E 07 >. jsr L1081 ; 0444 20 81 10 .. jsr L0FA0 ; 0447 20 A0 0F .. .ifndef config128 @@ -351,7 +353,7 @@ L05C1: sta driveType,y ; 05C1 99 8E 84 L05E7: lda V2108 ; 05E7 AD 08 21 ..! beq L05F7 ; 05EA F0 0B .. lda #$0A ; 05EC A9 0A .. - jsr L073E ; 05EE 20 3E 07 >. + jsr InitDrive ; 05EE 20 3E 07 >. lda V2108 ; 05F1 AD 08 21 ..! jsr L0769 ; 05F4 20 69 07 i. L05F7: rts ; 05F7 60 @@ -362,7 +364,7 @@ L05F8: lda ramExpSize ; 05F8 AD C3 88 sta V212B ; 05FF 8D 2B 21 .+! lda V2106 ; 0602 AD 06 21 ..! sta V212F ; 0605 8D 2F 21 ./! -L0608: jsr L09C8 ; 0608 20 C8 09 .. +L0608: jsr InstallDriver ; 0608 20 C8 09 .. inc V212B ; 060B EE 2B 21 .+! lda V212B ; 060E AD 2B 21 .+! cmp #$0C ; 0611 C9 0C .. @@ -447,6 +449,7 @@ L06AD: brk ; 06AD 00 brk ; 06AF 00 . brk ; 06B0 00 . brk ; 06B1 00 . + .byte 0 L06B2: lda #$01 ; 06B2 A9 01 .. sta r0L ; 06B4 85 02 .. lda V2104 ; 06B6 AD 04 21 ..! @@ -516,7 +519,7 @@ L0736: lda r2L ; 0736 A5 06 ; ---------------------------------------------------------------------------- L0739: lda curDrive ; 0739 AD 89 84 ... eor #$01 ; 073C 49 01 I. -L073E: jsr SetDevice ; 073E 20 B0 C2 .. +InitDrive: jsr SetDevice ; 073E 20 B0 C2 .. txa ; 0741 8A . bne L0768 ; 0742 D0 24 .$ .ifndef config128 @@ -528,7 +531,7 @@ L073E: jsr SetDevice ; 073E 20 B0 C2 lda $8486,y ; 0750 B9 86 84 ... beq L075B ; 0753 F0 06 .. sta V212F ; 0755 8D 2F 21 ./! - jsr L09C8 ; 0758 20 C8 09 .. + jsr InstallDriver ; 0758 20 C8 09 .. L075B: pla ; 075B 68 h sta V212F ; 075C 8D 2F 21 ./! .endif @@ -597,7 +600,7 @@ L07B7: lda V212C ; 07B7 AD 2C 21 ; ---------------------------------------------------------------------------- L07D6: lda #$01 ; 07D6 A9 01 .. sta V212F ; 07D8 8D 2F 21 ./! - jmp L08D7 ; 07DB 4C D7 08 L.. + jmp InitNewDrive ; 07DB 4C D7 08 L.. ; ---------------------------------------------------------------------------- L07DE: rts ; 07DE 60 ` ; ---------------------------------------------------------------------------- @@ -607,7 +610,7 @@ L07DF: lda V212C ; 07DF AD 2C 21 beq L07EE ; 07E4 F0 08 .. lda #$02 ; 07E6 A9 02 .. sta V212F ; 07E8 8D 2F 21 ./! - jmp L08D7 ; 07EB 4C D7 08 L.. + jmp InitNewDrive ; 07EB 4C D7 08 L.. ; ---------------------------------------------------------------------------- L07EE: rts ; 07EE 60 ` ; ---------------------------------------------------------------------------- @@ -617,10 +620,20 @@ L07EF: lda V212C ; 07EF AD 2C 21 beq L07FE ; 07F4 F0 08 .. lda #$03 ; 07F6 A9 03 .. sta V212F ; 07F8 8D 2F 21 ./! - jmp L08D7 ; 07FB 4C D7 08 L.. + jmp InitNewDrive ; 07FB 4C D7 08 L.. ; ---------------------------------------------------------------------------- L07FE: rts ; 07FE 60 ` ; ---------------------------------------------------------------------------- +InitF011: + lda V212C ; 07EF AD 2C 21 .,! + cmp #$04 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$04 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + jmp InitNewDrive ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +AlreadyF011: rts ; 07FE 60 ` +; ---------------------------------------------------------------------------- InitShadowed1541: L07FF: lda V212C ; 07FF AD 2C 21 .,! cmp #$41 ; 0802 C9 41 .A @@ -657,7 +670,7 @@ L0841: lda V212C ; 0841 AD 2C 21 beq L0872 ; 0846 F0 2A .* lda #$81 ; 0848 A9 81 .. sta V212F ; 084A 8D 2F 21 ./! - jsr L09C8 ; 084D 20 C8 09 .. + jsr InstallDriver ; 084D 20 C8 09 .. inc NUMDRV ; 0850 EE 8D 84 ... lda #$81 ; 0853 A9 81 .. jsr L0911 ; 0855 20 11 09 .. @@ -667,7 +680,7 @@ L0841: lda V212C ; 0841 AD 2C 21 sta $8486,y ; 0860 99 86 84 ... sta $03FE,y ; 0863 99 FE 03 ... lda V212B ; 0866 AD 2B 21 .+! - jsr L073E ; 0869 20 3E 07 >. + jsr InitDrive ; 0869 20 3E 07 >. jsr L0A8A ; 086C 20 8A 0A .. dec L180C ; 086F CE 0C 18 ... L0872: rts ; 0872 60 ` @@ -678,7 +691,7 @@ L0873: lda V212C ; 0873 AD 2C 21 beq L08A4 ; 0878 F0 2A .* lda #$82 ; 087A A9 82 .. sta V212F ; 087C 8D 2F 21 ./! - jsr L09C8 ; 087F 20 C8 09 .. + jsr InstallDriver ; 087F 20 C8 09 .. inc NUMDRV ; 0882 EE 8D 84 ... lda #$82 ; 0885 A9 82 .. jsr L0911 ; 0887 20 11 09 .. @@ -688,7 +701,7 @@ L0873: lda V212C ; 0873 AD 2C 21 sta $8486,y ; 0892 99 86 84 ... sta $03FE,y ; 0895 99 FE 03 ... lda V212B ; 0898 AD 2B 21 .+! - jsr L073E ; 089B 20 3E 07 >. + jsr InitDrive ; 089B 20 3E 07 >. jsr L0A8A ; 089E 20 8A 0A .. dec L180C ; 08A1 CE 0C 18 ... L08A4: rts ; 08A4 60 ` @@ -699,7 +712,7 @@ L08A5: lda V212C ; 08A5 AD 2C 21 beq L08D6 ; 08AA F0 2A .* lda #$83 ; 08AC A9 83 .. sta V212F ; 08AE 8D 2F 21 ./! - jsr L09C8 ; 08B1 20 C8 09 .. + jsr InstallDriver ; 08B1 20 C8 09 .. inc NUMDRV ; 08B4 EE 8D 84 ... lda #$83 ; 08B7 A9 83 .. jsr L0911 ; 08B9 20 11 09 .. @@ -709,26 +722,32 @@ L08A5: lda V212C ; 08A5 AD 2C 21 sta $8486,y ; 08C4 99 86 84 ... sta $03FE,y ; 08C7 99 FE 03 ... lda V212B ; 08CA AD 2B 21 .+! - jsr L073E ; 08CD 20 3E 07 >. + jsr InitDrive ; 08CD 20 3E 07 >. jsr L0A8A ; 08D0 20 8A 0A .. dec L180C ; 08D3 CE 0C 18 ... L08D6: rts ; 08D6 60 ` ; ---------------------------------------------------------------------------- -L08D7: jsr L09C8 ; 08D7 20 C8 09 .. - lda V212B ; 08DA AD 2B 21 .+! - jsr L073E ; 08DD 20 3E 07 >. +InitNewDrive: ; init drive driver + jsr InstallDriver ; 08D7 20 C8 09 .. + + lda V212B ; 08DA AD 2B 21 .+! + jsr InitDrive ; 08DD 20 3E 07 >. lda firstBoot ; 08E0 AD C5 88 ... cmp #$FF ; 08E3 C9 FF .. beq L08F6 ; 08E5 F0 0F .. - ldy V212B ; 08E7 AC 2B 21 .+! + + ldy V212B ; 08E7 AC 2B 21 .+! lda V212F ; 08EA AD 2F 21 ./! sta $8486,y ; 08ED 99 86 84 ... inc NUMDRV ; 08F0 EE 8D 84 ... clv ; 08F3 B8 . bvc L08FF ; 08F4 50 09 P. -L08F6: jsr L1E05 ; 08F6 20 05 1E .. +L08F6: + ; handle non first boot setup, using dialogs + jsr SetupDrive ; 08F6 20 05 1E .. lda V212B ; 08F9 AD 2B 21 .+! - jsr L073E ; 08FC 20 3E 07 >. + jsr InitDrive ; 08FC 20 3E 07 >. + L08FF: dec L180C ; 08FF CE 0C 18 ... ldy V212B ; 0902 AC 2B 21 .+! lda $8486,y ; 0905 B9 86 84 ... @@ -838,7 +857,7 @@ L09C3: .byte $03 ; 09C3 03 .byte $03 ; 09C4 03 . asl CPU_DATA ; 09C5 06 01 .. .byte $0D ; 09C7 0D . -L09C8: lda ramExpSize ; 09C8 AD C3 88 ... +InstallDriver: lda ramExpSize ; 09C8 AD C3 88 ... bne L09F0 ; 09CB D0 23 .# lda sysRAMFlg ; 09CD AD C4 88 ... and #$BF ; 09D0 29 BF ). @@ -894,9 +913,9 @@ L0A3D: pha ; 0A3D 48 sta r0H ; 0A49 85 03 .. pla ; 0A4B 68 h tay ; 0A4C A8 . - lda L0A66,y ; 0A4D B9 66 0A .f. + lda L0A66-8,y ; 0A4D B9 66 0A .f. sta r1L ; 0A50 85 04 .. - lda L0A6A,y ; 0A52 B9 6A 0A .j. + lda L0A6A-8,y ; 0A52 B9 6A 0A .j. sta r1H ; 0A55 85 05 .. lda #$0D ; 0A57 A9 0D .. sta r2H ; 0A59 85 07 .. @@ -906,30 +925,53 @@ L0A3D: pha ; 0A3D 48 sta r3L ; 0A61 85 08 .. rts ; 0A63 60 ` ; ---------------------------------------------------------------------------- -L0A64: .byte $80 ; 0A64 80 . +; 2f00 - ??? +; 3c80 - +; 4a00 - +; 5780 - +; 6500 - +; 7280 - +; 8000 - NO + +L0A64: .byte 0, $80 ; 0A64 80 . brk ; 0A65 00 . -L0A66: .byte $80 ; 0A66 80 . + .byte $80 ; 0A66 80 . brk ; 0A67 00 . .byte $80 ; 0A68 80 . -L0A69: .byte $3C ; 0A69 3C < -L0A6A: lsr ; 0A6A 4A J + +L0A69: .byte $2f, $3C ; 0A69 3C < + lsr ; 0A6A 4A J .byte $57 ; 0A6B 57 W adc a3L ; 0A6C 65 72 er + +L0A66: brk ; 0A6E 00 . .byte $80 ; 0A6F 80 . brk ; 0A70 00 . .byte $80 ; 0A71 80 . + +L0A6A: .byte $83 ; 0A72 83 . ;bcc L0A13 ; 0A73 90 9E .. .byte $90, $9e .byte $AB ; 0A75 AB . + +; translate drive type to driver offset L0A76: tya ; 0A76 98 . bpl L0A85 ; 0A77 10 0C .. cmp #$83 ; 0A79 C9 83 .. beq L0A81 ; 0A7B F0 04 .. +.ifdef mega65 + ldy #$04 ; 0A7D A0 03 .. +.else ldy #$03 ; 0A7D A0 03 .. +.endif bne L0A89 ; 0A7F D0 08 .. +.ifdef mega65 +L0A81: ldy #$05 ; 0A81 A0 04 .. +.else L0A81: ldy #$04 ; 0A81 A0 04 .. +.endif bne L0A89 ; 0A83 D0 04 .. L0A85: and #$0F ; 0A85 29 0F ). tay ; 0A87 A8 . @@ -1409,6 +1451,13 @@ L0FAF: dey ; 0FAF 88 bpl L0FA7 ; 0FB0 10 F5 .. rts ; 0FB2 60 ` ; ---------------------------------------------------------------------------- +.ifdef mega65 +L0FB3: + ; if we are a real mega65 we are able to use some of the ROM + ; mapped banks for GEOS REU + LoadB ramExpSize, 0 + rts +.else L0FB3: jsr InitForIO ; 0FB3 20 5C C2 \. lda #$00 ; 0FB6 A9 00 .. sta ramExpSize ; 0FB8 8D C3 88 ... @@ -1449,6 +1498,7 @@ L0FF5: jsr L1010 ; 0FF5 20 10 10 bvc L0FF5 ; 1008 50 EB P. L100A: dec ramExpSize ; 100A CE C3 88 ... L100D: jmp DoneWithIO ; 100D 4C 5F C2 L_. +.endif ; ---------------------------------------------------------------------------- ;*=$1010 L1010: @@ -1497,7 +1547,7 @@ L1081: lda sysRAMFlg ; 1081 AD C4 88 and #$20 ; 1084 29 20 ) beq L1094 ; 1086 F0 0C .. lda V2104 ; 1088 AD 04 21 ..! - jsr L073E ; 108B 20 3E 07 >. + jsr InitDrive ; 108B 20 3E 07 >. jsr L1095 ; 108E 20 95 10 .. jsr L1145 ; 1091 20 45 11 E. L1094: rts ; 1094 60 ` @@ -2015,9 +2065,15 @@ L135E: inc V2103 ; 135E EE 03 21 ;L6216: ldy #$91 ; 1371 A0 91 .. .ifdef config128 +.ifdef mega65 + ldx CPU_DATA ; 1373 A6 01 .. + lda #$35 ; 1375 A9 35 .5 + sta CPU_DATA ; 1377 85 01 .. +.else lda #$00 ; 13C7 A9 00 .. sta $D030 ;clkreg ; 13C9 8D 30 D0 .0. nop ; 13CC EA . +.endif .else ldx CPU_DATA ; 1373 A6 01 .. lda #$35 ; 1375 A9 35 .5 @@ -2045,8 +2101,12 @@ L13A7: lda EXP_BASE ; 13A7 AD 00 DF and #$60 ; 13AA 29 60 )` beq L13A7 ; 13AC F0 F9 .. .ifdef config128 +.ifdef mega65 + stx CPU_DATA ; 13AE 86 01 .. +.else nop nop +.endif .else stx CPU_DATA ; 13AE 86 01 .. .endif diff --git a/configure/r1.s b/configure/r1.s index c013cfd9..cefab2d3 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -28,7 +28,7 @@ vdcdata = $d601 ;L0616 = $0616; fix! ;L0672 = $0672; fix! ;L0739 = $0739; fix! -;L073E = $073E; fix! +;InitDrive = $073E; fix! ;L0911 = $0911; fix! ;L0E19 = $0E19; fix! ;L0FA0 = $0FA0; fix! @@ -38,7 +38,7 @@ vdcdata = $d601 .import L0616 .import L0672 .import L0739 -.import L073E +.import InitDrive .import L0911 .import L0E19 .import L0FA0 @@ -53,6 +53,7 @@ vdcdata = $d601 .import InitShadowed1581 .import InitRAM1571 .import InitRAM1581 +.import InitF011 .export V20D9 .export V2102 @@ -73,10 +74,11 @@ vdcdata = $d601 .export V2150 .export UIEntry .export L180C -.export L1E05 +.export SetupDrive .export V20FA .export V20F2 .export V20EA +.export CheckDrive L6819 = $6819 @@ -415,7 +417,12 @@ L1518: lda #$01 ; 1518 A9 01 bne L1541 ; 1524 D0 1B .. lda #$03 ; 1526 A9 03 .. jsr L0672 ; 1528 20 72 06 r. - bne L1541 ; 152B D0 14 .. + bne L1541 ; 152B D0 14 .. +.ifdef mega65 + lda #$04 ; 1526 A9 03 .. + jsr L0672 ; 1528 20 72 06 r. + bne L1541 ; 152B D0 14 .. +.endif lda ramExpSize ; 152D AD C3 88 ... beq L153E ; 1530 F0 0C .. lda #$81 ; 1532 A9 81 .. @@ -500,7 +507,7 @@ L15DF: lda V212E ; 15DF AD 2E 21 ldy #$00 ; 15E9 A0 00 .. lda (r15L),y ; 15EB B1 20 . sta V212B ; 15ED 8D 2B 21 .+! - jsr L073E ; 15F0 20 3E 07 >. + jsr InitDrive ; 15F0 20 3E 07 >. ldy V212B ; 15F3 AC 2B 21 .+! lda $8486,y ; 15F6 B9 86 84 ... sta V212C ; 15F9 8D 2C 21 .,! @@ -513,7 +520,7 @@ L15FF: lda V212E ; 15FF AD 2E 21 ldy #$00 ; 1609 A0 00 .. lda (r15L),y ; 160B B1 20 . sta V212B ; 160D 8D 2B 21 .+! - jsr L073E ; 1610 20 3E 07 >. + jsr InitDrive ; 1610 20 3E 07 >. ldy V212B ; 1613 AC 2B 21 .+! lda $8486,y ; 1616 B9 86 84 ... sta V212C ; 1619 8D 2C 21 .,! @@ -726,7 +733,8 @@ ConfigOtherPressVec: bpl L17EA ; 17E7 10 01 .. rts ; 17E9 60 ` ; ---------------------------------------------------------------------------- -L17EA: lda #$00 ; 17EA A9 00 .. +L17EA: + lda #$00 ; 17EA A9 00 .. sta L180C ; 17EC 8D 0C 18 ... jsr L1837 ; 17EF 20 37 18 7. jsr L180D ; 17F2 20 0D 18 .. @@ -907,7 +915,7 @@ L196C: MenuSaveConfig: jsr DoPreviousMenu ; 1990 20 90 C1 .. lda V2104 ; 1993 AD 04 21 ..! - jsr L073E ; 1996 20 3E 07 >. + jsr InitDrive ; 1996 20 3E 07 >. LoadW r0, V20D9 jsr OpenRecordFile ; 19A1 20 74 C2 t. txa ; 19A4 8A . @@ -1061,6 +1069,8 @@ L1AA0: lda #$00 ; 1AA0 A9 00 jsr L1B5B ; 1AD4 20 5B 1B [. jsr L1CDC ; 1AD7 20 DC 1C .. jsr L1B5B ; 1ADA 20 5B 1B [. + jsr CheckF011 ; 1AA7 20 39 1C 9. + jsr L1B5B ; 1AAA 20 5B 1B [. lda V212E ; 1ADD AD 2E 21 ..! sta r15H ; 1AE0 85 21 .! lda V212D ; 1AE2 AD 2D 21 .-! @@ -1206,6 +1216,7 @@ L1BA9: .byte OptNoDrive @@ -1217,6 +1228,7 @@ L1BB2: .byte >OptShadowed1581 .byte >OptRAM1571 .byte >OptRAM1581 + .byte >OptF011 ; no drive OptNoDrive: @@ -1304,7 +1316,16 @@ L1C30: .byte "RAM 1581" ; 1C30 52 41 4D 20 31 35 38 31 RAM 1581 .byte 0 ; 1C38 00 . +; F011 +OptF011: + .byte $04 + .word F011Label + .word InitF011 +F011Label: + .byte "F011" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + L1C39: ldy V212C ; 1C39 AC 2C 21 .,! beq L1C40 ; 1C3C F0 02 .. ldy #$01 ; 1C3E A0 01 .. @@ -1363,6 +1384,19 @@ L1C93: ldy #$05 ; 1C93 A0 05 ; ---------------------------------------------------------------------------- L1C96: ldy #$00 ; 1C96 A0 00 .. rts ; 1C98 60 ` + +; ---------------------------------------------------------------------------- +CheckF011: lda V212C ; 1C88 AD 2C 21 .,! + cmp #$04 ; 1C8B C9 02 .. + beq ShowF011 ; 1C8D F0 04 .. + cmp #$00 ; 1C8F C9 00 .. + bne NoF011 ; 1C91 D0 03 .. +ShowF011: ldy #10 ; 1C93 A0 05 .. + rts ; 1C95 60 ` +; ---------------------------------------------------------------------------- +NoF011: ldy #$00 ; 1C96 A0 00 .. + rts ; 1C98 60 ` + ; ---------------------------------------------------------------------------- L1C99: lda V212C ; 1C99 AD 2C 21 .,! cmp #$03 ; 1C9C C9 03 .. @@ -1391,6 +1425,24 @@ L1CBD: ldy #$07 ; 1CBD A0 07 L1CC0: ldy #$00 ; 1CC0 A0 00 .. rts ; 1CC2 60 ` .endif + +.ifdef mega65 +L1CAA: lda V212C ; 1CAA AD 2C 21 .,! + cmp #$43 ; 1CAD C9 43 .C + beq L1CBD ; 1CAF F0 0C .. + cmp #$03 ; 1CB1 C9 03 .. + bne L1CC0 ; 1CB3 D0 0B .. + lda #$43 ; 1CB5 A9 43 .C + jsr L0911 ; 1CB7 20 11 09 .. + txa ; 1CBA 8A . + bne L1CC0 ; 1CBB D0 03 .. +L1CBD: ldy #$07 ; 1CBD A0 07 .. + rts ; 1CBF 60 ` +; ---------------------------------------------------------------------------- +L1CC0: ldy #$00 ; 1CC0 A0 00 .. + rts ; 1CC2 60 ` +.endif + ; ---------------------------------------------------------------------------- L1CC3: lda V212C ; 1CC3 AD 2C 21 .,! cmp #$82 ; 1CC6 C9 82 .. @@ -1441,7 +1493,7 @@ L1D08: sta L1D9A ; 1D08 8D 9A 1D jsr L1D28 ; 1D18 20 28 1D (. L1D1B: lda V212B ; 1D1B AD 2B 21 .+! jsr L1DF2 ; 1D1E 20 F2 1D .. - jsr L1DB0 ; 1D21 20 B0 1D .. + jsr CheckAllDrives ; 1D21 20 B0 1D .. dec L180C ; 1D24 CE 0C 18 ... L1D27: rts ; 1D27 60 ` ; ---------------------------------------------------------------------------- @@ -1506,24 +1558,24 @@ UnplugDlg: L1DAF: brk ; 1DAF 00 . -L1DB0: lda #$00 ; 1DB0 A9 00 .. +CheckAllDrives: lda #$00 ; 1DB0 A9 00 .. sta L1DAF ; 1DB2 8D AF 1D ... lda #$08 ; 1DB5 A9 08 .. - jsr L1DCB ; 1DB7 20 CB 1D .. + jsr CheckDrive ; 1DB7 20 CB 1D .. lda #$09 ; 1DBA A9 09 .. - jsr L1DCB ; 1DBC 20 CB 1D .. + jsr CheckDrive ; 1DBC 20 CB 1D .. lda #$0A ; 1DBF A9 0A .. - jsr L1DCB ; 1DC1 20 CB 1D .. + jsr CheckDrive ; 1DC1 20 CB 1D .. lda L1DAF ; 1DC4 AD AF 1D ... sta NUMDRV ; 1DC7 8D 8D 84 ... rts ; 1DCA 60 ` ; ---------------------------------------------------------------------------- -L1DCB: tay ; 1DCB A8 . +CheckDrive: tay ; 1DCB A8 . lda $8486,y ; 1DCC B9 86 84 ... beq L1DE0 ; 1DCF F0 0F .. bmi L1DDD ; 1DD1 30 0A 0. tya ; 1DD3 98 . - jsr L1DE1 ; 1DD4 20 E1 1D .. + jsr InitAndCheckDrive ; 1DD4 20 E1 1D .. bne L1DDD ; 1DD7 D0 04 .. jsr L1DF2 ; 1DD9 20 F2 1D .. rts ; 1DDC 60 ` @@ -1531,7 +1583,7 @@ L1DCB: tay ; 1DCB A8 L1DDD: inc L1DAF ; 1DDD EE AF 1D ... L1DE0: rts ; 1DE0 60 ` ; ---------------------------------------------------------------------------- -L1DE1: jsr L073E ; 1DE1 20 3E 07 >. +InitAndCheckDrive: jsr InitDrive ; 1DE1 20 3E 07 >. lda NUMDRV ; 1DE4 AD 8D 84 ... bne L1DEC ; 1DE7 D0 03 .. inc NUMDRV ; 1DE9 EE 8D 84 ... @@ -1548,29 +1600,35 @@ L1DF2: ldy curDrive ; 1DF2 AC 89 84 rts ; 1E03 60 ` ; ---------------------------------------------------------------------------- L1E04: brk ; 1E04 00 . -L1E05: +SetupDrive: lda #$00 ; 1E05 A9 00 .. sta L1E04 ; 1E07 8D 04 1E ... lda V212B ; 1E0A AD 2B 21 .+! cmp #$0A ; 1E0D C9 0A .. - bcc L1E14 ; 1E0F 90 03 .. - jmp L1EB4 ; 1E11 4C B4 1E L.. + bcc SetupDriveAB ; 1E0F 90 03 .. + jmp SetupDriveC ; 1E11 4C B4 1E L.. ; ---------------------------------------------------------------------------- -L1E14: lda #$00 ; 1E14 A9 00 .. +SetupDriveAB: lda #$00 ; 1E14 A9 00 .. sta L1E04 ; 1E16 8D 04 1E ... - ldy V212B ; 1E19 AC 2B 21 .+! + + ; set new drive type + ldy V212B ; 1E19 AC 2B 21 .+! lda V212F ; 1E1C AD 2F 21 ./! sta $8486,y ; 1E1F 99 86 84 ... inc $848D - lda V212B - jsr L1DE1 - bne L1E48 ; 1E2B D0 1B .. - lda V212B ; 1E2D AD 2B 21 .+! + + lda V212B + jsr InitAndCheckDrive + bne L1E48 ; 1E2B D0 1B .. + + ; the other drive empty? + lda V212B ; 1E2D AD 2B 21 .+! eor #$01 ; 1E30 49 01 I. tay ; 1E32 A8 . lda $8486,y ; 1E33 B9 86 84 ... beq L1E59 ; 1E36 F0 21 .! - tya ; 1E38 98 . + + tya ; 1E38 98 . ldy #$0B ; 1E39 A0 0B .. bit sysRAMFlg ; 1E3B 2C C4 88 ,.. bvs L1E43 ; 1E3E 70 03 p. @@ -1590,10 +1648,13 @@ L1E59: ldx #>PluginDlg ; 1E59 A2 1F lda r0L ; 1E60 A5 02 .. cmp #$02 ; 1E62 C9 02 .. beq L1E98 ; 1E64 F0 32 .2 - lda V212B ; 1E66 AD 2B 21 .+! - jsr L1DE1 ; 1E69 20 E1 1D .. + + ; not canceled + lda V212B ; 1E66 AD 2B 21 .+! + jsr InitAndCheckDrive ; 1E69 20 E1 1D .. bne L1E98 ; 1E6C D0 2A .* - lda V212B ; 1E6E AD 2B 21 .+! + + lda V212B ; 1E6E AD 2B 21 .+! eor #$01 ; 1E71 49 01 I. sta curDevice ; 1E73 85 BA .. sta curDrive ; 1E75 8D 89 84 ... @@ -1613,7 +1674,7 @@ L1E59: ldx #>PluginDlg ; 1E59 A2 1F bne L1E59 ; 1E96 D0 C1 .. L1E98: lda L1E04 ; 1E98 AD 04 1E ... beq L1EB0 ; 1E9B F0 13 .. - jsr L1DE1 ; 1E9D 20 E1 1D .. + jsr InitAndCheckDrive ; 1E9D 20 E1 1D .. bne L1EA8 ; 1EA0 D0 06 .. jsr L1DF2 ; 1EA2 20 F2 1D .. clv ; 1EA5 B8 . @@ -1621,17 +1682,17 @@ L1E98: lda L1E04 ; 1E98 AD 04 1E L1EA8: lda V212B ; 1EA8 AD 2B 21 .+! eor #$01 ; 1EAB 49 01 I. jsr L1FC5 ; 1EAD 20 C5 1F .. -L1EB0: jsr L1DB0 ; 1EB0 20 B0 1D .. +L1EB0: jsr CheckAllDrives ; 1EB0 20 B0 1D .. rts ; 1EB3 60 ` ; ---------------------------------------------------------------------------- -L1EB4: lda #$00 ; 1EB4 A9 00 .. +SetupDriveC: lda #$00 ; 1EB4 A9 00 .. sta L1E04 ; 1EB6 8D 04 1E ... ldy V212B ; 1EB9 AC 2B 21 .+! lda V212F ; 1EBC AD 2F 21 ./! sta $8486,y ; 1EBF 99 86 84 ... inc NUMDRV ; 1EC2 EE 8D 84 ... lda V212B ; 1EC5 AD 2B 21 .+! - jsr L1DE1 ; 1EC8 20 E1 1D .. + jsr InitAndCheckDrive ; 1EC8 20 E1 1D .. bne L1EDB ; 1ECB D0 0E .. ldy #$08 ; 1ECD A0 08 .. lda $8486,y ; 1ECF B9 86 84 ... @@ -1642,7 +1703,7 @@ L1EB4: lda #$00 ; 1EB4 A9 00 L1EDB: bne L1F3E ; 1EDB D0 61 .a L1EDD: sty L1E04 ; 1EDD 8C 04 1E ... lda #$08 ; 1EE0 A9 08 .. - jsr L073E ; 1EE2 20 3E 07 >. + jsr InitDrive ; 1EE2 20 3E 07 >. lda L1E04 ; 1EE5 AD 04 1E ... jsr L1FC5 ; 1EE8 20 C5 1F .. jsr PurgeTurbo ; 1EEB 20 35 C2 5. @@ -1653,7 +1714,7 @@ L1EEE: ldx #>PluginDlg2 ; 1EEE A2 1F cmp #$02 ; 1EF7 C9 02 .. beq L1F29 ; 1EF9 F0 2E .. lda V212B ; 1EFB AD 2B 21 .+! - jsr L1DE1 ; 1EFE 20 E1 1D .. + jsr InitAndCheckDrive ; 1EFE 20 E1 1D .. bne L1F29 ; 1F01 D0 26 .& lda #$08 ; 1F03 A9 08 .. sta curDevice ; 1F05 85 BA .. @@ -1673,14 +1734,14 @@ L1EEE: ldx #>PluginDlg2 ; 1EEE A2 1F bne L1EEE ; 1F27 D0 C5 .. L1F29: lda L1E04 ; 1F29 AD 04 1E ... beq L1F3E ; 1F2C F0 10 .. - jsr L1DE1 ; 1F2E 20 E1 1D .. + jsr InitAndCheckDrive ; 1F2E 20 E1 1D .. bne L1F39 ; 1F31 D0 06 .. jsr L1DF2 ; 1F33 20 F2 1D .. clv ; 1F36 B8 . bvc L1F3E ; 1F37 50 05 P. L1F39: lda #$08 ; 1F39 A9 08 .. jsr L1FC5 ; 1F3B 20 C5 1F .. -L1F3E: jsr L1DB0 ; 1F3E 20 B0 1D .. +L1F3E: jsr CheckAllDrives ; 1F3E 20 B0 1D .. rts ; 1F41 60 ` ; ---------------------------------------------------------------------------- L1F42: @@ -1770,7 +1831,7 @@ L1FEE: sta r0L ; 1FEE 85 02 pha ; 1FFC 48 H bpl L2007 ; 1FFD 10 08 .. lda r0L ; 1FFF A5 02 .. - jsr L073E ; 2001 20 3E 07 >. + jsr InitDrive ; 2001 20 3E 07 >. clv ; 2004 B8 . bvc L200C ; 2005 50 05 P. L2007: lda r0L ; 2007 A5 02 .. @@ -1819,7 +1880,7 @@ ConfigRecoverVector: beq L20C6 ; 20BC F0 08 .. jsr L20D4 ; 20BE 20 D4 20 . L20C1: lda #$FF ; 20C1 A9 FF .. - sta $27EB ; 20C3 8D EB 27 ..' + sta V2550 ; 20C3 8D EB 27 ..' L20C6: .else jsr L2060 ; 2057 20 60 20 ` @@ -1835,11 +1896,15 @@ L20C7: jsr L2241 ; 20C7 20 41 22 sta (r7L),y ; 20D0 91 10 .. beq L20DC ; 20D2 F0 08 .. +; recover L20D4: jsr L2241 ; 20D4 20 41 22 A" jsr L2189 ; 20D7 20 89 21 .! lda #$FF ; 20DA A9 FF .. -L20DC: bit graphMode ; 20DC 24 3F $? +L20DC: +.ifndef mega65 + bit graphMode ; 20DC 24 3F $? bmi L2115 ; 20DE 30 35 05 +.endif sta r4H ; 20E0 85 0B .. .else @@ -1888,6 +1953,7 @@ L2094: tay ; 2094 A8 .ifdef config128 ; ---------------------------------------------------------------------------- +.ifndef mega65 L2115: pha ; 2115 48 H txa ; 2116 8A . pha ; 2117 48 H @@ -1942,7 +2008,7 @@ L2173: jsr L22CF ; 2173 20 CF 22 L2176: ldy #$00 ; 2176 A0 00 .. sta (r1L),y ; 2178 91 04 .. rts ; 217A 60 ` - +.endif ;L22CF: ;L22E1: @@ -1977,10 +2043,8 @@ L20AC: tya ; 20AC 98 tya ; 20B8 98 . rts ; 20B9 60 ` ; ---------------------------------------------------------------------------- -L20BA: lda #$25 ; 20BA A9 25 .% - sta r1H ; 20BC 85 05 .. - lda #$51 ; 20BE A9 51 .Q - sta r1L ; 20C0 85 04 .. +L20BA: LoadW r1, V2551 + ldy #$00 ; 20C2 A0 00 .. L20C4: lda L20D1,x ; 20C4 BD D1 20 .. sta r2L,y ; 20C7 99 06 00 ... @@ -2019,6 +2083,8 @@ L2189: lda r1H ; 2189 A5 05 L2197: rts ; 2197 60 ` ; ---------------------------------------------------------------------------- +; uncompress for recovery + L20A0: L2198: tya ; 2198 98 . pha ; 2199 48 H @@ -2077,6 +2143,8 @@ L21FB: pla ; 21FB 68 rts ; 21FC 60 ` ; ---------------------------------------------------------------------------- +; save foreground area with compress + L20AC: L21FD: tya ; 21FD 98 . pha ; 21FE 48 H @@ -2122,6 +2190,7 @@ L223A: pla ; 223A 68 ; ---------------------------------------------------------------------------- L2241: txa ; 2241 8A . pha ; 2242 48 H +.ifndef mega65 bit graphMode ; 2243 24 3F $? bpl L2252 ; 2245 10 0B .. lda #$A0 ; 2247 A9 A0 .. @@ -2130,10 +2199,9 @@ L2241: txa ; 2241 8A sta r1L ; 224D 85 04 .. clv ; 224F B8 . bvc L225A ; 2250 50 08 P. -L2252: lda #$27 ; 2252 A9 27 .' - sta r1H ; 2254 85 05 .. - lda #$EC ; 2256 A9 EC .. - sta r1L ; 2258 85 04 .. +L2252: +.endif + LoadW r1, V2551 L225A: ldy #$00 ; 225A A0 00 .. L225C: lda L236C,x ; 225C BD 6C 23 .l# sta r2L,y ; 225F 99 06 00 ... @@ -2326,4 +2394,5 @@ V212E = V212D + 1 V212F = V212E + 1 V2130 = V212F + 1 V2150 = V2130 + 1 + 31 -V2550 = V2150 + $400 \ No newline at end of file +V2550 = V2150 + $400 +V2551 = V2550 + 1 \ No newline at end of file diff --git a/configure/r4.s b/configure/r4.s index 9a9c02be..e03fdb28 100644 --- a/configure/r4.s +++ b/configure/r4.s @@ -1,2 +1,2 @@ .SEGMENT "OVERLAY4" -.INCBIN "build/mega65/drv/drv1581-21hd.bin" \ No newline at end of file +.INCBIN "build/mega65/drv/drv1581_21hd.bin" \ No newline at end of file diff --git a/configure/r5.s b/configure/r5.s index 0dfa862e..1f9928d6 100644 --- a/configure/r5.s +++ b/configure/r5.s @@ -1,2 +1,6 @@ .SEGMENT "OVERLAY5" -.INCBIN "build/mega65/drv/drv1571ram.bin" \ No newline at end of file +.ifdef mega65 +.INCBIN "build/mega65/drv/drvf011.bin" +.else +.INCBIN "build/mega65/drv/drv1571ram.bin" +.endif \ No newline at end of file diff --git a/configure/r6.s b/configure/r6.s index 99fb2b25..9ff36671 100644 --- a/configure/r6.s +++ b/configure/r6.s @@ -1,2 +1,10 @@ .SEGMENT "OVERLAY6" -.INCBIN "build/mega65/drv/drv1581ram.bin" \ No newline at end of file +.ifdef mega65 +.INCBIN "build/mega65/drv/drv1571ram.bin" + +.SEGMENT "OVERLAY7" +.INCBIN "build/mega65/drv/drv1581ram.bin" + +.else +.INCBIN "build/mega65/drv/drv1581ram.bin" +.endif diff --git a/drv/_drv1581_21hd.s b/drv/_drv1581_21hd.s new file mode 100644 index 00000000..42338530 --- /dev/null +++ b/drv/_drv1581_21hd.s @@ -0,0 +1,2143 @@ +; da65 V2.15 +; Created: 2017-06-30 19:08:50 +; Input file: configure.cvt.record.4 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + +LFF54 := $FF54 +LFF6C := $FF6C +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 + +L04B9 := $04B9 +L032B := $032B +L04D1 := $04D1 +L04B0 := $04B0 +L04E9 := $04E9 +L046E := $046E +L03AD := $03AD +L03ED := $03ED +L03FF := $03FF +L03FD := $03FD +L03FC := $03FC +L03FB := $03FB +L03FE := $03FE +L0368 := $0368 +L0402 := $0402 +L04BE := $04BE +L046A := $046A +L0354 := $0354 +L0362 := $0362 + + + + + + + + + + + + +; ---------------------------------------------------------------------------- + +.segment "drv1581_21hd": absolute + +_InitForIO: + .addr __InitForIO ; 9000 EF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 92 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 F3 96 .. +_PurgeTurbo: + .addr __PurgeTurbo ; 9006 68 97 h. +_EnterTurbo: + .addr __EnterTurbo ; 9008 E8 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 74 97 t. +_NewDisk: + .addr __NewDisk ; 900C E5 97 .. +_ReadBlock: + .addr __ReadBlock ; 900E D6 98 .. +_WriteBlock: + .addr __WriteBlock ; 9010 3A 99 :. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 69 99 i. +_OpenDisk: + .addr __OpenDisk ; 9014 16 91 .. +_GetBlock: + .addr __GetBlock ; 9016 8C 90 .. +_PutBlock: + .addr __PutBlock ; 9018 C4 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 64 90 d. +_PutDirHead: + .addr __PutDirHead ; 901C 9C 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E BC 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 73 94 s. +_FreeBlock: + .addr __FreeBlock ; 9022 29 94 ). +_SetNextFree: + .addr __SetNextFree ; 9024 64 93 d. +_FindBAMBit: + .addr __FindBAMBit ; 9026 31 94 1. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 6A 91 j. +_BlkAlloc: + .addr __BlkAlloc ; 902A 3D 91 =. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 8E 92 .. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E B1 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C 0F 92 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C 1E 92 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 68 92 Lh. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C 1D 93 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 84 90 L.. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C BC 90 L.. + +; ---------------------------------------------------------------------------- + jmp DUNK4_2 ; 9042 4C AB 97 L.. + +; ---------------------------------------------------------------------------- + jmp GetDOSError ; 9045 4C 6C 99 Ll. + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C E8 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C 0E 98 L.. + +; ---------------------------------------------------------------------------- + .byte $03 ; 904E 03 . + +; ============================================================================== +.ifdef mega65 +evenFlag: .byte 0 +.endif +; ============================================================================== + + ;.byte "For Noelle & Dylan" ; 904F 46 6F 72 20 4E 6F 65 6C For Noel + ; 9057 6C 65 20 26 20 44 79 6C le & Dyl + ; 905F 61 6E an + ;.byte $00 ; 9061 00 . +; ---------------------------------------------------------------------------- + bpl __GetDirHead ; 9062 10 00 .. +__GetDirHead: + lda #$FF ; 9064 A9 FF .. + sta L9BFA ; 9066 8D FA 9B ... + jsr EnterTurbo ; 9069 20 14 C2 .. + txa ; 906C 8A . + bne L9083 ; 906D D0 14 .. + jsr InitForIO ; 906F 20 5C C2 \. + jsr SetDirHead_1 ; 9072 20 D4 90 .. + bne L907F ; 9075 D0 08 .. + jsr SetDirHead_2 ; 9077 20 DC 90 .. + bne L907F ; 907A D0 03 .. + jsr SetDirHead_3 ; 907C 20 E4 90 .. +L907F: jsr DoneWithIO ; 907F 20 5F C2 _. + txa ; 9082 8A . +L9083: rts ; 9083 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9084 A9 80 .. + sta r4H ; 9086 85 0B .. + lda #$00 ; 9088 A9 00 .. + sta r4L ; 908A 85 0A .. +__GetBlock: + jsr EnterTurbo ; 908C 20 14 C2 .. + bne L909A ; 908F D0 09 .. + jsr InitForIO ; 9091 20 5C C2 \. + jsr ReadBlock ; 9094 20 1A C2 .. + jsr DoneWithIO ; 9097 20 5F C2 _. +L909A: txa ; 909A 8A . + rts ; 909B 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + lda #$00 ; 909C A9 00 .. + sta L9BFA ; 909E 8D FA 9B ... + jsr EnterTurbo ; 90A1 20 14 C2 .. + txa ; 90A4 8A . + bne L90BB ; 90A5 D0 14 .. + jsr InitForIO ; 90A7 20 5C C2 \. + jsr SetDirHead_1 ; 90AA 20 D4 90 .. + bne L90B7 ; 90AD D0 08 .. + jsr SetDirHead_2 ; 90AF 20 DC 90 .. + bne L90B7 ; 90B2 D0 03 .. + jsr SetDirHead_3 ; 90B4 20 E4 90 .. +L90B7: jsr DoneWithIO ; 90B7 20 5F C2 _. + txa ; 90BA 8A . +L90BB: rts ; 90BB 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90BC A9 80 .. + sta r4H ; 90BE 85 0B .. + lda #$00 ; 90C0 A9 00 .. + sta r4L ; 90C2 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90C4 20 14 C2 .. + bne L90D2 ; 90C7 D0 09 .. + jsr InitForIO ; 90C9 20 5C C2 \. + jsr WriteBlock ; 90CC 20 20 C2 . + jsr DoneWithIO ; 90CF 20 5F C2 _. +L90D2: txa ; 90D2 8A . + rts ; 90D3 60 ` + +; ---------------------------------------------------------------------------- +SetDirHead_1: + ldx #$82 ; 90D4 A2 82 .. + ldy #$00 ; 90D6 A0 00 .. + lda #$00 ; 90D8 A9 00 .. + beq L90EA ; 90DA F0 0E .. +SetDirHead_2: + ldx #$89 ; 90DC A2 89 .. + ldy #$00 ; 90DE A0 00 .. + lda #$01 ; 90E0 A9 01 .. + bne L90EA ; 90E2 D0 06 .. +SetDirHead_3: + ldx #$9C ; 90E4 A2 9C .. + ldy #$80 ; 90E6 A0 80 .. + lda #$02 ; 90E8 A9 02 .. +L90EA: stx r4H ; 90EA 86 0B .. + sty r4L ; 90EC 84 0A .. + sta r1H ; 90EE 85 05 .. + lda #$28 ; 90F0 A9 28 .( + sta r1L ; 90F2 85 04 .. + bit L9BFA ; 90F4 2C FA 9B ,.. + bmi L90FE ; 90F7 30 05 0. + jsr __WriteBlock ; 90F9 20 3A 99 :. + txa ; 90FC 8A . + rts ; 90FD 60 ` + +; ---------------------------------------------------------------------------- +L90FE: jsr __ReadBlock ; 90FE 20 D6 98 .. + txa ; 9101 8A . + rts ; 9102 60 ` + +; ---------------------------------------------------------------------------- +CheckParams_1: + lda #$00 ; 9103 A9 00 .. + sta L9BFC ; 9105 8D FC 9B ... + ldx #$02 ; 9108 A2 02 .. + lda r1L ; 910A A5 04 .. + beq L9114 ; 910C F0 06 .. + cmp #$51 ; 910E C9 51 .Q + bcs L9114 ; 9110 B0 02 .. + sec ; 9112 38 8 + rts ; 9113 60 ` + +; ---------------------------------------------------------------------------- +L9114: clc ; 9114 18 . + rts ; 9115 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9116 20 E1 C1 .. + txa ; 9119 8A . + bne L913C ; 911A D0 20 . + jsr GetDirHead ; 911C 20 47 C2 G. + bne L913C ; 911F D0 1B .. + jsr L9286 ; 9121 20 86 92 .. + lda #$82 ; 9124 A9 82 .. + sta r4H ; 9126 85 0B .. + lda #$90 ; 9128 A9 90 .. + sta r4L ; 912A 85 0A .. + ldx #$0C ; 912C A2 0C .. + jsr GetPtrCurDkNm ; 912E 20 98 C2 .. + ldy #$12 ; 9131 A0 12 .. +L9133: lda (r4L),y ; 9133 B1 0A .. + sta (r5L),y ; 9135 91 0C .. + dey ; 9137 88 . + bpl L9133 ; 9138 10 F9 .. + ldx #$00 ; 913A A2 00 .. +L913C: rts ; 913C 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 913D 68 h + sta r3L ; 913E 85 08 .. + pla ; 9140 68 h + sta r3H ; 9141 85 09 .. + lda r3H ; 9143 A5 09 .. + pha ; 9145 48 H + lda r3L ; 9146 A5 08 .. + pha ; 9148 48 H + lda r3L ; 9149 A5 08 .. + sec ; 914B 38 8 + sbc $C1EE ; 914C ED EE C1 ... + sta r3L ; 914F 85 08 .. + lda r3H ; 9151 A5 09 .. + sbc $C1EF ; 9153 ED EF C1 ... + sta r3H ; 9156 85 09 .. + ldy #$27 ; 9158 A0 27 .' + lda r3H ; 915A A5 09 .. + beq L9160 ; 915C F0 02 .. + ldy #$23 ; 915E A0 23 .# +L9160: sty r3L ; 9160 84 08 .. + ldy #$00 ; 9162 A0 00 .. + sty r3H ; 9164 84 09 .. + lda #$02 ; 9166 A9 02 .. + bne L916C ; 9168 D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 916A A9 00 .. +L916C: sta L9C01 ; 916C 8D 01 9C ... + lda r9H ; 916F A5 15 .. + pha ; 9171 48 H + lda r9L ; 9172 A5 14 .. + pha ; 9174 48 H + lda r3H ; 9175 A5 09 .. + pha ; 9177 48 H + lda r3L ; 9178 A5 08 .. + pha ; 917A 48 H + lda #$00 ; 917B A9 00 .. + sta r3H ; 917D 85 09 .. + lda #$FE ; 917F A9 FE .. + sta r3L ; 9181 85 08 .. + ldx #$06 ; 9183 A2 06 .. + ldy #$08 ; 9185 A0 08 .. + .byte $20 ; 9187 20 +L9188: adc #$C1 ; 9188 69 C1 i. + lda r8L ; 918A A5 12 .. + beq L9194 ; 918C F0 06 .. + inc r2L ; 918E E6 06 .. + bne L9194 ; 9190 D0 02 .. + inc r2H ; 9192 E6 07 .. +L9194: jsr L9286 ; 9194 20 86 92 .. + pla ; 9197 68 h + sta r3L ; 9198 85 08 .. + pla ; 919A 68 h + sta r3H ; 919B 85 09 .. + ldx #$03 ; 919D A2 03 .. + lda r2H ; 919F A5 07 .. + cmp r4H ; 91A1 C5 0B .. + bne L91A9 ; 91A3 D0 04 .. + lda r2L ; 91A5 A5 06 .. + cmp r4L ; 91A7 C5 0A .. +L91A9: beq L91AD ; 91A9 F0 02 .. + bcs L9208 ; 91AB B0 5B .[ +L91AD: lda r6H ; 91AD A5 0F .. + sta r4H ; 91AF 85 0B .. + lda r6L ; 91B1 A5 0E .. + sta r4L ; 91B3 85 0A .. + lda r2H ; 91B5 A5 07 .. + sta r5H ; 91B7 85 0D .. + lda r2L ; 91B9 A5 06 .. + sta r5L ; 91BB 85 0C .. +L91BD: jsr SetNextFree ; 91BD 20 92 C2 .. + txa ; 91C0 8A . + bne L9208 ; 91C1 D0 45 .E + ldy #$00 ; 91C3 A0 00 .. + lda r3L ; 91C5 A5 08 .. + sta (r4L),y ; 91C7 91 0A .. + iny ; 91C9 C8 . + lda r3H ; 91CA A5 09 .. + sta (r4L),y ; 91CC 91 0A .. + clc ; 91CE 18 . + lda #$02 ; 91CF A9 02 .. + adc r4L ; 91D1 65 0A e. + sta r4L ; 91D3 85 0A .. + bcc L91D9 ; 91D5 90 02 .. + inc r4H ; 91D7 E6 0B .. +L91D9: lda L9C01 ; 91D9 AD 01 9C ... + beq L91E7 ; 91DC F0 09 .. + dec L9C01 ; 91DE CE 01 9C ... + bne L91E7 ; 91E1 D0 04 .. + lda #$23 ; 91E3 A9 23 .# + sta r3L ; 91E5 85 08 .. +L91E7: lda r5L ; 91E7 A5 0C .. + bne L91ED ; 91E9 D0 02 .. + dec r5H ; 91EB C6 0D .. +L91ED: dec r5L ; 91ED C6 0C .. + lda r5L ; 91EF A5 0C .. + ora r5H ; 91F1 05 0D .. + bne L91BD ; 91F3 D0 C8 .. + ldy #$00 ; 91F5 A0 00 .. + tya ; 91F7 98 . + sta (r4L),y ; 91F8 91 0A .. + iny ; 91FA C8 . + lda r8L ; 91FB A5 12 .. + bne L9201 ; 91FD D0 02 .. + lda #$FE ; 91FF A9 FE .. +L9201: clc ; 9201 18 . + adc #$01 ; 9202 69 01 i. + sta (r4L),y ; 9204 91 0A .. + ldx #$00 ; 9206 A2 00 .. +L9208: pla ; 9208 68 h + sta r9L ; 9209 85 14 .. + pla ; 920B 68 h + sta r9H ; 920C 85 15 .. + rts ; 920E 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$28 ; 920F A9 28 .( + sta r1L ; 9211 85 04 .. + lda #$03 ; 9213 A9 03 .. + sta r1H ; 9215 85 05 .. + lda #$00 ; 9217 A9 00 .. + sta L9C02 ; 9219 8D 02 9C ... + beq L925A ; 921C F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 921E A2 00 .. + ldy #$00 ; 9220 A0 00 .. + clc ; 9222 18 . + lda #$20 ; 9223 A9 20 . + adc r5L ; 9225 65 0C e. + sta r5L ; 9227 85 0C .. + bcc L922D ; 9229 90 02 .. + inc r5H ; 922B E6 0D .. +L922D: lda r5H ; 922D A5 0D .. + cmp #$80 ; 922F C9 80 .. + bne L9237 ; 9231 D0 04 .. + lda r5L ; 9233 A5 0C .. + cmp #$FF ; 9235 C9 FF .. +L9237: bcc L9267 ; 9237 90 2E .. + ldy #$FF ; 9239 A0 FF .. + lda $8001 ; 923B AD 01 80 ... + sta r1H ; 923E 85 05 .. + lda diskBlkBuf ; 9240 AD 00 80 ... + sta r1L ; 9243 85 04 .. + bne L925A ; 9245 D0 13 .. + lda L9C02 ; 9247 AD 02 9C ... + bne L9267 ; 924A D0 1B .. + lda #$FF ; 924C A9 FF .. + sta L9C02 ; 924E 8D 02 9C ... + jsr GetBorder ; 9251 20 36 90 6. + txa ; 9254 8A . + bne L9267 ; 9255 D0 10 .. + tya ; 9257 98 . + bne L9267 ; 9258 D0 0D .. +L925A: jsr ReadBuff ; 925A 20 3C 90 <. + ldy #$00 ; 925D A0 00 .. + lda #$80 ; 925F A9 80 .. + sta r5H ; 9261 85 0D .. + lda #$02 ; 9263 A9 02 .. + sta r5L ; 9265 85 0C .. +L9267: rts ; 9267 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9268 20 47 C2 G. + txa ; 926B 8A . + bne L9285 ; 926C D0 17 .. + jsr L9286 ; 926E 20 86 92 .. + bne L9277 ; 9271 D0 04 .. + ldy #$FF ; 9273 A0 FF .. + bne L9283 ; 9275 D0 0C .. +L9277: lda $82AC ; 9277 AD AC 82 ... + sta r1H ; 927A 85 05 .. + lda $82AB ; 927C AD AB 82 ... + sta r1L ; 927F 85 04 .. + ldy #$00 ; 9281 A0 00 .. +L9283: ldx #$00 ; 9283 A2 00 .. +L9285: rts ; 9285 60 ` + +; ---------------------------------------------------------------------------- +L9286: lda #$82 ; 9286 A9 82 .. + sta r5H ; 9288 85 0D .. + lda #$00 ; 928A A9 00 .. + sta r5L ; 928C 85 0C .. +__ChkDkGEOS: + ldy #$AD ; 928E A0 AD .. + ldx #$00 ; 9290 A2 00 .. + stx isGEOS ; 9292 8E 8B 84 ... +L9295: lda (r5L),y ; 9295 B1 0C .. + cmp GEOSDiskID,x ; 9297 DD AB 92 ... + bne L92A7 ; 929A D0 0B .. + iny ; 929C C8 . + inx ; 929D E8 . + cpx #$0B ; 929E E0 0B .. + bne L9295 ; 92A0 D0 F3 .. + lda #$FF ; 92A2 A9 FF .. + sta isGEOS ; 92A4 8D 8B 84 ... +L92A7: lda isGEOS ; 92A7 AD 8B 84 ... + rts ; 92AA 60 ` + +; ---------------------------------------------------------------------------- +GEOSDiskID: + .byte "GEOS format V1.0" ; 92AB 47 45 4F 53 20 66 6F 72 GEOS for + ; 92B3 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 92BB 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 92BC 08 . + sei ; 92BD 78 x + lda r6L ; 92BE A5 0E .. + pha ; 92C0 48 H + lda r2H ; 92C1 A5 07 .. + pha ; 92C3 48 H + lda r2L ; 92C4 A5 06 .. + pha ; 92C6 48 H + ldx r10L ; 92C7 A6 16 .. + inx ; 92C9 E8 . + stx r6L ; 92CA 86 0E .. + lda #$28 ; 92CC A9 28 .( + sta r1L ; 92CE 85 04 .. + lda #$03 ; 92D0 A9 03 .. + sta r1H ; 92D2 85 05 .. +L92D4: jsr ReadBuff ; 92D4 20 3C 90 <. +L92D7: txa ; 92D7 8A . + bne L9312 ; 92D8 D0 38 .8 + dec r6L ; 92DA C6 0E .. + beq L92F3 ; 92DC F0 15 .. +L92DE: lda diskBlkBuf ; 92DE AD 00 80 ... + bne L92E9 ; 92E1 D0 06 .. + jsr AddDirBlock ; 92E3 20 39 90 9. + clv ; 92E6 B8 . + bvc L92D7 ; 92E7 50 EE P. +L92E9: sta r1L ; 92E9 85 04 .. + lda $8001 ; 92EB AD 01 80 ... + sta r1H ; 92EE 85 05 .. + clv ; 92F0 B8 . + bvc L92D4 ; 92F1 50 E1 P. +L92F3: ldy #$02 ; 92F3 A0 02 .. + ldx #$00 ; 92F5 A2 00 .. +L92F7: lda diskBlkBuf,y ; 92F7 B9 00 80 ... + beq L9312 ; 92FA F0 16 .. + tya ; 92FC 98 . + clc ; 92FD 18 . + adc #$20 ; 92FE 69 20 i + tay ; 9300 A8 . + bcc L92F7 ; 9301 90 F4 .. + lda #$01 ; 9303 A9 01 .. + sta r6L ; 9305 85 0E .. + ldx #$04 ; 9307 A2 04 .. + ldy r10L ; 9309 A4 16 .. + iny ; 930B C8 . + sty r10L ; 930C 84 16 .. + cpy #$12 ; 930E C0 12 .. + bcc L92DE ; 9310 90 CC .. +L9312: pla ; 9312 68 h + sta r2L ; 9313 85 06 .. + pla ; 9315 68 h + sta r2H ; 9316 85 07 .. + pla ; 9318 68 h + sta r6L ; 9319 85 0E .. + plp ; 931B 28 ( + rts ; 931C 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 931D A5 0F .. + pha ; 931F 48 H + lda r6L ; 9320 A5 0E .. + pha ; 9322 48 H + ldx #$04 ; 9323 A2 04 .. + lda $89FA ; 9325 AD FA 89 ... + beq ClearAndWrite ; 9328 F0 22 ." + lda r1H ; 932A A5 05 .. + sta r3H ; 932C 85 09 .. + lda r1L ; 932E A5 04 .. + sta r3L ; 9330 85 08 .. + jsr SetNextFree ; 9332 20 92 C2 .. + pla ; 9335 68 h + sta r6L ; 9336 85 0E .. + pla ; 9338 68 h + sta r6H ; 9339 85 0F .. + lda r3H ; 933B A5 09 .. + sta $8001 ; 933D 8D 01 80 ... + lda r3L ; 9340 A5 08 .. + sta diskBlkBuf ; 9342 8D 00 80 ... + jsr WriteBuff ; 9345 20 3F 90 ?. + txa ; 9348 8A . + beq ClearAndWrite ; 9349 F0 01 .. + rts ; 934B 60 ` + +; ---------------------------------------------------------------------------- +ClearAndWrite: + lda r3H ; 934C A5 09 .. + sta r1H ; 934E 85 05 .. + lda r3L ; 9350 A5 08 .. + sta r1L ; 9352 85 04 .. +L9354: lda #$00 ; 9354 A9 00 .. + tay ; 9356 A8 . +L9357: sta diskBlkBuf,y ; 9357 99 00 80 ... + iny ; 935A C8 . + bne L9357 ; 935B D0 FA .. + dey ; 935D 88 . + sty $8001 ; 935E 8C 01 80 ... + jmp WriteBuff ; 9361 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L936E ; 9364 20 6E 93 n. + bne L936A ; 9367 D0 01 .. + rts ; 9369 60 ` + +; ---------------------------------------------------------------------------- +L936A: lda #$27 ; 936A A9 27 .' + sta r3L ; 936C 85 08 .. +L936E: ldy r3H ; 936E A4 09 .. + iny ; 9370 C8 . + sty r6H ; 9371 84 0F .. + lda r3L ; 9373 A5 08 .. + sta r6L ; 9375 85 0E .. + cmp #$28 ; 9377 C9 28 .( + beq L9381 ; 9379 F0 06 .. +L937B: lda r6L ; 937B A5 0E .. + cmp #$28 ; 937D C9 28 .( + beq L93B2 ; 937F F0 31 .1 +L9381: cmp #$29 ; 9381 C9 29 .) + bcc L9388 ; 9383 90 03 .. + sec ; 9385 38 8 + sbc #$28 ; 9386 E9 28 .( +L9388: sec ; 9388 38 8 + sbc #$01 ; 9389 E9 01 .. + asl a ; 938B 0A . + sta r7L ; 938C 85 10 .. + asl a ; 938E 0A . + clc ; 938F 18 . + adc r7L ; 9390 65 10 e. + tax ; 9392 AA . + lda r6L ; 9393 A5 0E .. + cmp #$29 ; 9395 C9 29 .) + bcc L939F ; 9397 90 06 .. + lda $9C90,x ; 9399 BD 90 9C ... + clv ; 939C B8 . + bvc L93A2 ; 939D 50 03 P. +L939F: lda $8910,x ; 939F BD 10 89 ... +L93A2: beq L93B2 ; 93A2 F0 0E .. + ldy #$28 ; 93A4 A0 28 .( + sty r7L ; 93A6 84 10 .. +L93A8: jsr SNxtFreeHelp ; 93A8 20 DA 93 .. + beq L93CC ; 93AB F0 1F .. + inc r6H ; 93AD E6 0F .. + dey ; 93AF 88 . + bne L93A8 ; 93B0 D0 F6 .. +L93B2: ldy r6L ; 93B2 A4 0E .. + cpy #$29 ; 93B4 C0 29 .) + bcs L93BF ; 93B6 B0 07 .. + dey ; 93B8 88 . + bne L93C4 ; 93B9 D0 09 .. + ldy #$29 ; 93BB A0 29 .) + bne L93C4 ; 93BD D0 05 .. +L93BF: iny ; 93BF C8 . + cpy #$51 ; 93C0 C0 51 .Q + bcs L93D7 ; 93C2 B0 13 .. +L93C4: sty r6L ; 93C4 84 0E .. + ldy #$00 ; 93C6 A0 00 .. + sty r6H ; 93C8 84 0F .. + beq L937B ; 93CA F0 AF .. +L93CC: lda r6H ; 93CC A5 0F .. + sta r3H ; 93CE 85 09 .. + lda r6L ; 93D0 A5 0E .. + sta r3L ; 93D2 85 08 .. + ldx #$00 ; 93D4 A2 00 .. + rts ; 93D6 60 ` + +; ---------------------------------------------------------------------------- +L93D7: ldx #$03 ; 93D7 A2 03 .. + rts ; 93D9 60 ` + +; ---------------------------------------------------------------------------- +SNxtFreeHelp: + lda r6H ; 93DA A5 0F .. +L93DC: cmp r7L ; 93DC C5 10 .. + bcc L93E6 ; 93DE 90 06 .. + sec ; 93E0 38 8 + sbc r7L ; 93E1 E5 10 .. + clv ; 93E3 B8 . + bvc L93DC ; 93E4 50 F6 P. +L93E6: sta r6H ; 93E6 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93E8 20 AD C2 .. + bne L93F0 ; 93EB D0 03 .. + ldx #$06 ; 93ED A2 06 .. + rts ; 93EF 60 ` + +; ---------------------------------------------------------------------------- +L93F0: php ; 93F0 08 . + lda r6L ; 93F1 A5 0E .. + cmp #$29 ; 93F3 C9 29 .) + bcc L9410 ; 93F5 90 19 .. + lda r8H ; 93F7 A5 13 .. + eor $9C90,x ; 93F9 5D 90 9C ].. + sta $9C90,x ; 93FC 9D 90 9C ... + ldx r7H ; 93FF A6 11 .. + plp ; 9401 28 ( + beq L940A ; 9402 F0 06 .. + dec $9C90,x ; 9404 DE 90 9C ... + ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +L940A: inc $9C90,x ; 940A FE 90 9C ... + ldx #$00 ; 940D A2 00 .. + rts ; 940F 60 ` + +; ---------------------------------------------------------------------------- +L9410: lda r8H ; 9410 A5 13 .. + eor $8910,x ; 9412 5D 10 89 ].. + sta $8910,x ; 9415 9D 10 89 ... + ldx r7H ; 9418 A6 11 .. + plp ; 941A 28 ( + beq L9423 ; 941B F0 06 .. + dec $8910,x ; 941D DE 10 89 ... + ldx #$00 ; 9420 A2 00 .. + rts ; 9422 60 ` + +; ---------------------------------------------------------------------------- +L9423: inc $8910,x ; 9423 FE 10 89 ... + ldx #$00 ; 9426 A2 00 .. + rts ; 9428 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 9429 20 AD C2 .. + beq L93F0 ; 942C F0 C2 .. + ldx #$06 ; 942E A2 06 .. + rts ; 9430 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9431 A5 0F .. + and #$07 ; 9433 29 07 ). + tax ; 9435 AA . + lda FBBBitTab,x ; 9436 BD 6B 94 .k. + sta r8H ; 9439 85 13 .. + lda r6L ; 943B A5 0E .. + cmp #$29 ; 943D C9 29 .) + bcc L9444 ; 943F 90 03 .. + sec ; 9441 38 8 + sbc #$28 ; 9442 E9 28 .( +L9444: sec ; 9444 38 8 + sbc #$01 ; 9445 E9 01 .. + asl a ; 9447 0A . + sta r7H ; 9448 85 11 .. + asl a ; 944A 0A . + clc ; 944B 18 . + adc r7H ; 944C 65 11 e. + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda r6L ; 9459 A5 0E .. + cmp #$29 ; 945B C9 29 .) + bcc L9465 ; 945D 90 06 .. + lda $9C90,x ; 945F BD 90 9C ... + and r8H ; 9462 25 13 %. + rts ; 9464 60 ` + +; ---------------------------------------------------------------------------- +L9465: lda $8910,x ; 9465 BD 10 89 ... + and r8H ; 9468 25 13 %. + rts ; 946A 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 946B 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9473 A9 00 .. + sta r4L ; 9475 85 0A .. + sta r4H ; 9477 85 0B .. + ldy #$10 ; 9479 A0 10 .. +L947B: lda dir2Head,y ; 947B B9 00 89 ... + clc ; 947E 18 . + adc r4L ; 947F 65 0A e. + sta r4L ; 9481 85 0A .. + bcc L9487 ; 9483 90 02 .. + inc r4H ; 9485 E6 0B .. +L9487: tya ; 9487 98 . + clc ; 9488 18 . + adc #$06 ; 9489 69 06 i. + tay ; 948B A8 . + cpy #$FA ; 948C C0 FA .. + beq L9487 ; 948E F0 F7 .. + tay ; 9490 A8 . + bne L947B ; 9491 D0 E8 .. + ldy #$10 ; 9493 A0 10 .. +L9495: lda $9C80,y ; 9495 B9 80 9C ... + clc ; 9498 18 . + adc r4L ; 9499 65 0A e. + sta r4L ; 949B 85 0A .. + bcc L94A1 ; 949D 90 02 .. + inc r4H ; 949F E6 0B .. +L94A1: tya ; 94A1 98 . + clc ; 94A2 18 . + adc #$06 ; 94A3 69 06 i. + tay ; 94A5 A8 . + bne L9495 ; 94A6 D0 ED .. + lda #$0C ; 94A8 A9 0C .. + sta r3H ; 94AA 85 09 .. + lda #$58 ; 94AC A9 58 .X + sta r3L ; 94AE 85 08 .. + rts ; 94B0 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94B1 20 47 C2 G. + txa ; 94B4 8A . + bne L94EE ; 94B5 D0 37 .7 + lda #$28 ; 94B7 A9 28 .( + sta r3L ; 94B9 85 08 .. + lda #$12 ; 94BB A9 12 .. + sta r3H ; 94BD 85 09 .. + jsr SetNextFree ; 94BF 20 92 C2 .. + txa ; 94C2 8A . + bne L94EE ; 94C3 D0 29 .) + lda r3H ; 94C5 A5 09 .. + sta r1H ; 94C7 85 05 .. + lda r3L ; 94C9 A5 08 .. + sta r1L ; 94CB 85 04 .. + jsr L9354 ; 94CD 20 54 93 T. + txa ; 94D0 8A . + bne L94EE ; 94D1 D0 1B .. + lda r1H ; 94D3 A5 05 .. + sta $82AC ; 94D5 8D AC 82 ... + lda r1L ; 94D8 A5 04 .. + sta $82AB ; 94DA 8D AB 82 ... + ldy #$BC ; 94DD A0 BC .. + ldx #$0F ; 94DF A2 0F .. +L94E1: lda GEOSDiskID,x ; 94E1 BD AB 92 ... + sta curDirHead,y ; 94E4 99 00 82 ... + dey ; 94E7 88 . + dex ; 94E8 CA . + bpl L94E1 ; 94E9 10 F6 .. + jmp PutDirHead ; 94EB 4C 4A C2 LJ. + +; ---------------------------------------------------------------------------- +L94EE: rts ; 94EE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + sei + php ; 94EF 08 . + pla ; 94F0 68 h + sta L9BF0 ; 94F1 8D F0 9B ... + sei ; 94F4 78 x + lda CPU_DATA ; 94F5 A5 01 .. + sta L9BF2 ; 94F7 8D F2 9B ... +.if (!.defined(config128)) || .defined(mega65) + lda #$36 ; 94FA A9 36 .6 + sta CPU_DATA ; 94FC 85 01 .. +.endif + lda grirqen ; 94FE AD 1A D0 ... + sta L9BF1 ; 9501 8D F1 9B ... + lda clkreg ; 9504 AD 30 D0 .0. + sta L9BEF ; 9507 8D EF 9B ... + ldy #$00 ; 950A A0 00 .. + sty clkreg ; 950C 8C 30 D0 .0. + sty grirqen ; 950F 8C 1A D0 ... + lda #$7F ; 9512 A9 7F .. + sta grirq ; 9514 8D 19 D0 ... + sta $DC0D ; 9517 8D 0D DC ... + sta $DD0D ; 951A 8D 0D DD ... +.if .defined(config128) & (!.defined(mega65)) + lda #>D_IRQHandler + sta $0315 + sta $0319 + lda #EnterCommand ; 960B A2 96 .. + lda #HDCommand ; 9677 A2 96 .. + lda #= 20 + LDA #$00 + ROL + ;EOR #1 + STA $D086 ; side + ;EOR #1 + BEQ @1 + LDA #$14 +@1: + NEG + CLC + ADC r1H + LSR + INC + STA $D085 ; sector + + LDA #$00 + ROR + STA evenFlag + + CLC + RTS + +_ExecCommand: + STA $D081 +_WaitReady: +@1: + BIT $D082 + BMI @1 + RTS + +_CheckResult: + JSR _WaitReady + LDA $D082 + AND #$18 + BNE _CheckResult_ + CLC + RTS +_CheckResult_: + SEC + RTS + +_DriveReady: + JSR _WaitReady + LDA $D082 + AND #$02 + BNE _CheckResult_ + CLC + RTS + +__WriteBlock_F011: ;9960 + JSR CheckParams_1 + BCC _WriteBlockEnd + + JSR ReadBlockDirBlock + + ; f011 block write here + JSR _SetOperation ; set track, side, sector + BCS _WriteBlockEnd + + JSR _DriveReady ; drive ready, not wrote protect + BCS _WriteBlockEnd + + LDA #$40 + JSR _ExecCommand ; execute read + JSR _CheckResult ; test if read succeeded + BCS _WriteBlockEnd + + LDY #$00 ; skip first 256 bytes if needed + LDA evenFlag + BEQ @1 +@2: + JSR _ReadByte ; read byte without checking if available + INY + BNE @2 +@1: + LDA (r4),Y ; write our 256 byte buffer + JSR _WriteByte + INY + BNE @1 +@4: + LDA $D082 ; read up rest of the buffer + AND #$20 + BNE @3 + JSR _ReadByte ; read byte without checking if available + BRA @4 +@3: + LDA #$80 + JSR _ExecCommand ; write sector + + ; read back written sector + ; here we use this not for checking but to ensure the + ; the next read will be alined, strange + ; TODO: double check why this fails on mega65 if reading + ; the next blick straigt after write command + LDA #$40 ; read command + JSR _ExecCommand ; execute FDC command + JSR _CheckResult ; Test wether read or write succeed? + + LDX #0 + +_WriteBlockEnd: + JMP L990B ;998b + +.endif + +.ifndef mega65 +; ---------------------------------------------------------------------------- +HDCommand: + .byte "GEOS" ; 9689 47 45 4F 53 GEOS + .byte $00 ; 968D 00 . +; ---------------------------------------------------------------------------- +.endif +.ifdef mega65 +SendCODE: +.endif + +Init1581Code: + jsr InitForIO ; 968E 20 5C C2 \. + LoadW $8d, DriveCode2 + lda #$03 ; 9699 A9 03 .. + sta L96F1+1 ; 969B 8D F2 96 ... + lda #$00 ; 969E A9 00 .. + sta L96F1 ; 96A0 8D F1 96 ... + lda #$0F ; 96A3 A9 0F .. + sta TURBO_DD00_CPY ; 96A5 85 8F .. +L96A7: jsr SendCHUNK ; 96A7 20 CD 96 .. + txa ; 96AA 8A . + bne L96CA ; 96AB D0 1D .. + clc ; 96AD 18 . + lda #$20 ; 96AE A9 20 . + adc $8D ; 96B0 65 8D e. + sta $8D ; 96B2 85 8D .. + bcc L96B8 ; 96B4 90 02 .. + inc TURBO_DD00 ; 96B6 E6 8E .. +L96B8: clc ; 96B8 18 . + lda #$20 ; 96B9 A9 20 . + adc L96F1 ; 96BB 6D F1 96 m.. + sta L96F1 ; 96BE 8D F1 96 ... + bcc L96C6 ; 96C1 90 03 .. + inc L96F1+1 ; 96C3 EE F2 96 ... +L96C6: dec TURBO_DD00_CPY ; 96C6 C6 8F .. + bpl L96A7 ; 96C8 10 DD .. +L96CA: jmp DoneWithIO ; 96CA 4C 5F C2 L_. + +; ---------------------------------------------------------------------------- +SendCHUNK: + ldx #>WriteCommand ; 96CD A2 96 .. + lda #ChngDskDev_Command ; 977D A2 97 .. + lda #" ; 979A 55 30 3E U0> +; ---------------------------------------------------------------------------- +ChngDskDev_Number: + .byte $08,$00 ; 979D 08 00 .. +; ---------------------------------------------------------------------------- +L979F: stx $8C ; 979F 86 8C .. + sta $8B ; 97A1 85 8B .. + ldy #$02 ; 97A3 A0 02 .. + bne L97B7 ; 97A5 D0 10 .. +L97A7: stx $8C ; 97A7 86 8C .. + sta $8B ; 97A9 85 8B .. +DUNK4_2:ldy #$04 ; 97AB A0 04 .. + lda r1H ; 97AD A5 05 .. + sta L9BF8 ; 97AF 8D F8 9B ... + lda r1L ; 97B2 A5 04 .. + sta L9BF7 ; 97B4 8D F7 9B ... +L97B7: lda $8C ; 97B7 A5 8C .. + sta L9BF6 ; 97B9 8D F6 9B ... + lda $8B ; 97BC A5 8B .. + sta L9BF5 ; 97BE 8D F5 9B ... + lda #>L9BF5 ; 97C1 A9 9B .. + sta $8C ; 97C3 85 8C .. + lda #. + cpy #$00 ; 98CD C0 00 .. + sta cia2base ; 98CF 8D 00 DD ... + bne L9895 ; 98D2 D0 C1 .. + beq L9880 ; 98D4 F0 AA .. +__ReadBlock: + ldx curDrive + lda driveData-8,x + bpl __ReadBlock_ + jmp __ReadBlock_F011 +__ReadBlock_: + jsr CheckParams_1 ; 98D6 20 03 91 .. + bcc L9937 ; 98D9 90 5C .\ +L98DB: ldx #$04 ; 98DB A2 04 .. + lda #$CC ; 98DD A9 CC .. + jsr L97A7 ; 98DF 20 A7 97 .. + ldx #$03 ; 98E2 A2 03 .. + lda #$1F ; 98E4 A9 1F .. + jsr L979F ; 98E6 20 9F 97 .. + lda r4H ; 98E9 A5 0B .. + sta $8C ; 98EB 85 8C .. + lda r4L ; 98ED A5 0A .. + sta $8B ; 98EF 85 8B .. + ldy #$00 ; 98F1 A0 00 .. + lda r1L ; 98F3 A5 04 .. + bpl L98F9 ; 98F5 10 02 .. + ldy #$02 ; 98F7 A0 02 .. +L98F9: jsr L984E ; 98F9 20 4E 98 N. + jsr L9973 ; 98FC 20 73 99 s. + beq L990B ; 98FF F0 0A .. + inc L9BFC ; 9901 EE FC 9B ... + cpy L9BFC ; 9904 CC FC 9B ... + beq L990B ; 9907 F0 02 .. + bcs L98DB ; 9909 B0 D0 .. +L990B: lda r1L ; 990B A5 04 .. + cmp #$28 ; 990D C9 28 .( + bne L9936 ; 990F D0 25 .% + lda r1H ; 9911 A5 05 .. + bne L9936 ; 9913 D0 21 .! + ldy #$04 ; 9915 A0 04 .. +L9917: lda (r4L),y ; 9917 B1 0A .. + sta L9BFB ; 9919 8D FB 9B ... + tya ; 991C 98 . + clc ; 991D 18 . + adc #$8C ; 991E 69 8C i. + tay ; 9920 A8 . + lda (r4L),y ; 9921 B1 0A .. + pha ; 9923 48 H + lda L9BFB ; 9924 AD FB 9B ... + sta (r4L),y ; 9927 91 0A .. + tya ; 9929 98 . + sec ; 992A 38 8 + sbc #$8C ; 992B E9 8C .. + tay ; 992D A8 . + pla ; 992E 68 h + sta (r4L),y ; 992F 91 0A .. + iny ; 9931 C8 . + cpy #$1D ; 9932 C0 1D .. + bne L9917 ; 9934 D0 E1 .. +L9936: txa ; 9936 8A . +L9937: ldy #$00 ; 9937 A0 00 .. + rts ; 9939 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + ldx curDrive + lda driveData-8,x + bpl __WriteBlock_ + jmp __WriteBlock_F011 + +__WriteBlock_: + jsr CheckParams_1 ; 993A 20 03 91 .. + bcc L9968 ; 993D 90 29 .) + jsr L990B ; 993F 20 0B 99 .. +L9942: ldx #$04 ; 9942 A2 04 .. + lda #$7C ; 9944 A9 7C .| + jsr L97A7 ; 9946 20 A7 97 .. + lda r4H ; 9949 A5 0B .. + sta $8C ; 994B 85 8C .. + lda r4L ; 994D A5 0A .. + sta $8B ; 994F 85 8B .. + ldy #$00 ; 9951 A0 00 .. + jsr L9892 ; 9953 20 92 98 .. + jsr L9973 ; 9956 20 73 99 s. + beq L9965 ; 9959 F0 0A .. + inc L9BFC ; 995B EE FC 9B ... + cpy L9BFC ; 995E CC FC 9B ... + beq L9965 ; 9961 F0 02 .. + bcs L9942 ; 9963 B0 DD .. +L9965: jsr L990B ; 9965 20 0B 99 .. +L9968: rts ; 9968 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + ldx #$00 ; 9969 A2 00 .. + rts ; 996B 60 ` + +; ---------------------------------------------------------------------------- +GetDOSError: + ldx curDrive + lda driveData-8,x + bmi L9991 + ldx #$03 ; 996C A2 03 .. + lda #$2B ; 996E A9 2B .+ + jsr L979F ; 9970 20 9F 97 .. +L9973: LoadW $8b, L9BFD + jsr L97CC ; 997B 20 CC 97 .. + lda L9BFD ; 997E AD FD 9B ... + pha ; 9981 48 H + tay ; 9982 A8 . + lda L9822,y ; 9983 B9 22 98 .". + tay ; 9986 A8 . + pla ; 9987 68 h + cmp #$02 ; 9988 C9 02 .. + bcc L9991 ; 998A 90 05 .. + clc ; 998C 18 . + adc #$1E ; 998D 69 1E i. + bne L9993 ; 998F D0 02 .. +L9991: lda #$00 ; 9991 A9 00 .. +L9993: tax ; 9993 AA . + rts ; 9994 60 ` + +; ---------------------------------------------------------------------------- +CheckReal1581: + jsr InitForIO ; 9995 20 5C C2 \. + lda #$00 ; 9998 A9 00 .. + sta STATUS ; 999A 85 90 .. + LoadW $8d, L9BFF + lda #$FE ; 99A4 A9 FE .. + sta L9A00+1 ; 99A6 8D 01 9A ... + lda #$A0 ; 99A9 A9 A0 .. + sta L9A00 ; 99AB 8D 00 9A ... + jsr ReadDeviceWord ; 99AE 20 CE 99 .. + txa ; 99B1 8A . + bne L99CA ; 99B2 D0 16 .. + lda L9BFF ; 99B4 AD FF 9B ... + cmp #$43 ; 99B7 C9 43 .C + bne L99C8 ; 99B9 D0 0D .. + lda L9C00 ; 99BB AD 00 9C ... + cmp #$4D ; 99BE C9 4D .M + bne L99C8 ; 99C0 D0 06 .. + ldx #$00 ; 99C2 A2 00 .. + jsr DoneWithIO ; 99C4 20 5F C2 _. + rts ; 99C7 60 ` + +; ---------------------------------------------------------------------------- +L99C8: ldx #$FF ; 99C8 A2 FF .. +L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. + rts ; 99CD 60 ` + +; ---------------------------------------------------------------------------- +ReadDeviceWord: + ldx #>MemReadCommand ; 99CE A2 99 .. + lda #D_IRQHandler sta irqvec+1 -.ifdef config128 +.if .defined(config128) & (!.defined(mega65)) sta nmivec+1 .endif lda #D_NMIHandler sta nmivec+1 lda #D_IRQHandler sta $0315 sta $0319 @@ -934,11 +935,13 @@ L957E: lda L982E,y ; 957E B9 2E 98 sta L982E,y ; 9585 99 2E 98 ... dey ; 9588 88 . bpl L957E ; 9589 10 F3 .. + + rts ; 958B 60 ` ; ---------------------------------------------------------------------------- D_IRQHandler: -.ifdef config128 +.if .defined(config128) & (!.defined(mega65)) pla sta $ff00 .endif @@ -962,7 +965,7 @@ __DoneWithIO: lda $DD0D ; 95A4 AD 0D DD ... lda L9BF1 ; 95A7 AD F1 9B ... sta grirqen ; 95AA 8D 1A D0 ... -.ifndef config128 +.if (!.defined(config128)) || .defined(mega65) lda L9BF2 ; 95AD AD F2 9B ... sta CPU_DATA ; 95B0 85 01 .. .endif @@ -1832,7 +1835,6 @@ L9BE8: rts ; 9BE8 60 ; ---------------------------------------------------------------------------- .code - .segment "drv1581_21hd_b": absolute L9BEF: brk ; 9BEF 00 . diff --git a/drv/drv1581-21hd.cfg b/drv/drv1581_21hd.cfg similarity index 82% rename from drv/drv1581-21hd.cfg rename to drv/drv1581_21hd.cfg index e43a060a..1b765449 100644 --- a/drv/drv1581-21hd.cfg +++ b/drv/drv1581_21hd.cfg @@ -1,5 +1,5 @@ MEMORY { - DISK_BASE: start = $9000, size = $0D80 file = %O; + DISK_BASE: start = $9000, size = $0c80 file = %O; DRIVE0300: start = $0300, size = $0500; } diff --git a/drv/drv1581_21hd.s b/drv/drv1581_21hd.s new file mode 100644 index 00000000..4407d61e --- /dev/null +++ b/drv/drv1581_21hd.s @@ -0,0 +1,1871 @@ +; da65 V2.15 +; Created: 2017-06-30 19:08:50 +; Input file: configure.cvt.record.4 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + +LFF54 := $FF54 +LFF6C := $FF6C +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 + +L04B9 := $04B9 +L032B := $032B +L04D1 := $04D1 +L04B0 := $04B0 +L04E9 := $04E9 +L046E := $046E +L03AD := $03AD +L03ED := $03ED +L03FF := $03FF +L03FD := $03FD +L03FC := $03FC +L03FB := $03FB +L03FE := $03FE +L0368 := $0368 +L0402 := $0402 +L04BE := $04BE +L046A := $046A +L0354 := $0354 +L0362 := $0362 + + + + + + + + + + + + +; ---------------------------------------------------------------------------- + +.segment "drv1581_21hd": absolute + +_InitForIO: + .addr __InitForIO ; 9000 EF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 92 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 F3 96 .. +_PurgeTurbo: + .addr __PurgeTurbo ; 9006 68 97 h. +_EnterTurbo: + .addr __EnterTurbo ; 9008 E8 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 74 97 t. +_NewDisk: + .addr __NewDisk ; 900C E5 97 .. +_ReadBlock: + .addr __ReadBlock ; 900E D6 98 .. +_WriteBlock: + .addr __WriteBlock ; 9010 3A 99 :. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 69 99 i. +_OpenDisk: + .addr __OpenDisk ; 9014 16 91 .. +_GetBlock: + .addr __GetBlock ; 9016 8C 90 .. +_PutBlock: + .addr __PutBlock ; 9018 C4 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 64 90 d. +_PutDirHead: + .addr __PutDirHead ; 901C 9C 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E BC 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 73 94 s. +_FreeBlock: + .addr __FreeBlock ; 9022 29 94 ). +_SetNextFree: + .addr __SetNextFree ; 9024 64 93 d. +_FindBAMBit: + .addr __FindBAMBit ; 9026 31 94 1. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 6A 91 j. +_BlkAlloc: + .addr __BlkAlloc ; 902A 3D 91 =. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 8E 92 .. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E B1 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C 0F 92 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C 1E 92 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 68 92 Lh. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C 1D 93 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 84 90 L.. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C BC 90 L.. + +; ---------------------------------------------------------------------------- + jmp DUNK4_2 ; 9042 4C AB 97 L.. + +; ---------------------------------------------------------------------------- + jmp GetDOSError ; 9045 4C 6C 99 Ll. + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C E8 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C 0E 98 L.. + +; ---------------------------------------------------------------------------- + .byte $03 ; 904E 03 . + .byte "For Noelle & Dylan" ; 904F 46 6F 72 20 4E 6F 65 6C For Noel + ; 9057 6C 65 20 26 20 44 79 6C le & Dyl + ; 905F 61 6E an + .byte $00 ; 9061 00 . +; ---------------------------------------------------------------------------- + bpl __GetDirHead ; 9062 10 00 .. +__GetDirHead: + lda #$FF ; 9064 A9 FF .. + sta L9BFA ; 9066 8D FA 9B ... + jsr EnterTurbo ; 9069 20 14 C2 .. + txa ; 906C 8A . + bne L9083 ; 906D D0 14 .. + jsr InitForIO ; 906F 20 5C C2 \. + jsr SetDirHead_1 ; 9072 20 D4 90 .. + bne L907F ; 9075 D0 08 .. + jsr SetDirHead_2 ; 9077 20 DC 90 .. + bne L907F ; 907A D0 03 .. + jsr SetDirHead_3 ; 907C 20 E4 90 .. +L907F: jsr DoneWithIO ; 907F 20 5F C2 _. + txa ; 9082 8A . +L9083: rts ; 9083 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9084 A9 80 .. + sta r4H ; 9086 85 0B .. + lda #$00 ; 9088 A9 00 .. + sta r4L ; 908A 85 0A .. +__GetBlock: + jsr EnterTurbo ; 908C 20 14 C2 .. + bne L909A ; 908F D0 09 .. + jsr InitForIO ; 9091 20 5C C2 \. + jsr ReadBlock ; 9094 20 1A C2 .. + jsr DoneWithIO ; 9097 20 5F C2 _. +L909A: txa ; 909A 8A . + rts ; 909B 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + lda #$00 ; 909C A9 00 .. + sta L9BFA ; 909E 8D FA 9B ... + jsr EnterTurbo ; 90A1 20 14 C2 .. + txa ; 90A4 8A . + bne L90BB ; 90A5 D0 14 .. + jsr InitForIO ; 90A7 20 5C C2 \. + jsr SetDirHead_1 ; 90AA 20 D4 90 .. + bne L90B7 ; 90AD D0 08 .. + jsr SetDirHead_2 ; 90AF 20 DC 90 .. + bne L90B7 ; 90B2 D0 03 .. + jsr SetDirHead_3 ; 90B4 20 E4 90 .. +L90B7: jsr DoneWithIO ; 90B7 20 5F C2 _. + txa ; 90BA 8A . +L90BB: rts ; 90BB 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90BC A9 80 .. + sta r4H ; 90BE 85 0B .. + lda #$00 ; 90C0 A9 00 .. + sta r4L ; 90C2 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90C4 20 14 C2 .. + bne L90D2 ; 90C7 D0 09 .. + jsr InitForIO ; 90C9 20 5C C2 \. + jsr WriteBlock ; 90CC 20 20 C2 . + jsr DoneWithIO ; 90CF 20 5F C2 _. +L90D2: txa ; 90D2 8A . + rts ; 90D3 60 ` + +; ---------------------------------------------------------------------------- +SetDirHead_1: + ldx #$82 ; 90D4 A2 82 .. + ldy #$00 ; 90D6 A0 00 .. + lda #$00 ; 90D8 A9 00 .. + beq L90EA ; 90DA F0 0E .. +SetDirHead_2: + ldx #$89 ; 90DC A2 89 .. + ldy #$00 ; 90DE A0 00 .. + lda #$01 ; 90E0 A9 01 .. + bne L90EA ; 90E2 D0 06 .. +SetDirHead_3: + ldx #$9C ; 90E4 A2 9C .. + ldy #$80 ; 90E6 A0 80 .. + lda #$02 ; 90E8 A9 02 .. +L90EA: stx r4H ; 90EA 86 0B .. + sty r4L ; 90EC 84 0A .. + sta r1H ; 90EE 85 05 .. + lda #$28 ; 90F0 A9 28 .( + sta r1L ; 90F2 85 04 .. + bit L9BFA ; 90F4 2C FA 9B ,.. + bmi L90FE ; 90F7 30 05 0. + jsr __WriteBlock ; 90F9 20 3A 99 :. + txa ; 90FC 8A . + rts ; 90FD 60 ` + +; ---------------------------------------------------------------------------- +L90FE: jsr __ReadBlock ; 90FE 20 D6 98 .. + txa ; 9101 8A . + rts ; 9102 60 ` + +; ---------------------------------------------------------------------------- +CheckParams_1: + lda #$00 ; 9103 A9 00 .. + sta L9BFC ; 9105 8D FC 9B ... + ldx #$02 ; 9108 A2 02 .. + lda r1L ; 910A A5 04 .. + beq L9114 ; 910C F0 06 .. + cmp #$51 ; 910E C9 51 .Q + bcs L9114 ; 9110 B0 02 .. + sec ; 9112 38 8 + rts ; 9113 60 ` + +; ---------------------------------------------------------------------------- +L9114: clc ; 9114 18 . + rts ; 9115 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9116 20 E1 C1 .. + txa ; 9119 8A . + bne L913C ; 911A D0 20 . + jsr GetDirHead ; 911C 20 47 C2 G. + bne L913C ; 911F D0 1B .. + jsr L9286 ; 9121 20 86 92 .. + lda #$82 ; 9124 A9 82 .. + sta r4H ; 9126 85 0B .. + lda #$90 ; 9128 A9 90 .. + sta r4L ; 912A 85 0A .. + ldx #$0C ; 912C A2 0C .. + jsr GetPtrCurDkNm ; 912E 20 98 C2 .. + ldy #$12 ; 9131 A0 12 .. +L9133: lda (r4L),y ; 9133 B1 0A .. + sta (r5L),y ; 9135 91 0C .. + dey ; 9137 88 . + bpl L9133 ; 9138 10 F9 .. + ldx #$00 ; 913A A2 00 .. +L913C: rts ; 913C 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 913D 68 h + sta r3L ; 913E 85 08 .. + pla ; 9140 68 h + sta r3H ; 9141 85 09 .. + lda r3H ; 9143 A5 09 .. + pha ; 9145 48 H + lda r3L ; 9146 A5 08 .. + pha ; 9148 48 H + lda r3L ; 9149 A5 08 .. + sec ; 914B 38 8 + sbc $C1EE ; 914C ED EE C1 ... + sta r3L ; 914F 85 08 .. + lda r3H ; 9151 A5 09 .. + sbc $C1EF ; 9153 ED EF C1 ... + sta r3H ; 9156 85 09 .. + ldy #$27 ; 9158 A0 27 .' + lda r3H ; 915A A5 09 .. + beq L9160 ; 915C F0 02 .. + ldy #$23 ; 915E A0 23 .# +L9160: sty r3L ; 9160 84 08 .. + ldy #$00 ; 9162 A0 00 .. + sty r3H ; 9164 84 09 .. + lda #$02 ; 9166 A9 02 .. + bne L916C ; 9168 D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 916A A9 00 .. +L916C: sta L9C01 ; 916C 8D 01 9C ... + lda r9H ; 916F A5 15 .. + pha ; 9171 48 H + lda r9L ; 9172 A5 14 .. + pha ; 9174 48 H + lda r3H ; 9175 A5 09 .. + pha ; 9177 48 H + lda r3L ; 9178 A5 08 .. + pha ; 917A 48 H + lda #$00 ; 917B A9 00 .. + sta r3H ; 917D 85 09 .. + lda #$FE ; 917F A9 FE .. + sta r3L ; 9181 85 08 .. + ldx #$06 ; 9183 A2 06 .. + ldy #$08 ; 9185 A0 08 .. + .byte $20 ; 9187 20 +L9188: adc #$C1 ; 9188 69 C1 i. + lda r8L ; 918A A5 12 .. + beq L9194 ; 918C F0 06 .. + inc r2L ; 918E E6 06 .. + bne L9194 ; 9190 D0 02 .. + inc r2H ; 9192 E6 07 .. +L9194: jsr L9286 ; 9194 20 86 92 .. + pla ; 9197 68 h + sta r3L ; 9198 85 08 .. + pla ; 919A 68 h + sta r3H ; 919B 85 09 .. + ldx #$03 ; 919D A2 03 .. + lda r2H ; 919F A5 07 .. + cmp r4H ; 91A1 C5 0B .. + bne L91A9 ; 91A3 D0 04 .. + lda r2L ; 91A5 A5 06 .. + cmp r4L ; 91A7 C5 0A .. +L91A9: beq L91AD ; 91A9 F0 02 .. + bcs L9208 ; 91AB B0 5B .[ +L91AD: lda r6H ; 91AD A5 0F .. + sta r4H ; 91AF 85 0B .. + lda r6L ; 91B1 A5 0E .. + sta r4L ; 91B3 85 0A .. + lda r2H ; 91B5 A5 07 .. + sta r5H ; 91B7 85 0D .. + lda r2L ; 91B9 A5 06 .. + sta r5L ; 91BB 85 0C .. +L91BD: jsr SetNextFree ; 91BD 20 92 C2 .. + txa ; 91C0 8A . + bne L9208 ; 91C1 D0 45 .E + ldy #$00 ; 91C3 A0 00 .. + lda r3L ; 91C5 A5 08 .. + sta (r4L),y ; 91C7 91 0A .. + iny ; 91C9 C8 . + lda r3H ; 91CA A5 09 .. + sta (r4L),y ; 91CC 91 0A .. + clc ; 91CE 18 . + lda #$02 ; 91CF A9 02 .. + adc r4L ; 91D1 65 0A e. + sta r4L ; 91D3 85 0A .. + bcc L91D9 ; 91D5 90 02 .. + inc r4H ; 91D7 E6 0B .. +L91D9: lda L9C01 ; 91D9 AD 01 9C ... + beq L91E7 ; 91DC F0 09 .. + dec L9C01 ; 91DE CE 01 9C ... + bne L91E7 ; 91E1 D0 04 .. + lda #$23 ; 91E3 A9 23 .# + sta r3L ; 91E5 85 08 .. +L91E7: lda r5L ; 91E7 A5 0C .. + bne L91ED ; 91E9 D0 02 .. + dec r5H ; 91EB C6 0D .. +L91ED: dec r5L ; 91ED C6 0C .. + lda r5L ; 91EF A5 0C .. + ora r5H ; 91F1 05 0D .. + bne L91BD ; 91F3 D0 C8 .. + ldy #$00 ; 91F5 A0 00 .. + tya ; 91F7 98 . + sta (r4L),y ; 91F8 91 0A .. + iny ; 91FA C8 . + lda r8L ; 91FB A5 12 .. + bne L9201 ; 91FD D0 02 .. + lda #$FE ; 91FF A9 FE .. +L9201: clc ; 9201 18 . + adc #$01 ; 9202 69 01 i. + sta (r4L),y ; 9204 91 0A .. + ldx #$00 ; 9206 A2 00 .. +L9208: pla ; 9208 68 h + sta r9L ; 9209 85 14 .. + pla ; 920B 68 h + sta r9H ; 920C 85 15 .. + rts ; 920E 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$28 ; 920F A9 28 .( + sta r1L ; 9211 85 04 .. + lda #$03 ; 9213 A9 03 .. + sta r1H ; 9215 85 05 .. + lda #$00 ; 9217 A9 00 .. + sta L9C02 ; 9219 8D 02 9C ... + beq L925A ; 921C F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 921E A2 00 .. + ldy #$00 ; 9220 A0 00 .. + clc ; 9222 18 . + lda #$20 ; 9223 A9 20 . + adc r5L ; 9225 65 0C e. + sta r5L ; 9227 85 0C .. + bcc L922D ; 9229 90 02 .. + inc r5H ; 922B E6 0D .. +L922D: lda r5H ; 922D A5 0D .. + cmp #$80 ; 922F C9 80 .. + bne L9237 ; 9231 D0 04 .. + lda r5L ; 9233 A5 0C .. + cmp #$FF ; 9235 C9 FF .. +L9237: bcc L9267 ; 9237 90 2E .. + ldy #$FF ; 9239 A0 FF .. + lda $8001 ; 923B AD 01 80 ... + sta r1H ; 923E 85 05 .. + lda diskBlkBuf ; 9240 AD 00 80 ... + sta r1L ; 9243 85 04 .. + bne L925A ; 9245 D0 13 .. + lda L9C02 ; 9247 AD 02 9C ... + bne L9267 ; 924A D0 1B .. + lda #$FF ; 924C A9 FF .. + sta L9C02 ; 924E 8D 02 9C ... + jsr GetBorder ; 9251 20 36 90 6. + txa ; 9254 8A . + bne L9267 ; 9255 D0 10 .. + tya ; 9257 98 . + bne L9267 ; 9258 D0 0D .. +L925A: jsr ReadBuff ; 925A 20 3C 90 <. + ldy #$00 ; 925D A0 00 .. + lda #$80 ; 925F A9 80 .. + sta r5H ; 9261 85 0D .. + lda #$02 ; 9263 A9 02 .. + sta r5L ; 9265 85 0C .. +L9267: rts ; 9267 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9268 20 47 C2 G. + txa ; 926B 8A . + bne L9285 ; 926C D0 17 .. + jsr L9286 ; 926E 20 86 92 .. + bne L9277 ; 9271 D0 04 .. + ldy #$FF ; 9273 A0 FF .. + bne L9283 ; 9275 D0 0C .. +L9277: lda $82AC ; 9277 AD AC 82 ... + sta r1H ; 927A 85 05 .. + lda $82AB ; 927C AD AB 82 ... + sta r1L ; 927F 85 04 .. + ldy #$00 ; 9281 A0 00 .. +L9283: ldx #$00 ; 9283 A2 00 .. +L9285: rts ; 9285 60 ` + +; ---------------------------------------------------------------------------- +L9286: lda #$82 ; 9286 A9 82 .. + sta r5H ; 9288 85 0D .. + lda #$00 ; 928A A9 00 .. + sta r5L ; 928C 85 0C .. +__ChkDkGEOS: + ldy #$AD ; 928E A0 AD .. + ldx #$00 ; 9290 A2 00 .. + stx isGEOS ; 9292 8E 8B 84 ... +L9295: lda (r5L),y ; 9295 B1 0C .. + cmp GEOSDiskID,x ; 9297 DD AB 92 ... + bne L92A7 ; 929A D0 0B .. + iny ; 929C C8 . + inx ; 929D E8 . + cpx #$0B ; 929E E0 0B .. + bne L9295 ; 92A0 D0 F3 .. + lda #$FF ; 92A2 A9 FF .. + sta isGEOS ; 92A4 8D 8B 84 ... +L92A7: lda isGEOS ; 92A7 AD 8B 84 ... + rts ; 92AA 60 ` + +; ---------------------------------------------------------------------------- +GEOSDiskID: + .byte "GEOS format V1.0" ; 92AB 47 45 4F 53 20 66 6F 72 GEOS for + ; 92B3 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 92BB 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 92BC 08 . + sei ; 92BD 78 x + lda r6L ; 92BE A5 0E .. + pha ; 92C0 48 H + lda r2H ; 92C1 A5 07 .. + pha ; 92C3 48 H + lda r2L ; 92C4 A5 06 .. + pha ; 92C6 48 H + ldx r10L ; 92C7 A6 16 .. + inx ; 92C9 E8 . + stx r6L ; 92CA 86 0E .. + lda #$28 ; 92CC A9 28 .( + sta r1L ; 92CE 85 04 .. + lda #$03 ; 92D0 A9 03 .. + sta r1H ; 92D2 85 05 .. +L92D4: jsr ReadBuff ; 92D4 20 3C 90 <. +L92D7: txa ; 92D7 8A . + bne L9312 ; 92D8 D0 38 .8 + dec r6L ; 92DA C6 0E .. + beq L92F3 ; 92DC F0 15 .. +L92DE: lda diskBlkBuf ; 92DE AD 00 80 ... + bne L92E9 ; 92E1 D0 06 .. + jsr AddDirBlock ; 92E3 20 39 90 9. + clv ; 92E6 B8 . + bvc L92D7 ; 92E7 50 EE P. +L92E9: sta r1L ; 92E9 85 04 .. + lda $8001 ; 92EB AD 01 80 ... + sta r1H ; 92EE 85 05 .. + clv ; 92F0 B8 . + bvc L92D4 ; 92F1 50 E1 P. +L92F3: ldy #$02 ; 92F3 A0 02 .. + ldx #$00 ; 92F5 A2 00 .. +L92F7: lda diskBlkBuf,y ; 92F7 B9 00 80 ... + beq L9312 ; 92FA F0 16 .. + tya ; 92FC 98 . + clc ; 92FD 18 . + adc #$20 ; 92FE 69 20 i + tay ; 9300 A8 . + bcc L92F7 ; 9301 90 F4 .. + lda #$01 ; 9303 A9 01 .. + sta r6L ; 9305 85 0E .. + ldx #$04 ; 9307 A2 04 .. + ldy r10L ; 9309 A4 16 .. + iny ; 930B C8 . + sty r10L ; 930C 84 16 .. + cpy #$12 ; 930E C0 12 .. + bcc L92DE ; 9310 90 CC .. +L9312: pla ; 9312 68 h + sta r2L ; 9313 85 06 .. + pla ; 9315 68 h + sta r2H ; 9316 85 07 .. + pla ; 9318 68 h + sta r6L ; 9319 85 0E .. + plp ; 931B 28 ( + rts ; 931C 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 931D A5 0F .. + pha ; 931F 48 H + lda r6L ; 9320 A5 0E .. + pha ; 9322 48 H + ldx #$04 ; 9323 A2 04 .. + lda $89FA ; 9325 AD FA 89 ... + beq ClearAndWrite ; 9328 F0 22 ." + lda r1H ; 932A A5 05 .. + sta r3H ; 932C 85 09 .. + lda r1L ; 932E A5 04 .. + sta r3L ; 9330 85 08 .. + jsr SetNextFree ; 9332 20 92 C2 .. + pla ; 9335 68 h + sta r6L ; 9336 85 0E .. + pla ; 9338 68 h + sta r6H ; 9339 85 0F .. + lda r3H ; 933B A5 09 .. + sta $8001 ; 933D 8D 01 80 ... + lda r3L ; 9340 A5 08 .. + sta diskBlkBuf ; 9342 8D 00 80 ... + jsr WriteBuff ; 9345 20 3F 90 ?. + txa ; 9348 8A . + beq ClearAndWrite ; 9349 F0 01 .. + rts ; 934B 60 ` + +; ---------------------------------------------------------------------------- +ClearAndWrite: + lda r3H ; 934C A5 09 .. + sta r1H ; 934E 85 05 .. + lda r3L ; 9350 A5 08 .. + sta r1L ; 9352 85 04 .. +L9354: lda #$00 ; 9354 A9 00 .. + tay ; 9356 A8 . +L9357: sta diskBlkBuf,y ; 9357 99 00 80 ... + iny ; 935A C8 . + bne L9357 ; 935B D0 FA .. + dey ; 935D 88 . + sty $8001 ; 935E 8C 01 80 ... + jmp WriteBuff ; 9361 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L936E ; 9364 20 6E 93 n. + bne L936A ; 9367 D0 01 .. + rts ; 9369 60 ` + +; ---------------------------------------------------------------------------- +L936A: lda #$27 ; 936A A9 27 .' + sta r3L ; 936C 85 08 .. +L936E: ldy r3H ; 936E A4 09 .. + iny ; 9370 C8 . + sty r6H ; 9371 84 0F .. + lda r3L ; 9373 A5 08 .. + sta r6L ; 9375 85 0E .. + cmp #$28 ; 9377 C9 28 .( + beq L9381 ; 9379 F0 06 .. +L937B: lda r6L ; 937B A5 0E .. + cmp #$28 ; 937D C9 28 .( + beq L93B2 ; 937F F0 31 .1 +L9381: cmp #$29 ; 9381 C9 29 .) + bcc L9388 ; 9383 90 03 .. + sec ; 9385 38 8 + sbc #$28 ; 9386 E9 28 .( +L9388: sec ; 9388 38 8 + sbc #$01 ; 9389 E9 01 .. + asl a ; 938B 0A . + sta r7L ; 938C 85 10 .. + asl a ; 938E 0A . + clc ; 938F 18 . + adc r7L ; 9390 65 10 e. + tax ; 9392 AA . + lda r6L ; 9393 A5 0E .. + cmp #$29 ; 9395 C9 29 .) + bcc L939F ; 9397 90 06 .. + lda $9C90,x ; 9399 BD 90 9C ... + clv ; 939C B8 . + bvc L93A2 ; 939D 50 03 P. +L939F: lda $8910,x ; 939F BD 10 89 ... +L93A2: beq L93B2 ; 93A2 F0 0E .. + ldy #$28 ; 93A4 A0 28 .( + sty r7L ; 93A6 84 10 .. +L93A8: jsr SNxtFreeHelp ; 93A8 20 DA 93 .. + beq L93CC ; 93AB F0 1F .. + inc r6H ; 93AD E6 0F .. + dey ; 93AF 88 . + bne L93A8 ; 93B0 D0 F6 .. +L93B2: ldy r6L ; 93B2 A4 0E .. + cpy #$29 ; 93B4 C0 29 .) + bcs L93BF ; 93B6 B0 07 .. + dey ; 93B8 88 . + bne L93C4 ; 93B9 D0 09 .. + ldy #$29 ; 93BB A0 29 .) + bne L93C4 ; 93BD D0 05 .. +L93BF: iny ; 93BF C8 . + cpy #$51 ; 93C0 C0 51 .Q + bcs L93D7 ; 93C2 B0 13 .. +L93C4: sty r6L ; 93C4 84 0E .. + ldy #$00 ; 93C6 A0 00 .. + sty r6H ; 93C8 84 0F .. + beq L937B ; 93CA F0 AF .. +L93CC: lda r6H ; 93CC A5 0F .. + sta r3H ; 93CE 85 09 .. + lda r6L ; 93D0 A5 0E .. + sta r3L ; 93D2 85 08 .. + ldx #$00 ; 93D4 A2 00 .. + rts ; 93D6 60 ` + +; ---------------------------------------------------------------------------- +L93D7: ldx #$03 ; 93D7 A2 03 .. + rts ; 93D9 60 ` + +; ---------------------------------------------------------------------------- +SNxtFreeHelp: + lda r6H ; 93DA A5 0F .. +L93DC: cmp r7L ; 93DC C5 10 .. + bcc L93E6 ; 93DE 90 06 .. + sec ; 93E0 38 8 + sbc r7L ; 93E1 E5 10 .. + clv ; 93E3 B8 . + bvc L93DC ; 93E4 50 F6 P. +L93E6: sta r6H ; 93E6 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93E8 20 AD C2 .. + bne L93F0 ; 93EB D0 03 .. + ldx #$06 ; 93ED A2 06 .. + rts ; 93EF 60 ` + +; ---------------------------------------------------------------------------- +L93F0: php ; 93F0 08 . + lda r6L ; 93F1 A5 0E .. + cmp #$29 ; 93F3 C9 29 .) + bcc L9410 ; 93F5 90 19 .. + lda r8H ; 93F7 A5 13 .. + eor $9C90,x ; 93F9 5D 90 9C ].. + sta $9C90,x ; 93FC 9D 90 9C ... + ldx r7H ; 93FF A6 11 .. + plp ; 9401 28 ( + beq L940A ; 9402 F0 06 .. + dec $9C90,x ; 9404 DE 90 9C ... + ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +L940A: inc $9C90,x ; 940A FE 90 9C ... + ldx #$00 ; 940D A2 00 .. + rts ; 940F 60 ` + +; ---------------------------------------------------------------------------- +L9410: lda r8H ; 9410 A5 13 .. + eor $8910,x ; 9412 5D 10 89 ].. + sta $8910,x ; 9415 9D 10 89 ... + ldx r7H ; 9418 A6 11 .. + plp ; 941A 28 ( + beq L9423 ; 941B F0 06 .. + dec $8910,x ; 941D DE 10 89 ... + ldx #$00 ; 9420 A2 00 .. + rts ; 9422 60 ` + +; ---------------------------------------------------------------------------- +L9423: inc $8910,x ; 9423 FE 10 89 ... + ldx #$00 ; 9426 A2 00 .. + rts ; 9428 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 9429 20 AD C2 .. + beq L93F0 ; 942C F0 C2 .. + ldx #$06 ; 942E A2 06 .. + rts ; 9430 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9431 A5 0F .. + and #$07 ; 9433 29 07 ). + tax ; 9435 AA . + lda FBBBitTab,x ; 9436 BD 6B 94 .k. + sta r8H ; 9439 85 13 .. + lda r6L ; 943B A5 0E .. + cmp #$29 ; 943D C9 29 .) + bcc L9444 ; 943F 90 03 .. + sec ; 9441 38 8 + sbc #$28 ; 9442 E9 28 .( +L9444: sec ; 9444 38 8 + sbc #$01 ; 9445 E9 01 .. + asl a ; 9447 0A . + sta r7H ; 9448 85 11 .. + asl a ; 944A 0A . + clc ; 944B 18 . + adc r7H ; 944C 65 11 e. + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda r6L ; 9459 A5 0E .. + cmp #$29 ; 945B C9 29 .) + bcc L9465 ; 945D 90 06 .. + lda $9C90,x ; 945F BD 90 9C ... + and r8H ; 9462 25 13 %. + rts ; 9464 60 ` + +; ---------------------------------------------------------------------------- +L9465: lda $8910,x ; 9465 BD 10 89 ... + and r8H ; 9468 25 13 %. + rts ; 946A 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 946B 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9473 A9 00 .. + sta r4L ; 9475 85 0A .. + sta r4H ; 9477 85 0B .. + ldy #$10 ; 9479 A0 10 .. +L947B: lda dir2Head,y ; 947B B9 00 89 ... + clc ; 947E 18 . + adc r4L ; 947F 65 0A e. + sta r4L ; 9481 85 0A .. + bcc L9487 ; 9483 90 02 .. + inc r4H ; 9485 E6 0B .. +L9487: tya ; 9487 98 . + clc ; 9488 18 . + adc #$06 ; 9489 69 06 i. + tay ; 948B A8 . + cpy #$FA ; 948C C0 FA .. + beq L9487 ; 948E F0 F7 .. + tay ; 9490 A8 . + bne L947B ; 9491 D0 E8 .. + ldy #$10 ; 9493 A0 10 .. +L9495: lda $9C80,y ; 9495 B9 80 9C ... + clc ; 9498 18 . + adc r4L ; 9499 65 0A e. + sta r4L ; 949B 85 0A .. + bcc L94A1 ; 949D 90 02 .. + inc r4H ; 949F E6 0B .. +L94A1: tya ; 94A1 98 . + clc ; 94A2 18 . + adc #$06 ; 94A3 69 06 i. + tay ; 94A5 A8 . + bne L9495 ; 94A6 D0 ED .. + lda #$0C ; 94A8 A9 0C .. + sta r3H ; 94AA 85 09 .. + lda #$58 ; 94AC A9 58 .X + sta r3L ; 94AE 85 08 .. + rts ; 94B0 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94B1 20 47 C2 G. + txa ; 94B4 8A . + bne L94EE ; 94B5 D0 37 .7 + lda #$28 ; 94B7 A9 28 .( + sta r3L ; 94B9 85 08 .. + lda #$12 ; 94BB A9 12 .. + sta r3H ; 94BD 85 09 .. + jsr SetNextFree ; 94BF 20 92 C2 .. + txa ; 94C2 8A . + bne L94EE ; 94C3 D0 29 .) + lda r3H ; 94C5 A5 09 .. + sta r1H ; 94C7 85 05 .. + lda r3L ; 94C9 A5 08 .. + sta r1L ; 94CB 85 04 .. + jsr L9354 ; 94CD 20 54 93 T. + txa ; 94D0 8A . + bne L94EE ; 94D1 D0 1B .. + lda r1H ; 94D3 A5 05 .. + sta $82AC ; 94D5 8D AC 82 ... + lda r1L ; 94D8 A5 04 .. + sta $82AB ; 94DA 8D AB 82 ... + ldy #$BC ; 94DD A0 BC .. + ldx #$0F ; 94DF A2 0F .. +L94E1: lda GEOSDiskID,x ; 94E1 BD AB 92 ... + sta curDirHead,y ; 94E4 99 00 82 ... + dey ; 94E7 88 . + dex ; 94E8 CA . + bpl L94E1 ; 94E9 10 F6 .. + jmp PutDirHead ; 94EB 4C 4A C2 LJ. + +; ---------------------------------------------------------------------------- +L94EE: rts ; 94EE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + sei + php ; 94EF 08 . + pla ; 94F0 68 h + sta L9BF0 ; 94F1 8D F0 9B ... + sei ; 94F4 78 x + lda CPU_DATA ; 94F5 A5 01 .. + sta L9BF2 ; 94F7 8D F2 9B ... +.if (!.defined(config128)) || .defined(mega65) + lda #$36 ; 94FA A9 36 .6 + sta CPU_DATA ; 94FC 85 01 .. +.endif + lda grirqen ; 94FE AD 1A D0 ... + sta L9BF1 ; 9501 8D F1 9B ... + lda clkreg ; 9504 AD 30 D0 .0. + sta L9BEF ; 9507 8D EF 9B ... + ldy #$00 ; 950A A0 00 .. + sty clkreg ; 950C 8C 30 D0 .0. + sty grirqen ; 950F 8C 1A D0 ... + lda #$7F ; 9512 A9 7F .. + sta grirq ; 9514 8D 19 D0 ... + sta $DC0D ; 9517 8D 0D DC ... + sta $DD0D ; 951A 8D 0D DD ... +.if .defined(config128) & (!.defined(mega65)) + lda #>D_IRQHandler + sta $0315 + sta $0319 + lda #EnterCommand ; 960B A2 96 .. + lda #HDCommand ; 9677 A2 96 .. + lda #WriteCommand ; 96CD A2 96 .. + lda #ChngDskDev_Command ; 977D A2 97 .. + lda #" ; 979A 55 30 3E U0> +; ---------------------------------------------------------------------------- +ChngDskDev_Number: + .byte $08,$00 ; 979D 08 00 .. +; ---------------------------------------------------------------------------- +L979F: stx $8C ; 979F 86 8C .. + sta $8B ; 97A1 85 8B .. + ldy #$02 ; 97A3 A0 02 .. + bne L97B7 ; 97A5 D0 10 .. +L97A7: stx $8C ; 97A7 86 8C .. + sta $8B ; 97A9 85 8B .. +DUNK4_2:ldy #$04 ; 97AB A0 04 .. + lda r1H ; 97AD A5 05 .. + sta L9BF8 ; 97AF 8D F8 9B ... + lda r1L ; 97B2 A5 04 .. + sta L9BF7 ; 97B4 8D F7 9B ... +L97B7: lda $8C ; 97B7 A5 8C .. + sta L9BF6 ; 97B9 8D F6 9B ... + lda $8B ; 97BC A5 8B .. + sta L9BF5 ; 97BE 8D F5 9B ... + lda #>L9BF5 ; 97C1 A9 9B .. + sta $8C ; 97C3 85 8C .. + lda #. + cpy #$00 ; 98CD C0 00 .. + sta cia2base ; 98CF 8D 00 DD ... + bne L9895 ; 98D2 D0 C1 .. + beq L9880 ; 98D4 F0 AA .. +__ReadBlock: + jsr CheckParams_1 ; 98D6 20 03 91 .. + bcc L9937 ; 98D9 90 5C .\ +L98DB: ldx #$04 ; 98DB A2 04 .. + lda #$CC ; 98DD A9 CC .. + jsr L97A7 ; 98DF 20 A7 97 .. + ldx #$03 ; 98E2 A2 03 .. + lda #$1F ; 98E4 A9 1F .. + jsr L979F ; 98E6 20 9F 97 .. + lda r4H ; 98E9 A5 0B .. + sta $8C ; 98EB 85 8C .. + lda r4L ; 98ED A5 0A .. + sta $8B ; 98EF 85 8B .. + ldy #$00 ; 98F1 A0 00 .. + lda r1L ; 98F3 A5 04 .. + bpl L98F9 ; 98F5 10 02 .. + ldy #$02 ; 98F7 A0 02 .. +L98F9: jsr L984E ; 98F9 20 4E 98 N. + jsr L9973 ; 98FC 20 73 99 s. + beq L990B ; 98FF F0 0A .. + inc L9BFC ; 9901 EE FC 9B ... + cpy L9BFC ; 9904 CC FC 9B ... + beq L990B ; 9907 F0 02 .. + bcs L98DB ; 9909 B0 D0 .. +L990B: lda r1L ; 990B A5 04 .. + cmp #$28 ; 990D C9 28 .( + bne L9936 ; 990F D0 25 .% + lda r1H ; 9911 A5 05 .. + bne L9936 ; 9913 D0 21 .! + ldy #$04 ; 9915 A0 04 .. +L9917: lda (r4L),y ; 9917 B1 0A .. + sta L9BFB ; 9919 8D FB 9B ... + tya ; 991C 98 . + clc ; 991D 18 . + adc #$8C ; 991E 69 8C i. + tay ; 9920 A8 . + lda (r4L),y ; 9921 B1 0A .. + pha ; 9923 48 H + lda L9BFB ; 9924 AD FB 9B ... + sta (r4L),y ; 9927 91 0A .. + tya ; 9929 98 . + sec ; 992A 38 8 + sbc #$8C ; 992B E9 8C .. + tay ; 992D A8 . + pla ; 992E 68 h + sta (r4L),y ; 992F 91 0A .. + iny ; 9931 C8 . + cpy #$1D ; 9932 C0 1D .. + bne L9917 ; 9934 D0 E1 .. +L9936: txa ; 9936 8A . +L9937: ldy #$00 ; 9937 A0 00 .. + rts ; 9939 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr CheckParams_1 ; 993A 20 03 91 .. + bcc L9968 ; 993D 90 29 .) + jsr L990B ; 993F 20 0B 99 .. +L9942: ldx #$04 ; 9942 A2 04 .. + lda #$7C ; 9944 A9 7C .| + jsr L97A7 ; 9946 20 A7 97 .. + lda r4H ; 9949 A5 0B .. + sta $8C ; 994B 85 8C .. + lda r4L ; 994D A5 0A .. + sta $8B ; 994F 85 8B .. + ldy #$00 ; 9951 A0 00 .. + jsr L9892 ; 9953 20 92 98 .. + jsr L9973 ; 9956 20 73 99 s. + beq L9965 ; 9959 F0 0A .. + inc L9BFC ; 995B EE FC 9B ... + cpy L9BFC ; 995E CC FC 9B ... + beq L9965 ; 9961 F0 02 .. + bcs L9942 ; 9963 B0 DD .. +L9965: jsr L990B ; 9965 20 0B 99 .. +L9968: rts ; 9968 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + ldx #$00 ; 9969 A2 00 .. + rts ; 996B 60 ` + +; ---------------------------------------------------------------------------- +GetDOSError: + ldx #$03 ; 996C A2 03 .. + lda #$2B ; 996E A9 2B .+ + jsr L979F ; 9970 20 9F 97 .. +L9973: LoadW $8b, L9BFD + jsr L97CC ; 997B 20 CC 97 .. + lda L9BFD ; 997E AD FD 9B ... + pha ; 9981 48 H + tay ; 9982 A8 . + lda L9822,y ; 9983 B9 22 98 .". + tay ; 9986 A8 . + pla ; 9987 68 h + cmp #$02 ; 9988 C9 02 .. + bcc L9991 ; 998A 90 05 .. + clc ; 998C 18 . + adc #$1E ; 998D 69 1E i. + bne L9993 ; 998F D0 02 .. +L9991: lda #$00 ; 9991 A9 00 .. +L9993: tax ; 9993 AA . + rts ; 9994 60 ` + +; ---------------------------------------------------------------------------- +CheckReal1581: + jsr InitForIO ; 9995 20 5C C2 \. + lda #$00 ; 9998 A9 00 .. + sta STATUS ; 999A 85 90 .. + LoadW $8d, L9BFF + lda #$FE ; 99A4 A9 FE .. + sta L9A00+1 ; 99A6 8D 01 9A ... + lda #$A0 ; 99A9 A9 A0 .. + sta L9A00 ; 99AB 8D 00 9A ... + jsr ReadDeviceWord ; 99AE 20 CE 99 .. + txa ; 99B1 8A . + bne L99CA ; 99B2 D0 16 .. + lda L9BFF ; 99B4 AD FF 9B ... + cmp #$43 ; 99B7 C9 43 .C + bne L99C8 ; 99B9 D0 0D .. + lda L9C00 ; 99BB AD 00 9C ... + cmp #$4D ; 99BE C9 4D .M + bne L99C8 ; 99C0 D0 06 .. + ldx #$00 ; 99C2 A2 00 .. + jsr DoneWithIO ; 99C4 20 5F C2 _. + rts ; 99C7 60 ` + +; ---------------------------------------------------------------------------- +L99C8: ldx #$FF ; 99C8 A2 FF .. +L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. + rts ; 99CD 60 ` + +; ---------------------------------------------------------------------------- +ReadDeviceWord: + ldx #>MemReadCommand ; 99CE A2 99 .. + lda #swapdddmalist + sta $d701 + lda #(SCREEN_BASE-BACK_SCR_BASE) - sta r6H - pla - tax - rts -@2: + +; +; background only +; +@2: .ifdef bsw128 bvc @3 .else @@ -163,6 +163,58 @@ _GetScanLine: tax rts +; +; background and foreground +; + +@1: lda LineTabL,x + ora r6H + sta r5L + sta r6L + lda LineTabH,x + sta r5H + subv >(SCREEN_BASE-BACK_SCR_BASE) + sta r6H + +.ifdef mega65 + ; map foregroud and translate ptrs + tya + pha + tza + pha + + ; a/x lower, y/z highter + lda r5H + bbsf 7, graphMode, @X1_ + and #%11100000 +@X1_: + sub #$60 + tay + + jsr _MapHigh + + lda r5H + and #%00011111 + bbrf 7, graphMode, @X2_ + lda #0 +@X2_: + add #$a0 + sta r5H + sub #$40 + sta r6H + + pla + taz + pla + tay + +.endif + + pla + tax + rts + + .ifdef bsw128 GSC80: txa diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 763ca6b4..10c8e024 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -102,8 +102,10 @@ ASSERT_NOT_BELOW_IO lda #$D0 ; 3.5Mhz, H640, bitplanes + ;lda #$90 ; 3.5Mhz, H640, bitplanes bbsf 7, graphMode, @11 lda #$50 + ;lda #$10 @11: sta $d031 @@ -115,7 +117,11 @@ ASSERT_NOT_BELOW_IO sta $d032 ; bitplane data @$10000 - lda #0 +; lda #0 +; sta $d034 + + ; bitplane data @$14000 + lda #$04 sta $d034 lda #$33 diff --git a/kernal/icon/icon1.s b/kernal/icon/icon1.s index 2e90a257..93c6c0f3 100644 --- a/kernal/icon/icon1.s +++ b/kernal/icon/icon1.s @@ -14,6 +14,9 @@ .import ResetMseRegion .import Icons_1 +.import _MapLow +.import _UnmapLow + .global _DoIcons .segment "icon1" @@ -36,7 +39,10 @@ ;--------------------------------------------------------------- _DoIcons: MoveW r0, IconDescVec + ldy #1 + jsr _MapLow jsr Icons_1 + jsr _UnmapLow jsr ResetMseRegion lda mouseOn diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 1e4fc4b7..52712472 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -86,12 +86,21 @@ _FirstInit: .ifdef bsw128 sta r0L sta r0H +.endif +.ifdef mega65 +.import _MapLow + ldy #1 + jsr _MapLow .endif ldx #24 @3: lda InitMsePic-1,x sta mousePicData-1,x dex bne @3 +.ifdef mega65 +.import _UnmapLow + jsr _UnmapLow +.endif .ifdef wheels .import sysMob0Clr .import sysExtClr diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 6bb72c11..e7af2bdb 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -188,6 +188,9 @@ .import _UseSystemFont .import _BldGDirEntry .import _GetRealSize +.ifdef mega65 +.import _GetRealSizeMap +.endif .import _ColorRectangle .import _ColorCard .import _SetColorMode @@ -522,7 +525,11 @@ i_BitmapUp: i_PutString: jmp _i_PutString GetRealSize: +.ifdef mega65 + jmp _GetRealSizeMap +.else jmp _GetRealSize +.endif i_FillRam: jmp _i_FillRam i_MoveData: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 872e8f90..59498b69 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -2,8 +2,9 @@ MEMORY { START: start = $5000, size = $1000, fill = yes, file = %O; PADDING1: start = $6000, size = $3D80, fill = yes, file = %O; LOKERNAL: start = $9D80, size = $0280, fill = yes, file = %O; - PADDING2: start = $A000, size = $1F40, fill = yes, file = %O; - ICONS: start = $BF40, size = $00C0, fill = yes, file = %O; + #PADDING2: start = $A000, size = $1F40, fill = yes, file = %O; + #ICONS: start = $BF40, size = $00C0, fill = yes, file = %O; + UNDERLAY: start = $4000, size = $2000, fill = yes, file = %O; KERNALHDR: start = $C000, size = $0100, fill = yes, file = %O; KERNAL: start = $C100, size = $3D80, fill = no, file = %O; @@ -21,14 +22,13 @@ SEGMENTS { files1a2a: load = LOKERNAL, type = ro; files1a2b: load = LOKERNAL, type = ro; files1b: load = LOKERNAL, type = ro; - serial1: load = LOKERNAL, type = ro; reu: load = LOKERNAL, type = ro; - tobasic1: load = LOKERNAL, type = ro; - fonts1: load = LOKERNAL, type = ro; # icons: $BF40-$BFFF - mouseptr: load = ICONS, type = ro; - dlgbox2: load = ICONS, type = ro; + mouseptr: load = UNDERLAY, type = ro; + dlgbox2: load = UNDERLAY, type = ro; + bswfont: load = UNDERLAY, type = ro; + bswfont80: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -44,6 +44,9 @@ SEGMENTS { jumptab: load = KERNAL, type = ro; # kernal code + fonts1: load = KERNAL, type = ro; + tobasic1: load = KERNAL, type = ro; + serial1: load = KERNAL, type = ro; ramexp2: load = KERNAL, type = ro; mainloop3: load = KERNAL, type = ro; bitmask1: load = KERNAL, type = ro; @@ -51,6 +54,7 @@ SEGMENTS { bitmask3: load = KERNAL, type = ro; files3: load = KERNAL, type = ro; mainloop2: load = KERNAL, type = ro; + swapdiskdriver: load = KERNAL, type = ro; load1c: load = KERNAL, type = ro; load1d: load = KERNAL, type = ro; init1: load = KERNAL, type = ro; @@ -103,7 +107,7 @@ SEGMENTS { panic3: load = KERNAL, type = ro; serial2: load = KERNAL, type = ro; patterns: load = KERNAL, type = ro; - bswfont: load = KERNAL, type = ro; + map: load = KERNAL, type = ro; memory3: load = KERNAL, type = ro; load3: load = KERNAL, type = ro; files6a: load = KERNAL, type = ro; diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index 8407e81d..d409f23e 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -19,6 +19,92 @@ .segment "reu" +.ifdef mega65 + +_StashRAM: + START_IO_X + MoveW r2, opLength + MoveW r0, opFromAddr + lda r1L + sta opToAddr + lda r1H + and #$7f + sta opToAddr+1 + + lda #>opddmalist + ldy #opddmalist_fetch + ldy # Date: Tue, 13 Mar 2018 22:46:22 +0100 Subject: [PATCH 017/125] Remove old driver files. --- drv/drv1581-21hd.s | 1865 ----------------------------------------- drv/drv1581_21hd.cfg | 11 - drv/drv1581_21hd.s | 1871 ------------------------------------------ 3 files changed, 3747 deletions(-) delete mode 100644 drv/drv1581-21hd.s delete mode 100644 drv/drv1581_21hd.cfg delete mode 100644 drv/drv1581_21hd.s diff --git a/drv/drv1581-21hd.s b/drv/drv1581-21hd.s deleted file mode 100644 index 2457add3..00000000 --- a/drv/drv1581-21hd.s +++ /dev/null @@ -1,1865 +0,0 @@ -; da65 V2.15 -; Created: 2017-06-30 19:08:50 -; Input file: configure.cvt.record.4 -; Page: 1 - -.include "const.inc" -.include "geossym.inc" -.include "geosmac.inc" -.include "kernal.inc" -.include "jumptab.inc" -.include "c64.inc" - -LFF54 := $FF54 -LFF6C := $FF6C -CINT := $FF81 -IOINIT := $FF84 -RAMTAS := $FF87 -RESTOR := $FF8A -VECTOR := $FF8D -SETMSG := $FF90 -SECOND := $FF93 -TKSA := $FF96 -MEMTOP := $FF99 -MEMBOT := $FF9C -SCNKEY := $FF9F -SETTMO := $FFA2 -ACPTR := $FFA5 -CIOUT := $FFA8 -UNTLK := $FFAB -UNLSN := $FFAE -LISTEN := $FFB1 -TALK := $FFB4 -READST := $FFB7 -SETLFS := $FFBA -SETNAM := $FFBD -CLOSE := $FFC3 -CHKIN := $FFC6 -CKOUT := $FFC9 -CLRCH := $FFCC -BASIN := $FFCF -BSOUT := $FFD2 -LOAD := $FFD5 -SAVE := $FFD8 -SETTIM := $FFDB -RDTIM := $FFDE -STOP := $FFE1 -GETIN := $FFE4 -CLALL := $FFE7 -UDTIM := $FFEA -SCREEN := $FFED -IOBASE := $FFF3 - -L04B9 := $04B9 -L032B := $032B -L04D1 := $04D1 -L04B0 := $04B0 -L04E9 := $04E9 -L046E := $046E -L03AD := $03AD -L03ED := $03ED -L03FF := $03FF -L03FD := $03FD -L03FC := $03FC -L03FB := $03FB -L03FE := $03FE -L0368 := $0368 -L0402 := $0402 -L04BE := $04BE -L046A := $046A -L0354 := $0354 -L0362 := $0362 - - - - - - - - - - - - -; ---------------------------------------------------------------------------- - -.segment "drv1581_21hd": absolute - -_InitForIO: - .addr __InitForIO ; 9000 EF 94 .. -_DoneWithIO: - .addr __DoneWithIO ; 9002 92 95 .. -_ExitTurbo: - .addr __ExitTurbo ; 9004 F3 96 .. -_PurgeTurbo: - .addr __PurgeTurbo ; 9006 68 97 h. -_EnterTurbo: - .addr __EnterTurbo ; 9008 E8 95 .. -_ChangeDiskDevice: - .addr __ChangeDiskDevice ; 900A 74 97 t. -_NewDisk: - .addr __NewDisk ; 900C E5 97 .. -_ReadBlock: - .addr __ReadBlock ; 900E D6 98 .. -_WriteBlock: - .addr __WriteBlock ; 9010 3A 99 :. -_VerWriteBlock: - .addr __VerWriteBlock ; 9012 69 99 i. -_OpenDisk: - .addr __OpenDisk ; 9014 16 91 .. -_GetBlock: - .addr __GetBlock ; 9016 8C 90 .. -_PutBlock: - .addr __PutBlock ; 9018 C4 90 .. -_GetDirHead: - .addr __GetDirHead ; 901A 64 90 d. -_PutDirHead: - .addr __PutDirHead ; 901C 9C 90 .. -_GetFreeDirBlk: - .addr __GetFreeDirBlk ; 901E BC 92 .. -_CalcBlksFree: - .addr __CalcBlksFree ; 9020 73 94 s. -_FreeBlock: - .addr __FreeBlock ; 9022 29 94 ). -_SetNextFree: - .addr __SetNextFree ; 9024 64 93 d. -_FindBAMBit: - .addr __FindBAMBit ; 9026 31 94 1. -_NxtBlkAlloc: - .addr __NxtBlkAlloc ; 9028 6A 91 j. -_BlkAlloc: - .addr __BlkAlloc ; 902A 3D 91 =. -_ChkDkGEOS: - .addr __ChkDkGEOS ; 902C 8E 92 .. -_SetGEOSDisk: - .addr __SetGEOSDisk ; 902E B1 94 .. -; ---------------------------------------------------------------------------- -Get1stDirEntry: - jmp _Get1stDirEntry ; 9030 4C 0F 92 L.. - -; ---------------------------------------------------------------------------- -GetNxtDirEntry: - jmp _GetNxtDirEntry ; 9033 4C 1E 92 L.. - -; ---------------------------------------------------------------------------- -GetBorder: - jmp _GetBorder ; 9036 4C 68 92 Lh. - -; ---------------------------------------------------------------------------- -AddDirBlock: - jmp _AddDirBlock ; 9039 4C 1D 93 L.. - -; ---------------------------------------------------------------------------- -ReadBuff: - jmp _ReadBuff ; 903C 4C 84 90 L.. - -; ---------------------------------------------------------------------------- -WriteBuff: - jmp _WriteBuff ; 903F 4C BC 90 L.. - -; ---------------------------------------------------------------------------- - jmp DUNK4_2 ; 9042 4C AB 97 L.. - -; ---------------------------------------------------------------------------- - jmp GetDOSError ; 9045 4C 6C 99 Ll. - -; ---------------------------------------------------------------------------- -AllocateBlock: - jmp _AllocateBlock ; 9048 4C E8 93 L.. - -; ---------------------------------------------------------------------------- -ReadLink: - jmp _ReadLink ; 904B 4C 0E 98 L.. - -; ---------------------------------------------------------------------------- - .byte $03 ; 904E 03 . - .byte "For Noelle & Dylan" ; 904F 46 6F 72 20 4E 6F 65 6C For Noel - ; 9057 6C 65 20 26 20 44 79 6C le & Dyl - ; 905F 61 6E an - .byte $00 ; 9061 00 . -; ---------------------------------------------------------------------------- - bpl __GetDirHead ; 9062 10 00 .. -__GetDirHead: - lda #$FF ; 9064 A9 FF .. - sta L9BFA ; 9066 8D FA 9B ... - jsr EnterTurbo ; 9069 20 14 C2 .. - txa ; 906C 8A . - bne L9083 ; 906D D0 14 .. - jsr InitForIO ; 906F 20 5C C2 \. - jsr SetDirHead_1 ; 9072 20 D4 90 .. - bne L907F ; 9075 D0 08 .. - jsr SetDirHead_2 ; 9077 20 DC 90 .. - bne L907F ; 907A D0 03 .. - jsr SetDirHead_3 ; 907C 20 E4 90 .. -L907F: jsr DoneWithIO ; 907F 20 5F C2 _. - txa ; 9082 8A . -L9083: rts ; 9083 60 ` - -; ---------------------------------------------------------------------------- -_ReadBuff: - lda #$80 ; 9084 A9 80 .. - sta r4H ; 9086 85 0B .. - lda #$00 ; 9088 A9 00 .. - sta r4L ; 908A 85 0A .. -__GetBlock: - jsr EnterTurbo ; 908C 20 14 C2 .. - bne L909A ; 908F D0 09 .. - jsr InitForIO ; 9091 20 5C C2 \. - jsr ReadBlock ; 9094 20 1A C2 .. - jsr DoneWithIO ; 9097 20 5F C2 _. -L909A: txa ; 909A 8A . - rts ; 909B 60 ` - -; ---------------------------------------------------------------------------- -__PutDirHead: - lda #$00 ; 909C A9 00 .. - sta L9BFA ; 909E 8D FA 9B ... - jsr EnterTurbo ; 90A1 20 14 C2 .. - txa ; 90A4 8A . - bne L90BB ; 90A5 D0 14 .. - jsr InitForIO ; 90A7 20 5C C2 \. - jsr SetDirHead_1 ; 90AA 20 D4 90 .. - bne L90B7 ; 90AD D0 08 .. - jsr SetDirHead_2 ; 90AF 20 DC 90 .. - bne L90B7 ; 90B2 D0 03 .. - jsr SetDirHead_3 ; 90B4 20 E4 90 .. -L90B7: jsr DoneWithIO ; 90B7 20 5F C2 _. - txa ; 90BA 8A . -L90BB: rts ; 90BB 60 ` - -; ---------------------------------------------------------------------------- -_WriteBuff: - lda #$80 ; 90BC A9 80 .. - sta r4H ; 90BE 85 0B .. - lda #$00 ; 90C0 A9 00 .. - sta r4L ; 90C2 85 0A .. -__PutBlock: - jsr EnterTurbo ; 90C4 20 14 C2 .. - bne L90D2 ; 90C7 D0 09 .. - jsr InitForIO ; 90C9 20 5C C2 \. - jsr WriteBlock ; 90CC 20 20 C2 . - jsr DoneWithIO ; 90CF 20 5F C2 _. -L90D2: txa ; 90D2 8A . - rts ; 90D3 60 ` - -; ---------------------------------------------------------------------------- -SetDirHead_1: - ldx #$82 ; 90D4 A2 82 .. - ldy #$00 ; 90D6 A0 00 .. - lda #$00 ; 90D8 A9 00 .. - beq L90EA ; 90DA F0 0E .. -SetDirHead_2: - ldx #$89 ; 90DC A2 89 .. - ldy #$00 ; 90DE A0 00 .. - lda #$01 ; 90E0 A9 01 .. - bne L90EA ; 90E2 D0 06 .. -SetDirHead_3: - ldx #$9C ; 90E4 A2 9C .. - ldy #$80 ; 90E6 A0 80 .. - lda #$02 ; 90E8 A9 02 .. -L90EA: stx r4H ; 90EA 86 0B .. - sty r4L ; 90EC 84 0A .. - sta r1H ; 90EE 85 05 .. - lda #$28 ; 90F0 A9 28 .( - sta r1L ; 90F2 85 04 .. - bit L9BFA ; 90F4 2C FA 9B ,.. - bmi L90FE ; 90F7 30 05 0. - jsr __WriteBlock ; 90F9 20 3A 99 :. - txa ; 90FC 8A . - rts ; 90FD 60 ` - -; ---------------------------------------------------------------------------- -L90FE: jsr __ReadBlock ; 90FE 20 D6 98 .. - txa ; 9101 8A . - rts ; 9102 60 ` - -; ---------------------------------------------------------------------------- -CheckParams_1: - lda #$00 ; 9103 A9 00 .. - sta L9BFC ; 9105 8D FC 9B ... - ldx #$02 ; 9108 A2 02 .. - lda r1L ; 910A A5 04 .. - beq L9114 ; 910C F0 06 .. - cmp #$51 ; 910E C9 51 .Q - bcs L9114 ; 9110 B0 02 .. - sec ; 9112 38 8 - rts ; 9113 60 ` - -; ---------------------------------------------------------------------------- -L9114: clc ; 9114 18 . - rts ; 9115 60 ` - -; ---------------------------------------------------------------------------- -__OpenDisk: - jsr NewDisk ; 9116 20 E1 C1 .. - txa ; 9119 8A . - bne L913C ; 911A D0 20 . - jsr GetDirHead ; 911C 20 47 C2 G. - bne L913C ; 911F D0 1B .. - jsr L9286 ; 9121 20 86 92 .. - lda #$82 ; 9124 A9 82 .. - sta r4H ; 9126 85 0B .. - lda #$90 ; 9128 A9 90 .. - sta r4L ; 912A 85 0A .. - ldx #$0C ; 912C A2 0C .. - jsr GetPtrCurDkNm ; 912E 20 98 C2 .. - ldy #$12 ; 9131 A0 12 .. -L9133: lda (r4L),y ; 9133 B1 0A .. - sta (r5L),y ; 9135 91 0C .. - dey ; 9137 88 . - bpl L9133 ; 9138 10 F9 .. - ldx #$00 ; 913A A2 00 .. -L913C: rts ; 913C 60 ` - -; ---------------------------------------------------------------------------- -__BlkAlloc: - pla ; 913D 68 h - sta r3L ; 913E 85 08 .. - pla ; 9140 68 h - sta r3H ; 9141 85 09 .. - lda r3H ; 9143 A5 09 .. - pha ; 9145 48 H - lda r3L ; 9146 A5 08 .. - pha ; 9148 48 H - lda r3L ; 9149 A5 08 .. - sec ; 914B 38 8 - sbc $C1EE ; 914C ED EE C1 ... - sta r3L ; 914F 85 08 .. - lda r3H ; 9151 A5 09 .. - sbc $C1EF ; 9153 ED EF C1 ... - sta r3H ; 9156 85 09 .. - ldy #$27 ; 9158 A0 27 .' - lda r3H ; 915A A5 09 .. - beq L9160 ; 915C F0 02 .. - ldy #$23 ; 915E A0 23 .# -L9160: sty r3L ; 9160 84 08 .. - ldy #$00 ; 9162 A0 00 .. - sty r3H ; 9164 84 09 .. - lda #$02 ; 9166 A9 02 .. - bne L916C ; 9168 D0 02 .. -__NxtBlkAlloc: - lda #$00 ; 916A A9 00 .. -L916C: sta L9C01 ; 916C 8D 01 9C ... - lda r9H ; 916F A5 15 .. - pha ; 9171 48 H - lda r9L ; 9172 A5 14 .. - pha ; 9174 48 H - lda r3H ; 9175 A5 09 .. - pha ; 9177 48 H - lda r3L ; 9178 A5 08 .. - pha ; 917A 48 H - lda #$00 ; 917B A9 00 .. - sta r3H ; 917D 85 09 .. - lda #$FE ; 917F A9 FE .. - sta r3L ; 9181 85 08 .. - ldx #$06 ; 9183 A2 06 .. - ldy #$08 ; 9185 A0 08 .. - .byte $20 ; 9187 20 -L9188: adc #$C1 ; 9188 69 C1 i. - lda r8L ; 918A A5 12 .. - beq L9194 ; 918C F0 06 .. - inc r2L ; 918E E6 06 .. - bne L9194 ; 9190 D0 02 .. - inc r2H ; 9192 E6 07 .. -L9194: jsr L9286 ; 9194 20 86 92 .. - pla ; 9197 68 h - sta r3L ; 9198 85 08 .. - pla ; 919A 68 h - sta r3H ; 919B 85 09 .. - ldx #$03 ; 919D A2 03 .. - lda r2H ; 919F A5 07 .. - cmp r4H ; 91A1 C5 0B .. - bne L91A9 ; 91A3 D0 04 .. - lda r2L ; 91A5 A5 06 .. - cmp r4L ; 91A7 C5 0A .. -L91A9: beq L91AD ; 91A9 F0 02 .. - bcs L9208 ; 91AB B0 5B .[ -L91AD: lda r6H ; 91AD A5 0F .. - sta r4H ; 91AF 85 0B .. - lda r6L ; 91B1 A5 0E .. - sta r4L ; 91B3 85 0A .. - lda r2H ; 91B5 A5 07 .. - sta r5H ; 91B7 85 0D .. - lda r2L ; 91B9 A5 06 .. - sta r5L ; 91BB 85 0C .. -L91BD: jsr SetNextFree ; 91BD 20 92 C2 .. - txa ; 91C0 8A . - bne L9208 ; 91C1 D0 45 .E - ldy #$00 ; 91C3 A0 00 .. - lda r3L ; 91C5 A5 08 .. - sta (r4L),y ; 91C7 91 0A .. - iny ; 91C9 C8 . - lda r3H ; 91CA A5 09 .. - sta (r4L),y ; 91CC 91 0A .. - clc ; 91CE 18 . - lda #$02 ; 91CF A9 02 .. - adc r4L ; 91D1 65 0A e. - sta r4L ; 91D3 85 0A .. - bcc L91D9 ; 91D5 90 02 .. - inc r4H ; 91D7 E6 0B .. -L91D9: lda L9C01 ; 91D9 AD 01 9C ... - beq L91E7 ; 91DC F0 09 .. - dec L9C01 ; 91DE CE 01 9C ... - bne L91E7 ; 91E1 D0 04 .. - lda #$23 ; 91E3 A9 23 .# - sta r3L ; 91E5 85 08 .. -L91E7: lda r5L ; 91E7 A5 0C .. - bne L91ED ; 91E9 D0 02 .. - dec r5H ; 91EB C6 0D .. -L91ED: dec r5L ; 91ED C6 0C .. - lda r5L ; 91EF A5 0C .. - ora r5H ; 91F1 05 0D .. - bne L91BD ; 91F3 D0 C8 .. - ldy #$00 ; 91F5 A0 00 .. - tya ; 91F7 98 . - sta (r4L),y ; 91F8 91 0A .. - iny ; 91FA C8 . - lda r8L ; 91FB A5 12 .. - bne L9201 ; 91FD D0 02 .. - lda #$FE ; 91FF A9 FE .. -L9201: clc ; 9201 18 . - adc #$01 ; 9202 69 01 i. - sta (r4L),y ; 9204 91 0A .. - ldx #$00 ; 9206 A2 00 .. -L9208: pla ; 9208 68 h - sta r9L ; 9209 85 14 .. - pla ; 920B 68 h - sta r9H ; 920C 85 15 .. - rts ; 920E 60 ` - -; ---------------------------------------------------------------------------- -_Get1stDirEntry: - lda #$28 ; 920F A9 28 .( - sta r1L ; 9211 85 04 .. - lda #$03 ; 9213 A9 03 .. - sta r1H ; 9215 85 05 .. - lda #$00 ; 9217 A9 00 .. - sta L9C02 ; 9219 8D 02 9C ... - beq L925A ; 921C F0 3C .< -_GetNxtDirEntry: - ldx #$00 ; 921E A2 00 .. - ldy #$00 ; 9220 A0 00 .. - clc ; 9222 18 . - lda #$20 ; 9223 A9 20 . - adc r5L ; 9225 65 0C e. - sta r5L ; 9227 85 0C .. - bcc L922D ; 9229 90 02 .. - inc r5H ; 922B E6 0D .. -L922D: lda r5H ; 922D A5 0D .. - cmp #$80 ; 922F C9 80 .. - bne L9237 ; 9231 D0 04 .. - lda r5L ; 9233 A5 0C .. - cmp #$FF ; 9235 C9 FF .. -L9237: bcc L9267 ; 9237 90 2E .. - ldy #$FF ; 9239 A0 FF .. - lda $8001 ; 923B AD 01 80 ... - sta r1H ; 923E 85 05 .. - lda diskBlkBuf ; 9240 AD 00 80 ... - sta r1L ; 9243 85 04 .. - bne L925A ; 9245 D0 13 .. - lda L9C02 ; 9247 AD 02 9C ... - bne L9267 ; 924A D0 1B .. - lda #$FF ; 924C A9 FF .. - sta L9C02 ; 924E 8D 02 9C ... - jsr GetBorder ; 9251 20 36 90 6. - txa ; 9254 8A . - bne L9267 ; 9255 D0 10 .. - tya ; 9257 98 . - bne L9267 ; 9258 D0 0D .. -L925A: jsr ReadBuff ; 925A 20 3C 90 <. - ldy #$00 ; 925D A0 00 .. - lda #$80 ; 925F A9 80 .. - sta r5H ; 9261 85 0D .. - lda #$02 ; 9263 A9 02 .. - sta r5L ; 9265 85 0C .. -L9267: rts ; 9267 60 ` - -; ---------------------------------------------------------------------------- -_GetBorder: - jsr GetDirHead ; 9268 20 47 C2 G. - txa ; 926B 8A . - bne L9285 ; 926C D0 17 .. - jsr L9286 ; 926E 20 86 92 .. - bne L9277 ; 9271 D0 04 .. - ldy #$FF ; 9273 A0 FF .. - bne L9283 ; 9275 D0 0C .. -L9277: lda $82AC ; 9277 AD AC 82 ... - sta r1H ; 927A 85 05 .. - lda $82AB ; 927C AD AB 82 ... - sta r1L ; 927F 85 04 .. - ldy #$00 ; 9281 A0 00 .. -L9283: ldx #$00 ; 9283 A2 00 .. -L9285: rts ; 9285 60 ` - -; ---------------------------------------------------------------------------- -L9286: lda #$82 ; 9286 A9 82 .. - sta r5H ; 9288 85 0D .. - lda #$00 ; 928A A9 00 .. - sta r5L ; 928C 85 0C .. -__ChkDkGEOS: - ldy #$AD ; 928E A0 AD .. - ldx #$00 ; 9290 A2 00 .. - stx isGEOS ; 9292 8E 8B 84 ... -L9295: lda (r5L),y ; 9295 B1 0C .. - cmp GEOSDiskID,x ; 9297 DD AB 92 ... - bne L92A7 ; 929A D0 0B .. - iny ; 929C C8 . - inx ; 929D E8 . - cpx #$0B ; 929E E0 0B .. - bne L9295 ; 92A0 D0 F3 .. - lda #$FF ; 92A2 A9 FF .. - sta isGEOS ; 92A4 8D 8B 84 ... -L92A7: lda isGEOS ; 92A7 AD 8B 84 ... - rts ; 92AA 60 ` - -; ---------------------------------------------------------------------------- -GEOSDiskID: - .byte "GEOS format V1.0" ; 92AB 47 45 4F 53 20 66 6F 72 GEOS for - ; 92B3 6D 61 74 20 56 31 2E 30 mat V1.0 - .byte $00 ; 92BB 00 . -; ---------------------------------------------------------------------------- -__GetFreeDirBlk: - php ; 92BC 08 . - sei ; 92BD 78 x - lda r6L ; 92BE A5 0E .. - pha ; 92C0 48 H - lda r2H ; 92C1 A5 07 .. - pha ; 92C3 48 H - lda r2L ; 92C4 A5 06 .. - pha ; 92C6 48 H - ldx r10L ; 92C7 A6 16 .. - inx ; 92C9 E8 . - stx r6L ; 92CA 86 0E .. - lda #$28 ; 92CC A9 28 .( - sta r1L ; 92CE 85 04 .. - lda #$03 ; 92D0 A9 03 .. - sta r1H ; 92D2 85 05 .. -L92D4: jsr ReadBuff ; 92D4 20 3C 90 <. -L92D7: txa ; 92D7 8A . - bne L9312 ; 92D8 D0 38 .8 - dec r6L ; 92DA C6 0E .. - beq L92F3 ; 92DC F0 15 .. -L92DE: lda diskBlkBuf ; 92DE AD 00 80 ... - bne L92E9 ; 92E1 D0 06 .. - jsr AddDirBlock ; 92E3 20 39 90 9. - clv ; 92E6 B8 . - bvc L92D7 ; 92E7 50 EE P. -L92E9: sta r1L ; 92E9 85 04 .. - lda $8001 ; 92EB AD 01 80 ... - sta r1H ; 92EE 85 05 .. - clv ; 92F0 B8 . - bvc L92D4 ; 92F1 50 E1 P. -L92F3: ldy #$02 ; 92F3 A0 02 .. - ldx #$00 ; 92F5 A2 00 .. -L92F7: lda diskBlkBuf,y ; 92F7 B9 00 80 ... - beq L9312 ; 92FA F0 16 .. - tya ; 92FC 98 . - clc ; 92FD 18 . - adc #$20 ; 92FE 69 20 i - tay ; 9300 A8 . - bcc L92F7 ; 9301 90 F4 .. - lda #$01 ; 9303 A9 01 .. - sta r6L ; 9305 85 0E .. - ldx #$04 ; 9307 A2 04 .. - ldy r10L ; 9309 A4 16 .. - iny ; 930B C8 . - sty r10L ; 930C 84 16 .. - cpy #$12 ; 930E C0 12 .. - bcc L92DE ; 9310 90 CC .. -L9312: pla ; 9312 68 h - sta r2L ; 9313 85 06 .. - pla ; 9315 68 h - sta r2H ; 9316 85 07 .. - pla ; 9318 68 h - sta r6L ; 9319 85 0E .. - plp ; 931B 28 ( - rts ; 931C 60 ` - -; ---------------------------------------------------------------------------- -_AddDirBlock: - lda r6H ; 931D A5 0F .. - pha ; 931F 48 H - lda r6L ; 9320 A5 0E .. - pha ; 9322 48 H - ldx #$04 ; 9323 A2 04 .. - lda $89FA ; 9325 AD FA 89 ... - beq ClearAndWrite ; 9328 F0 22 ." - lda r1H ; 932A A5 05 .. - sta r3H ; 932C 85 09 .. - lda r1L ; 932E A5 04 .. - sta r3L ; 9330 85 08 .. - jsr SetNextFree ; 9332 20 92 C2 .. - pla ; 9335 68 h - sta r6L ; 9336 85 0E .. - pla ; 9338 68 h - sta r6H ; 9339 85 0F .. - lda r3H ; 933B A5 09 .. - sta $8001 ; 933D 8D 01 80 ... - lda r3L ; 9340 A5 08 .. - sta diskBlkBuf ; 9342 8D 00 80 ... - jsr WriteBuff ; 9345 20 3F 90 ?. - txa ; 9348 8A . - beq ClearAndWrite ; 9349 F0 01 .. - rts ; 934B 60 ` - -; ---------------------------------------------------------------------------- -ClearAndWrite: - lda r3H ; 934C A5 09 .. - sta r1H ; 934E 85 05 .. - lda r3L ; 9350 A5 08 .. - sta r1L ; 9352 85 04 .. -L9354: lda #$00 ; 9354 A9 00 .. - tay ; 9356 A8 . -L9357: sta diskBlkBuf,y ; 9357 99 00 80 ... - iny ; 935A C8 . - bne L9357 ; 935B D0 FA .. - dey ; 935D 88 . - sty $8001 ; 935E 8C 01 80 ... - jmp WriteBuff ; 9361 4C 3F 90 L?. - -; ---------------------------------------------------------------------------- -__SetNextFree: - jsr L936E ; 9364 20 6E 93 n. - bne L936A ; 9367 D0 01 .. - rts ; 9369 60 ` - -; ---------------------------------------------------------------------------- -L936A: lda #$27 ; 936A A9 27 .' - sta r3L ; 936C 85 08 .. -L936E: ldy r3H ; 936E A4 09 .. - iny ; 9370 C8 . - sty r6H ; 9371 84 0F .. - lda r3L ; 9373 A5 08 .. - sta r6L ; 9375 85 0E .. - cmp #$28 ; 9377 C9 28 .( - beq L9381 ; 9379 F0 06 .. -L937B: lda r6L ; 937B A5 0E .. - cmp #$28 ; 937D C9 28 .( - beq L93B2 ; 937F F0 31 .1 -L9381: cmp #$29 ; 9381 C9 29 .) - bcc L9388 ; 9383 90 03 .. - sec ; 9385 38 8 - sbc #$28 ; 9386 E9 28 .( -L9388: sec ; 9388 38 8 - sbc #$01 ; 9389 E9 01 .. - asl a ; 938B 0A . - sta r7L ; 938C 85 10 .. - asl a ; 938E 0A . - clc ; 938F 18 . - adc r7L ; 9390 65 10 e. - tax ; 9392 AA . - lda r6L ; 9393 A5 0E .. - cmp #$29 ; 9395 C9 29 .) - bcc L939F ; 9397 90 06 .. - lda $9C90,x ; 9399 BD 90 9C ... - clv ; 939C B8 . - bvc L93A2 ; 939D 50 03 P. -L939F: lda $8910,x ; 939F BD 10 89 ... -L93A2: beq L93B2 ; 93A2 F0 0E .. - ldy #$28 ; 93A4 A0 28 .( - sty r7L ; 93A6 84 10 .. -L93A8: jsr SNxtFreeHelp ; 93A8 20 DA 93 .. - beq L93CC ; 93AB F0 1F .. - inc r6H ; 93AD E6 0F .. - dey ; 93AF 88 . - bne L93A8 ; 93B0 D0 F6 .. -L93B2: ldy r6L ; 93B2 A4 0E .. - cpy #$29 ; 93B4 C0 29 .) - bcs L93BF ; 93B6 B0 07 .. - dey ; 93B8 88 . - bne L93C4 ; 93B9 D0 09 .. - ldy #$29 ; 93BB A0 29 .) - bne L93C4 ; 93BD D0 05 .. -L93BF: iny ; 93BF C8 . - cpy #$51 ; 93C0 C0 51 .Q - bcs L93D7 ; 93C2 B0 13 .. -L93C4: sty r6L ; 93C4 84 0E .. - ldy #$00 ; 93C6 A0 00 .. - sty r6H ; 93C8 84 0F .. - beq L937B ; 93CA F0 AF .. -L93CC: lda r6H ; 93CC A5 0F .. - sta r3H ; 93CE 85 09 .. - lda r6L ; 93D0 A5 0E .. - sta r3L ; 93D2 85 08 .. - ldx #$00 ; 93D4 A2 00 .. - rts ; 93D6 60 ` - -; ---------------------------------------------------------------------------- -L93D7: ldx #$03 ; 93D7 A2 03 .. - rts ; 93D9 60 ` - -; ---------------------------------------------------------------------------- -SNxtFreeHelp: - lda r6H ; 93DA A5 0F .. -L93DC: cmp r7L ; 93DC C5 10 .. - bcc L93E6 ; 93DE 90 06 .. - sec ; 93E0 38 8 - sbc r7L ; 93E1 E5 10 .. - clv ; 93E3 B8 . - bvc L93DC ; 93E4 50 F6 P. -L93E6: sta r6H ; 93E6 85 0F .. -_AllocateBlock: - jsr FindBAMBit ; 93E8 20 AD C2 .. - bne L93F0 ; 93EB D0 03 .. - ldx #$06 ; 93ED A2 06 .. - rts ; 93EF 60 ` - -; ---------------------------------------------------------------------------- -L93F0: php ; 93F0 08 . - lda r6L ; 93F1 A5 0E .. - cmp #$29 ; 93F3 C9 29 .) - bcc L9410 ; 93F5 90 19 .. - lda r8H ; 93F7 A5 13 .. - eor $9C90,x ; 93F9 5D 90 9C ].. - sta $9C90,x ; 93FC 9D 90 9C ... - ldx r7H ; 93FF A6 11 .. - plp ; 9401 28 ( - beq L940A ; 9402 F0 06 .. - dec $9C90,x ; 9404 DE 90 9C ... - ldx #$00 ; 9407 A2 00 .. - rts ; 9409 60 ` - -; ---------------------------------------------------------------------------- -L940A: inc $9C90,x ; 940A FE 90 9C ... - ldx #$00 ; 940D A2 00 .. - rts ; 940F 60 ` - -; ---------------------------------------------------------------------------- -L9410: lda r8H ; 9410 A5 13 .. - eor $8910,x ; 9412 5D 10 89 ].. - sta $8910,x ; 9415 9D 10 89 ... - ldx r7H ; 9418 A6 11 .. - plp ; 941A 28 ( - beq L9423 ; 941B F0 06 .. - dec $8910,x ; 941D DE 10 89 ... - ldx #$00 ; 9420 A2 00 .. - rts ; 9422 60 ` - -; ---------------------------------------------------------------------------- -L9423: inc $8910,x ; 9423 FE 10 89 ... - ldx #$00 ; 9426 A2 00 .. - rts ; 9428 60 ` - -; ---------------------------------------------------------------------------- -__FreeBlock: - jsr FindBAMBit ; 9429 20 AD C2 .. - beq L93F0 ; 942C F0 C2 .. - ldx #$06 ; 942E A2 06 .. - rts ; 9430 60 ` - -; ---------------------------------------------------------------------------- -__FindBAMBit: - lda r6H ; 9431 A5 0F .. - and #$07 ; 9433 29 07 ). - tax ; 9435 AA . - lda FBBBitTab,x ; 9436 BD 6B 94 .k. - sta r8H ; 9439 85 13 .. - lda r6L ; 943B A5 0E .. - cmp #$29 ; 943D C9 29 .) - bcc L9444 ; 943F 90 03 .. - sec ; 9441 38 8 - sbc #$28 ; 9442 E9 28 .( -L9444: sec ; 9444 38 8 - sbc #$01 ; 9445 E9 01 .. - asl a ; 9447 0A . - sta r7H ; 9448 85 11 .. - asl a ; 944A 0A . - clc ; 944B 18 . - adc r7H ; 944C 65 11 e. - sta r7H ; 944E 85 11 .. - lda r6H ; 9450 A5 0F .. - lsr a ; 9452 4A J - lsr a ; 9453 4A J - lsr a ; 9454 4A J - sec ; 9455 38 8 - adc r7H ; 9456 65 11 e. - tax ; 9458 AA . - lda r6L ; 9459 A5 0E .. - cmp #$29 ; 945B C9 29 .) - bcc L9465 ; 945D 90 06 .. - lda $9C90,x ; 945F BD 90 9C ... - and r8H ; 9462 25 13 %. - rts ; 9464 60 ` - -; ---------------------------------------------------------------------------- -L9465: lda $8910,x ; 9465 BD 10 89 ... - and r8H ; 9468 25 13 %. - rts ; 946A 60 ` - -; ---------------------------------------------------------------------------- -FBBBitTab: - .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 946B 01 02 04 08 10 20 40 80 ..... @. -; ---------------------------------------------------------------------------- -__CalcBlksFree: - lda #$00 ; 9473 A9 00 .. - sta r4L ; 9475 85 0A .. - sta r4H ; 9477 85 0B .. - ldy #$10 ; 9479 A0 10 .. -L947B: lda dir2Head,y ; 947B B9 00 89 ... - clc ; 947E 18 . - adc r4L ; 947F 65 0A e. - sta r4L ; 9481 85 0A .. - bcc L9487 ; 9483 90 02 .. - inc r4H ; 9485 E6 0B .. -L9487: tya ; 9487 98 . - clc ; 9488 18 . - adc #$06 ; 9489 69 06 i. - tay ; 948B A8 . - cpy #$FA ; 948C C0 FA .. - beq L9487 ; 948E F0 F7 .. - tay ; 9490 A8 . - bne L947B ; 9491 D0 E8 .. - ldy #$10 ; 9493 A0 10 .. -L9495: lda $9C80,y ; 9495 B9 80 9C ... - clc ; 9498 18 . - adc r4L ; 9499 65 0A e. - sta r4L ; 949B 85 0A .. - bcc L94A1 ; 949D 90 02 .. - inc r4H ; 949F E6 0B .. -L94A1: tya ; 94A1 98 . - clc ; 94A2 18 . - adc #$06 ; 94A3 69 06 i. - tay ; 94A5 A8 . - bne L9495 ; 94A6 D0 ED .. - lda #$0C ; 94A8 A9 0C .. - sta r3H ; 94AA 85 09 .. - lda #$58 ; 94AC A9 58 .X - sta r3L ; 94AE 85 08 .. - rts ; 94B0 60 ` - -; ---------------------------------------------------------------------------- -__SetGEOSDisk: - jsr GetDirHead ; 94B1 20 47 C2 G. - txa ; 94B4 8A . - bne L94EE ; 94B5 D0 37 .7 - lda #$28 ; 94B7 A9 28 .( - sta r3L ; 94B9 85 08 .. - lda #$12 ; 94BB A9 12 .. - sta r3H ; 94BD 85 09 .. - jsr SetNextFree ; 94BF 20 92 C2 .. - txa ; 94C2 8A . - bne L94EE ; 94C3 D0 29 .) - lda r3H ; 94C5 A5 09 .. - sta r1H ; 94C7 85 05 .. - lda r3L ; 94C9 A5 08 .. - sta r1L ; 94CB 85 04 .. - jsr L9354 ; 94CD 20 54 93 T. - txa ; 94D0 8A . - bne L94EE ; 94D1 D0 1B .. - lda r1H ; 94D3 A5 05 .. - sta $82AC ; 94D5 8D AC 82 ... - lda r1L ; 94D8 A5 04 .. - sta $82AB ; 94DA 8D AB 82 ... - ldy #$BC ; 94DD A0 BC .. - ldx #$0F ; 94DF A2 0F .. -L94E1: lda GEOSDiskID,x ; 94E1 BD AB 92 ... - sta curDirHead,y ; 94E4 99 00 82 ... - dey ; 94E7 88 . - dex ; 94E8 CA . - bpl L94E1 ; 94E9 10 F6 .. - jmp PutDirHead ; 94EB 4C 4A C2 LJ. - -; ---------------------------------------------------------------------------- -L94EE: rts ; 94EE 60 ` - -; ---------------------------------------------------------------------------- -__InitForIO: - sei - php ; 94EF 08 . - pla ; 94F0 68 h - sta L9BF0 ; 94F1 8D F0 9B ... - sei ; 94F4 78 x - lda CPU_DATA ; 94F5 A5 01 .. - sta L9BF2 ; 94F7 8D F2 9B ... -.if (!.defined(config128)) || .defined(mega65) - lda #$36 ; 94FA A9 36 .6 - sta CPU_DATA ; 94FC 85 01 .. -.endif - lda grirqen ; 94FE AD 1A D0 ... - sta L9BF1 ; 9501 8D F1 9B ... - lda clkreg ; 9504 AD 30 D0 .0. - sta L9BEF ; 9507 8D EF 9B ... - ldy #$00 ; 950A A0 00 .. - sty clkreg ; 950C 8C 30 D0 .0. - sty grirqen ; 950F 8C 1A D0 ... - lda #$7F ; 9512 A9 7F .. - sta grirq ; 9514 8D 19 D0 ... - sta $DC0D ; 9517 8D 0D DC ... - sta $DD0D ; 951A 8D 0D DD ... -.if .defined(config128) & (!.defined(mega65)) - lda #>D_IRQHandler - sta $0315 - sta $0319 - lda #EnterCommand ; 960B A2 96 .. - lda #HDCommand ; 9677 A2 96 .. - lda #WriteCommand ; 96CD A2 96 .. - lda #ChngDskDev_Command ; 977D A2 97 .. - lda #" ; 979A 55 30 3E U0> -; ---------------------------------------------------------------------------- -ChngDskDev_Number: - .byte $08,$00 ; 979D 08 00 .. -; ---------------------------------------------------------------------------- -L979F: stx $8C ; 979F 86 8C .. - sta $8B ; 97A1 85 8B .. - ldy #$02 ; 97A3 A0 02 .. - bne L97B7 ; 97A5 D0 10 .. -L97A7: stx $8C ; 97A7 86 8C .. - sta $8B ; 97A9 85 8B .. -DUNK4_2:ldy #$04 ; 97AB A0 04 .. - lda r1H ; 97AD A5 05 .. - sta L9BF8 ; 97AF 8D F8 9B ... - lda r1L ; 97B2 A5 04 .. - sta L9BF7 ; 97B4 8D F7 9B ... -L97B7: lda $8C ; 97B7 A5 8C .. - sta L9BF6 ; 97B9 8D F6 9B ... - lda $8B ; 97BC A5 8B .. - sta L9BF5 ; 97BE 8D F5 9B ... - lda #>L9BF5 ; 97C1 A9 9B .. - sta $8C ; 97C3 85 8C .. - lda #. - cpy #$00 ; 98CD C0 00 .. - sta cia2base ; 98CF 8D 00 DD ... - bne L9895 ; 98D2 D0 C1 .. - beq L9880 ; 98D4 F0 AA .. -__ReadBlock: - jsr CheckParams_1 ; 98D6 20 03 91 .. - bcc L9937 ; 98D9 90 5C .\ -L98DB: ldx #$04 ; 98DB A2 04 .. - lda #$CC ; 98DD A9 CC .. - jsr L97A7 ; 98DF 20 A7 97 .. - ldx #$03 ; 98E2 A2 03 .. - lda #$1F ; 98E4 A9 1F .. - jsr L979F ; 98E6 20 9F 97 .. - lda r4H ; 98E9 A5 0B .. - sta $8C ; 98EB 85 8C .. - lda r4L ; 98ED A5 0A .. - sta $8B ; 98EF 85 8B .. - ldy #$00 ; 98F1 A0 00 .. - lda r1L ; 98F3 A5 04 .. - bpl L98F9 ; 98F5 10 02 .. - ldy #$02 ; 98F7 A0 02 .. -L98F9: jsr L984E ; 98F9 20 4E 98 N. - jsr L9973 ; 98FC 20 73 99 s. - beq L990B ; 98FF F0 0A .. - inc L9BFC ; 9901 EE FC 9B ... - cpy L9BFC ; 9904 CC FC 9B ... - beq L990B ; 9907 F0 02 .. - bcs L98DB ; 9909 B0 D0 .. -L990B: lda r1L ; 990B A5 04 .. - cmp #$28 ; 990D C9 28 .( - bne L9936 ; 990F D0 25 .% - lda r1H ; 9911 A5 05 .. - bne L9936 ; 9913 D0 21 .! - ldy #$04 ; 9915 A0 04 .. -L9917: lda (r4L),y ; 9917 B1 0A .. - sta L9BFB ; 9919 8D FB 9B ... - tya ; 991C 98 . - clc ; 991D 18 . - adc #$8C ; 991E 69 8C i. - tay ; 9920 A8 . - lda (r4L),y ; 9921 B1 0A .. - pha ; 9923 48 H - lda L9BFB ; 9924 AD FB 9B ... - sta (r4L),y ; 9927 91 0A .. - tya ; 9929 98 . - sec ; 992A 38 8 - sbc #$8C ; 992B E9 8C .. - tay ; 992D A8 . - pla ; 992E 68 h - sta (r4L),y ; 992F 91 0A .. - iny ; 9931 C8 . - cpy #$1D ; 9932 C0 1D .. - bne L9917 ; 9934 D0 E1 .. -L9936: txa ; 9936 8A . -L9937: ldy #$00 ; 9937 A0 00 .. - rts ; 9939 60 ` - -; ---------------------------------------------------------------------------- -__WriteBlock: - jsr CheckParams_1 ; 993A 20 03 91 .. - bcc L9968 ; 993D 90 29 .) - jsr L990B ; 993F 20 0B 99 .. -L9942: ldx #$04 ; 9942 A2 04 .. - lda #$7C ; 9944 A9 7C .| - jsr L97A7 ; 9946 20 A7 97 .. - lda r4H ; 9949 A5 0B .. - sta $8C ; 994B 85 8C .. - lda r4L ; 994D A5 0A .. - sta $8B ; 994F 85 8B .. - ldy #$00 ; 9951 A0 00 .. - jsr L9892 ; 9953 20 92 98 .. - jsr L9973 ; 9956 20 73 99 s. - beq L9965 ; 9959 F0 0A .. - inc L9BFC ; 995B EE FC 9B ... - cpy L9BFC ; 995E CC FC 9B ... - beq L9965 ; 9961 F0 02 .. - bcs L9942 ; 9963 B0 DD .. -L9965: jsr L990B ; 9965 20 0B 99 .. -L9968: rts ; 9968 60 ` - -; ---------------------------------------------------------------------------- -__VerWriteBlock: - ldx #$00 ; 9969 A2 00 .. - rts ; 996B 60 ` - -; ---------------------------------------------------------------------------- -GetDOSError: - ldx #$03 ; 996C A2 03 .. - lda #$2B ; 996E A9 2B .+ - jsr L979F ; 9970 20 9F 97 .. -L9973: LoadW $8b, L9BFD - jsr L97CC ; 997B 20 CC 97 .. - lda L9BFD ; 997E AD FD 9B ... - pha ; 9981 48 H - tay ; 9982 A8 . - lda L9822,y ; 9983 B9 22 98 .". - tay ; 9986 A8 . - pla ; 9987 68 h - cmp #$02 ; 9988 C9 02 .. - bcc L9991 ; 998A 90 05 .. - clc ; 998C 18 . - adc #$1E ; 998D 69 1E i. - bne L9993 ; 998F D0 02 .. -L9991: lda #$00 ; 9991 A9 00 .. -L9993: tax ; 9993 AA . - rts ; 9994 60 ` - -; ---------------------------------------------------------------------------- -CheckReal1581: - jsr InitForIO ; 9995 20 5C C2 \. - lda #$00 ; 9998 A9 00 .. - sta STATUS ; 999A 85 90 .. - LoadW $8d, L9BFF - lda #$FE ; 99A4 A9 FE .. - sta L9A00+1 ; 99A6 8D 01 9A ... - lda #$A0 ; 99A9 A9 A0 .. - sta L9A00 ; 99AB 8D 00 9A ... - jsr ReadDeviceWord ; 99AE 20 CE 99 .. - txa ; 99B1 8A . - bne L99CA ; 99B2 D0 16 .. - lda L9BFF ; 99B4 AD FF 9B ... - cmp #$43 ; 99B7 C9 43 .C - bne L99C8 ; 99B9 D0 0D .. - lda L9C00 ; 99BB AD 00 9C ... - cmp #$4D ; 99BE C9 4D .M - bne L99C8 ; 99C0 D0 06 .. - ldx #$00 ; 99C2 A2 00 .. - jsr DoneWithIO ; 99C4 20 5F C2 _. - rts ; 99C7 60 ` - -; ---------------------------------------------------------------------------- -L99C8: ldx #$FF ; 99C8 A2 FF .. -L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. - rts ; 99CD 60 ` - -; ---------------------------------------------------------------------------- -ReadDeviceWord: - ldx #>MemReadCommand ; 99CE A2 99 .. - lda #D_IRQHandler - sta $0315 - sta $0319 - lda #EnterCommand ; 960B A2 96 .. - lda #HDCommand ; 9677 A2 96 .. - lda #WriteCommand ; 96CD A2 96 .. - lda #ChngDskDev_Command ; 977D A2 97 .. - lda #" ; 979A 55 30 3E U0> -; ---------------------------------------------------------------------------- -ChngDskDev_Number: - .byte $08,$00 ; 979D 08 00 .. -; ---------------------------------------------------------------------------- -L979F: stx $8C ; 979F 86 8C .. - sta $8B ; 97A1 85 8B .. - ldy #$02 ; 97A3 A0 02 .. - bne L97B7 ; 97A5 D0 10 .. -L97A7: stx $8C ; 97A7 86 8C .. - sta $8B ; 97A9 85 8B .. -DUNK4_2:ldy #$04 ; 97AB A0 04 .. - lda r1H ; 97AD A5 05 .. - sta L9BF8 ; 97AF 8D F8 9B ... - lda r1L ; 97B2 A5 04 .. - sta L9BF7 ; 97B4 8D F7 9B ... -L97B7: lda $8C ; 97B7 A5 8C .. - sta L9BF6 ; 97B9 8D F6 9B ... - lda $8B ; 97BC A5 8B .. - sta L9BF5 ; 97BE 8D F5 9B ... - lda #>L9BF5 ; 97C1 A9 9B .. - sta $8C ; 97C3 85 8C .. - lda #. - cpy #$00 ; 98CD C0 00 .. - sta cia2base ; 98CF 8D 00 DD ... - bne L9895 ; 98D2 D0 C1 .. - beq L9880 ; 98D4 F0 AA .. -__ReadBlock: - jsr CheckParams_1 ; 98D6 20 03 91 .. - bcc L9937 ; 98D9 90 5C .\ -L98DB: ldx #$04 ; 98DB A2 04 .. - lda #$CC ; 98DD A9 CC .. - jsr L97A7 ; 98DF 20 A7 97 .. - ldx #$03 ; 98E2 A2 03 .. - lda #$1F ; 98E4 A9 1F .. - jsr L979F ; 98E6 20 9F 97 .. - lda r4H ; 98E9 A5 0B .. - sta $8C ; 98EB 85 8C .. - lda r4L ; 98ED A5 0A .. - sta $8B ; 98EF 85 8B .. - ldy #$00 ; 98F1 A0 00 .. - lda r1L ; 98F3 A5 04 .. - bpl L98F9 ; 98F5 10 02 .. - ldy #$02 ; 98F7 A0 02 .. -L98F9: jsr L984E ; 98F9 20 4E 98 N. - jsr L9973 ; 98FC 20 73 99 s. - beq L990B ; 98FF F0 0A .. - inc L9BFC ; 9901 EE FC 9B ... - cpy L9BFC ; 9904 CC FC 9B ... - beq L990B ; 9907 F0 02 .. - bcs L98DB ; 9909 B0 D0 .. -L990B: lda r1L ; 990B A5 04 .. - cmp #$28 ; 990D C9 28 .( - bne L9936 ; 990F D0 25 .% - lda r1H ; 9911 A5 05 .. - bne L9936 ; 9913 D0 21 .! - ldy #$04 ; 9915 A0 04 .. -L9917: lda (r4L),y ; 9917 B1 0A .. - sta L9BFB ; 9919 8D FB 9B ... - tya ; 991C 98 . - clc ; 991D 18 . - adc #$8C ; 991E 69 8C i. - tay ; 9920 A8 . - lda (r4L),y ; 9921 B1 0A .. - pha ; 9923 48 H - lda L9BFB ; 9924 AD FB 9B ... - sta (r4L),y ; 9927 91 0A .. - tya ; 9929 98 . - sec ; 992A 38 8 - sbc #$8C ; 992B E9 8C .. - tay ; 992D A8 . - pla ; 992E 68 h - sta (r4L),y ; 992F 91 0A .. - iny ; 9931 C8 . - cpy #$1D ; 9932 C0 1D .. - bne L9917 ; 9934 D0 E1 .. -L9936: txa ; 9936 8A . -L9937: ldy #$00 ; 9937 A0 00 .. - rts ; 9939 60 ` - -; ---------------------------------------------------------------------------- -__WriteBlock: - jsr CheckParams_1 ; 993A 20 03 91 .. - bcc L9968 ; 993D 90 29 .) - jsr L990B ; 993F 20 0B 99 .. -L9942: ldx #$04 ; 9942 A2 04 .. - lda #$7C ; 9944 A9 7C .| - jsr L97A7 ; 9946 20 A7 97 .. - lda r4H ; 9949 A5 0B .. - sta $8C ; 994B 85 8C .. - lda r4L ; 994D A5 0A .. - sta $8B ; 994F 85 8B .. - ldy #$00 ; 9951 A0 00 .. - jsr L9892 ; 9953 20 92 98 .. - jsr L9973 ; 9956 20 73 99 s. - beq L9965 ; 9959 F0 0A .. - inc L9BFC ; 995B EE FC 9B ... - cpy L9BFC ; 995E CC FC 9B ... - beq L9965 ; 9961 F0 02 .. - bcs L9942 ; 9963 B0 DD .. -L9965: jsr L990B ; 9965 20 0B 99 .. -L9968: rts ; 9968 60 ` - -; ---------------------------------------------------------------------------- -__VerWriteBlock: - ldx #$00 ; 9969 A2 00 .. - rts ; 996B 60 ` - -; ---------------------------------------------------------------------------- -GetDOSError: - ldx #$03 ; 996C A2 03 .. - lda #$2B ; 996E A9 2B .+ - jsr L979F ; 9970 20 9F 97 .. -L9973: LoadW $8b, L9BFD - jsr L97CC ; 997B 20 CC 97 .. - lda L9BFD ; 997E AD FD 9B ... - pha ; 9981 48 H - tay ; 9982 A8 . - lda L9822,y ; 9983 B9 22 98 .". - tay ; 9986 A8 . - pla ; 9987 68 h - cmp #$02 ; 9988 C9 02 .. - bcc L9991 ; 998A 90 05 .. - clc ; 998C 18 . - adc #$1E ; 998D 69 1E i. - bne L9993 ; 998F D0 02 .. -L9991: lda #$00 ; 9991 A9 00 .. -L9993: tax ; 9993 AA . - rts ; 9994 60 ` - -; ---------------------------------------------------------------------------- -CheckReal1581: - jsr InitForIO ; 9995 20 5C C2 \. - lda #$00 ; 9998 A9 00 .. - sta STATUS ; 999A 85 90 .. - LoadW $8d, L9BFF - lda #$FE ; 99A4 A9 FE .. - sta L9A00+1 ; 99A6 8D 01 9A ... - lda #$A0 ; 99A9 A9 A0 .. - sta L9A00 ; 99AB 8D 00 9A ... - jsr ReadDeviceWord ; 99AE 20 CE 99 .. - txa ; 99B1 8A . - bne L99CA ; 99B2 D0 16 .. - lda L9BFF ; 99B4 AD FF 9B ... - cmp #$43 ; 99B7 C9 43 .C - bne L99C8 ; 99B9 D0 0D .. - lda L9C00 ; 99BB AD 00 9C ... - cmp #$4D ; 99BE C9 4D .M - bne L99C8 ; 99C0 D0 06 .. - ldx #$00 ; 99C2 A2 00 .. - jsr DoneWithIO ; 99C4 20 5F C2 _. - rts ; 99C7 60 ` - -; ---------------------------------------------------------------------------- -L99C8: ldx #$FF ; 99C8 A2 FF .. -L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. - rts ; 99CD 60 ` - -; ---------------------------------------------------------------------------- -ReadDeviceWord: - ldx #>MemReadCommand ; 99CE A2 99 .. - lda # Date: Wed, 14 Mar 2018 21:37:36 +0100 Subject: [PATCH 018/125] TopDesk english translation added. --- drv/drv1581_21hd.cfg | 11 + drv/drv1581_21hd.s | 1871 ++++++++++++++++++++++++++++ topdesk/DeskInclude/CopyFile.inc | 11 + topdesk/DeskInclude/DiskCopy.inc | 19 + topdesk/DeskInclude/SearchDisk.inc | 5 + topdesk/Include/DeskMain2.inc | 33 + topdesk/Include/SubDir.src.inc | 6 + topdesk/Main/DeskTop.main.s | 43 +- topdesk/Main/DeskTop.sub.s | 5 + topdesk/Main/DeskTop.sub2.s | 14 + topdesk/Main/DeskTop.sub3.s | 6 + topdesk/Main/DeskTop.sub4.s | 39 + topdesk/Main/DeskTop.sub6.s | 19 + topdesk/Main/DeskTop.sub7.s | 31 + topdesk/Main/DeskTop.sub9.s | 4 + topdesk/Main/DeskWindows.akt.inc | 5 + 16 files changed, 2121 insertions(+), 1 deletion(-) create mode 100644 drv/drv1581_21hd.cfg create mode 100644 drv/drv1581_21hd.s diff --git a/drv/drv1581_21hd.cfg b/drv/drv1581_21hd.cfg new file mode 100644 index 00000000..1b765449 --- /dev/null +++ b/drv/drv1581_21hd.cfg @@ -0,0 +1,11 @@ +MEMORY { + DISK_BASE: start = $9000, size = $0c80 file = %O; + + DRIVE0300: start = $0300, size = $0500; +} + +SEGMENTS { + drv1581_21hd: load = DISK_BASE, type = ro; + drv1581_21hd_drivecode: load = DISK_BASE, run = DRIVE0300, type = ro; + drv1581_21hd_b: load = DISK_BASE, type = ro; +} diff --git a/drv/drv1581_21hd.s b/drv/drv1581_21hd.s new file mode 100644 index 00000000..4407d61e --- /dev/null +++ b/drv/drv1581_21hd.s @@ -0,0 +1,1871 @@ +; da65 V2.15 +; Created: 2017-06-30 19:08:50 +; Input file: configure.cvt.record.4 +; Page: 1 + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + +LFF54 := $FF54 +LFF6C := $FF6C +CINT := $FF81 +IOINIT := $FF84 +RAMTAS := $FF87 +RESTOR := $FF8A +VECTOR := $FF8D +SETMSG := $FF90 +SECOND := $FF93 +TKSA := $FF96 +MEMTOP := $FF99 +MEMBOT := $FF9C +SCNKEY := $FF9F +SETTMO := $FFA2 +ACPTR := $FFA5 +CIOUT := $FFA8 +UNTLK := $FFAB +UNLSN := $FFAE +LISTEN := $FFB1 +TALK := $FFB4 +READST := $FFB7 +SETLFS := $FFBA +SETNAM := $FFBD +CLOSE := $FFC3 +CHKIN := $FFC6 +CKOUT := $FFC9 +CLRCH := $FFCC +BASIN := $FFCF +BSOUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +SETTIM := $FFDB +RDTIM := $FFDE +STOP := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +UDTIM := $FFEA +SCREEN := $FFED +IOBASE := $FFF3 + +L04B9 := $04B9 +L032B := $032B +L04D1 := $04D1 +L04B0 := $04B0 +L04E9 := $04E9 +L046E := $046E +L03AD := $03AD +L03ED := $03ED +L03FF := $03FF +L03FD := $03FD +L03FC := $03FC +L03FB := $03FB +L03FE := $03FE +L0368 := $0368 +L0402 := $0402 +L04BE := $04BE +L046A := $046A +L0354 := $0354 +L0362 := $0362 + + + + + + + + + + + + +; ---------------------------------------------------------------------------- + +.segment "drv1581_21hd": absolute + +_InitForIO: + .addr __InitForIO ; 9000 EF 94 .. +_DoneWithIO: + .addr __DoneWithIO ; 9002 92 95 .. +_ExitTurbo: + .addr __ExitTurbo ; 9004 F3 96 .. +_PurgeTurbo: + .addr __PurgeTurbo ; 9006 68 97 h. +_EnterTurbo: + .addr __EnterTurbo ; 9008 E8 95 .. +_ChangeDiskDevice: + .addr __ChangeDiskDevice ; 900A 74 97 t. +_NewDisk: + .addr __NewDisk ; 900C E5 97 .. +_ReadBlock: + .addr __ReadBlock ; 900E D6 98 .. +_WriteBlock: + .addr __WriteBlock ; 9010 3A 99 :. +_VerWriteBlock: + .addr __VerWriteBlock ; 9012 69 99 i. +_OpenDisk: + .addr __OpenDisk ; 9014 16 91 .. +_GetBlock: + .addr __GetBlock ; 9016 8C 90 .. +_PutBlock: + .addr __PutBlock ; 9018 C4 90 .. +_GetDirHead: + .addr __GetDirHead ; 901A 64 90 d. +_PutDirHead: + .addr __PutDirHead ; 901C 9C 90 .. +_GetFreeDirBlk: + .addr __GetFreeDirBlk ; 901E BC 92 .. +_CalcBlksFree: + .addr __CalcBlksFree ; 9020 73 94 s. +_FreeBlock: + .addr __FreeBlock ; 9022 29 94 ). +_SetNextFree: + .addr __SetNextFree ; 9024 64 93 d. +_FindBAMBit: + .addr __FindBAMBit ; 9026 31 94 1. +_NxtBlkAlloc: + .addr __NxtBlkAlloc ; 9028 6A 91 j. +_BlkAlloc: + .addr __BlkAlloc ; 902A 3D 91 =. +_ChkDkGEOS: + .addr __ChkDkGEOS ; 902C 8E 92 .. +_SetGEOSDisk: + .addr __SetGEOSDisk ; 902E B1 94 .. +; ---------------------------------------------------------------------------- +Get1stDirEntry: + jmp _Get1stDirEntry ; 9030 4C 0F 92 L.. + +; ---------------------------------------------------------------------------- +GetNxtDirEntry: + jmp _GetNxtDirEntry ; 9033 4C 1E 92 L.. + +; ---------------------------------------------------------------------------- +GetBorder: + jmp _GetBorder ; 9036 4C 68 92 Lh. + +; ---------------------------------------------------------------------------- +AddDirBlock: + jmp _AddDirBlock ; 9039 4C 1D 93 L.. + +; ---------------------------------------------------------------------------- +ReadBuff: + jmp _ReadBuff ; 903C 4C 84 90 L.. + +; ---------------------------------------------------------------------------- +WriteBuff: + jmp _WriteBuff ; 903F 4C BC 90 L.. + +; ---------------------------------------------------------------------------- + jmp DUNK4_2 ; 9042 4C AB 97 L.. + +; ---------------------------------------------------------------------------- + jmp GetDOSError ; 9045 4C 6C 99 Ll. + +; ---------------------------------------------------------------------------- +AllocateBlock: + jmp _AllocateBlock ; 9048 4C E8 93 L.. + +; ---------------------------------------------------------------------------- +ReadLink: + jmp _ReadLink ; 904B 4C 0E 98 L.. + +; ---------------------------------------------------------------------------- + .byte $03 ; 904E 03 . + .byte "For Noelle & Dylan" ; 904F 46 6F 72 20 4E 6F 65 6C For Noel + ; 9057 6C 65 20 26 20 44 79 6C le & Dyl + ; 905F 61 6E an + .byte $00 ; 9061 00 . +; ---------------------------------------------------------------------------- + bpl __GetDirHead ; 9062 10 00 .. +__GetDirHead: + lda #$FF ; 9064 A9 FF .. + sta L9BFA ; 9066 8D FA 9B ... + jsr EnterTurbo ; 9069 20 14 C2 .. + txa ; 906C 8A . + bne L9083 ; 906D D0 14 .. + jsr InitForIO ; 906F 20 5C C2 \. + jsr SetDirHead_1 ; 9072 20 D4 90 .. + bne L907F ; 9075 D0 08 .. + jsr SetDirHead_2 ; 9077 20 DC 90 .. + bne L907F ; 907A D0 03 .. + jsr SetDirHead_3 ; 907C 20 E4 90 .. +L907F: jsr DoneWithIO ; 907F 20 5F C2 _. + txa ; 9082 8A . +L9083: rts ; 9083 60 ` + +; ---------------------------------------------------------------------------- +_ReadBuff: + lda #$80 ; 9084 A9 80 .. + sta r4H ; 9086 85 0B .. + lda #$00 ; 9088 A9 00 .. + sta r4L ; 908A 85 0A .. +__GetBlock: + jsr EnterTurbo ; 908C 20 14 C2 .. + bne L909A ; 908F D0 09 .. + jsr InitForIO ; 9091 20 5C C2 \. + jsr ReadBlock ; 9094 20 1A C2 .. + jsr DoneWithIO ; 9097 20 5F C2 _. +L909A: txa ; 909A 8A . + rts ; 909B 60 ` + +; ---------------------------------------------------------------------------- +__PutDirHead: + lda #$00 ; 909C A9 00 .. + sta L9BFA ; 909E 8D FA 9B ... + jsr EnterTurbo ; 90A1 20 14 C2 .. + txa ; 90A4 8A . + bne L90BB ; 90A5 D0 14 .. + jsr InitForIO ; 90A7 20 5C C2 \. + jsr SetDirHead_1 ; 90AA 20 D4 90 .. + bne L90B7 ; 90AD D0 08 .. + jsr SetDirHead_2 ; 90AF 20 DC 90 .. + bne L90B7 ; 90B2 D0 03 .. + jsr SetDirHead_3 ; 90B4 20 E4 90 .. +L90B7: jsr DoneWithIO ; 90B7 20 5F C2 _. + txa ; 90BA 8A . +L90BB: rts ; 90BB 60 ` + +; ---------------------------------------------------------------------------- +_WriteBuff: + lda #$80 ; 90BC A9 80 .. + sta r4H ; 90BE 85 0B .. + lda #$00 ; 90C0 A9 00 .. + sta r4L ; 90C2 85 0A .. +__PutBlock: + jsr EnterTurbo ; 90C4 20 14 C2 .. + bne L90D2 ; 90C7 D0 09 .. + jsr InitForIO ; 90C9 20 5C C2 \. + jsr WriteBlock ; 90CC 20 20 C2 . + jsr DoneWithIO ; 90CF 20 5F C2 _. +L90D2: txa ; 90D2 8A . + rts ; 90D3 60 ` + +; ---------------------------------------------------------------------------- +SetDirHead_1: + ldx #$82 ; 90D4 A2 82 .. + ldy #$00 ; 90D6 A0 00 .. + lda #$00 ; 90D8 A9 00 .. + beq L90EA ; 90DA F0 0E .. +SetDirHead_2: + ldx #$89 ; 90DC A2 89 .. + ldy #$00 ; 90DE A0 00 .. + lda #$01 ; 90E0 A9 01 .. + bne L90EA ; 90E2 D0 06 .. +SetDirHead_3: + ldx #$9C ; 90E4 A2 9C .. + ldy #$80 ; 90E6 A0 80 .. + lda #$02 ; 90E8 A9 02 .. +L90EA: stx r4H ; 90EA 86 0B .. + sty r4L ; 90EC 84 0A .. + sta r1H ; 90EE 85 05 .. + lda #$28 ; 90F0 A9 28 .( + sta r1L ; 90F2 85 04 .. + bit L9BFA ; 90F4 2C FA 9B ,.. + bmi L90FE ; 90F7 30 05 0. + jsr __WriteBlock ; 90F9 20 3A 99 :. + txa ; 90FC 8A . + rts ; 90FD 60 ` + +; ---------------------------------------------------------------------------- +L90FE: jsr __ReadBlock ; 90FE 20 D6 98 .. + txa ; 9101 8A . + rts ; 9102 60 ` + +; ---------------------------------------------------------------------------- +CheckParams_1: + lda #$00 ; 9103 A9 00 .. + sta L9BFC ; 9105 8D FC 9B ... + ldx #$02 ; 9108 A2 02 .. + lda r1L ; 910A A5 04 .. + beq L9114 ; 910C F0 06 .. + cmp #$51 ; 910E C9 51 .Q + bcs L9114 ; 9110 B0 02 .. + sec ; 9112 38 8 + rts ; 9113 60 ` + +; ---------------------------------------------------------------------------- +L9114: clc ; 9114 18 . + rts ; 9115 60 ` + +; ---------------------------------------------------------------------------- +__OpenDisk: + jsr NewDisk ; 9116 20 E1 C1 .. + txa ; 9119 8A . + bne L913C ; 911A D0 20 . + jsr GetDirHead ; 911C 20 47 C2 G. + bne L913C ; 911F D0 1B .. + jsr L9286 ; 9121 20 86 92 .. + lda #$82 ; 9124 A9 82 .. + sta r4H ; 9126 85 0B .. + lda #$90 ; 9128 A9 90 .. + sta r4L ; 912A 85 0A .. + ldx #$0C ; 912C A2 0C .. + jsr GetPtrCurDkNm ; 912E 20 98 C2 .. + ldy #$12 ; 9131 A0 12 .. +L9133: lda (r4L),y ; 9133 B1 0A .. + sta (r5L),y ; 9135 91 0C .. + dey ; 9137 88 . + bpl L9133 ; 9138 10 F9 .. + ldx #$00 ; 913A A2 00 .. +L913C: rts ; 913C 60 ` + +; ---------------------------------------------------------------------------- +__BlkAlloc: + pla ; 913D 68 h + sta r3L ; 913E 85 08 .. + pla ; 9140 68 h + sta r3H ; 9141 85 09 .. + lda r3H ; 9143 A5 09 .. + pha ; 9145 48 H + lda r3L ; 9146 A5 08 .. + pha ; 9148 48 H + lda r3L ; 9149 A5 08 .. + sec ; 914B 38 8 + sbc $C1EE ; 914C ED EE C1 ... + sta r3L ; 914F 85 08 .. + lda r3H ; 9151 A5 09 .. + sbc $C1EF ; 9153 ED EF C1 ... + sta r3H ; 9156 85 09 .. + ldy #$27 ; 9158 A0 27 .' + lda r3H ; 915A A5 09 .. + beq L9160 ; 915C F0 02 .. + ldy #$23 ; 915E A0 23 .# +L9160: sty r3L ; 9160 84 08 .. + ldy #$00 ; 9162 A0 00 .. + sty r3H ; 9164 84 09 .. + lda #$02 ; 9166 A9 02 .. + bne L916C ; 9168 D0 02 .. +__NxtBlkAlloc: + lda #$00 ; 916A A9 00 .. +L916C: sta L9C01 ; 916C 8D 01 9C ... + lda r9H ; 916F A5 15 .. + pha ; 9171 48 H + lda r9L ; 9172 A5 14 .. + pha ; 9174 48 H + lda r3H ; 9175 A5 09 .. + pha ; 9177 48 H + lda r3L ; 9178 A5 08 .. + pha ; 917A 48 H + lda #$00 ; 917B A9 00 .. + sta r3H ; 917D 85 09 .. + lda #$FE ; 917F A9 FE .. + sta r3L ; 9181 85 08 .. + ldx #$06 ; 9183 A2 06 .. + ldy #$08 ; 9185 A0 08 .. + .byte $20 ; 9187 20 +L9188: adc #$C1 ; 9188 69 C1 i. + lda r8L ; 918A A5 12 .. + beq L9194 ; 918C F0 06 .. + inc r2L ; 918E E6 06 .. + bne L9194 ; 9190 D0 02 .. + inc r2H ; 9192 E6 07 .. +L9194: jsr L9286 ; 9194 20 86 92 .. + pla ; 9197 68 h + sta r3L ; 9198 85 08 .. + pla ; 919A 68 h + sta r3H ; 919B 85 09 .. + ldx #$03 ; 919D A2 03 .. + lda r2H ; 919F A5 07 .. + cmp r4H ; 91A1 C5 0B .. + bne L91A9 ; 91A3 D0 04 .. + lda r2L ; 91A5 A5 06 .. + cmp r4L ; 91A7 C5 0A .. +L91A9: beq L91AD ; 91A9 F0 02 .. + bcs L9208 ; 91AB B0 5B .[ +L91AD: lda r6H ; 91AD A5 0F .. + sta r4H ; 91AF 85 0B .. + lda r6L ; 91B1 A5 0E .. + sta r4L ; 91B3 85 0A .. + lda r2H ; 91B5 A5 07 .. + sta r5H ; 91B7 85 0D .. + lda r2L ; 91B9 A5 06 .. + sta r5L ; 91BB 85 0C .. +L91BD: jsr SetNextFree ; 91BD 20 92 C2 .. + txa ; 91C0 8A . + bne L9208 ; 91C1 D0 45 .E + ldy #$00 ; 91C3 A0 00 .. + lda r3L ; 91C5 A5 08 .. + sta (r4L),y ; 91C7 91 0A .. + iny ; 91C9 C8 . + lda r3H ; 91CA A5 09 .. + sta (r4L),y ; 91CC 91 0A .. + clc ; 91CE 18 . + lda #$02 ; 91CF A9 02 .. + adc r4L ; 91D1 65 0A e. + sta r4L ; 91D3 85 0A .. + bcc L91D9 ; 91D5 90 02 .. + inc r4H ; 91D7 E6 0B .. +L91D9: lda L9C01 ; 91D9 AD 01 9C ... + beq L91E7 ; 91DC F0 09 .. + dec L9C01 ; 91DE CE 01 9C ... + bne L91E7 ; 91E1 D0 04 .. + lda #$23 ; 91E3 A9 23 .# + sta r3L ; 91E5 85 08 .. +L91E7: lda r5L ; 91E7 A5 0C .. + bne L91ED ; 91E9 D0 02 .. + dec r5H ; 91EB C6 0D .. +L91ED: dec r5L ; 91ED C6 0C .. + lda r5L ; 91EF A5 0C .. + ora r5H ; 91F1 05 0D .. + bne L91BD ; 91F3 D0 C8 .. + ldy #$00 ; 91F5 A0 00 .. + tya ; 91F7 98 . + sta (r4L),y ; 91F8 91 0A .. + iny ; 91FA C8 . + lda r8L ; 91FB A5 12 .. + bne L9201 ; 91FD D0 02 .. + lda #$FE ; 91FF A9 FE .. +L9201: clc ; 9201 18 . + adc #$01 ; 9202 69 01 i. + sta (r4L),y ; 9204 91 0A .. + ldx #$00 ; 9206 A2 00 .. +L9208: pla ; 9208 68 h + sta r9L ; 9209 85 14 .. + pla ; 920B 68 h + sta r9H ; 920C 85 15 .. + rts ; 920E 60 ` + +; ---------------------------------------------------------------------------- +_Get1stDirEntry: + lda #$28 ; 920F A9 28 .( + sta r1L ; 9211 85 04 .. + lda #$03 ; 9213 A9 03 .. + sta r1H ; 9215 85 05 .. + lda #$00 ; 9217 A9 00 .. + sta L9C02 ; 9219 8D 02 9C ... + beq L925A ; 921C F0 3C .< +_GetNxtDirEntry: + ldx #$00 ; 921E A2 00 .. + ldy #$00 ; 9220 A0 00 .. + clc ; 9222 18 . + lda #$20 ; 9223 A9 20 . + adc r5L ; 9225 65 0C e. + sta r5L ; 9227 85 0C .. + bcc L922D ; 9229 90 02 .. + inc r5H ; 922B E6 0D .. +L922D: lda r5H ; 922D A5 0D .. + cmp #$80 ; 922F C9 80 .. + bne L9237 ; 9231 D0 04 .. + lda r5L ; 9233 A5 0C .. + cmp #$FF ; 9235 C9 FF .. +L9237: bcc L9267 ; 9237 90 2E .. + ldy #$FF ; 9239 A0 FF .. + lda $8001 ; 923B AD 01 80 ... + sta r1H ; 923E 85 05 .. + lda diskBlkBuf ; 9240 AD 00 80 ... + sta r1L ; 9243 85 04 .. + bne L925A ; 9245 D0 13 .. + lda L9C02 ; 9247 AD 02 9C ... + bne L9267 ; 924A D0 1B .. + lda #$FF ; 924C A9 FF .. + sta L9C02 ; 924E 8D 02 9C ... + jsr GetBorder ; 9251 20 36 90 6. + txa ; 9254 8A . + bne L9267 ; 9255 D0 10 .. + tya ; 9257 98 . + bne L9267 ; 9258 D0 0D .. +L925A: jsr ReadBuff ; 925A 20 3C 90 <. + ldy #$00 ; 925D A0 00 .. + lda #$80 ; 925F A9 80 .. + sta r5H ; 9261 85 0D .. + lda #$02 ; 9263 A9 02 .. + sta r5L ; 9265 85 0C .. +L9267: rts ; 9267 60 ` + +; ---------------------------------------------------------------------------- +_GetBorder: + jsr GetDirHead ; 9268 20 47 C2 G. + txa ; 926B 8A . + bne L9285 ; 926C D0 17 .. + jsr L9286 ; 926E 20 86 92 .. + bne L9277 ; 9271 D0 04 .. + ldy #$FF ; 9273 A0 FF .. + bne L9283 ; 9275 D0 0C .. +L9277: lda $82AC ; 9277 AD AC 82 ... + sta r1H ; 927A 85 05 .. + lda $82AB ; 927C AD AB 82 ... + sta r1L ; 927F 85 04 .. + ldy #$00 ; 9281 A0 00 .. +L9283: ldx #$00 ; 9283 A2 00 .. +L9285: rts ; 9285 60 ` + +; ---------------------------------------------------------------------------- +L9286: lda #$82 ; 9286 A9 82 .. + sta r5H ; 9288 85 0D .. + lda #$00 ; 928A A9 00 .. + sta r5L ; 928C 85 0C .. +__ChkDkGEOS: + ldy #$AD ; 928E A0 AD .. + ldx #$00 ; 9290 A2 00 .. + stx isGEOS ; 9292 8E 8B 84 ... +L9295: lda (r5L),y ; 9295 B1 0C .. + cmp GEOSDiskID,x ; 9297 DD AB 92 ... + bne L92A7 ; 929A D0 0B .. + iny ; 929C C8 . + inx ; 929D E8 . + cpx #$0B ; 929E E0 0B .. + bne L9295 ; 92A0 D0 F3 .. + lda #$FF ; 92A2 A9 FF .. + sta isGEOS ; 92A4 8D 8B 84 ... +L92A7: lda isGEOS ; 92A7 AD 8B 84 ... + rts ; 92AA 60 ` + +; ---------------------------------------------------------------------------- +GEOSDiskID: + .byte "GEOS format V1.0" ; 92AB 47 45 4F 53 20 66 6F 72 GEOS for + ; 92B3 6D 61 74 20 56 31 2E 30 mat V1.0 + .byte $00 ; 92BB 00 . +; ---------------------------------------------------------------------------- +__GetFreeDirBlk: + php ; 92BC 08 . + sei ; 92BD 78 x + lda r6L ; 92BE A5 0E .. + pha ; 92C0 48 H + lda r2H ; 92C1 A5 07 .. + pha ; 92C3 48 H + lda r2L ; 92C4 A5 06 .. + pha ; 92C6 48 H + ldx r10L ; 92C7 A6 16 .. + inx ; 92C9 E8 . + stx r6L ; 92CA 86 0E .. + lda #$28 ; 92CC A9 28 .( + sta r1L ; 92CE 85 04 .. + lda #$03 ; 92D0 A9 03 .. + sta r1H ; 92D2 85 05 .. +L92D4: jsr ReadBuff ; 92D4 20 3C 90 <. +L92D7: txa ; 92D7 8A . + bne L9312 ; 92D8 D0 38 .8 + dec r6L ; 92DA C6 0E .. + beq L92F3 ; 92DC F0 15 .. +L92DE: lda diskBlkBuf ; 92DE AD 00 80 ... + bne L92E9 ; 92E1 D0 06 .. + jsr AddDirBlock ; 92E3 20 39 90 9. + clv ; 92E6 B8 . + bvc L92D7 ; 92E7 50 EE P. +L92E9: sta r1L ; 92E9 85 04 .. + lda $8001 ; 92EB AD 01 80 ... + sta r1H ; 92EE 85 05 .. + clv ; 92F0 B8 . + bvc L92D4 ; 92F1 50 E1 P. +L92F3: ldy #$02 ; 92F3 A0 02 .. + ldx #$00 ; 92F5 A2 00 .. +L92F7: lda diskBlkBuf,y ; 92F7 B9 00 80 ... + beq L9312 ; 92FA F0 16 .. + tya ; 92FC 98 . + clc ; 92FD 18 . + adc #$20 ; 92FE 69 20 i + tay ; 9300 A8 . + bcc L92F7 ; 9301 90 F4 .. + lda #$01 ; 9303 A9 01 .. + sta r6L ; 9305 85 0E .. + ldx #$04 ; 9307 A2 04 .. + ldy r10L ; 9309 A4 16 .. + iny ; 930B C8 . + sty r10L ; 930C 84 16 .. + cpy #$12 ; 930E C0 12 .. + bcc L92DE ; 9310 90 CC .. +L9312: pla ; 9312 68 h + sta r2L ; 9313 85 06 .. + pla ; 9315 68 h + sta r2H ; 9316 85 07 .. + pla ; 9318 68 h + sta r6L ; 9319 85 0E .. + plp ; 931B 28 ( + rts ; 931C 60 ` + +; ---------------------------------------------------------------------------- +_AddDirBlock: + lda r6H ; 931D A5 0F .. + pha ; 931F 48 H + lda r6L ; 9320 A5 0E .. + pha ; 9322 48 H + ldx #$04 ; 9323 A2 04 .. + lda $89FA ; 9325 AD FA 89 ... + beq ClearAndWrite ; 9328 F0 22 ." + lda r1H ; 932A A5 05 .. + sta r3H ; 932C 85 09 .. + lda r1L ; 932E A5 04 .. + sta r3L ; 9330 85 08 .. + jsr SetNextFree ; 9332 20 92 C2 .. + pla ; 9335 68 h + sta r6L ; 9336 85 0E .. + pla ; 9338 68 h + sta r6H ; 9339 85 0F .. + lda r3H ; 933B A5 09 .. + sta $8001 ; 933D 8D 01 80 ... + lda r3L ; 9340 A5 08 .. + sta diskBlkBuf ; 9342 8D 00 80 ... + jsr WriteBuff ; 9345 20 3F 90 ?. + txa ; 9348 8A . + beq ClearAndWrite ; 9349 F0 01 .. + rts ; 934B 60 ` + +; ---------------------------------------------------------------------------- +ClearAndWrite: + lda r3H ; 934C A5 09 .. + sta r1H ; 934E 85 05 .. + lda r3L ; 9350 A5 08 .. + sta r1L ; 9352 85 04 .. +L9354: lda #$00 ; 9354 A9 00 .. + tay ; 9356 A8 . +L9357: sta diskBlkBuf,y ; 9357 99 00 80 ... + iny ; 935A C8 . + bne L9357 ; 935B D0 FA .. + dey ; 935D 88 . + sty $8001 ; 935E 8C 01 80 ... + jmp WriteBuff ; 9361 4C 3F 90 L?. + +; ---------------------------------------------------------------------------- +__SetNextFree: + jsr L936E ; 9364 20 6E 93 n. + bne L936A ; 9367 D0 01 .. + rts ; 9369 60 ` + +; ---------------------------------------------------------------------------- +L936A: lda #$27 ; 936A A9 27 .' + sta r3L ; 936C 85 08 .. +L936E: ldy r3H ; 936E A4 09 .. + iny ; 9370 C8 . + sty r6H ; 9371 84 0F .. + lda r3L ; 9373 A5 08 .. + sta r6L ; 9375 85 0E .. + cmp #$28 ; 9377 C9 28 .( + beq L9381 ; 9379 F0 06 .. +L937B: lda r6L ; 937B A5 0E .. + cmp #$28 ; 937D C9 28 .( + beq L93B2 ; 937F F0 31 .1 +L9381: cmp #$29 ; 9381 C9 29 .) + bcc L9388 ; 9383 90 03 .. + sec ; 9385 38 8 + sbc #$28 ; 9386 E9 28 .( +L9388: sec ; 9388 38 8 + sbc #$01 ; 9389 E9 01 .. + asl a ; 938B 0A . + sta r7L ; 938C 85 10 .. + asl a ; 938E 0A . + clc ; 938F 18 . + adc r7L ; 9390 65 10 e. + tax ; 9392 AA . + lda r6L ; 9393 A5 0E .. + cmp #$29 ; 9395 C9 29 .) + bcc L939F ; 9397 90 06 .. + lda $9C90,x ; 9399 BD 90 9C ... + clv ; 939C B8 . + bvc L93A2 ; 939D 50 03 P. +L939F: lda $8910,x ; 939F BD 10 89 ... +L93A2: beq L93B2 ; 93A2 F0 0E .. + ldy #$28 ; 93A4 A0 28 .( + sty r7L ; 93A6 84 10 .. +L93A8: jsr SNxtFreeHelp ; 93A8 20 DA 93 .. + beq L93CC ; 93AB F0 1F .. + inc r6H ; 93AD E6 0F .. + dey ; 93AF 88 . + bne L93A8 ; 93B0 D0 F6 .. +L93B2: ldy r6L ; 93B2 A4 0E .. + cpy #$29 ; 93B4 C0 29 .) + bcs L93BF ; 93B6 B0 07 .. + dey ; 93B8 88 . + bne L93C4 ; 93B9 D0 09 .. + ldy #$29 ; 93BB A0 29 .) + bne L93C4 ; 93BD D0 05 .. +L93BF: iny ; 93BF C8 . + cpy #$51 ; 93C0 C0 51 .Q + bcs L93D7 ; 93C2 B0 13 .. +L93C4: sty r6L ; 93C4 84 0E .. + ldy #$00 ; 93C6 A0 00 .. + sty r6H ; 93C8 84 0F .. + beq L937B ; 93CA F0 AF .. +L93CC: lda r6H ; 93CC A5 0F .. + sta r3H ; 93CE 85 09 .. + lda r6L ; 93D0 A5 0E .. + sta r3L ; 93D2 85 08 .. + ldx #$00 ; 93D4 A2 00 .. + rts ; 93D6 60 ` + +; ---------------------------------------------------------------------------- +L93D7: ldx #$03 ; 93D7 A2 03 .. + rts ; 93D9 60 ` + +; ---------------------------------------------------------------------------- +SNxtFreeHelp: + lda r6H ; 93DA A5 0F .. +L93DC: cmp r7L ; 93DC C5 10 .. + bcc L93E6 ; 93DE 90 06 .. + sec ; 93E0 38 8 + sbc r7L ; 93E1 E5 10 .. + clv ; 93E3 B8 . + bvc L93DC ; 93E4 50 F6 P. +L93E6: sta r6H ; 93E6 85 0F .. +_AllocateBlock: + jsr FindBAMBit ; 93E8 20 AD C2 .. + bne L93F0 ; 93EB D0 03 .. + ldx #$06 ; 93ED A2 06 .. + rts ; 93EF 60 ` + +; ---------------------------------------------------------------------------- +L93F0: php ; 93F0 08 . + lda r6L ; 93F1 A5 0E .. + cmp #$29 ; 93F3 C9 29 .) + bcc L9410 ; 93F5 90 19 .. + lda r8H ; 93F7 A5 13 .. + eor $9C90,x ; 93F9 5D 90 9C ].. + sta $9C90,x ; 93FC 9D 90 9C ... + ldx r7H ; 93FF A6 11 .. + plp ; 9401 28 ( + beq L940A ; 9402 F0 06 .. + dec $9C90,x ; 9404 DE 90 9C ... + ldx #$00 ; 9407 A2 00 .. + rts ; 9409 60 ` + +; ---------------------------------------------------------------------------- +L940A: inc $9C90,x ; 940A FE 90 9C ... + ldx #$00 ; 940D A2 00 .. + rts ; 940F 60 ` + +; ---------------------------------------------------------------------------- +L9410: lda r8H ; 9410 A5 13 .. + eor $8910,x ; 9412 5D 10 89 ].. + sta $8910,x ; 9415 9D 10 89 ... + ldx r7H ; 9418 A6 11 .. + plp ; 941A 28 ( + beq L9423 ; 941B F0 06 .. + dec $8910,x ; 941D DE 10 89 ... + ldx #$00 ; 9420 A2 00 .. + rts ; 9422 60 ` + +; ---------------------------------------------------------------------------- +L9423: inc $8910,x ; 9423 FE 10 89 ... + ldx #$00 ; 9426 A2 00 .. + rts ; 9428 60 ` + +; ---------------------------------------------------------------------------- +__FreeBlock: + jsr FindBAMBit ; 9429 20 AD C2 .. + beq L93F0 ; 942C F0 C2 .. + ldx #$06 ; 942E A2 06 .. + rts ; 9430 60 ` + +; ---------------------------------------------------------------------------- +__FindBAMBit: + lda r6H ; 9431 A5 0F .. + and #$07 ; 9433 29 07 ). + tax ; 9435 AA . + lda FBBBitTab,x ; 9436 BD 6B 94 .k. + sta r8H ; 9439 85 13 .. + lda r6L ; 943B A5 0E .. + cmp #$29 ; 943D C9 29 .) + bcc L9444 ; 943F 90 03 .. + sec ; 9441 38 8 + sbc #$28 ; 9442 E9 28 .( +L9444: sec ; 9444 38 8 + sbc #$01 ; 9445 E9 01 .. + asl a ; 9447 0A . + sta r7H ; 9448 85 11 .. + asl a ; 944A 0A . + clc ; 944B 18 . + adc r7H ; 944C 65 11 e. + sta r7H ; 944E 85 11 .. + lda r6H ; 9450 A5 0F .. + lsr a ; 9452 4A J + lsr a ; 9453 4A J + lsr a ; 9454 4A J + sec ; 9455 38 8 + adc r7H ; 9456 65 11 e. + tax ; 9458 AA . + lda r6L ; 9459 A5 0E .. + cmp #$29 ; 945B C9 29 .) + bcc L9465 ; 945D 90 06 .. + lda $9C90,x ; 945F BD 90 9C ... + and r8H ; 9462 25 13 %. + rts ; 9464 60 ` + +; ---------------------------------------------------------------------------- +L9465: lda $8910,x ; 9465 BD 10 89 ... + and r8H ; 9468 25 13 %. + rts ; 946A 60 ` + +; ---------------------------------------------------------------------------- +FBBBitTab: + .byte $01,$02,$04,$08,$10,$20,$40,$80 ; 946B 01 02 04 08 10 20 40 80 ..... @. +; ---------------------------------------------------------------------------- +__CalcBlksFree: + lda #$00 ; 9473 A9 00 .. + sta r4L ; 9475 85 0A .. + sta r4H ; 9477 85 0B .. + ldy #$10 ; 9479 A0 10 .. +L947B: lda dir2Head,y ; 947B B9 00 89 ... + clc ; 947E 18 . + adc r4L ; 947F 65 0A e. + sta r4L ; 9481 85 0A .. + bcc L9487 ; 9483 90 02 .. + inc r4H ; 9485 E6 0B .. +L9487: tya ; 9487 98 . + clc ; 9488 18 . + adc #$06 ; 9489 69 06 i. + tay ; 948B A8 . + cpy #$FA ; 948C C0 FA .. + beq L9487 ; 948E F0 F7 .. + tay ; 9490 A8 . + bne L947B ; 9491 D0 E8 .. + ldy #$10 ; 9493 A0 10 .. +L9495: lda $9C80,y ; 9495 B9 80 9C ... + clc ; 9498 18 . + adc r4L ; 9499 65 0A e. + sta r4L ; 949B 85 0A .. + bcc L94A1 ; 949D 90 02 .. + inc r4H ; 949F E6 0B .. +L94A1: tya ; 94A1 98 . + clc ; 94A2 18 . + adc #$06 ; 94A3 69 06 i. + tay ; 94A5 A8 . + bne L9495 ; 94A6 D0 ED .. + lda #$0C ; 94A8 A9 0C .. + sta r3H ; 94AA 85 09 .. + lda #$58 ; 94AC A9 58 .X + sta r3L ; 94AE 85 08 .. + rts ; 94B0 60 ` + +; ---------------------------------------------------------------------------- +__SetGEOSDisk: + jsr GetDirHead ; 94B1 20 47 C2 G. + txa ; 94B4 8A . + bne L94EE ; 94B5 D0 37 .7 + lda #$28 ; 94B7 A9 28 .( + sta r3L ; 94B9 85 08 .. + lda #$12 ; 94BB A9 12 .. + sta r3H ; 94BD 85 09 .. + jsr SetNextFree ; 94BF 20 92 C2 .. + txa ; 94C2 8A . + bne L94EE ; 94C3 D0 29 .) + lda r3H ; 94C5 A5 09 .. + sta r1H ; 94C7 85 05 .. + lda r3L ; 94C9 A5 08 .. + sta r1L ; 94CB 85 04 .. + jsr L9354 ; 94CD 20 54 93 T. + txa ; 94D0 8A . + bne L94EE ; 94D1 D0 1B .. + lda r1H ; 94D3 A5 05 .. + sta $82AC ; 94D5 8D AC 82 ... + lda r1L ; 94D8 A5 04 .. + sta $82AB ; 94DA 8D AB 82 ... + ldy #$BC ; 94DD A0 BC .. + ldx #$0F ; 94DF A2 0F .. +L94E1: lda GEOSDiskID,x ; 94E1 BD AB 92 ... + sta curDirHead,y ; 94E4 99 00 82 ... + dey ; 94E7 88 . + dex ; 94E8 CA . + bpl L94E1 ; 94E9 10 F6 .. + jmp PutDirHead ; 94EB 4C 4A C2 LJ. + +; ---------------------------------------------------------------------------- +L94EE: rts ; 94EE 60 ` + +; ---------------------------------------------------------------------------- +__InitForIO: + sei + php ; 94EF 08 . + pla ; 94F0 68 h + sta L9BF0 ; 94F1 8D F0 9B ... + sei ; 94F4 78 x + lda CPU_DATA ; 94F5 A5 01 .. + sta L9BF2 ; 94F7 8D F2 9B ... +.if (!.defined(config128)) || .defined(mega65) + lda #$36 ; 94FA A9 36 .6 + sta CPU_DATA ; 94FC 85 01 .. +.endif + lda grirqen ; 94FE AD 1A D0 ... + sta L9BF1 ; 9501 8D F1 9B ... + lda clkreg ; 9504 AD 30 D0 .0. + sta L9BEF ; 9507 8D EF 9B ... + ldy #$00 ; 950A A0 00 .. + sty clkreg ; 950C 8C 30 D0 .0. + sty grirqen ; 950F 8C 1A D0 ... + lda #$7F ; 9512 A9 7F .. + sta grirq ; 9514 8D 19 D0 ... + sta $DC0D ; 9517 8D 0D DC ... + sta $DD0D ; 951A 8D 0D DD ... +.if .defined(config128) & (!.defined(mega65)) + lda #>D_IRQHandler + sta $0315 + sta $0319 + lda #EnterCommand ; 960B A2 96 .. + lda #HDCommand ; 9677 A2 96 .. + lda #WriteCommand ; 96CD A2 96 .. + lda #ChngDskDev_Command ; 977D A2 97 .. + lda #" ; 979A 55 30 3E U0> +; ---------------------------------------------------------------------------- +ChngDskDev_Number: + .byte $08,$00 ; 979D 08 00 .. +; ---------------------------------------------------------------------------- +L979F: stx $8C ; 979F 86 8C .. + sta $8B ; 97A1 85 8B .. + ldy #$02 ; 97A3 A0 02 .. + bne L97B7 ; 97A5 D0 10 .. +L97A7: stx $8C ; 97A7 86 8C .. + sta $8B ; 97A9 85 8B .. +DUNK4_2:ldy #$04 ; 97AB A0 04 .. + lda r1H ; 97AD A5 05 .. + sta L9BF8 ; 97AF 8D F8 9B ... + lda r1L ; 97B2 A5 04 .. + sta L9BF7 ; 97B4 8D F7 9B ... +L97B7: lda $8C ; 97B7 A5 8C .. + sta L9BF6 ; 97B9 8D F6 9B ... + lda $8B ; 97BC A5 8B .. + sta L9BF5 ; 97BE 8D F5 9B ... + lda #>L9BF5 ; 97C1 A9 9B .. + sta $8C ; 97C3 85 8C .. + lda #. + cpy #$00 ; 98CD C0 00 .. + sta cia2base ; 98CF 8D 00 DD ... + bne L9895 ; 98D2 D0 C1 .. + beq L9880 ; 98D4 F0 AA .. +__ReadBlock: + jsr CheckParams_1 ; 98D6 20 03 91 .. + bcc L9937 ; 98D9 90 5C .\ +L98DB: ldx #$04 ; 98DB A2 04 .. + lda #$CC ; 98DD A9 CC .. + jsr L97A7 ; 98DF 20 A7 97 .. + ldx #$03 ; 98E2 A2 03 .. + lda #$1F ; 98E4 A9 1F .. + jsr L979F ; 98E6 20 9F 97 .. + lda r4H ; 98E9 A5 0B .. + sta $8C ; 98EB 85 8C .. + lda r4L ; 98ED A5 0A .. + sta $8B ; 98EF 85 8B .. + ldy #$00 ; 98F1 A0 00 .. + lda r1L ; 98F3 A5 04 .. + bpl L98F9 ; 98F5 10 02 .. + ldy #$02 ; 98F7 A0 02 .. +L98F9: jsr L984E ; 98F9 20 4E 98 N. + jsr L9973 ; 98FC 20 73 99 s. + beq L990B ; 98FF F0 0A .. + inc L9BFC ; 9901 EE FC 9B ... + cpy L9BFC ; 9904 CC FC 9B ... + beq L990B ; 9907 F0 02 .. + bcs L98DB ; 9909 B0 D0 .. +L990B: lda r1L ; 990B A5 04 .. + cmp #$28 ; 990D C9 28 .( + bne L9936 ; 990F D0 25 .% + lda r1H ; 9911 A5 05 .. + bne L9936 ; 9913 D0 21 .! + ldy #$04 ; 9915 A0 04 .. +L9917: lda (r4L),y ; 9917 B1 0A .. + sta L9BFB ; 9919 8D FB 9B ... + tya ; 991C 98 . + clc ; 991D 18 . + adc #$8C ; 991E 69 8C i. + tay ; 9920 A8 . + lda (r4L),y ; 9921 B1 0A .. + pha ; 9923 48 H + lda L9BFB ; 9924 AD FB 9B ... + sta (r4L),y ; 9927 91 0A .. + tya ; 9929 98 . + sec ; 992A 38 8 + sbc #$8C ; 992B E9 8C .. + tay ; 992D A8 . + pla ; 992E 68 h + sta (r4L),y ; 992F 91 0A .. + iny ; 9931 C8 . + cpy #$1D ; 9932 C0 1D .. + bne L9917 ; 9934 D0 E1 .. +L9936: txa ; 9936 8A . +L9937: ldy #$00 ; 9937 A0 00 .. + rts ; 9939 60 ` + +; ---------------------------------------------------------------------------- +__WriteBlock: + jsr CheckParams_1 ; 993A 20 03 91 .. + bcc L9968 ; 993D 90 29 .) + jsr L990B ; 993F 20 0B 99 .. +L9942: ldx #$04 ; 9942 A2 04 .. + lda #$7C ; 9944 A9 7C .| + jsr L97A7 ; 9946 20 A7 97 .. + lda r4H ; 9949 A5 0B .. + sta $8C ; 994B 85 8C .. + lda r4L ; 994D A5 0A .. + sta $8B ; 994F 85 8B .. + ldy #$00 ; 9951 A0 00 .. + jsr L9892 ; 9953 20 92 98 .. + jsr L9973 ; 9956 20 73 99 s. + beq L9965 ; 9959 F0 0A .. + inc L9BFC ; 995B EE FC 9B ... + cpy L9BFC ; 995E CC FC 9B ... + beq L9965 ; 9961 F0 02 .. + bcs L9942 ; 9963 B0 DD .. +L9965: jsr L990B ; 9965 20 0B 99 .. +L9968: rts ; 9968 60 ` + +; ---------------------------------------------------------------------------- +__VerWriteBlock: + ldx #$00 ; 9969 A2 00 .. + rts ; 996B 60 ` + +; ---------------------------------------------------------------------------- +GetDOSError: + ldx #$03 ; 996C A2 03 .. + lda #$2B ; 996E A9 2B .+ + jsr L979F ; 9970 20 9F 97 .. +L9973: LoadW $8b, L9BFD + jsr L97CC ; 997B 20 CC 97 .. + lda L9BFD ; 997E AD FD 9B ... + pha ; 9981 48 H + tay ; 9982 A8 . + lda L9822,y ; 9983 B9 22 98 .". + tay ; 9986 A8 . + pla ; 9987 68 h + cmp #$02 ; 9988 C9 02 .. + bcc L9991 ; 998A 90 05 .. + clc ; 998C 18 . + adc #$1E ; 998D 69 1E i. + bne L9993 ; 998F D0 02 .. +L9991: lda #$00 ; 9991 A9 00 .. +L9993: tax ; 9993 AA . + rts ; 9994 60 ` + +; ---------------------------------------------------------------------------- +CheckReal1581: + jsr InitForIO ; 9995 20 5C C2 \. + lda #$00 ; 9998 A9 00 .. + sta STATUS ; 999A 85 90 .. + LoadW $8d, L9BFF + lda #$FE ; 99A4 A9 FE .. + sta L9A00+1 ; 99A6 8D 01 9A ... + lda #$A0 ; 99A9 A9 A0 .. + sta L9A00 ; 99AB 8D 00 9A ... + jsr ReadDeviceWord ; 99AE 20 CE 99 .. + txa ; 99B1 8A . + bne L99CA ; 99B2 D0 16 .. + lda L9BFF ; 99B4 AD FF 9B ... + cmp #$43 ; 99B7 C9 43 .C + bne L99C8 ; 99B9 D0 0D .. + lda L9C00 ; 99BB AD 00 9C ... + cmp #$4D ; 99BE C9 4D .M + bne L99C8 ; 99C0 D0 06 .. + ldx #$00 ; 99C2 A2 00 .. + jsr DoneWithIO ; 99C4 20 5F C2 _. + rts ; 99C7 60 ` + +; ---------------------------------------------------------------------------- +L99C8: ldx #$FF ; 99C8 A2 FF .. +L99CA: jsr DoneWithIO ; 99CA 20 5F C2 _. + rts ; 99CD 60 ` + +; ---------------------------------------------------------------------------- +ReadDeviceWord: + ldx #>MemReadCommand ; 99CE A2 99 .. + lda #(ModEnde+$100) diff --git a/topdesk/Main/DeskTop.sub3.s b/topdesk/Main/DeskTop.sub3.s index 3d06b0ef..1e7dd050 100644 --- a/topdesk/Main/DeskTop.sub3.s +++ b/topdesk/Main/DeskTop.sub3.s @@ -277,9 +277,15 @@ Ordnen: ; alle selektierten Files nach vorne ins Inhaltsverzeichnis ordnen .byte $0b,$10,$30 .word @t3 .byte OK,17,72,NULL +.ifdef lang_de @t1: .byte "Diese Operation darf nicht auf",0 @t2: .byte "System- oder Hauptdisketten",0 @t3: .byte "angewendet werden.",0 +.else +@t1: .byte "This function can not be",0 +@t2: .byte "implemented on a System-",0 +@t3: .byte "or Bootdisk.",0 +.endif GetTime: LoadB ModDepth,1 jsr StopClock jsr MouseOff diff --git a/topdesk/Main/DeskTop.sub4.s b/topdesk/Main/DeskTop.sub4.s index f8a2ee1d..eb049b16 100644 --- a/topdesk/Main/DeskTop.sub4.s +++ b/topdesk/Main/DeskTop.sub4.s @@ -177,8 +177,13 @@ DispThisInfo: ; File-Info des Files Name darstellen LoadW___ r4,fileHeader jmp PutBlock @err2: rts +.ifdef lang_de @ta: .byte "sequentiell",0 @tb: .byte "VLIR" +.else +@ta: .byte "sequential",0 +@tb: .byte "VLIR" +.endif @tn: .byte 0 @db: .byte $01 .byte FIB_OBEN,FIB_UNTEN @@ -210,6 +215,7 @@ DispThisInfo: ; File-Info des Files Name darstellen .word CloseIcon .byte NULL @boldtext: .byte BOLDON,0 +.ifdef lang_de @t1: .byte PLAINTEXT,"Klasse:",0 @t2: .byte "FileTyp:",0 @t3: .byte "Autor:",0 @@ -217,6 +223,15 @@ DispThisInfo: ; File-Info des Files Name darstellen @t5: .byte "Gr|~e: ",0 @t6: .byte "Schreibschutz",BOLDON,0 @t7: .byte "Struktur:",0 +.else +@t1: .byte PLAINTEXT,"Class:",0 +@t2: .byte "Type:",0 +@t3: .byte "Author:",0 +@t4: .byte "Date:",0 +@t5: .byte "Size: ",0 +@t6: .byte "Write protect",BOLDON,0 +@t7: .byte "Structure:",0 +.endif @PutSize: MoveW_ $8400+28,r0 LoadW___ r11,FIB_LINKS+55 LoadB r1H,FIB_OBEN+80 @@ -244,8 +259,13 @@ DispThisInfo: ; File-Info des Files Name darstellen jsr PutDecimal LoadW___ r0,@Blocks jmp PutString +.ifdef lang_de @Blocks: .byte " Bl|cke",0 @KBytes: .byte " KByte(s)",0 +.else +@Blocks: .byte " blocks",0 +@KBytes: .byte " KByte(s)",0 +.endif @PutDate: LoadW___ r11,FIB_LINKS+55 LoadB r1H,FIB_OBEN+70 ldy #0 @@ -316,6 +336,7 @@ AutTab: .byte 0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1 .ifndef topdesk128 TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf +.ifdef lang_de @t0: .byte "Nicht-GEOS",0 @t1: .byte "BASIC",0 @t2: .byte "Assembler",0 @@ -332,6 +353,24 @@ TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf @td: .byte "Tempor{r",0 @te: .byte "selbstausf}hrend",0 @tf: .byte "Eingabetreiber (128)",0 +.else +@t0: .byte "Non-GEOS",0 +@t1: .byte "BASIC",0 +@t2: .byte "Assembler",0 +@t3: .byte "Data",0 +@t4: .byte "System file",0 +@t5: .byte "Desk Accessory",0 +@t6: .byte "Application",0 +@t7: .byte "Document",0 +@t8: .byte "Font file",0 +@t9: .byte "Printer driver",0 +@ta: .byte "Input driver (64)",0 +@tb: .byte "Directory",0 +@tc: .byte "Boot file",0 +@td: .byte "temporary",0 +@te: .byte "auto exec",0 +@tf: .byte "Input driver (128)",0 +.endif .endif CloseMap: diff --git a/topdesk/Main/DeskTop.sub6.s b/topdesk/Main/DeskTop.sub6.s index 7fffae2a..1a782cd7 100644 --- a/topdesk/Main/DeskTop.sub6.s +++ b/topdesk/Main/DeskTop.sub6.s @@ -322,6 +322,7 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow jmp @num .ifndef topdesk128 TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf +.ifdef lang_de @t0: .byte "Nicht-GEOS",0 @t1: .byte "BASIC",0 @t2: .byte "Assembler",0 @@ -338,6 +339,24 @@ TypTab: .word @t0,@t1,@t2,@t3,@t4,@t5,@t6,@t7,@t8,@t9,@ta,@tb,@tc,@td,@te,@tf @td: .byte "Tempor{r",0 @te: .byte "selbstausf}hrend",0 @tf: .byte "Eingabetreiber (128)",0 +.else +@t0: .byte "Non-GEOS",0 +@t1: .byte "BASIC",0 +@t2: .byte "Assembler",0 +@t3: .byte "Data",0 +@t4: .byte "System file",0 +@t5: .byte "Desk Accessory",0 +@t6: .byte "Application",0 +@t7: .byte "Document",0 +@t8: .byte "Font file",0 +@t9: .byte "Printer driver",0 +@ta: .byte "Input driver (64)",0 +@tb: .byte "Directory",0 +@tc: .byte "Boot file",0 +@td: .byte "temporary",0 +@te: .byte "auto exec",0 +@tf: .byte "Input driver (128)",0 +.endif .endif __MyCheckFiles: jsr MyDCFilesSub __CheckFiles: ; Auswertung eines Mausklicks innerhalb des Textfenstern im Bezug diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 8a4150d6..2f6fefad 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -191,10 +191,17 @@ InstallDriver: lda firstBoot .byte OK,1,76 .byte CANCEL,16,76 .byte NULL +.ifdef lang_de @PrntZeile1: .byte BOLDON,"Neuen ",0 @PrntZeile1_1: .byte "Druckertreiber",0 @PrntZeile1_2: .byte "Eingabetreiber",0 @PrntZeile2: .byte "installieren?",0 +.else +@PrntZeile1: .byte BOLDON,"Install new ",0 +@PrntZeile1_1: .byte "Printer driver?",0 +@PrntZeile1_2: .byte "Input driver?",0 +@PrntZeile2: .byte " ",0 +.endif DA1: MoveW_ r15,r6 lda #$00 sta r0L @@ -296,9 +303,15 @@ StartUp: lda RamTopFlag .byte $0b,$10,$30 .word @t3 .byte OK,14,72,NULL +.ifdef lang_de @t1: .byte BOLDON,"Bitte neu starten. Gleiche",0 @t2: .byte "Systemdiskette verwenden wie",0 @t3: .byte "bei Installation von TopDesk.",0 +.else +@t1: .byte BOLDON,"Please start again. Use",0 +@t2: .byte "the same Bootdisk as",0 +@t3: .byte "with TopDesk installation.",0 +.endif @allesok: LoadB backPattern,2 LoadW___ keyVector,KeyHandler jsr SetNumDrives @@ -479,10 +492,17 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher .byte $12,11,72 .word @icon4 .byte NULL +.ifdef lang_de @t1: .byte "Diskette zum Formatieren",0 @t2: .byte "in Laufwerk " @dr: .byte ". einlegen ",0 @t3: .byte "und Name eingeben:",0 +.else +@t1: .byte "Insert disk to be formatted",0 +@t2: .byte "in drive " +@dr: .byte ". einlegen ",0 +@t3: .byte "and enter name:",0 +.endif @icontab: .word @icon1,@icon2,@icon3,@icon4 @icon1: .word IconA,0 .byte ICON_X,ICON_Y @@ -519,9 +539,15 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher .byte YES,2,72 .byte NO,9,72 .byte NULL +.ifdef lang_de @2t1: .byte BOLDON,"Soll die Diskette",0 @2t2: .byte "doppelseitig formatiert ",0 @2t3: .byte "werden?",PLAINTEXT,0 +.else +@2t1: .byte BOLDON,"Format the disk",0 +@2t2: .byte "on both sides? ",0 +@2t3: .byte PLAINTEXT,0 +.endif IconA: .incbin "topdesk/IconA.map" IconB: @@ -640,5 +666,10 @@ Relabel: .byte 16,72 .byte NULL +.ifdef lang_de @rentext: .byte BOLDON,"Bitte geben Sie den neuen",0 @rentxt2: .byte "Diskettennamen ein:",PLAINTEXT,0 +.else +@rentext: .byte BOLDON,"Please enter the new",0 +@rentxt2: .byte "disk name:",PLAINTEXT,0 +.endif \ No newline at end of file diff --git a/topdesk/Main/DeskTop.sub9.s b/topdesk/Main/DeskTop.sub9.s index 9e695f56..dc99d7c0 100644 --- a/topdesk/Main/DeskTop.sub9.s +++ b/topdesk/Main/DeskTop.sub9.s @@ -159,7 +159,11 @@ NeuerOrdner: jsr GotoFirstMenu .byte $0d,$10,$20 ; Texteingabe .byte a1,16 .byte NULL +.ifdef lang_de @t: .byte BOLDON,"Neuen Ordnernamen eingeben:",PLAINTEXT,0 +.else +@t: .byte BOLDON,"Enter new name for folder:",PLAINTEXT,0 +.endif MyNewSubDir: ; Par: Filename in Name ; Windownummer in x txa diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index b61383ca..47e23480 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -121,8 +121,13 @@ SearchDeskTop2: MoveB curDrive,@a .byte $0b,$10,$20 .word @t2 .byte OK,2,72,CANCEL,14,72,NULL +.ifdef lang_de @t1: .byte "Bitte eine Diskette mit",0 @t2: .byte "TopDesk einlegen!",0 +.else +@t1: .byte "Please insert a disk which",0 +@t2: .byte "contains TopDesk!",0 +.endif TestDisk: txa beq @10 From 95f80adba71701ba61be70edccb218472ca86bc7 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 21 Mar 2018 23:42:16 +0100 Subject: [PATCH 019/125] Completed bitplanes rework 40/80. --- inc/kernal.inc | 4 +- kernal/c65/map.s | 405 +++++++++++++++++++++++++++++---------- kernal/conio/conio1.s | 28 +-- kernal/conio/conio3a.s | 8 - kernal/conio/conio3b.s | 17 +- kernal/fonts/fonts2.s | 48 +---- kernal/fonts/fonts4b.s | 2 +- kernal/graph/bitmapup.s | 20 +- kernal/graph/line.s | 20 +- kernal/graph/scanline.s | 17 +- kernal/icon/icon1.s | 6 - kernal/init/init2.s | 9 - kernal/jumptab/jumptab.s | 205 ++++++++++++++++---- kernal/kernal_mega65.cfg | 72 +++---- 14 files changed, 564 insertions(+), 297 deletions(-) diff --git a/inc/kernal.inc b/inc/kernal.inc index 190c8bc7..a658d427 100644 --- a/inc/kernal.inc +++ b/inc/kernal.inc @@ -111,7 +111,7 @@ E8800 = $8800 .endif ;A8860 = $8860 ; XXX unused -.if .defined(bsw128) || .defined(mega65) +.if .defined(bsw128) FontTVar1 = $880E FontTVar2 = $880F .elseif .defined(wheels) @@ -138,6 +138,8 @@ bank0SavePS = $8899 .ifdef mega65 lowMap = $8897 highMap = $8898 +lastHighMap = $8899 +countHighMap = $8894 .endif L8A7F = $8A7F ; only written to once diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 5d5e3297..794a842f 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -19,147 +19,344 @@ .segment "map" .global _MapLow -.global _UnmapLow -.global _TempUnmapLow .global _MapHigh +.import UNK_4 +.import UNK_5 +.import EnterDeskTop +.import StartAppl +.import GetFHdrInfo +.import A885E +.ifdef bsw128 +.import CheckAppCompat +.import _LdFile2 +.else +.import LdFile +.endif + + +.import _FollowChain +.import _FindFTypes +.import _FindFile +.import _SetDevice +.import _GetFHdrInfo +.import _LdDeskAcc +.import _RstrAppl +.import _LdApplic +.import _SaveFile +.import _SetGDirEntry +.import _BldGDirEntry +.import _DeleteFile +.import _FreeFile +.import _FastDelFile +.import _RenameFile +.import _OpenRecordFile +.import _CloseRecordFile +.import _UpdateRecordFile +.import _NextRecord +.import _PreviousRecord +.import _PointRecord +.import _DeleteRecord +.import _InsertRecord +.import _AppendRecord +.import _ReadRecord +.import _WriteRecord +.import _ReadByte + +.global _map_FollowChain +.global _map_FindFTypes +.global _map_FindFile +.global _map_SetDevice +.global _map_GetFHdrInfo +.global _map_LdDeskAcc +.global _map_RstrAppl +.global _map_LdApplic +.global _map_SaveFile +.global _map_SetGDirEntry +.global _map_BldGDirEntry +.global _map_DeleteFile +.global _map_FreeFile +.global _map_FastDelFile +.global _map_RenameFile +.global _map_OpenRecordFile +.global _map_CloseRecordFile +.global _map_UpdateRecordFile +.global _map_NextRecord +.global _map_PreviousRecord +.global _map_PointRecord +.global _map_DeleteRecord +.global _map_InsertRecord +.global _map_AppendRecord +.global _map_ReadRecord +.global _map_WriteRecord +.global _map_ReadByte + + ;--------------------------------------------------------------- ; MapHigh ; -; Maps the high area at $a000 according to the paramter -; Also remaps low area at $4000 even if tempUnMap was called. +; Maps area from $a000 to $c000 ; -; Pass: y page offset from $a000 -; Return: Nothing -; Destroyed: x, a, z +; Pass: a page offset from $a000 +; +; Return: nothing +; Destroyed: a x y z ;--------------------------------------------------------------- _MapHigh: + cmp highMap + beq @done - ; A low offset - ; Y high offest - ; X low map/offset high - ; Z high map/offset hight - - ; y offset as parameter - ldz #$20 ; map $a000-$c000 - - lda lowMap cmp #0 - beq @1 - - ; setup low map state - ldx #$40 - bra @2 + beq @0 + pha + lda countHighMap + cmp #0 + beq @2 @1: - lda #0 ; don't map lower in this case - tax -@2: - - map - eom - - ; remember - sty highMap - + jmp @1 +@2: pla + +@0: + sta highMap + lda countHighMap + sta $8895 + jsr ApplyMapping +@done: rts ;--------------------------------------------------------------- ; MapLow ; -; Pass: y 0 restore last state (after temp unmap) -; 1 map from $a000 (underlay) to $4000 -; Return: Nothing -; Destroyed: x, a, z, y +; Maps area from $6000 to $8000 +; +; Pass: a page offset from $6000 +; +; Return: nothing +; Destroyed: a x y z ;--------------------------------------------------------------- _MapLow: + cmp lowMap + beq @done - ; A low offset - ; Y high offest - ; X low map/offset high - ; Z high map/offset hight - - ; y offset as parameter - - cpy #0 - bne @2 - - ; use last map - ldx #0 ; don't map - lda lowMap - beq @1 - ldx #$40 - bra @1 - -@2: - ; assume y 1, so map - lda #$60 sta lowMap - ldx #$40 - -@1: - ; config High - ldz #$20 ; map $a000-$c000 - ldy highMap - map - eom + jsr ApplyMapping +@done: rts -;--------------------------------------------------------------- -; UnmapLow -; -; Pass: Nothing -; Return: Nothing -; Destroyed: x, a, z, y -;--------------------------------------------------------------- -_UnmapLow: +ApplyMapping: ; A low offset ; Y high offest ; X low map/offset high ; Z high map/offset hight - ; y offset as parameter - - lda #0 - sta lowMap - tax - ; config High ldz #$20 ; map $a000-$c000 - ldy highMap + lda highMap + asl + bcc @2 + ldz #$21 +@2: + tay + + ; config Low + ldx #$80 + lda lowMap + asl + bcc @1 + ldx #$81 +@1: + map eom - rts - - -;--------------------------------------------------------------- -; TempUnmapLow -; -; Pass: Nothing -; Return: Nothing -; Destroyed: x, a, z, y -;--------------------------------------------------------------- -_TempUnmapLow: - - ; A low offset - ; Y high offest - ; X low map/offset high - ; Z high map/offset hight - - ; y offset as parameter - + rts + + + +_map_FollowChain: + jsr MapUnterlay + jsr _FollowChain + jmp UnmapUnderlay +_map_FindFTypes: + jsr MapUnterlay + jsr _FindFTypes + jmp UnmapUnderlay +_map_FindFile: + jsr MapUnterlay + jsr _FindFile + jmp UnmapUnderlay +_map_SetDevice: + jsr MapUnterlay + jsr _SetDevice + jmp UnmapUnderlay +_map_GetFHdrInfo: + jsr MapUnterlay + jsr _GetFHdrInfo + jmp UnmapUnderlay +_map_LdDeskAcc: + jsr MapUnterlay + jsr _LdDeskAcc + jmp UnmapUnderlay +_map_RstrAppl: + jsr MapUnterlay + jsr _RstrAppl + jmp UnmapUnderlay +_map_LdApplic: + + jsr UNK_5 + jsr LdFile + bnex @1 + bbsf 0, A885E, @1 + jsr UNK_4 + MoveW_ fileHeader+O_GHST_VEC, r7 + jmp StartAppl +@1: rts + ;jsr MapUnterlay + ;jsr _LdApplic + ;jmp UnmapUnderlay +_map_SaveFile: + jsr MapUnterlay + jsr _SaveFile + jmp UnmapUnderlay +_map_SetGDirEntry: + jsr MapUnterlay + jsr _SetGDirEntry + jmp UnmapUnderlay +_map_BldGDirEntry: + jsr MapUnterlay + jsr _BldGDirEntry + jmp UnmapUnderlay +_map_DeleteFile: + jsr MapUnterlay + jsr _DeleteFile + jmp UnmapUnderlay +_map_FreeFile: + jsr MapUnterlay + jsr _FreeFile + jmp UnmapUnderlay +_map_FastDelFile: + jsr MapUnterlay + jsr _FastDelFile + jmp UnmapUnderlay +_map_RenameFile: + jsr MapUnterlay + jsr _RenameFile + jmp UnmapUnderlay +_map_OpenRecordFile: + jsr MapUnterlay + jsr _OpenRecordFile + jmp UnmapUnderlay +_map_CloseRecordFile: + jsr MapUnterlay + jsr _CloseRecordFile + jmp UnmapUnderlay +_map_UpdateRecordFile: + jsr MapUnterlay + jsr _UpdateRecordFile + jmp UnmapUnderlay +_map_NextRecord: + jsr MapUnterlay + jsr _NextRecord + jmp UnmapUnderlay +_map_PreviousRecord: + jsr MapUnterlay + jsr _PreviousRecord + jmp UnmapUnderlay +_map_PointRecord: + jsr MapUnterlay + jsr _PointRecord + jmp UnmapUnderlay +_map_DeleteRecord: + jsr MapUnterlay + jsr _DeleteRecord + jmp UnmapUnderlay +_map_InsertRecord: + jsr MapUnterlay + jsr _InsertRecord + jmp UnmapUnderlay +_map_AppendRecord: + jsr MapUnterlay + jsr _AppendRecord + jmp UnmapUnderlay +_map_ReadRecord: + jsr MapUnterlay + jsr _ReadRecord + jmp UnmapUnderlay +_map_WriteRecord: + jsr MapUnterlay + jsr _WriteRecord + jmp UnmapUnderlay +_map_ReadByte: + jsr MapUnterlay + jsr _ReadByte + jmp UnmapUnderlay + +MapUnterlay: + pha + txa + pha + tya + pha + tza + pha + bit countHighMap + bne @1 + lda highMap + sta lastHighMap lda #0 + jsr _MapHigh + jmp @2 +@1: lda highMap + cmp #0 + beq @2 +@3: + jmp @3 +@2: + inc countHighMap + pla + taz + pla + tay + pla tax + pla + rts + +UnmapUnderlay: + pha + txa + pha + tya + pha + tza + pha + dec countHighMap + lda countHighMap + cmp #0 + bne @1 + lda lastHighMap + jsr _MapHigh + lda #0 + sta lastHighMap + jmp @2 +@1: + lda highMap + cmp #0 + beq @2 +@3: + jmp @3 - ; config High - ldz #$20 ; map $a000-$c000 - ldy highMap - map - eom - - rts +@2: + pla + taz + pla + tay + pla + tax + pla + rts \ No newline at end of file diff --git a/kernal/conio/conio1.s b/kernal/conio/conio1.s index caa82dce..9f5bb2e2 100644 --- a/kernal/conio/conio1.s +++ b/kernal/conio/conio1.s @@ -11,9 +11,6 @@ .include "c64.inc" .import _GetRealSize -.ifdef mega65 -.import _GetRealSizeMap -.endif .import FontPutChar .import DoESC_RULER .import _GraphicsString @@ -23,9 +20,6 @@ .import CallRoutine .import NormalizeX -.import _MapLow -.import _UnmapLow - .global DoBACKSPC .global _PutChar .global _SmallPutChar @@ -46,13 +40,6 @@ _PutChar: ldx PutCharTabH-8,y jmp CallRoutine @1: pha -.ifdef mega65 - ldy #1 - jsr _MapLow - pla - pha -.endif - ldy r11H sty r13H ldy r11L @@ -81,8 +68,7 @@ _PutChar: bcs @4 @3: pla subv $20 - jsr FontPutChar - jmp _UnmapLow + jmp FontPutChar @4: lda r13L addv 1 sta r11L @@ -90,7 +76,6 @@ _PutChar: adc #0 sta r11H @5: pla - jsr _UnmapLow ldx StringFaultVec+1 lda StringFaultVec jmp CallRoutine @@ -110,13 +95,8 @@ PutCharTabH: ; Destroyed: same as PutChar ;--------------------------------------------------------------- _SmallPutChar: - pha - ldy #1 - jsr _MapLow - pla subv $20 - jsr FontPutChar - jmp _UnmapLow + jmp FontPutChar DoTAB: .ifndef wheels_size_and_speed ; no-op @@ -214,11 +194,7 @@ DoPLAINTEXT: DoBACKSPC: ldx currentMode -.ifdef mega65 jsr _GetRealSize -.else - jsr _GetRealSizeMap -.endif sty PrvCharWidth DoBACKSPACE: SubB PrvCharWidth, r11L diff --git a/kernal/conio/conio3a.s b/kernal/conio/conio3a.s index c631b971..6cd78781 100644 --- a/kernal/conio/conio3a.s +++ b/kernal/conio/conio3a.s @@ -13,16 +13,9 @@ .import _PutChar .global _PutString -.ifdef mega65 -.import _MapLow -.import _UnmapLow -.endif - .segment "conio3a" _PutString: -;; ldy #1 - ; jsr _MapLow ldy #0 lda (r0),y beq @2 @@ -32,6 +25,5 @@ _PutString: inc r0H @1: bra _PutString @2: -; jsr _UnmapLow rts diff --git a/kernal/conio/conio3b.s b/kernal/conio/conio3b.s index eab4f295..2c7aea8d 100644 --- a/kernal/conio/conio3b.s +++ b/kernal/conio/conio3b.s @@ -12,11 +12,6 @@ .global _LoadCharSet -.ifdef mega65 -.import _MapLow -.import _UnmapLow -.import BSWFont80 -.endif .import BSWFont .if .defined(trap2) && (!.defined(trap2_alternate_location)) @@ -27,6 +22,9 @@ .ifdef bsw128 .import BSWFont80 .endif +.ifdef mega65 +.import BSWFont80 +.endif .ifdef bsw128 ; XXX back bank, yet var lives on front bank! @@ -45,18 +43,11 @@ _UseSystemFont: .if .defined(bsw128) || .defined(mega65) bbsf 7, graphMode, @X LoadW r0, BSWFont - bra _LoadCharSet2 + bra _LoadCharSet @X: LoadW r0, BSWFont80 .else LoadW r0, BSWFont .endif -_LoadCharSet2: -.ifdef mega65 - ldy #1 - jsr _MapLow - jsr _LoadCharSet - jmp _UnmapLow -.endif _LoadCharSet: ldy #0 diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 11278e94..6fd9ebf1 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -30,7 +30,7 @@ .import FontGt2 .import FontGt1 -.if (!.defined(bsw128)) & (!.defined(wheels)) & (!.defined(mega65)) +.if (!.defined(bsw128)) & (!.defined(wheels)) .import FontTVar1 .import FontTVar2 .endif @@ -52,14 +52,6 @@ PrvCharWidth = $880D .global Font_9 .global FontPutChar .global _GetRealSize -.ifdef mega65 -.global _GetRealSizeMap -.endif - -.ifdef mega65 -.import _MapLow -.import _UnmapLow -.endif .segment "fonts2" @@ -76,30 +68,6 @@ PrvCharWidth = $880D ; a baseline offset ; Destroyed: nothing ;--------------------------------------------------------------- -.ifdef mega65 -_GetRealSizeMap: - pha - txa - pha - ldy #1 - jsr _MapLow - pla - tax - pla - jsr _GetRealSize - pha - txa - pha - tya - pha - jsr _UnmapLow - pla - tay - pla - tax - pla - rts -.endif .ifndef wheels ; moved _GetRealSize: @@ -1032,20 +1000,6 @@ FontPutChar: dec r10H bne @1 @9: PopB r1H -;.ifdef mega65 -; pha -; txa -; pha -; tza -; pha -; ldy #1 -; jsr _UnmapLow -; pla -; taz -; pla -; tax -; pla -;.endif rts .ifdef bsw128 diff --git a/kernal/fonts/fonts4b.s b/kernal/fonts/fonts4b.s index a0277d92..5cf55eb4 100644 --- a/kernal/fonts/fonts4b.s +++ b/kernal/fonts/fonts4b.s @@ -86,7 +86,7 @@ FontGt4_2: beq FontGt2_1 .endif -.if !(.defined(bsw128) || .defined(mega65)) +.if !(.defined(bsw128)) .ifndef wheels FontTVar1: diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index 48af7e83..0c6e55d3 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -80,6 +80,9 @@ BitmapUpHelp: and #$7F cmp #$20 .else + ldx r5H + ldy #0 + sty r5H ldy #3 ; by 8 lda r1L bpl @4 @@ -89,13 +92,20 @@ BitmapUpHelp: and #$7F @5: asl a - bcc @6 - inc r5H - inc r6H -@6: + rol r5H dey bne @5 + pha + lda r5H + stx r5H + pha + add r5H + sta r5H + pla + add r6H + sta r6H + pla tay .endif .else @@ -154,7 +164,7 @@ BitmapUpHelp: BitmapDecode: .if .defined(bsw128) || .defined(mega65) - jmp BitmapDecodeX + ;jmp BitmapDecodeX bbrf 7, graphMode, BitmapDecodeX bbrf 7, r2L, BitmapDecodeX bbrf 0, L888D, @1 diff --git a/kernal/graph/line.s b/kernal/graph/line.s index bb53b455..11871717 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -520,12 +520,28 @@ ImprintLine: ldy r6H sta r6H sty r5H -@2: ldy r3L +@2: +.ifndef mega65 + ldy r3L lda r3H beq @3 inc r5H inc r6H -@3: CmpW r3, r4 +@3: +.else + bbrf 7, graphMode, @11 + ldy #0 + bra @12 +@11: + ldy r3L + lda r3H + beq @12 + inc r5H + inc r6H +@12: +.endif + + CmpW r3, r4 beq @6 jsr LineHelp2 lda r8L diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 7c33d7f4..5a0de0cd 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -20,6 +20,7 @@ SCREEN_BASE65 = $0000 BACK_SCR_BASE65 = $9000 .import _MapHigh +.import _MapLow .endif @@ -100,14 +101,14 @@ _GetScanLine: and #%11100000 @X1: sub #$60 - tay + lsr jsr _MapHigh lda r5H and #%00011111 bbrf 7, graphMode, @X2 - lda #0 + and #%00000001 @X2: add #$a0 sta r5H @@ -188,15 +189,23 @@ _GetScanLine: bbsf 7, graphMode, @X1_ and #%11100000 @X1_: + pha sub #$60 - tay + lsr jsr _MapHigh + ;sub #$40 + ;lsr + pla + lsr + add #$90 ; back buffer is at $18000 + + jsr _MapLow lda r5H and #%00011111 bbrf 7, graphMode, @X2_ - lda #0 + and #%00000001 @X2_: add #$a0 sta r5H diff --git a/kernal/icon/icon1.s b/kernal/icon/icon1.s index 93c6c0f3..2e90a257 100644 --- a/kernal/icon/icon1.s +++ b/kernal/icon/icon1.s @@ -14,9 +14,6 @@ .import ResetMseRegion .import Icons_1 -.import _MapLow -.import _UnmapLow - .global _DoIcons .segment "icon1" @@ -39,10 +36,7 @@ ;--------------------------------------------------------------- _DoIcons: MoveW r0, IconDescVec - ldy #1 - jsr _MapLow jsr Icons_1 - jsr _UnmapLow jsr ResetMseRegion lda mouseOn diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 52712472..1e4fc4b7 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -86,21 +86,12 @@ _FirstInit: .ifdef bsw128 sta r0L sta r0H -.endif -.ifdef mega65 -.import _MapLow - ldy #1 - jsr _MapLow .endif ldx #24 @3: lda InitMsePic-1,x sta mousePicData-1,x dex bne @3 -.ifdef mega65 -.import _UnmapLow - jsr _UnmapLow -.endif .ifdef wheels .import sysMob0Clr .import sysExtClr diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index e7af2bdb..8b773230 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -65,38 +65,12 @@ ; load.s .import _GetFile -.import _LdApplic -.import _LdDeskAcc .import _LdFile -.import _RstrAppl ; filesys.s -.import _AppendRecord -.import _CloseRecordFile -.import _DeleteFile -.import _DeleteRecord -.import _FastDelFile -.import _FindFTypes -.import _FindFile -.import _FollowChain -.import _FreeFile -.import _GetFHdrInfo .import _GetPtrCurDkNm -.import _InsertRecord -.import _NextRecord -.import _OpenRecordFile -.import _PointRecord -.import _PreviousRecord -.import _ReadByte .import _ReadFile -.import _ReadRecord -.import _RenameFile -.import _SaveFile -.import _SetDevice -.import _SetGDirEntry -.import _UpdateRecordFile .import _WriteFile -.import _WriteRecord ; memory.s .import _CmpFString @@ -186,11 +160,7 @@ .import _InitTextPrompt .import _GetString .import _UseSystemFont -.import _BldGDirEntry .import _GetRealSize -.ifdef mega65 -.import _GetRealSizeMap -.endif .import _ColorRectangle .import _ColorCard .import _SetColorMode @@ -203,7 +173,64 @@ .import _SetMsePic .import _TempHideMouse .import _NormalizeX +.ifdef mega65 +.import _map_FollowChain +.import _map_FindFTypes +.import _map_FindFile +.import _map_SetDevice +.import _map_GetFHdrInfo +.import _map_LdDeskAcc +.import _map_RstrAppl +.import _map_LdApplic +.import _map_SaveFile +.import _map_SetGDirEntry +.import _map_BldGDirEntry +.import _map_DeleteFile +.import _map_FreeFile +.import _map_FastDelFile +.import _map_RenameFile +.import _map_OpenRecordFile +.import _map_CloseRecordFile +.import _map_UpdateRecordFile +.import _map_NextRecord +.import _map_PreviousRecord +.import _map_PointRecord +.import _map_DeleteRecord +.import _map_InsertRecord +.import _map_AppendRecord +.import _map_ReadRecord +.import _map_WriteRecord +.import _map_ReadByte +.else +.import _InsertRecord +.import _NextRecord +.import _OpenRecordFile +.import _PointRecord +.import _PreviousRecord +.import _ReadByte +.import _AppendRecord +.import _CloseRecordFile +.import _DeleteFile +.import _DeleteRecord +.import _FastDelFile +.import _FindFTypes +.import _FindFile +.import _FollowChain +.import _FreeFile +.import _GetFHdrInfo +.import _LdApplic +.import _LdDeskAcc +.import _SetDevice +.import _ReadRecord +.import _RenameFile +.import _SaveFile +.import _SetGDirEntry +.import _UpdateRecordFile +.import _WriteRecord +.import _RstrAppl +.import _BldGDirEntry +.endif .global InterruptMain .global InitProcesses @@ -298,8 +325,8 @@ .global CRC .global LdFile .global EnterTurbo -.global LdDeskAcc .global ReadBlock +.global LdDeskAcc .global LdApplic .global WriteBlock .global VerWriteBlock @@ -525,11 +552,7 @@ i_BitmapUp: i_PutString: jmp _i_PutString GetRealSize: -.ifdef mega65 - jmp _GetRealSizeMap -.else jmp _GetRealSize -.endif i_FillRam: jmp _i_FillRam i_MoveData: @@ -573,11 +596,23 @@ PutBlock: SetGEOSDisk: jmp (_SetGEOSDisk) SaveFile: +.ifdef mega65 + jmp _map_SaveFile +.else jmp _SaveFile +.endif SetGDirEntry: +.ifdef mega65 + jmp _map_SetGDirEntry +.else jmp _SetGDirEntry +.endif BldGDirEntry: +.ifdef mega65 + jmp _map_BldGDirEntry +.else jmp _BldGDirEntry +.endif GetFreeDirBlk: jmp (_GetFreeDirBlk) WriteFile: @@ -589,11 +624,19 @@ ReadFile: SmallPutChar: jmp _SmallPutChar FollowChain: +.ifdef mega65 + jmp _map_FollowChain +.else jmp _FollowChain +.endif GetFile: jmp _GetFile FindFile: +.ifdef mega65 + jmp _map_FindFile +.else jmp _FindFile +.endif CRC: jmp __CRC LdFile: @@ -601,19 +644,35 @@ LdFile: EnterTurbo: jmp (_EnterTurbo) LdDeskAcc: +.ifdef mega65 + jmp _map_LdDeskAcc +.else jmp _LdDeskAcc +.endif ReadBlock: jmp (_ReadBlock) LdApplic: +.ifdef mega65 + jmp _map_LdApplic +.else jmp _LdApplic +.endif WriteBlock: jmp (_WriteBlock) VerWriteBlock: jmp (_VerWriteBlock) FreeFile: +.ifdef mega65 + jmp _map_FreeFile +.else jmp _FreeFile +.endif GetFHdrInfo: +.ifdef mega65 + jmp _map_GetFHdrInfo +.else jmp _GetFHdrInfo +.endif EnterDeskTop: jmp _EnterDeskTop StartAppl: @@ -623,15 +682,31 @@ ExitTurbo: PurgeTurbo: jmp (_PurgeTurbo) DeleteFile: +.ifdef mega65 + jmp _map_DeleteFile +.else jmp _DeleteFile +.endif FindFTypes: +.ifdef mega65 + jmp _map_FindFTypes +.else jmp _FindFTypes +.endif RstrAppl: +.ifdef mega65 + jmp _map_RstrAppl +.else jmp _RstrAppl +.endif ToBASIC: jmp _ToBASIC FastDelFile: +.ifdef mega65 + jmp _map_FastDelFile +.else jmp _FastDelFile +.endif GetDirHead: jmp (_GetDirHead) PutDirHead: @@ -645,7 +720,11 @@ i_ImprintRectangle: DoDlgBox: jmp _DoDlgBox RenameFile: +.ifdef mega65 + jmp _map_RenameFile +.else jmp _RenameFile +.endif InitForIO: jmp (_InitForIO) DoneWithIO: @@ -663,29 +742,73 @@ CmpFString: FirstInit: jmp _FirstInit OpenRecordFile: +.ifdef mega65 + jmp _map_OpenRecordFile +.else jmp _OpenRecordFile +.endif CloseRecordFile: +.ifdef mega65 + jmp _map_CloseRecordFile +.else jmp _CloseRecordFile +.endif NextRecord: +.ifdef mega65 + jmp _map_NextRecord +.else jmp _NextRecord +.endif PreviousRecord: +.ifdef mega65 + jmp _map_PreviousRecord +.else jmp _PreviousRecord +.endif PointRecord: +.ifdef mega65 + jmp _map_PointRecord +.else jmp _PointRecord +.endif DeleteRecord: +.ifdef mega65 + jmp _map_DeleteRecord +.else jmp _DeleteRecord +.endif InsertRecord: +.ifdef mega65 + jmp _map_InsertRecord +.else jmp _InsertRecord +.endif AppendRecord: +.ifdef mega65 + jmp _map_AppendRecord +.else jmp _AppendRecord +.endif ReadRecord: +.ifdef mega65 + jmp _map_ReadRecord +.else jmp _ReadRecord +.endif WriteRecord: +.ifdef mega65 + jmp _map_WriteRecord +.else jmp _WriteRecord +.endif SetNextFree: jmp (_SetNextFree) UpdateRecordFile: +.ifdef mega65 + jmp _map_UpdateRecordFile +.else jmp _UpdateRecordFile +.endif GetPtrCurDkNm: jmp _GetPtrCurDkNm PromptOn: @@ -703,11 +826,19 @@ BitmapClip: FindBAMBit: jmp (_FindBAMBit) SetDevice: +.ifdef mega65 + jmp _map_SetDevice +.else jmp _SetDevice +.endif IsMseInRegion: jmp __IsMseInRegion ReadByte: +.ifdef mega65 + jmp _map_ReadByte +.else jmp _ReadByte +.endif FreeBlock: jmp (_FreeBlock) ChangeDiskDevice: @@ -877,7 +1008,11 @@ DEFOptimize: ; $C304 DoOptimize: ; $C307 jmp _DoOptimize NFindFTypes: ; $C30A +.ifdef mega65 + jmp _map_FindFTypes +.else jmp _FindFTypes +.endif ReadXYPot: ; $C30D jmp _ReadXYPot MainIRQ: ; $C310 diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 59498b69..a2d8b4f0 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -4,7 +4,7 @@ MEMORY { LOKERNAL: start = $9D80, size = $0280, fill = yes, file = %O; #PADDING2: start = $A000, size = $1F40, fill = yes, file = %O; #ICONS: start = $BF40, size = $00C0, fill = yes, file = %O; - UNDERLAY: start = $4000, size = $2000, fill = yes, file = %O; + UNDERLAY: start = $A000, size = $2000, fill = yes, file = %O; KERNALHDR: start = $C000, size = $0100, fill = yes, file = %O; KERNAL: start = $C100, size = $3D80, fill = no, file = %O; @@ -25,10 +25,17 @@ SEGMENTS { reu: load = LOKERNAL, type = ro; # icons: $BF40-$BFFF - mouseptr: load = UNDERLAY, type = ro; - dlgbox2: load = UNDERLAY, type = ro; - bswfont: load = UNDERLAY, type = ro; - bswfont80: load = UNDERLAY, type = ro; + files6a: load = UNDERLAY, type = ro; + files6b: load = UNDERLAY, type = ro; + files6c: load = UNDERLAY, type = ro; + deskacc1: load = UNDERLAY, type = ro; + load4b: load = UNDERLAY, type = ro; + deskacc2: load = UNDERLAY, type = ro; + files7: load = UNDERLAY, type = ro; + deskacc3: load = UNDERLAY, type = ro; + files8: load = UNDERLAY, type = ro; + files9: load = UNDERLAY, type = ro; + files10: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -44,6 +51,8 @@ SEGMENTS { jumptab: load = KERNAL, type = ro; # kernal code + map: load = KERNAL, type = ro; + sprites: load = KERNAL, type = ro; fonts1: load = KERNAL, type = ro; tobasic1: load = KERNAL, type = ro; serial1: load = KERNAL, type = ro; @@ -68,24 +77,6 @@ SEGMENTS { misc: load = KERNAL, type = ro; hw3: load = KERNAL, type = ro; load2: load = KERNAL, type = ro; - graph2a: load = KERNAL, type = ro; - graph2b: load = KERNAL, type = ro; - graph2c: load = KERNAL, type = ro; - graph2d: load = KERNAL, type = ro; - graph2e: load = KERNAL, type = ro; - graph2f: load = KERNAL, type = ro; - graph2g: load = KERNAL, type = ro; - graph2h: load = KERNAL, type = ro; - graph2p: load = KERNAL, type = ro; - graph2i1: load = KERNAL, type = ro; - inline: load = KERNAL, type = ro; - graph2j: load = KERNAL, type = ro; - graph2k: load = KERNAL, type = ro; - graph2l1: load = KERNAL, type = ro; - graph2l2: load = KERNAL, type = ro; - graph2m: load = KERNAL, type = ro; - graph2n: load = KERNAL, type = ro; - graph2o: load = KERNAL, type = ro; mode: load = KERNAL, type = ro; process1: load = KERNAL, type = ro; process2: load = KERNAL, type = ro; @@ -93,7 +84,6 @@ SEGMENTS { process3aa: load = KERNAL, type = ro; process3b: load = KERNAL, type = ro; process3c: load = KERNAL, type = ro; - sprites: load = KERNAL, type = ro; math1a1: load = KERNAL, type = ro; math1a2: load = KERNAL, type = ro; math1b: load = KERNAL, type = ro; @@ -107,20 +97,30 @@ SEGMENTS { panic3: load = KERNAL, type = ro; serial2: load = KERNAL, type = ro; patterns: load = KERNAL, type = ro; - map: load = KERNAL, type = ro; memory3: load = KERNAL, type = ro; load3: load = KERNAL, type = ro; - files6a: load = KERNAL, type = ro; - files6b: load = KERNAL, type = ro; - files6c: load = KERNAL, type = ro; - deskacc1: load = KERNAL, type = ro; - load4b: load = KERNAL, type = ro; - deskacc2: load = KERNAL, type = ro; - files7: load = KERNAL, type = ro; - deskacc3: load = KERNAL, type = ro; - files8: load = KERNAL, type = ro; - files9: load = KERNAL, type = ro; - files10: load = KERNAL, type = ro; + mouseptr: load = KERNAL, type = ro; + dlgbox2: load = KERNAL, type = ro; + graph2a: load = KERNAL, type = ro; + graph2b: load = KERNAL, type = ro; + graph2c: load = KERNAL, type = ro; + graph2d: load = KERNAL, type = ro; + graph2e: load = KERNAL, type = ro; + graph2f: load = KERNAL, type = ro; + graph2g: load = KERNAL, type = ro; + graph2h: load = KERNAL, type = ro; + graph2p: load = KERNAL, type = ro; + graph2i1: load = KERNAL, type = ro; + inline: load = KERNAL, type = ro; + graph2j: load = KERNAL, type = ro; + graph2k: load = KERNAL, type = ro; + graph2l1: load = KERNAL, type = ro; + graph2l2: load = KERNAL, type = ro; + graph2m: load = KERNAL, type = ro; + graph2n: load = KERNAL, type = ro; + graph2o: load = KERNAL, type = ro; + bswfont: load = KERNAL, type = ro; + bswfont80: load = KERNAL, type = ro; init4: load = KERNAL, type = ro; fonts2: load = KERNAL, type = ro; fonts3: load = KERNAL, type = ro; From 8674c9c002e047d190c393dc5f54a5c4acb7dfbc Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 4 May 2018 23:51:49 +0200 Subject: [PATCH 020/125] Implement more GEOS 128 compatibility: IO is on most of the time. Fixes topdesk sprite scaling. --- Makefile | 7 +++-- drv/drvf011.s | 12 +++++++- inc/geosmac.inc | 47 +++++++++++++++++++++--------- kernal/conio/conio1.s | 16 ++++++++++ kernal/conio/conio3a.s | 17 ++++++++++- kernal/conio/conio3b.s | 12 ++++++++ kernal/conio/conio6.s | 17 +++++++++++ kernal/dlgbox/dlgbox1a.s | 3 ++ kernal/files/files1a2b.s | 4 +++ kernal/files/files1b.s | 4 +++ kernal/fonts/fonts2.s | 21 +++++-------- kernal/graph/clrscr.s | 2 +- kernal/graph/inlinefunc.s | 25 ++++++++++++++++ kernal/graph/point.s | 8 ++++- kernal/graph/scanline.s | 13 +++++++++ kernal/hw/hw1b.s | 6 ++++ kernal/init/init1.s | 2 ++ kernal/irq/irq.s | 9 ++++++ kernal/jumptab/jumptab.s | 55 +++++++++++++++++++++++++++++++++++ kernal/kernal_mega65.cfg | 29 +++++++++--------- kernal/load/load1b.s | 7 +++++ kernal/menu/menu1.s | 8 +++++ kernal/menu/menu3.s | 14 +++++++++ kernal/start/start64.s | 2 ++ topdesk/Include/DeskMain2.inc | 4 ++- topdesk/Main/DeskTop.main.s | 17 ++++++++++- 26 files changed, 311 insertions(+), 50 deletions(-) diff --git a/Makefile b/Makefile index 00217978..c53146f1 100755 --- a/Makefile +++ b/Makefile @@ -177,6 +177,7 @@ ifeq ($(VARIANT), mega65) kernal/640/bswfont80.s \ kernal/graph/graph2p.s \ kernal/c65/map.s \ + kernal/c65/iojmp.s \ kernal/128k/swapdiskdriver.s endif @@ -346,10 +347,12 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo delete \"desk top\"| $(C1541) $@ >/dev/null; \ - echo delete \"geowrite\"| $(C1541) $@ >/dev/null; \ + echo delete \"65 desktop\"| $(C1541) $@ >/dev/null; \ + echo delete \"65 configure\"| $(C1541) $@ >/dev/null; \ + echo delete \"geopaint\"| $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite GW64.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ diff --git a/drv/drvf011.s b/drv/drvf011.s index ffaf61e4..8b48663e 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -286,7 +286,8 @@ SetCurDHVec: LoadW r5, curDirHead ;9230 RTS -_Get1stDirEntry: ;9239 +_Get1stDirEntry: + ;9239 JSR SetDirHead_3 INC r1H LoadB borderFlag, 0 @@ -620,9 +621,16 @@ __InitForIO: ;95c6 PLA STA tmpPS SEI + +.ifdef mega65 + LoadB CPU_DATA, IO_IN +.endif + +.ifndef mega65 LDA CPU_DATA STA tmpCPU_DATA LoadB CPU_DATA, KRNL_IO_IN +.endif LDA grirqen STA tmpgrirqen LDA clkreg @@ -667,8 +675,10 @@ __DoneWithIO: LDA cia2base+13 LDA tmpgrirqen STA grirqen +.ifndef mega65 LDA tmpCPU_DATA STA CPU_DATA +.endif LDA tmpPS PHA PLP diff --git a/inc/geosmac.inc b/inc/geosmac.inc index c8029d32..8d2d52b7 100644 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -374,6 +374,24 @@ PopB config .endmacro .else +.ifdef mega65 +.macro START_IO +.endmacro +.macro END_IO +.endmacro +.macro START_IO_X +.endmacro +.macro END_IO_X +.endmacro +.macro START_IO_Y +.endmacro +.macro END_IO_Y +.endmacro +.macro START_IO_128 +.endmacro +.macro END_IO_128 +.endmacro +.else .macro START_IO PushB CPU_DATA ASSERT_NOT_BELOW_IO @@ -406,21 +424,22 @@ ASSERT_NOT_BELOW_IO .macro END_IO_128 .endmacro .endif +.endif -.macro bge addr - bcs addr -.endmacro - -.macro bgt addr - .local @done - beq @done - bcs addr -@done: -.endmacro - -.macro blt addr - bcc addr -.endmacro +.macro bge addr + bcs addr +.endmacro + +.macro bgt addr + .local @done + beq @done + bcs addr +@done: +.endmacro + +.macro blt addr + bcc addr +.endmacro .macro ble addr beq addr diff --git a/kernal/conio/conio1.s b/kernal/conio/conio1.s index 9f5bb2e2..4a9f4d5a 100644 --- a/kernal/conio/conio1.s +++ b/kernal/conio/conio1.s @@ -22,11 +22,27 @@ .global DoBACKSPC .global _PutChar +.ifdef mega65 +.global _PutChar2 +.endif .global _SmallPutChar .segment "conio1" +.ifdef mega65 +_PutChar: + tay + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + tya + jsr _PutChar2 + PopB CPU_DATA + rts + +_PutChar2: +.else _PutChar: +.endif .if .defined(bsw128) || .defined(mega65) pha ldx #r11 diff --git a/kernal/conio/conio3a.s b/kernal/conio/conio3a.s index 6cd78781..e68f4866 100644 --- a/kernal/conio/conio3a.s +++ b/kernal/conio/conio3a.s @@ -11,19 +11,34 @@ .include "c64.inc" .import _PutChar +.ifdef mega65 +.import _PutChar2 +.endif .global _PutString .segment "conio3a" _PutString: +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif +@3: ldy #0 lda (r0),y beq @2 +.ifdef mega65 + jsr _PutChar2 +.else jsr _PutChar +.endif inc r0L bne @1 inc r0H -@1: bra _PutString +@1: bra @3 @2: +.ifdef mega65 + PopB CPU_DATA +.endif rts diff --git a/kernal/conio/conio3b.s b/kernal/conio/conio3b.s index 2c7aea8d..49cf8424 100644 --- a/kernal/conio/conio3b.s +++ b/kernal/conio/conio3b.s @@ -50,6 +50,8 @@ _UseSystemFont: .endif _LoadCharSet: + ldx CPU_DATA + LoadB CPU_DATA, RAM_64K ldy #0 @1: lda (r0),y sta baselineOffset,y @@ -67,6 +69,7 @@ _LoadCharSet: sta SerialHiCompare @2: .endif + stx CPU_DATA rts _GetCharWidth: @@ -88,11 +91,20 @@ GetChWdth1: tay iny iny +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif lda (curIndexTable),y dey dey sec sbc (curIndexTable),y +.ifdef mega65 + tay + PopB CPU_DATA + tya +.endif rts .ifdef bsw128 ; branch taken/not taken optimization @2: lda PrvCharWidth diff --git a/kernal/conio/conio6.s b/kernal/conio/conio6.s index 2cc54f26..0fe4be0a 100644 --- a/kernal/conio/conio6.s +++ b/kernal/conio/conio6.s @@ -11,6 +11,10 @@ .include "c64.inc" .import _PutChar +.ifdef mega65 +.import _PutChar2 +.endif + .import _GetRealSize .import NormalizeX @@ -87,6 +91,12 @@ DecTabH: ;Destroyed: a, x, y, r0, r2 - r10, r12, r13 ;--------------------------------------------------------------- _PutDecimal: +.ifdef mega65 + tay + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + tya +.endif jsr CalcDecimal .ifdef wheels_size_and_speed ; duplicate load lda r2L @@ -118,7 +128,14 @@ _PutDecimal: dex bne @2 @3: pla +.ifdef mega65 + jsr _PutChar2 +.else jsr _PutChar +.endif dec r0L bne @3 +.ifdef mega65 + PopB CPU_DATA +.endif rts diff --git a/kernal/dlgbox/dlgbox1a.s b/kernal/dlgbox/dlgbox1a.s index 66bc8aa5..bc3b28b5 100644 --- a/kernal/dlgbox/dlgbox1a.s +++ b/kernal/dlgbox/dlgbox1a.s @@ -88,7 +88,10 @@ _DoDlgBox: @7: lda defIconTab beq @8 LoadW r0, defIconTab + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K jsr DoIcons + PopB CPU_DATA @8: PopW dlgBoxCallerPC tsx stx dlgBoxCallerSP diff --git a/kernal/files/files1a2b.s b/kernal/files/files1a2b.s index 6400fd4b..b2932be3 100644 --- a/kernal/files/files1a2b.s +++ b/kernal/files/files1a2b.s @@ -94,8 +94,12 @@ _ReadFile: @Y: .ifdef bsw128 LoadB config, CIOIN +.else +.ifdef mega65 + LoadB CPU_DATA, IO_IN .else LoadB CPU_DATA, KRNL_IO_IN +.endif .endif AddB r1L, r7L bcc @5 diff --git a/kernal/files/files1b.s b/kernal/files/files1b.s index 33df949f..11445a93 100644 --- a/kernal/files/files1b.s +++ b/kernal/files/files1b.s @@ -98,9 +98,13 @@ DoWriteFile: @Y: .ifdef bsw128 LoadB config, CIOIN +.else +.ifdef mega65 + LoadB CPU_DATA, IO_IN .else LoadB CPU_DATA, KRNL_IO_IN .endif +.endif .ifdef wheels jsr WriteBlock bnex @3 diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 6fd9ebf1..cabc70ff 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -910,21 +910,11 @@ FontPutChar: .if (!.defined(wheels_size_and_speed)) && (!.defined(bsw128)) nop .endif -;.ifdef mega65 -; pha -; txa -; pha -; tza -; pha -; ldy #1 -; jsr _MapLow -; pla -; taz -; pla -; tax -; pla -;.endif tay +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif PushB r1H tya jsr Font_1 ; put pointer in r13 @@ -1000,6 +990,9 @@ FontPutChar: dec r10H bne @1 @9: PopB r1H +.ifdef mega65 + PopB CPU_DATA +.endif rts .ifdef bsw128 diff --git a/kernal/graph/clrscr.s b/kernal/graph/clrscr.s index e0674784..ee4280b2 100644 --- a/kernal/graph/clrscr.s +++ b/kernal/graph/clrscr.s @@ -23,7 +23,7 @@ ;--------------------------------------------------------------- ClrScr: .ifdef mega65 - LoadB dispBufferOn, ST_WR_FORE + LoadB dispBufferOn, ST_WR_FORE | ST_WR_BACK .else .ifdef bsw128 LoadB dispBufferOn, ST_WR_FORE | ST_WR_BACK diff --git a/kernal/graph/inlinefunc.s b/kernal/graph/inlinefunc.s index f78a9b23..734ec377 100644 --- a/kernal/graph/inlinefunc.s +++ b/kernal/graph/inlinefunc.s @@ -35,7 +35,13 @@ ;--------------------------------------------------------------- _i_Rectangle: jsr __GetInlineDrwParms +.ifdef mega65 + LoadB CPU_DATA, RAM_64K jsr _Rectangle + LoadB CPU_DATA, IO_IN +.else + jsr _Rectangle +.endif .ifdef wheels_size .global DoInlineReturn7 DoInlineReturn7: @@ -53,7 +59,13 @@ DoInlineReturn7: ;--------------------------------------------------------------- _i_RecoverRectangle: jsr __GetInlineDrwParms +.ifdef mega65 + LoadB CPU_DATA, RAM_64K jsr _RecoverRectangle + LoadB CPU_DATA, IO_IN +.else + jsr _RecoverRectangle +.endif .ifdef wheels_size jmp DoInlineReturn7 .else @@ -92,7 +104,13 @@ _i_FrameRectangle: jsr __GetInlineDrwParms iny lda (returnAddress),Y +.ifdef mega65 + LoadB CPU_DATA, RAM_64K jsr _FrameRectangle + LoadB CPU_DATA, IO_IN +.else + jsr _FrameRectangle +.endif php lda #8 jmp DoInlineReturn @@ -111,7 +129,14 @@ _i_GraphicsString: bne @1 addv 1 @1: sta r0H +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif jsr _GraphicsString +.ifdef mega65 + PopB CPU_DATA +.endif jmp (r0) .segment "graph3b" diff --git a/kernal/graph/point.s b/kernal/graph/point.s index 9f627a0f..4eef798b 100644 --- a/kernal/graph/point.s +++ b/kernal/graph/point.s @@ -15,6 +15,7 @@ .if .defined(bsw128) || .defined(mega65) .import _TempHideMouse .import _HorizontalLine +.import __io_HorizontalLine .endif .ifdef bsw128 @@ -63,7 +64,12 @@ _DrawLine: plp bcs @X lda #0 -@X: jmp _HorizontalLine +@X: +.ifdef mega65 + jmp __io_HorizontalLine +.else + jmp _HorizontalLine +.endif @Y: ldx #r3 jsr _NormalizeX ldx #r4 diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 5a0de0cd..f4bb16ec 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -35,6 +35,10 @@ BACK_SCR_BASE65 = $9000 ; Destroyed: a ;--------------------------------------------------------------- _GetScanLine: +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif .ifdef bsw128 bbrf 7, graphMode, @X jmp GSC80 @@ -123,6 +127,9 @@ _GetScanLine: pla tax +.ifdef mega65 + PopB CPU_DATA +.endif rts .endif @@ -162,6 +169,9 @@ _GetScanLine: sta r6H pla tax +.ifdef mega65 + PopB CPU_DATA +.endif rts ; @@ -221,6 +231,9 @@ _GetScanLine: pla tax +.ifdef mega65 + PopB CPU_DATA +.endif rts diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 10c8e024..40c0ede9 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -34,7 +34,11 @@ _DoFirstInitIO: LoadB config, CIOIN .else ASSERT_NOT_BELOW_IO +.ifdef mega65 + LoadB CPU_DATA, IO_IN +.else LoadB CPU_DATA, KRNL_IO_IN +.endif .ifdef wheels sta scpu_turbo .endif @@ -148,8 +152,10 @@ ASSERT_NOT_BELOW_IO jsr Init_KRNLVec .endif .ifndef bsw128 +.ifndef mega65 LoadB CPU_DATA, RAM_64K .endif +.endif ASSERT_NOT_BELOW_IO jmp ResetMseRegion diff --git a/kernal/init/init1.s b/kernal/init/init1.s index a34a754a..609865d7 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -34,7 +34,9 @@ _InitMachine2: InitGEOEnv: LoadW r0, InitRamTab .if .defined(bsw128) || .defined(mega65) + LoadB CPU_DATA, RAM_64K jsr _InitRam + LoadB CPU_DATA, IO_IN jmp SetRightMargin .else .ifdef wheels diff --git a/kernal/irq/irq.s b/kernal/irq/irq.s index e4edb703..170307b3 100644 --- a/kernal/irq/irq.s +++ b/kernal/irq/irq.s @@ -80,7 +80,12 @@ _IRQHandler: inx cpx #32 bne @2 +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, IO_IN +.else START_IO +.endif lda dblClickCount beq @3 dec dblClickCount @@ -121,7 +126,11 @@ _IRQHandler: jsr CallRoutine @X: lda #1 sta grirq +.ifdef mega65 + PopB CPU_DATA +.else END_IO +.endif .ifdef use2MHz LoadW $fffe, IRQ2Handler LoadB rasreg, $fc diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 8b773230..64b6954c 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -414,6 +414,21 @@ .global ColorRectangle .endif +.ifdef mega65 +.import __io_HorizontalLine +.import __io_InvertLine +.import __io_RecoverLine +.import __io_VerticalLine +.import __io_Rectangle +.import __io_InvertRectangle +.import __io_RecoverRectangle +.import __io_ImprintRectangle +.import __io_FrameRectangle +.import __io_GraphicsString +.import __io_SetPattern +.import __io_GetRealSize +.endif + .ifdef wheels .global InitMachine .global GEOSOptimize @@ -450,27 +465,63 @@ FreezeProcess: UnfreezeProcess: jmp _UnfreezeProcess HorizontalLine: +.ifdef mega65 + jmp __io_HorizontalLine +.else jmp _HorizontalLine +.endif InvertLine: +.ifdef mega65 + jmp __io_InvertLine +.else jmp _InvertLine +.endif RecoverLine: +.ifdef mega65 + jmp __io_RecoverLine +.else jmp _RecoverLine +.endif VerticalLine: +.ifdef mega65 + jmp __io_VerticalLine +.else jmp _VerticalLine +.endif Rectangle: +.ifdef mega65 + jmp __io_Rectangle +.else jmp _Rectangle +.endif FrameRectangle: +.ifdef mega65 + jmp __io_FrameRectangle +.else jmp _FrameRectangle +.endif InvertRectangle: +.ifdef mega65 + jmp __io_InvertRectangle +.else jmp _InvertRectangle +.endif RecoverRectangle: +.ifdef mega65 + jmp __io_RecoverRectangle +.else jmp _RecoverRectangle +.endif DrawLine: jmp _DrawLine DrawPoint: jmp _DrawPoint GraphicsString: +.ifdef mega65 + jmp __io_GraphicsString +.else jmp _GraphicsString +.endif SetPattern: jmp _SetPattern GetScanLine: @@ -552,7 +603,11 @@ i_BitmapUp: i_PutString: jmp _i_PutString GetRealSize: +.ifdef mega65 + jmp __io_GetRealSize +.else jmp _GetRealSize +.endif i_FillRam: jmp _i_FillRam i_MoveData: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index a2d8b4f0..7bb01090 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -36,12 +36,12 @@ SEGMENTS { files8: load = UNDERLAY, type = ro; files9: load = UNDERLAY, type = ro; files10: load = UNDERLAY, type = ro; + tobasic2: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; # ... - tobasic2: load = KERNALHDR, type = ro; mainloop1: load = KERNALHDR, type = ro; files2: load = KERNALHDR, type = ro; load1a: load = KERNALHDR, type = ro; @@ -96,45 +96,47 @@ SEGMENTS { panic2: load = KERNAL, type = ro; panic3: load = KERNAL, type = ro; serial2: load = KERNAL, type = ro; - patterns: load = KERNAL, type = ro; memory3: load = KERNAL, type = ro; load3: load = KERNAL, type = ro; + graph3c: load = KERNAL, type = ro; + iojmp: load = KERNAL, type = ro; mouseptr: load = KERNAL, type = ro; dlgbox2: load = KERNAL, type = ro; graph2a: load = KERNAL, type = ro; - graph2b: load = KERNAL, type = ro; graph2c: load = KERNAL, type = ro; - graph2d: load = KERNAL, type = ro; graph2e: load = KERNAL, type = ro; - graph2f: load = KERNAL, type = ro; graph2g: load = KERNAL, type = ro; - graph2h: load = KERNAL, type = ro; graph2p: load = KERNAL, type = ro; graph2i1: load = KERNAL, type = ro; - inline: load = KERNAL, type = ro; - graph2j: load = KERNAL, type = ro; graph2k: load = KERNAL, type = ro; graph2l1: load = KERNAL, type = ro; - graph2l2: load = KERNAL, type = ro; graph2m: load = KERNAL, type = ro; - graph2n: load = KERNAL, type = ro; graph2o: load = KERNAL, type = ro; bswfont: load = KERNAL, type = ro; bswfont80: load = KERNAL, type = ro; + patterns: load = KERNAL, type = ro; + dlgbox1k: load = KERNAL, type = ro; init4: load = KERNAL, type = ro; fonts2: load = KERNAL, type = ro; fonts3: load = KERNAL, type = ro; fonts4: load = KERNAL, type = ro; fonts4a: load = KERNAL, type = ro; fonts4b: load = KERNAL, type = ro; + graph2n: load = KERNAL, type = ro; + graph2l2: load = KERNAL, type = ro; + inline: load = KERNAL, type = ro; + graph2b: load = KERNAL, type = ro; + graph2d: load = KERNAL, type = ro; + graph2f: load = KERNAL, type = ro; + graph2h: load = KERNAL, type = ro; + graph2j: load = KERNAL, type = ro; init3: load = KERNAL, type = ro; - graph3a: load = KERNAL, type = ro; - graph3b: load = KERNAL, type = ro; - graph3c: load = KERNAL, type = ro; conio1: load = KERNAL, type = ro; conio2: load = KERNAL, type = ro; conio3a: load = KERNAL, type = ro; conio3b: load = KERNAL, type = ro; + graph3a: load = KERNAL, type = ro; + graph3b: load = KERNAL, type = ro; conio4: load = KERNAL, type = ro; conio5: load = KERNAL, type = ro; conio6: load = KERNAL, type = ro; @@ -159,7 +161,6 @@ SEGMENTS { dlgbox1h: load = KERNAL, type = ro; dlgbox1i: load = KERNAL, type = ro; dlgbox1j: load = KERNAL, type = ro; - dlgbox1k: load = KERNAL, type = ro; mouse4: load = KERNAL, type = ro; irq: load = KERNAL, type = ro; keyboard1: load = KERNAL, type = ro; diff --git a/kernal/load/load1b.s b/kernal/load/load1b.s index 29d2a7fc..379e95ea 100644 --- a/kernal/load/load1b.s +++ b/kernal/load/load1b.s @@ -33,7 +33,14 @@ _EnterDT_DB: .global JmpR0Ind .import IncR0 IncR0JmpInd: +.ifdef mega65 + inc r0L + bne @1 + inc r0H +@1: +.else jsr IncR0 +.endif JmpR0Ind: jmp (r0) .endif diff --git a/kernal/menu/menu1.s b/kernal/menu/menu1.s index 53ef8893..ef05a000 100644 --- a/kernal/menu/menu1.s +++ b/kernal/menu/menu1.s @@ -98,6 +98,10 @@ DoMenu1: jsr GetMenuDesc sec DoMenu1_1: +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif php PushB dispBufferOn LoadB dispBufferOn, ST_WR_FORE @@ -187,6 +191,10 @@ DoMenu1_1: smbf ICONSON_BIT, mouseOn .endif @5: smbf MENUON_BIT, mouseOn + +.ifdef mega65 + PopB CPU_DATA +.endif jmp _StartMouseMode ;--------------------------------------------------------------- diff --git a/kernal/menu/menu3.s b/kernal/menu/menu3.s index ffd5a006..66771b82 100644 --- a/kernal/menu/menu3.s +++ b/kernal/menu/menu3.s @@ -24,8 +24,14 @@ .import menuLimitTabH .import menuOptNumber .import _InvertRectangle +.ifdef mega65 +.import __io_InvertRectangle +.endif .import _HorizontalLine .import _VerticalLine +.ifdef mega65 +.import __io_VerticalLine +.endif .import Ddec .import Rectangle @@ -133,7 +139,11 @@ LEFAE: rts lda menuLimitTabH,x sta r4H lda #menuVSeparator +.ifdef mega65 + jsr __io_VerticalLine +.else jsr _VerticalLine +.endif dec r2L bne @1 .endif @@ -358,7 +368,11 @@ Menu_8: MenuDoInvert: PushB dispBufferOn LoadB dispBufferOn, ST_WR_FORE +.ifdef mega65 + jsr __io_InvertRectangle +.else jsr _InvertRectangle +.endif PopB dispBufferOn rts .endif diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 14a4e1d0..9cfab757 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -113,8 +113,10 @@ ASSERT_NOT_BELOW_IO sta cia1base+9 ; seconds: 0 sta cia1base+8 ; 10ths: 0 +.ifndef mega65 lda #RAM_64K sta CPU_DATA +.endif ASSERT_NOT_BELOW_IO jsr i_FillRam diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 8bcec70a..9589f494 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -583,11 +583,13 @@ InitClock: ldx #$00 jsr RestartProcess jsr EnableProcess + rts ProzessTab: .word ShowClock .word 500 year = $8516 -ShowClock: LoadB dispBufferOn,%10000000 +ShowClock: + LoadB dispBufferOn,%10000000 php sei ldy #4 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 3e23795e..5b8257b0 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -898,9 +898,15 @@ OpenDa: pha sta $d01d jmp @gend @g80: +.ifdef mega65 + lda $d01d + and #%11111011 + sta $d01d +.else lda $d01d ora #%100 sta $d01d +.endif @gend: .endif jsr DoneWithIO @@ -1532,7 +1538,9 @@ ReLoadAll: ldy #3 bmi ReLoadAll2 Reset: jsr GotoFirstMenu Reset2: jsr ClearScreen -ReLoadAll2: ldx #03 +ReLoadAll2: + + ldx #03 @10: txa pha lda activeWindow,x @@ -1571,6 +1579,7 @@ RedrawHead: lda #2 .word 0,319 .endif jsr MaxTextWin + jsr DoHauptMenu lda #0 jsr SetPattern @@ -2982,12 +2991,18 @@ File_Selected: ; Auswertung einer File-Selection sta $d01d jmp @qend @q80: +.ifdef mega65 + lda $d01d + and #%11111011 + sta $d01d +.else lda SchmalFlag cmp #'*' beq @q40 lda $d01d ora #%100 sta $d01d +.endif @qend: .endif jsr DoneWithIO From 979cff090b17b4e3b889344821cfec558a794bd1 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 18 May 2018 15:45:22 +0200 Subject: [PATCH 021/125] Add missing file and bugfix for recoverframe callback init. --- drv/drv1571.s | 4 +- drv/drv1581_21hd.s | 6 +- kernal/c65/iojmp.s | 133 ++++++++++++++++++++++++++++++++++++++++++++ kernal/init/init4.s | 8 +++ 4 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 kernal/c65/iojmp.s diff --git a/drv/drv1571.s b/drv/drv1571.s index 9b89a1df..b407d7b4 100644 --- a/drv/drv1571.s +++ b/drv/drv1571.s @@ -714,7 +714,7 @@ __InitForIO: sei lda CPU_DATA sta tmpCPU_DATA -.if (!.defined(config128)) || .defined(mega65) +.if (!.defined(config128)) || (!.defined(mega65)) LoadB CPU_DATA, KRNL_IO_IN .endif lda grirqen @@ -812,7 +812,7 @@ __DoneWithIO: ora #$40 sta $d031 -.if (!.defined(config128)) || .defined(mega65) +.if (!.defined(config128)) || (!.defined(mega65)) lda tmpCPU_DATA sta CPU_DATA .endif diff --git a/drv/drv1581_21hd.s b/drv/drv1581_21hd.s index 4407d61e..e7702dca 100644 --- a/drv/drv1581_21hd.s +++ b/drv/drv1581_21hd.s @@ -871,7 +871,7 @@ __InitForIO: sei ; 94F4 78 x lda CPU_DATA ; 94F5 A5 01 .. sta L9BF2 ; 94F7 8D F2 9B ... -.if (!.defined(config128)) || .defined(mega65) +.if (!.defined(config128)) || (!.defined(mega65)) lda #$36 ; 94FA A9 36 .6 sta CPU_DATA ; 94FC 85 01 .. .endif @@ -971,9 +971,11 @@ __DoneWithIO: lda #$96 sta $d02f -.if (!.defined(config128)) || .defined(mega65) +.if (!.defined(mega65)) +.if (!.defined(config128)) || (!.defined(mega65)) lda L9BF2 ; 95AD AD F2 9B ... sta CPU_DATA ; 95B0 85 01 .. +.endif .endif lda L9BF0 ; 95B2 AD F0 9B ... pha ; 95B5 48 H diff --git a/kernal/c65/iojmp.s b/kernal/c65/iojmp.s new file mode 100644 index 00000000..3a1f8ff8 --- /dev/null +++ b/kernal/c65/iojmp.s @@ -0,0 +1,133 @@ +; GEOS KERNAL by Berkeley Softworks +; reverse engineered by Michael Steil, Maciej Witkowiak, Falk Rehwagen + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "config.inc" +.include "kernal.inc" +.include "c64.inc" + +.global __io_HorizontalLine +.global __io_InvertLine +.global __io_RecoverLine +.global __io_VerticalLine +.global __io_Rectangle +.global __io_InvertRectangle +.global __io_RecoverRectangle +.global __io_ImprintRectangle +.global __io_FrameRectangle +.global __io_GraphicsString +.global __io_SetPattern +.global __io_GetRealSize + +.import _HorizontalLine +.import _InvertLine +.import _RecoverLine +.import _VerticalLine +.import _Rectangle +.import _InvertRectangle +.import _RecoverRectangle +.import _ImprintRectangle +.import _FrameRectangle +.import _GraphicsString +.import _SetPattern +.import _GetScanLine +.import _GetRealSize + +.segment "iojmp" + +; DBIcPicOK 00CFA2 RLA +; BSWFont 00D5AC RLA +; BSWFont80 00D894 RLA +; InitRamTab 00DC39 RLA + +__io_HorizontalLine: + tax + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + txa + jsr _HorizontalLine +__io_ret: + PopB CPU_DATA + rts + +__io_InvertLine: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _InvertLine + jmp __io_ret + +__io_RecoverLine: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _RecoverLine + jmp __io_ret + +__io_VerticalLine: + tax + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + txa + jsr _VerticalLine + jmp __io_ret + +__io_Rectangle: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _Rectangle + jmp __io_ret + +__io_InvertRectangle: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _InvertRectangle + jmp __io_ret + +__io_RecoverRectangle: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _RecoverRectangle + jmp __io_ret + +__io_ImprintRectangle: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _ImprintRectangle + jmp __io_ret + +__io_FrameRectangle: + tax + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + txa + jsr _FrameRectangle + jmp __io_ret + +__io_GraphicsString: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _GraphicsString + jmp __io_ret + +__io_SetPattern: + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + jsr _SetPattern + jmp __io_ret + +__io_GetRealSize: + ldy CPU_DATA + sty @1 +1 + ldy #RAM_64K + sty CPU_DATA + jsr _GetRealSize + pha +@1: + lda #0 + sta CPU_DATA + pla + rts + + + diff --git a/kernal/init/init4.s b/kernal/init/init4.s index 54a5fdeb..e4c037cf 100644 --- a/kernal/init/init4.s +++ b/kernal/init/init4.s @@ -14,7 +14,11 @@ .import _Panic .import _InterruptMain .import clkBoxTemp +.ifdef mega65 +.import __io_RecoverRectangle +.else .import _RecoverRectangle +.endif .global InitRamTab @@ -46,7 +50,11 @@ InitRamTab: .word 0 ; StringFaultVec .word 0 ; alarmTmtVector .word _Panic ; BRKVector +.ifdef mega65 + .word __io_RecoverRectangle ; RecoverVector +.else .word _RecoverRectangle ; RecoverVector +.endif .byte SelectFlashDelay ; selectionFlash .byte 0 ; alphaFlag .byte ST_FLASH ; iconSelFlg From 62265b4bffa9c0e614ef3b9aa8b48664b61be32e Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 24 Jun 2018 12:03:31 +0200 Subject: [PATCH 022/125] Added high res basics implemented for sprite operations. PosSprite implementation has some todo with registers. --- inc/const.inc | 7 ++-- inc/kernal.inc | 7 ++++ input/joydrv.s | 8 +++-- kernal/c65/map.s | 69 +++++++++++++++++++++++++++---------- kernal/fonts/fonts2.s | 7 +++- kernal/graph/mode.s | 4 +-- kernal/graph/normalize.s | 24 +++++++++++++ kernal/graph/scanline.s | 16 +++++---- kernal/hw/hw1a.s | 2 +- kernal/hw/hw1b.s | 57 +++++++++++++++++++++++++++++- kernal/init/init2.s | 22 ++++++++++++ kernal/jumptab/jumptab.s | 14 ++++++-- kernal/kernal_mega65.cfg | 4 +-- kernal/mainloop/mainloop2.s | 2 +- kernal/mainloop/mainloop3.s | 4 +-- kernal/mouse/mouse2.s | 63 +++++++++++++++++++++++++++++---- kernal/mouse/mouse3.s | 6 ++++ kernal/sprites/sprites.s | 50 ++++++++++++++++++++------- loader/loader.s | 67 +++++++++++++++++++++++++++++++++++ 19 files changed, 374 insertions(+), 59 deletions(-) diff --git a/inc/const.inc b/inc/const.inc index f7abe744..f0647536 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -88,11 +88,11 @@ GRBANK2 = %01 GRBANK3 = %00 ; screen -VIC_X_POS_OFF = 24 +VIC_X_POS_OFF = 7 VIC_Y_POS_OFF = 50 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 -SC_PIX_WIDTH = 320 +SC_PIX_WIDTH = 800 SC_SIZE = 8000 ; 128 screen size constants SCREENBYTEWIDTH = 80 @@ -437,3 +437,6 @@ ARROW = 0 ; pass this to SetMsePic GR_40 = 0 ; use these two to test GR_80 = $80 ; graphMode + +; high resolution +HIGH_Y_MASK = %00011111 \ No newline at end of file diff --git a/inc/kernal.inc b/inc/kernal.inc index a658d427..e7c05797 100644 --- a/inc/kernal.inc +++ b/inc/kernal.inc @@ -137,9 +137,16 @@ bank0SavePS = $8899 .endif .ifdef mega65 lowMap = $8897 +lowMapBnk = $8892 highMap = $8898 +highMapBnk = $8893 lastHighMap = $8899 countHighMap = $8894 + +uncompactedY0 = $888D +uncompactedY1 = $888E +uncompactedY2 = $888F + .endif L8A7F = $8A7F ; only written to once diff --git a/input/joydrv.s b/input/joydrv.s index 5a0e2cb2..7a0248cd 100644 --- a/input/joydrv.s +++ b/input/joydrv.s @@ -50,6 +50,8 @@ _SlowMouse: SlowMse0: rts +; starting GEOS 6.0 the high byte of Y positiokn is passed and update in r3H +; after uncompacting mouseXPos/mouseYPos _UpdateMouse: jsr JoyProc3 bbrf MOUSEON_BIT, mouseOn, SlowMse0 @@ -72,6 +74,9 @@ UpdMse0: lda r1H adc mouseYPos sta mouseYPos + tya + adc r3H + sta r3H rts JoyProc1: @@ -115,7 +120,6 @@ JoyProc2: iny JProc2_1: sty r11H - sty r12L asl rol r11H asl @@ -127,7 +131,7 @@ JProc2_1: lda r11H adc mouseXPos sta mouseXPos - lda r12L + tya adc mouseXPos+1 sta mouseXPos+1 rts diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 794a842f..c1156581 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -62,6 +62,8 @@ .import _ReadRecord .import _WriteRecord .import _ReadByte +.import __CRC +.import __GetRandom .global _map_FollowChain .global _map_FindFTypes @@ -90,6 +92,8 @@ .global _map_ReadRecord .global _map_WriteRecord .global _map_ReadByte +.global _map__CRC +.global _map__GetRandom @@ -99,14 +103,18 @@ ; Maps area from $a000 to $c000 ; ; Pass: a page offset from $a000 +; x bank offset ; ; Return: nothing ; Destroyed: a x y z ;--------------------------------------------------------------- _MapHigh: cmp highMap + bne @not_done + cpx highMapBnk beq @done +@not_done: cmp #0 beq @0 pha @@ -119,6 +127,7 @@ _MapHigh: @0: sta highMap + stx highMapBnk lda countHighMap sta $8895 jsr ApplyMapping @@ -132,15 +141,21 @@ _MapHigh: ; Maps area from $6000 to $8000 ; ; Pass: a page offset from $6000 +; x bank offset ; ; Return: nothing ; Destroyed: a x y z ;--------------------------------------------------------------- _MapLow: cmp lowMap + bne @not_done + cpx lowMapBnk + beq @done +@not_done: beq @done sta lowMap + stx lowMapBnk jsr ApplyMapping @done: @@ -155,20 +170,24 @@ ApplyMapping: ; Z high map/offset hight ; config High - ldz #$20 ; map $a000-$c000 + lda highMapBnk + ora #$20 + taz lda highMap asl bcc @2 - ldz #$21 + inz @2: tay ; config Low - ldx #$80 + lda lowMapBnk + ora #$80 + tax lda lowMap asl bcc @1 - ldx #$81 + inx @1: map @@ -234,67 +253,77 @@ _map_BldGDirEntry: _map_DeleteFile: jsr MapUnterlay jsr _DeleteFile - jmp UnmapUnderlay + bra __unmap _map_FreeFile: jsr MapUnterlay jsr _FreeFile - jmp UnmapUnderlay + bra __unmap _map_FastDelFile: jsr MapUnterlay jsr _FastDelFile - jmp UnmapUnderlay + bra __unmap _map_RenameFile: jsr MapUnterlay jsr _RenameFile - jmp UnmapUnderlay + bra __unmap _map_OpenRecordFile: jsr MapUnterlay jsr _OpenRecordFile - jmp UnmapUnderlay + bra __unmap _map_CloseRecordFile: jsr MapUnterlay jsr _CloseRecordFile - jmp UnmapUnderlay + bra __unmap _map_UpdateRecordFile: jsr MapUnterlay jsr _UpdateRecordFile - jmp UnmapUnderlay + bra __unmap _map_NextRecord: jsr MapUnterlay jsr _NextRecord - jmp UnmapUnderlay + bra __unmap _map_PreviousRecord: jsr MapUnterlay jsr _PreviousRecord - jmp UnmapUnderlay + bra __unmap _map_PointRecord: jsr MapUnterlay jsr _PointRecord - jmp UnmapUnderlay + bra __unmap _map_DeleteRecord: jsr MapUnterlay jsr _DeleteRecord - jmp UnmapUnderlay + bra __unmap _map_InsertRecord: jsr MapUnterlay jsr _InsertRecord - jmp UnmapUnderlay + bra __unmap _map_AppendRecord: jsr MapUnterlay jsr _AppendRecord - jmp UnmapUnderlay + bra __unmap _map_ReadRecord: jsr MapUnterlay jsr _ReadRecord - jmp UnmapUnderlay + bra __unmap _map_WriteRecord: jsr MapUnterlay jsr _WriteRecord - jmp UnmapUnderlay + bra __unmap _map_ReadByte: jsr MapUnterlay jsr _ReadByte + bra __unmap +_map__CRC: + jsr MapUnterlay + jsr __CRC +__unmap: jmp UnmapUnderlay +_map__GetRandom: + jsr MapUnterlay + jsr __GetRandom + bra __unmap + MapUnterlay: pha @@ -309,6 +338,7 @@ MapUnterlay: lda highMap sta lastHighMap lda #0 + ldx #0 jsr _MapHigh jmp @2 @1: lda highMap @@ -340,6 +370,7 @@ UnmapUnderlay: cmp #0 bne @1 lda lastHighMap + ldx #0 jsr _MapHigh lda #0 sta lastHighMap diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index cabc70ff..4333207e 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -968,7 +968,12 @@ FontPutChar: AddVB $78, r5L bra @98 @99: - AddVB $38, r5L + inc r5H + inc r6H + inc r5H + inc r6H + ;AddVB $38, r5L + AddVB $18, r5L @98: sta r6L bcc @8 diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 4858860b..fe494751 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -51,13 +51,13 @@ SetNewMode0: ; 80 column mode ora #%10000000 - sta $d031 + ;sta $d031 END_IO rts @1: ; 40 column mode and #%01111111 - sta $d031 + ;sta $d031 END_IO rts diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index b07e4511..36d8977b 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -11,6 +11,9 @@ .include "c64.inc" .global _NormalizeX +.ifdef mega65 +.global UncompactXY +.endif .segment "graph5" @@ -38,3 +41,24 @@ _NormalizeX: @3: ora #$E0 sta zpage+1,x @4: rts + +.ifdef mega65 +UncompactXY: + tax + lsr + lsr + lsr + lsr + bit #$08 + beq @3 + ora #$F0 +@3: + tay + txa + and #$0F + bit #$08 + beq @2 + ora #$F0 +@2: + rts +.endif \ No newline at end of file diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index f4bb16ec..e61aabf5 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -61,7 +61,7 @@ _GetScanLine: lsr .ifdef mega65 bbrf 7, graphMode, @X - ora #$20 +;; ora #$20 @X: .endif tax @@ -102,16 +102,17 @@ _GetScanLine: ; a/x lower, y/z highter lda r5H bbsf 7, graphMode, @X1 - and #%11100000 + ;;and #%11100000 @X1: sub #$60 lsr + ldx #0 jsr _MapHigh lda r5H and #%00011111 - bbrf 7, graphMode, @X2 + ;;bbrf 7, graphMode, @X2 and #%00000001 @X2: add #$a0 @@ -197,12 +198,13 @@ _GetScanLine: ; a/x lower, y/z highter lda r5H bbsf 7, graphMode, @X1_ - and #%11100000 + ;;and #%11100000 @X1_: pha sub #$60 lsr + ldx #0 jsr _MapHigh ;sub #$40 ;lsr @@ -210,11 +212,12 @@ _GetScanLine: lsr add #$90 ; back buffer is at $18000 + ldx #4 jsr _MapLow lda r5H and #%00011111 - bbrf 7, graphMode, @X2_ + ;;bbrf 7, graphMode, @X2_ and #%00000001 @X2_: add #$a0 @@ -300,7 +303,8 @@ GSC80_6: .ifdef mega65 ; this is the table for the 640 pix width resolution, 320 is needed as well -.define LineTab SCREEN_BASE65+0*320, SCREEN_BASE65+1*320, SCREEN_BASE65+2*320, SCREEN_BASE65+3*320, SCREEN_BASE65+4*320, SCREEN_BASE65+5*320, SCREEN_BASE65+6*320, SCREEN_BASE65+7*320, SCREEN_BASE65+8*320, SCREEN_BASE65+9*320, SCREEN_BASE65+10*320, SCREEN_BASE65+11*320, SCREEN_BASE65+12*320, SCREEN_BASE65+13*320, SCREEN_BASE65+14*320, SCREEN_BASE65+15*320, SCREEN_BASE65+16*320, SCREEN_BASE65+17*320, SCREEN_BASE65+18*320, SCREEN_BASE65+19*320, SCREEN_BASE65+20*320, SCREEN_BASE65+21*320, SCREEN_BASE65+22*320, SCREEN_BASE65+23*320, SCREEN_BASE65+24*320, SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320, SCREEN_BASE65+0*640, SCREEN_BASE65+1*640, SCREEN_BASE65+2*640, SCREEN_BASE65+3*640, SCREEN_BASE65+4*640, SCREEN_BASE65+5*640, SCREEN_BASE65+6*640, SCREEN_BASE65+7*640, SCREEN_BASE65+8*640, SCREEN_BASE65+9*640, SCREEN_BASE65+10*640, SCREEN_BASE65+11*640, SCREEN_BASE65+12*640, SCREEN_BASE65+13*640, SCREEN_BASE65+14*640, SCREEN_BASE65+15*640, SCREEN_BASE65+16*640, SCREEN_BASE65+17*640, SCREEN_BASE65+18*640, SCREEN_BASE65+19*640, SCREEN_BASE65+20*640, SCREEN_BASE65+21*640, SCREEN_BASE65+22*640, SCREEN_BASE65+23*640, SCREEN_BASE65+24*640, SCREEN_BASE65+25*640, SCREEN_BASE65+26*640, SCREEN_BASE65+27*640, SCREEN_BASE65+28*640, SCREEN_BASE65+29*640, SCREEN_BASE65+30*640, SCREEN_BASE65+31*640, SCREEN_BASE65+32*640, SCREEN_BASE65+33*640, SCREEN_BASE65+34*640, SCREEN_BASE65+35*640, SCREEN_BASE65+36*640, SCREEN_BASE65+37*640, SCREEN_BASE65+38*640, SCREEN_BASE65+39*640, SCREEN_BASE65+40*640, SCREEN_BASE65+41*640, SCREEN_BASE65+42*640, SCREEN_BASE65+43*640, SCREEN_BASE65+44*640, SCREEN_BASE65+45*640,SCREEN_BASE65+46*640, SCREEN_BASE65+47*640, SCREEN_BASE65+48*640, SCREEN_BASE65+49*640 +;.define LineTab SCREEN_BASE65+0*320, SCREEN_BASE65+1*320, SCREEN_BASE65+2*320, SCREEN_BASE65+3*320, SCREEN_BASE65+4*320, SCREEN_BASE65+5*320, SCREEN_BASE65+6*320, SCREEN_BASE65+7*320, SCREEN_BASE65+8*320, SCREEN_BASE65+9*320, SCREEN_BASE65+10*320, SCREEN_BASE65+11*320, SCREEN_BASE65+12*320, SCREEN_BASE65+13*320, SCREEN_BASE65+14*320, SCREEN_BASE65+15*320, SCREEN_BASE65+16*320, SCREEN_BASE65+17*320, SCREEN_BASE65+18*320, SCREEN_BASE65+19*320, SCREEN_BASE65+20*320, SCREEN_BASE65+21*320, SCREEN_BASE65+22*320, SCREEN_BASE65+23*320, SCREEN_BASE65+24*320, SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320,SCREEN_BASE65+0*320, SCREEN_BASE65+0*640, SCREEN_BASE65+1*640, SCREEN_BASE65+2*640, SCREEN_BASE65+3*640, SCREEN_BASE65+4*640, SCREEN_BASE65+5*640, SCREEN_BASE65+6*640, SCREEN_BASE65+7*640, SCREEN_BASE65+8*640, SCREEN_BASE65+9*640, SCREEN_BASE65+10*640, SCREEN_BASE65+11*640, SCREEN_BASE65+12*640, SCREEN_BASE65+13*640, SCREEN_BASE65+14*640, SCREEN_BASE65+15*640, SCREEN_BASE65+16*640, SCREEN_BASE65+17*640, SCREEN_BASE65+18*640, SCREEN_BASE65+19*640, SCREEN_BASE65+20*640, SCREEN_BASE65+21*640, SCREEN_BASE65+22*640, SCREEN_BASE65+23*640, SCREEN_BASE65+24*640, SCREEN_BASE65+25*640, SCREEN_BASE65+26*640, SCREEN_BASE65+27*640, SCREEN_BASE65+28*640, SCREEN_BASE65+29*640, SCREEN_BASE65+30*640, SCREEN_BASE65+31*640, SCREEN_BASE65+32*640, SCREEN_BASE65+33*640, SCREEN_BASE65+34*640, SCREEN_BASE65+35*640, SCREEN_BASE65+36*640, SCREEN_BASE65+37*640, SCREEN_BASE65+38*640, SCREEN_BASE65+39*640, SCREEN_BASE65+40*640, SCREEN_BASE65+41*640, SCREEN_BASE65+42*640, SCREEN_BASE65+43*640, SCREEN_BASE65+44*640, SCREEN_BASE65+45*640,SCREEN_BASE65+46*640, SCREEN_BASE65+47*640, SCREEN_BASE65+48*640, SCREEN_BASE65+49*640 +.define LineTab SCREEN_BASE65+0*800, SCREEN_BASE65+1*800, SCREEN_BASE65+2*800, SCREEN_BASE65+3*800, SCREEN_BASE65+4*800, SCREEN_BASE65+5*800, SCREEN_BASE65+6*800, SCREEN_BASE65+7*800, SCREEN_BASE65+8*800, SCREEN_BASE65+9*800, SCREEN_BASE65+10*800, SCREEN_BASE65+11*800, SCREEN_BASE65+12*800, SCREEN_BASE65+13*800, SCREEN_BASE65+14*800, SCREEN_BASE65+15*800, SCREEN_BASE65+16*800, SCREEN_BASE65+17*800, SCREEN_BASE65+18*800, SCREEN_BASE65+19*800, SCREEN_BASE65+20*800, SCREEN_BASE65+21*800, SCREEN_BASE65+22*800, SCREEN_BASE65+23*800, SCREEN_BASE65+24*800, SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800, SCREEN_BASE65+0*800, SCREEN_BASE65+1*800, SCREEN_BASE65+2*800, SCREEN_BASE65+3*800, SCREEN_BASE65+4*800, SCREEN_BASE65+5*800, SCREEN_BASE65+6*800, SCREEN_BASE65+7*800, SCREEN_BASE65+8*800, SCREEN_BASE65+9*800, SCREEN_BASE65+10*800, SCREEN_BASE65+11*800, SCREEN_BASE65+12*800, SCREEN_BASE65+13*800, SCREEN_BASE65+14*800, SCREEN_BASE65+15*800, SCREEN_BASE65+16*800, SCREEN_BASE65+17*800, SCREEN_BASE65+18*800, SCREEN_BASE65+19*800, SCREEN_BASE65+20*800, SCREEN_BASE65+21*800, SCREEN_BASE65+22*800, SCREEN_BASE65+23*800, SCREEN_BASE65+24*800, SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800 LineTabL: .lobytes LineTab diff --git a/kernal/hw/hw1a.s b/kernal/hw/hw1a.s index 6f3252a7..8499d636 100644 --- a/kernal/hw/hw1a.s +++ b/kernal/hw/hw1a.s @@ -19,6 +19,6 @@ VIC_IniTbl: .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $3b, $fb, $aa, $aa, $01, $08, $00 - .byte $38, $0f, $01, $00, $00, $00 + .byte $00, $0f, $01, $00, $00, $00 VIC_IniTbl_end: diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 40c0ede9..2f43c9e3 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -93,10 +93,65 @@ ASSERT_NOT_BELOW_IO jsr SetColorMode .endif .ifdef mega65 +.if 1 ; Enable C65GS IO ; 47, 53 = enable VIC IV ; a5, 96 = enable VIC III + lda #$47 + sta $d02f + lda #$53 + sta $d02f + + ; enable 800x600 mode + ; 1. Set horizontal border width + LDA #$00 + STA $D05C + STA $D05D + + ; Set bitmap mode (makes horizontal borders take effect) + LDA #$3B + STA $D011 + + ; Set 640H, 400V + LDA $D031 + ORA #$C8 + STA $D031 + + lda #$04 ; 3.5Mhz, H640, bitplanes + sta $d030 + + ; Set to 100 characters per row + LDA #100 + STA $D058 + + ; Disable/Enable 16-colour sprite mode for each sprite? + LDA #$00 + STA $D06B + + ; Bit 10 of sprite X position for positions >511 + LDA #$00 + STA $D05F + + LDA #<$4000 + STA $D068 + LDA #>$4000 + STA $D069 + LDA #1 + STA $D06A + + LDA #<$2000 + STA $D060 + LDA #>$2000 + STA $D061 + LDA #<1 + STA $D062 + LDA #>1 + STA $D063 + + LDA #$8F + STA $d06D +.else lda #$a5 sta $d02f lda #$96 @@ -136,7 +191,7 @@ ASSERT_NOT_BELOW_IO sta $d100 sta $d200 sta $d300 - +.endif .endif diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 1e4fc4b7..63fdad64 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -64,6 +64,7 @@ _FirstInit: .import sysScrnColors MoveB sysScrnColors, screencolors .else +.ifndef mega65 .ifndef bsw128 LoadB screencolors, (DKGREY << 4)+LTGREY sta @1 @@ -72,12 +73,31 @@ _FirstInit: .word 1000 .word COLOR_MATRIX @1: .byte (DKGREY << 4)+LTGREY +.endif START_IO_X LoadB mob0clr, BLUE sta mob1clr LoadB extclr, BLACK END_IO_X .endif +.if .defined(mega65) + ldy CPU_DATA + LoadB CPU_DATA, RAM_64K + + lda #0 + ldx #62 +@2: + cpx #24 + bpl @2_ + lda InitMsePic,x +@2_: + sta mousePicData,x + dex + bpl @2 + + sty CPU_DATA +.else + ldy #62 @2: lda #0 sta mousePicData,Y @@ -92,6 +112,8 @@ _FirstInit: sta mousePicData-1,x dex bne @3 +.endif + .ifdef wheels .import sysMob0Clr .import sysExtClr diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 64b6954c..01b2569e 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -128,8 +128,6 @@ ; ... .import __IsMseInRegion -.import __CRC -.import __GetRandom .import __DSdiv .import __Ddiv .import __DMult @@ -201,6 +199,8 @@ .import _map_ReadRecord .import _map_WriteRecord .import _map_ReadByte +.import _map__CRC +.import _map__GetRandom .else .import _InsertRecord .import _NextRecord @@ -229,6 +229,8 @@ .import _WriteRecord .import _RstrAppl .import _BldGDirEntry +.import __CRC +.import __GetRandom .endif @@ -575,7 +577,11 @@ InitRam: PutDecimal: jmp _PutDecimal GetRandom: +.ifdef mega65 + jmp _map__GetRandom +.else jmp __GetRandom +.endif MouseUp: jmp _MouseUp MouseOff: @@ -693,7 +699,11 @@ FindFile: jmp _FindFile .endif CRC: +.ifdef mega65 + jmp _map__CRC +.else jmp __CRC +.endif LdFile: jmp _LdFile EnterTurbo: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 7bb01090..5ece648e 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -37,6 +37,8 @@ SEGMENTS { files9: load = UNDERLAY, type = ro; files10: load = UNDERLAY, type = ro; tobasic2: load = UNDERLAY, type = ro; + math2: load = UNDERLAY, type = ro; + math1d: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -89,7 +91,6 @@ SEGMENTS { math1b: load = KERNAL, type = ro; math1c1: load = KERNAL, type = ro; math1c2: load = KERNAL, type = ro; - math1d: load = KERNAL, type = ro; memory2: load = KERNAL, type = ro; mouse1: load = KERNAL, type = ro; panic1: load = KERNAL, type = ro; @@ -140,7 +141,6 @@ SEGMENTS { conio4: load = KERNAL, type = ro; conio5: load = KERNAL, type = ro; conio6: load = KERNAL, type = ro; - math2: load = KERNAL, type = ro; graph4: load = KERNAL, type = ro; graph5: load = KERNAL, type = ro; mouse2: load = KERNAL, type = ro; diff --git a/kernal/mainloop/mainloop2.s b/kernal/mainloop/mainloop2.s index 122f4c26..58972030 100644 --- a/kernal/mainloop/mainloop2.s +++ b/kernal/mainloop/mainloop2.s @@ -21,7 +21,7 @@ _MainLoop2: START_IO_X lda grcntrl1 and #%01111111 - sta grcntrl1 + ;sta grcntrl1 END_IO_X jmp _MainLoop .endif diff --git a/kernal/mainloop/mainloop3.s b/kernal/mainloop/mainloop3.s index 7562dc8a..12a5d7e6 100644 --- a/kernal/mainloop/mainloop3.s +++ b/kernal/mainloop/mainloop3.s @@ -10,7 +10,7 @@ .include "kernal.inc" .include "c64.inc" -.import __GetRandom +.import _map__GetRandom .import ProcessCursor .import __ProcessDelays .import __ProcessTimers @@ -30,4 +30,4 @@ _InterruptMain: jsr __ProcessTimers jsr __ProcessDelays jsr ProcessCursor - jmp __GetRandom + jmp _map__GetRandom diff --git a/kernal/mouse/mouse2.s b/kernal/mouse/mouse2.s index f37c7fee..7a53caea 100644 --- a/kernal/mouse/mouse2.s +++ b/kernal/mouse/mouse2.s @@ -30,6 +30,9 @@ .ifndef bsw128 .import EnablSprite .endif +.ifdef mega65 +.import UncompactXY +.endif .global _MouseOff .global _StartMouseMode @@ -78,6 +81,12 @@ _MouseUp: rts ProcessMouse: + ; uncompact mouse position first + lda mouseXPos+1 + jsr UncompactXY + sty r3H + sta mouseXPos+1 + .ifdef wheels_bad_ideas ; While the mouse pointer is not showing, ; Wheels doesn't call the mouse driver. @@ -91,10 +100,14 @@ ProcessMouse: bbrf MOUSEON_BIT, mouseOn, @1 jsr UpdateMouse .else + jsr UpdateMouse + bbrf MOUSEON_BIT, mouseOn, @1 .endif jsr CheckMsePos + jsr @1 + LoadB r3L, 0 .ifdef bsw128 bbsf 7, graphMode, @X @@ -107,11 +120,36 @@ ProcessMouse: .ifndef bsw128 jsr EnablSprite .endif -@1: rts + rts +@1: + ; compact mouse position + lda mouseXPos+1 + and #$0F + sta mouseXPos+1 + lda r3H + asl + asl + asl + asl + ora mouseXPos+1 + sta mouseXPos+1 + rts CheckMsePos: +.ifdef mega65 + lda mouseLeft+1 + jsr UncompactXY + sta r4L + sty r4H + + lda mouseRight+1 + jsr UncompactXY + sta r5L + sty r5H +.endif + ldy mouseLeft - ldx mouseLeft+1 + ldx r4L ;mouseLeft+1 lda mouseXPos+1 bmi @2 cpx mouseXPos+1 @@ -123,7 +161,7 @@ CheckMsePos: sty mouseXPos stx mouseXPos+1 @3: ldy mouseRight - ldx mouseRight+1 + ldx r5L ;mouseRight+1 cpx mouseXPos+1 bne @4 cpy mouseXPos @@ -132,18 +170,30 @@ CheckMsePos: sty mouseXPos stx mouseXPos+1 @5: ldy mouseTop - CmpBI mouseYPos, 228 - bcs @6 + ldx r4H + lda r3H + bmi @6 + ;CmpBI mouseYPos, 228 + ;bcs @6 + cpx r3H + bne @11 cpy mouseYPos +@11: bcc @7 beq @7 @6: smbf OFFTOP_BIT, faultData sty mouseYPos + stx r3H @7: ldy mouseBottom + ldx r5H + cpx r3H + bne @12 cpy mouseYPos +@12: bcs @8 smbf OFFBOTTOM_BIT, faultData sty mouseYPos + stx r3H @8: bbrf MENUON_BIT, mouseOn, @B lda mouseYPos cmp menuTop @@ -157,7 +207,8 @@ CheckMsePos: bcc @B beq @B @A: smbf OFFMENU_BIT, faultData -@B: rts +@B: + rts .ifdef wheels ; this got moved :( .import ScreenDimensions diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index c6e43da4..9f20ebe0 100644 --- a/kernal/mouse/mouse3.s +++ b/kernal/mouse/mouse3.s @@ -22,6 +22,8 @@ ResetMseRegion: sta mouseLeft+1 sta mouseTop .if .defined(bsw128) || .defined(mega65) + +.if 0 LoadB mouseBottom, SC_PIX_HEIGHT-1 bbsf 7, graphMode, @2 LoadW mouseRight, SC_PIX_WIDTH-1 @@ -29,6 +31,10 @@ ResetMseRegion: LoadW mouseRight, SCREENPIXELWIDTH-1 @1: rts @2: LoadW mouseRight, SCREENPIXELWIDTH-1 +.endif + LoadB mouseBottom, $90 + LoadW mouseRight, 800 + $1000 + .else LoadW mouseRight, SC_PIX_WIDTH-1 LoadB mouseBottom, SC_PIX_HEIGHT-1 diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index 8347d239..db2ebc7b 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -17,6 +17,8 @@ .import NormalizeX +.import UncompactXY + ; syscalls .global _DisablSprite .global _DrawSprite @@ -67,11 +69,23 @@ _PosSprite: jsr NormalizeX .endif START_IO + + lda r4H + jsr UncompactXY + sta r4H + tya + tax + lda r3L - asl + rol tay + + txa + lsr lda r5L + ror addv VIC_Y_POS_OFF + sta mob0ypos,Y .ifdef bsw128 lda graphMode @@ -104,19 +118,31 @@ _PosSprite: .endif lda r6L sta mob0xpos,Y - ldx r3L - lda BitMaskPow2,x - eor #$FF - and msbxpos - tay - lda #1 - and r6H - beq @1 + + lda #1 + ldy msbxpos + jsr @2_ + sta msbxpos + lda #2 + ldy $d05f + jsr @2_ + sta $d05f + + END_IO + rts +@2_: + ldx r3L + and r6H + beq @2_clear tya ora BitMaskPow2,x - tay -@1: sty msbxpos - END_IO + rts + +@2_clear: + tya + eor #$ff + ora BitMaskPow2,x + eor #$ff rts ;--------------------------------------------------------------- diff --git a/loader/loader.s b/loader/loader.s index f7cf6e87..c09f0592 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -4,6 +4,9 @@ ;.INCLUDE "c65.inc" +.include "const.inc" +.include "geossym.inc" + .SETCPU "4510" .SEGMENT "LOADADDR" @@ -80,6 +83,70 @@ next: .WORD 0 STZ $D031 STZ $D019 ; disable VIC interrupts STZ $D01A + + lda #$80 + sta $d06f + + LDA $D054 + ORA #$50 + STA $D054 + lda #$40 + sta $d031 + + ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour + ; information for bitmap mode. + ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), + ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole + ; palette. + LDA #<$2000 + STA $D060 + LDA #>$2000 + STA $D061 + LDA #<1 + STA $D062 + LDA #>1 + STA $D063 + ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. + ; (We are using 2nd bank of 64KB for this) + ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. + LDA #<$4000 + STA $D068 + LDA #>$4000 + STA $D069 + LDA #1 + STA $D06A + + + ; Setup foreground/background colours +.if 1 + LDA #<$2000 + STA $FB + LDA #>$2000 + STA $FC + LDA #<1 + STA $FD + LDA #>1 + STA $FE + + LDX #100 + LDZ #$00 + LDA #(DKGREY << 4)+LTGREY +colloop: + + NOP + STA ($FB),Z + INZ + DEX + BNE cc1 + LDX #100 +cc1: + CPZ #$00 + bne colloop + inc $fc + ldy $fc + cpy #$40 + bne colloop +.endif LDA #$30 ; full RAM for uncrunching STA 1 .IMPORT uncruncher From d1e2cd5fe8e8e1c76501011ae0101609dca5037c Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 6 Jan 2019 19:48:15 +0100 Subject: [PATCH 023/125] Some preliminary changes to support high resolution API for GEOS. --- config.inc | 2 + inc/const.inc | 8 +- inc/geosmac.inc | 13 ++- inc/geossym2.inc | 1 + kernal/c65/map.s | 84 +++++++++--------- kernal/graph/bitmapup.s | 15 +++- kernal/graph/clrscr.s | 12 ++- kernal/graph/line.s | 67 ++++++++++++++- kernal/graph/normalize.s | 74 +++++++++++++++- kernal/graph/rect.s | 40 ++++++++- kernal/graph/scanline.s | 82 ++++++++++++++++-- kernal/hw/hw1b.s | 14 +++ kernal/init/init1.s | 10 +++ kernal/jumptab/jumptab.s | 4 + kernal/kernal_mega65.cfg | 9 +- kernal/mouse/mouse3.s | 4 +- kernal/sprites/sprites.s | 22 +++-- kernal/start/start64.s | 13 +++ topdesk/Include/DeskMain2.inc | 9 +- topdesk/Include/Symbol/Sym128.erg.inc | 6 +- topdesk/Include/Symbol/TopSym.inc | 4 + topdesk/Main/DeskTop.main.s | 57 ++++++++----- topdesk/Main/DeskTop.sub5.s | 7 +- topdesk/Main/DeskWindows.akt.inc | 117 ++++++++++++++++++++------ 24 files changed, 546 insertions(+), 128 deletions(-) diff --git a/config.inc b/config.inc index 4dd5f133..056b6056 100644 --- a/config.inc +++ b/config.inc @@ -146,6 +146,8 @@ config_inc = 1 topdesk13 = 1 config128 = 1 + + scalable_coords = 1 .endif .ifdef custom diff --git a/inc/const.inc b/inc/const.inc index f0647536..2bad0f46 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -89,7 +89,7 @@ GRBANK3 = %00 ; screen VIC_X_POS_OFF = 7 -VIC_Y_POS_OFF = 50 +VIC_Y_POS_OFF = 24 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 SC_PIX_WIDTH = 800 @@ -426,9 +426,9 @@ USELAST = 127 SHORTCUT = 128 ; C128 640 support -ADD1_W = $2000 +ADD1_W = $0000 ADD1_B = $20 -DOUBLE_W = $8000 +DOUBLE_W = $0000 DOUBLE_B = $80 ; C128 bsw128 @@ -439,4 +439,4 @@ GR_40 = 0 ; use these two to test GR_80 = $80 ; graphMode ; high resolution -HIGH_Y_MASK = %00011111 \ No newline at end of file +HIGH_Y_MASK = %00011111 diff --git a/inc/geosmac.inc b/inc/geosmac.inc index 8d2d52b7..798d9f5a 100644 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -445,4 +445,15 @@ ASSERT_NOT_BELOW_IO beq addr bcc addr .endmacro - \ No newline at end of file + +.ifdef scalable_coords + +.macro ByteCY xc, yc + .byte (yc & $FF) +.endmacro + +.macro WordCX xc, yc + .word xc + (yc/256)*16 +.endmacro + +.endif diff --git a/inc/geossym2.inc b/inc/geossym2.inc index f5110d84..e4051d2e 100644 --- a/inc/geossym2.inc +++ b/inc/geossym2.inc @@ -180,6 +180,7 @@ HideOnlyMouse = $C2F2 SetColorMode = $C2F5 ColorCard = $C2F8 ColorRectangle = $C2FB +NormalizeY = $C2FE CINT = $FF81 IOINIT = $FF84 diff --git a/kernal/c65/map.s b/kernal/c65/map.s index c1156581..5df8415e 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -95,6 +95,8 @@ .global _map__CRC .global _map__GetRandom +.global MapUnderlay +.global UnmapUnderlay ;--------------------------------------------------------------- @@ -170,26 +172,26 @@ ApplyMapping: ; Z high map/offset hight ; config High + lda highMap + asl + pha lda highMapBnk + rol ora #$20 taz - lda highMap - asl - bcc @2 - inz -@2: + pla tay ; config Low + lda lowMap + asl + pha lda lowMapBnk + rol ora #$80 tax - lda lowMap - asl - bcc @1 - inx -@1: - + pla + map eom @@ -198,31 +200,31 @@ ApplyMapping: _map_FollowChain: - jsr MapUnterlay + jsr MapUnderlay jsr _FollowChain jmp UnmapUnderlay _map_FindFTypes: - jsr MapUnterlay + jsr MapUnderlay jsr _FindFTypes jmp UnmapUnderlay _map_FindFile: - jsr MapUnterlay + jsr MapUnderlay jsr _FindFile jmp UnmapUnderlay _map_SetDevice: - jsr MapUnterlay + jsr MapUnderlay jsr _SetDevice jmp UnmapUnderlay _map_GetFHdrInfo: - jsr MapUnterlay + jsr MapUnderlay jsr _GetFHdrInfo jmp UnmapUnderlay _map_LdDeskAcc: - jsr MapUnterlay + jsr MapUnderlay jsr _LdDeskAcc jmp UnmapUnderlay _map_RstrAppl: - jsr MapUnterlay + jsr MapUnderlay jsr _RstrAppl jmp UnmapUnderlay _map_LdApplic: @@ -235,97 +237,97 @@ _map_LdApplic: MoveW_ fileHeader+O_GHST_VEC, r7 jmp StartAppl @1: rts - ;jsr MapUnterlay + ;jsr MapUnderlay ;jsr _LdApplic ;jmp UnmapUnderlay _map_SaveFile: - jsr MapUnterlay + jsr MapUnderlay jsr _SaveFile jmp UnmapUnderlay _map_SetGDirEntry: - jsr MapUnterlay + jsr MapUnderlay jsr _SetGDirEntry jmp UnmapUnderlay _map_BldGDirEntry: - jsr MapUnterlay + jsr MapUnderlay jsr _BldGDirEntry jmp UnmapUnderlay _map_DeleteFile: - jsr MapUnterlay + jsr MapUnderlay jsr _DeleteFile bra __unmap _map_FreeFile: - jsr MapUnterlay + jsr MapUnderlay jsr _FreeFile bra __unmap _map_FastDelFile: - jsr MapUnterlay + jsr MapUnderlay jsr _FastDelFile bra __unmap _map_RenameFile: - jsr MapUnterlay + jsr MapUnderlay jsr _RenameFile bra __unmap _map_OpenRecordFile: - jsr MapUnterlay + jsr MapUnderlay jsr _OpenRecordFile bra __unmap _map_CloseRecordFile: - jsr MapUnterlay + jsr MapUnderlay jsr _CloseRecordFile bra __unmap _map_UpdateRecordFile: - jsr MapUnterlay + jsr MapUnderlay jsr _UpdateRecordFile bra __unmap _map_NextRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _NextRecord bra __unmap _map_PreviousRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _PreviousRecord bra __unmap _map_PointRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _PointRecord bra __unmap _map_DeleteRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _DeleteRecord bra __unmap _map_InsertRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _InsertRecord bra __unmap _map_AppendRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _AppendRecord bra __unmap _map_ReadRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _ReadRecord bra __unmap _map_WriteRecord: - jsr MapUnterlay + jsr MapUnderlay jsr _WriteRecord bra __unmap _map_ReadByte: - jsr MapUnterlay + jsr MapUnderlay jsr _ReadByte bra __unmap _map__CRC: - jsr MapUnterlay + jsr MapUnderlay jsr __CRC __unmap: jmp UnmapUnderlay _map__GetRandom: - jsr MapUnterlay + jsr MapUnderlay jsr __GetRandom bra __unmap -MapUnterlay: +MapUnderlay: pha txa pha diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index 0c6e55d3..2a894d9f 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -63,7 +63,18 @@ _BitmapUp: rts BitmapUpHelp: - ldx r1H + ldx r1H + bit r1L + bpl @scanLine + txa + ;and #$7F + ;lsr a + ;lsr a + ;lsr a + ;tay +@scanLine: +ldy #0 +ldx #$F8 jsr _GetScanLine MoveB r2L, r3H .if .defined(bsw128) || .defined(mega65) @@ -85,6 +96,7 @@ BitmapUpHelp: sty r5H ldy #3 ; by 8 lda r1L + and #$7f bpl @4 bbrf 7, graphMode, @4 ldy #4 ; by 16 @@ -289,4 +301,3 @@ IndirectR13: IndirectR14: jmp (r14) .endif - diff --git a/kernal/graph/clrscr.s b/kernal/graph/clrscr.s index ee4280b2..42195b04 100644 --- a/kernal/graph/clrscr.s +++ b/kernal/graph/clrscr.s @@ -17,13 +17,19 @@ .global ClrScr + +SC_FROM_END = %100000000000 +SC_FROM_CENTER = %010000000000 +SC_SCALE = %110000000000 + + .ifndef wheels ;--------------------------------------------------------------- ; used by EnterDesktop ;--------------------------------------------------------------- ClrScr: .ifdef mega65 - LoadB dispBufferOn, ST_WR_FORE | ST_WR_BACK + LoadB dispBufferOn, ST_WR_FORE .else .ifdef bsw128 LoadB dispBufferOn, ST_WR_FORE | ST_WR_BACK @@ -67,10 +73,10 @@ ClrScr: jsr SetPattern jsr i_Rectangle .byte 0 ; y1 - .byte SC_PIX_HEIGHT-1 ; y2 + .byte >8)<<12); | DOUBLE_W | ADD1_W ; x2 .else .word SCREENPIXELWIDTH-1 ; x2 .endif diff --git a/kernal/graph/line.s b/kernal/graph/line.s index 11871717..bb457361 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -35,6 +35,7 @@ .endif .ifdef mega65 .import GetLeftXAddress +.import _NormalizeY .endif .global ImprintLine @@ -50,6 +51,7 @@ ; params: ; r3 x1 ; r4 x2 +; r11L y ; return: ; r8L Begin positiv mask ; r8H End negative mask @@ -64,6 +66,7 @@ PrepareXCoord: jsr _NormalizeX ldx #r4 jsr _NormalizeX + lda r4L ldx r4H cpx r3H @@ -79,7 +82,51 @@ PrepareXCoord: stx r3H @2: .endif - ldx r11L +.ifdef mega65 + lda r11L + pha + lda r3H + lsr + lsr + lsr + lsr + asl r11L + rol + asl r11L + rol + asl r11L + rol + asl r11L + rol + asl r11L + rol + tay + pla + sta r11L + and #$07 + ora #$f8 + tax +.else + lda r11L + pha + lda r3H + lsr + lsr + lsr + lsr + asl r11L + rol + asl r11L + rol + asl r11L + rol + tay + pla + sta r11L + and #$03 + ora #$f8 + tax +.endif jsr _GetScanLine lda r4L and #%00000111 @@ -126,6 +173,8 @@ _InvertLine: .ifndef mega65 ldy r3L lda r3H + and #$0F + sta r3H beq @1 inc r5H inc r6H @@ -137,10 +186,19 @@ _InvertLine: @11: ldy r3L lda r3H + and #$0F + sta r3H beq @12 - inc r5H - inc r6H + pha + add r5H + sta r5H + pla + add r6H + sta r6H @12: + lda r4H + and #$0F + sta r4H .endif lda r3H cmp r4H @@ -158,7 +216,8 @@ _InvertLine: @4: bit WheelsTemp bpl @5 eor #$FF -@5: sta (r6),y +@5: + sta (r6),y sta (r5),y tya add #8 diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index 36d8977b..363f3f08 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -13,11 +13,81 @@ .global _NormalizeX .ifdef mega65 .global UncompactXY +.global _NormalizeY .endif .segment "graph5" +.ifdef mega65 +_NormalizeY: + lda zpage+1,x + and #%11000000 + cmp #%10000000 + bne @4 + lda zpage,x + pha + + lda zpage+1,x + lsr + lsr + lsr + lsr + and #$03 + sta zpage,x + + lda zpage+1,x + and #$0F + sta zpage+1,x + + lda #<479 + clc + sbc zpage,y + sta zpage,y + lda #>479 + sbc zpage,x + + asl + asl + asl + asl + and #$30 + ora zpage+1,x + sta zpage+1,x + + pla + sta zpage,x +@4: + rts + +.endif + _NormalizeX: +.ifdef scalable_coords + lda zpage+1,x + and #%00001100 + cmp #%00001000 + bne @4 + lda zpage+1,x + pha + and #$03 + sta zpage+1,x + lda #<789 + clc + sbc zpage, x + sta zpage, x + lda #>789 + sbc zpage+1,x + sta zpage+1,x + pla + and #$F0 + ora zpage+1,x + sta zpage+1,x + rts +@4: + lda zpage+1,x + and #$F3 + sta zpage+1,x +.else lda zpage+1,x bpl @2 rol @@ -40,7 +110,9 @@ _NormalizeX: rol @3: ora #$E0 sta zpage+1,x -@4: rts +@4: +.endif + rts .ifdef mega65 UncompactXY: diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index cafdb886..eb4980d4 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -15,6 +15,8 @@ .import _RecoverLine .import _VerticalLine .import ImprintLine +.import UncompactXY +.import _NormalizeY .global _Rectangle .global _InvertRectangle @@ -35,7 +37,20 @@ ; Destroyed: a, x, y, r5 - r8, r11 ;--------------------------------------------------------------- _Rectangle: + PushW r2 + PushB r3H + PushB r4H + PushB r5H + + ldx #r3 + ldy #r2L + jsr _NormalizeY + ldx #r4 + ldy #r2H + jsr _NormalizeY + MoveB r2L, r11L + @1: lda r11L and #$07 tay @@ -52,10 +67,33 @@ _Rectangle: txa .endif jsr _HorizontalLine - lda r11L + ;lda r11L inc r11L + bne @2 + + lda r3H + add #16 + sta r3H + ;cmp r4H + ;bcc @3 +@2: + lda r11L cmp r2H bne @1 + + lda r4H + and #$F0 + sta r5H + lda r3H + and #$F0 + cmp r5H + bne @1 + +@3: + PopB r5H + PopB r4H + PopB r3H + PopW r2 rts ;--------------------------------------------------------------- diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index e61aabf5..9ee6d0b2 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -11,6 +11,9 @@ .include "c64.inc" .global _GetScanLine +.ifdef mega65 +.global InitScanLineTab +.endif .segment "graph2n" @@ -30,6 +33,9 @@ BACK_SCR_BASE65 = $9000 ; Function: Returns the address of the beginning of a scanline ; Pass: x scanline nbr +; highres mode: %11111xyz, while xyz is the lower +; 3 bits +; y scanline, div by 8 (if highres mode) ; Return: r5 add of 1st byte of foreground scr ; r6 add of 1st byte of background scr ; Destroyed: a @@ -48,6 +54,21 @@ _GetScanLine: pha .ifndef wheels_size_and_speed pha +.endif +.ifdef mega65 + and #%11111000 + cmp #%11111000 + bne @_1 + + ; we are in high res mode + txa + and #%00000111 + sta r6H + + tya + bra @_2 +@_1: + txa .endif and #%00000111 sta r6H @@ -59,12 +80,16 @@ _GetScanLine: lsr lsr lsr +.ifdef mega65 +@_2: +.endif .ifdef mega65 bbrf 7, graphMode, @X ;; ora #$20 @X: .endif - tax + tax ; scan line in x now + bbrf 7, dispBufferOn, @2 ; ST_WR_FORE .ifdef bsw128 bvs @1 @@ -104,8 +129,8 @@ _GetScanLine: bbsf 7, graphMode, @X1 ;;and #%11100000 @X1: - sub #$60 - lsr + add #$a0 + ror ldx #0 jsr _MapHigh @@ -217,7 +242,7 @@ _GetScanLine: lda r5H and #%00011111 - ;;bbrf 7, graphMode, @X2_ + ;bbrf 7, graphMode, @X2_ and #%00000001 @X2_: add #$a0 @@ -298,6 +323,44 @@ GSC80_6: rts .endif +.ifdef mega65 + +;--------------------------------------------------------------- +; InitScanLineTab +; +; Function: Inits the scan line tab for given scan line +; size. +; +; Pass: r5 scanline size +; Destroyed: a, x +;--------------------------------------------------------------- +InitScanLineTab: + + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + + ldx #0 + txa + sta LineTabL, X + sta LineTabH, x +@1: + clc + lda LineTabL,X + add r5L + sta LineTabL+1,X + lda LineTabH,X + adc r5H + sta LineTabH+1,X + inx + cpx #127 + bne @1 + + PopB CPU_DATA + + rts +.endif + + .segment "graph2o" .ifdef mega65 @@ -307,9 +370,15 @@ GSC80_6: .define LineTab SCREEN_BASE65+0*800, SCREEN_BASE65+1*800, SCREEN_BASE65+2*800, SCREEN_BASE65+3*800, SCREEN_BASE65+4*800, SCREEN_BASE65+5*800, SCREEN_BASE65+6*800, SCREEN_BASE65+7*800, SCREEN_BASE65+8*800, SCREEN_BASE65+9*800, SCREEN_BASE65+10*800, SCREEN_BASE65+11*800, SCREEN_BASE65+12*800, SCREEN_BASE65+13*800, SCREEN_BASE65+14*800, SCREEN_BASE65+15*800, SCREEN_BASE65+16*800, SCREEN_BASE65+17*800, SCREEN_BASE65+18*800, SCREEN_BASE65+19*800, SCREEN_BASE65+20*800, SCREEN_BASE65+21*800, SCREEN_BASE65+22*800, SCREEN_BASE65+23*800, SCREEN_BASE65+24*800, SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800, SCREEN_BASE65+0*800, SCREEN_BASE65+1*800, SCREEN_BASE65+2*800, SCREEN_BASE65+3*800, SCREEN_BASE65+4*800, SCREEN_BASE65+5*800, SCREEN_BASE65+6*800, SCREEN_BASE65+7*800, SCREEN_BASE65+8*800, SCREEN_BASE65+9*800, SCREEN_BASE65+10*800, SCREEN_BASE65+11*800, SCREEN_BASE65+12*800, SCREEN_BASE65+13*800, SCREEN_BASE65+14*800, SCREEN_BASE65+15*800, SCREEN_BASE65+16*800, SCREEN_BASE65+17*800, SCREEN_BASE65+18*800, SCREEN_BASE65+19*800, SCREEN_BASE65+20*800, SCREEN_BASE65+21*800, SCREEN_BASE65+22*800, SCREEN_BASE65+23*800, SCREEN_BASE65+24*800, SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800,SCREEN_BASE65+0*800 LineTabL: - .lobytes LineTab + ;.lobytes LineTab + .repeat 128 + .byte 0 + .endrep LineTabH: - .hibytes LineTab + ;.hibytes LineTab + .repeat 128 + .byte 0 + .endrep @@ -322,3 +391,4 @@ LineTabH: .hibytes LineTab .endif + diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 2f43c9e3..00884fbf 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -151,6 +151,20 @@ ASSERT_NOT_BELOW_IO LDA #$8F STA $d06D + + lda #<74 + sta $d048 + lda #>74 + sta $d049 + lda #<553 + sta $D04A + lda #>553 + sta $d04b + + lda #<74 + sta $d04e + lda #>74 + sta $d04f .else lda #$a5 sta $d02f diff --git a/kernal/init/init1.s b/kernal/init/init1.s index 609865d7..e36e5894 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -19,11 +19,21 @@ .ifdef bsw128 .global _InitMachine2 .endif +.ifdef mega65 +.import MapUnderlay +.import UnmapUnderlay +.endif .segment "init1" _InitMachine: +.ifdef mega65 + jsr MapUnderlay +.endif jsr _DoFirstInitIO +.ifdef mega65 + jsr UnmapUnderlay +.endif .if .defined(bsw128) || .defined(mega65) .import SetRightMargin .import SetNewMode0 diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 01b2569e..a1cb20d4 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -172,6 +172,7 @@ .import _TempHideMouse .import _NormalizeX .ifdef mega65 +.import _NormalizeY .import _map_FollowChain .import _map_FindFTypes .import _map_FindFile @@ -399,6 +400,7 @@ .if .defined(bsw128) || .defined(mega65) .global NormalizeX +.global NormalizeY .endif .ifdef bsw128 @@ -1024,6 +1026,8 @@ ColorCard: UNIMPLEMENTED ColorRectangle: UNIMPLEMENTED +NormalizeY: ;$C2FE + jmp _NormalizeY .elseif .defined(wheels) diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 5ece648e..8cce07fe 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -23,6 +23,8 @@ SEGMENTS { files1a2b: load = LOKERNAL, type = ro; files1b: load = LOKERNAL, type = ro; reu: load = LOKERNAL, type = ro; + sprites: load = LOKERNAL, type = ro; + misc: load = LOKERNAL, type = ro; # icons: $BF40-$BFFF files6a: load = UNDERLAY, type = ro; @@ -39,6 +41,7 @@ SEGMENTS { tobasic2: load = UNDERLAY, type = ro; math2: load = UNDERLAY, type = ro; math1d: load = UNDERLAY, type = ro; + hw1b: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -54,7 +57,7 @@ SEGMENTS { # kernal code map: load = KERNAL, type = ro; - sprites: load = KERNAL, type = ro; + #sprites: load = KERNAL, type = ro; fonts1: load = KERNAL, type = ro; tobasic1: load = KERNAL, type = ro; serial1: load = KERNAL, type = ro; @@ -70,13 +73,13 @@ SEGMENTS { load1d: load = KERNAL, type = ro; init1: load = KERNAL, type = ro; hw1a: load = KERNAL, type = ro; - hw1b: load = KERNAL, type = ro; + #hw1b: load = KERNAL, type = ro; graph1: load = KERNAL, type = ro; hw2: load = KERNAL, type = ro; init2: load = KERNAL, type = ro; memory1a: load = KERNAL, type = ro; memory1b: load = KERNAL, type = ro; - misc: load = KERNAL, type = ro; + #misc: load = KERNAL, type = ro; hw3: load = KERNAL, type = ro; load2: load = KERNAL, type = ro; mode: load = KERNAL, type = ro; diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index 9f20ebe0..833c74c3 100644 --- a/kernal/mouse/mouse3.s +++ b/kernal/mouse/mouse3.s @@ -32,8 +32,8 @@ ResetMseRegion: @1: rts @2: LoadW mouseRight, SCREENPIXELWIDTH-1 .endif - LoadB mouseBottom, $90 - LoadW mouseRight, 800 + $1000 + LoadB mouseBottom, $DF + LoadW mouseRight, 789 + $1000 .else LoadW mouseRight, SC_PIX_WIDTH-1 diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index db2ebc7b..5c367db6 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -64,23 +64,31 @@ SprTabH: ; Destroyed: a, x, y, r6 ;--------------------------------------------------------------- _PosSprite: + PushB r5H + + lda r4H + jsr UncompactXY + sta r4H + sty r5H + + jsr _HR_PosSprite + PopB r5H + rts + + +_HR_PosSprite: + .if .defined(bsw128) || .defined(mega65) ldx #r4 jsr NormalizeX .endif START_IO - lda r4H - jsr UncompactXY - sta r4H - tya - tax - lda r3L rol tay - txa + lda r5H lsr lda r5L ror diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 9cfab757..76f3fd49 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -43,6 +43,11 @@ .import LoadDeskTop .endif +.ifdef mega65 +.import InitScanLineTab +.import MapUnderlay +.import UnmapUnderlay +.endif .segment "start" @@ -153,9 +158,17 @@ OrigResetHandle: .ifdef mega65 lda #GR_40 sta graphMode + LoadW r5, 800 + jsr InitScanLineTab .endif ldx #$ff +.ifdef mega65 + jsr MapUnderlay +.endif jsr _DoFirstInitIO +.ifdef mega65 + jsr UnmapUnderlay +.endif jsr InitGEOEnv .ifdef usePlus60K jsr DetectPlus60K diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 9589f494..c85d5f15 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -547,8 +547,13 @@ GetEqualWindows: ; Ermittlung der Fensternummern, deren Pfadname genau mit dem rts .ifdef topdesk128 +.ifdef scalable_coords +ClxL = SC_FROM_END | 79 +ClxR = SC_FROM_END | 0 +.else ClxL = 240 + DOUBLE_W ClxR = 319 + DOUBLE_W +.endif .else ClxL = 240 ClxR = 319 @@ -616,7 +621,7 @@ ShowClock: @Ausg: LoadW___ rightMargin,ClxR-1 jsr i_PutString - .word ClxL+DateX + .word ClxL-DateX .byte ClyO+DateY .byte PLAINTEXT TagZehner: .byte "0" @@ -637,7 +642,7 @@ JahEiner: .byte "0" .byte PLAINTEXT .byte " " .byte GOTOXY - .word ClxL+TimeX + .word ClxL-TimeX .byte ClyO+TimeY .byte PLAINTEXT StdZehner: .byte "0" diff --git a/topdesk/Include/Symbol/Sym128.erg.inc b/topdesk/Include/Symbol/Sym128.erg.inc index 2f9de73d..6628d020 100644 --- a/topdesk/Include/Symbol/Sym128.erg.inc +++ b/topdesk/Include/Symbol/Sym128.erg.inc @@ -1,10 +1,10 @@ ; Systemvariablen f}r den C128 ; Version 13.07.89 -ADD1_W = $2000 +ADD1_W = $0000 DoBOp = $c2ec DOUBLE_B = $80 -DOUBLE_W = $8000 +DOUBLE_W = $0000 graphMode = $3f HideOnlyMouse = $c2f2 MoveBData = $c2e3 @@ -14,3 +14,5 @@ SetNewMode = $c2dd SwapBData = $c2e6 TempHideMouse = $c2d7 VerifyBData = $c2e9 + +NormalizeY = $c2fe diff --git a/topdesk/Include/Symbol/TopSym.inc b/topdesk/Include/Symbol/TopSym.inc index 672df9f2..bbd14d83 100644 --- a/topdesk/Include/Symbol/TopSym.inc +++ b/topdesk/Include/Symbol/TopSym.inc @@ -395,3 +395,7 @@ version = $c00f windowBottom = $34 windowTop = $33 + +SC_FROM_END = %100000000000 +SC_FROM_CENTER = %010000000000 +SC_SCALE = %110000000000 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 5b8257b0..1cf65a9d 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -206,7 +206,7 @@ Start: Loadr0AX: sta r0L stx r0H rts - + MoveWr0r1: MoveW_ r0,r1 rts MoveWr1r0: MoveW_ r1,r0 @@ -449,7 +449,7 @@ RamTopFlag: .byte 0 SureFlag: .byte 0 .endif -GetTextService: ldx #6 ; im Akku Nr. des Anzeigemodus +GetTextService: ldx #6 ; im Akku Nr. des Anzeigemodus .byte $2c ; }bergeben GetIconService: ldx #5 ; im Akku 0 }bergeben pha @@ -471,7 +471,7 @@ DispMode: .byte 0 ldx #para1 lda #para2 jmp JmpSub -.endmacro +.endmacro .macro JmpMod2 para1, para2 ; 7 Bytes ldx #para1 @@ -662,7 +662,7 @@ SetMyNewMode: rts @tab1: - wb IconTab+6,(39-TrashX) + wb IconTab+6,(68-TrashX)|128 wb IconTab+14,2 wb IconTab+22,STARTA_X wb IconTab+30,STARTB_X @@ -726,7 +726,7 @@ SetMyNewMode: .word 0 @tab2: - wb IconTab+6,(39-TrashX)*2 + wb IconTab+6,((39-TrashX)*2)|128 wb IconTab+14,2*2 wb IconTab+22,STARTA_X*2 wb IconTab+30,STARTB_X*2 @@ -804,20 +804,20 @@ SetMyNewMode: -STARTA_X = (39-BitX) +STARTA_X = (98-BitX) STARTA_Y = 32 -STARTB_X = (39-BitX) +STARTB_X = (98-BitX) STARTB_Y = 64 -STARTC_X = (39-BitX) +STARTC_X = (98-BitX) STARTC_Y = 96 -STARTD_X = (39-BitX) +STARTD_X = (98-BitX) STARTD_Y = 128 IconTab: .ifdef topdesk128 .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte 39-TrashX,191-TrashY,TrashX+DOUBLE_B,TrashY + .byte (98-TrashX)|128,56,TrashX+DOUBLE_B,TrashY .word TrashService .word PrintMap .byte 2,193-PrintY,PrintX+DOUBLE_B,PrintY @@ -837,7 +837,7 @@ IconTab: .else .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte 39-TrashX,191-TrashY,TrashX,TrashY + .byte (98-TrashX)|128,56,TrashX,TrashY .word TrashService .word PrintMap .byte 2,193-PrintY,PrintX,PrintY @@ -1003,7 +1003,7 @@ KS11: lda #11 .byte p2 .word p3 .endmacro - + MAIN_RIGHT = 214 HauptMenu: .byte 0,13 @@ -1366,7 +1366,7 @@ CloseAll: jsr GotoFirstMenu bpl @loop jsr ClearMultiFile jmp RedrawAll - + AutoSwap: jsr GotoFirstMenu ldx #$2a lda AutoSwapFlag @@ -1444,7 +1444,7 @@ EndGhost: ldx #0 jsr DisablSprite pla rts - + GoToBasic: jsr GotoFirstMenu lda #0 sta r5L @@ -1539,7 +1539,7 @@ ReLoadAll: ldy #3 Reset: jsr GotoFirstMenu Reset2: jsr ClearScreen ReLoadAll2: - + ldx #03 @10: txa pha @@ -1572,11 +1572,18 @@ ReLoadAll2: RedrawHead: lda #2 jsr SetPattern jsr i_Rectangle +.ifdef scalable_coords + ByteCY 0, 0 + ByteCY SC_FROM_END+0, 15 + WordCX 0, 0 + WordCX SC_FROM_END+0, 15 +.else .byte 0,15 .ifdef topdesk128 .word 0+DOUBLE_W,319+DOUBLE_W+ADD1_W .else .word 0,319 +.endif .endif jsr MaxTextWin @@ -2349,7 +2356,7 @@ PrintDiskInfo: PushW r0 @21: PopW r0 rts ; ==> - + @sub: lda KBytesFlag cmp #' ' beq @kbytes @@ -2443,7 +2450,13 @@ PrintDriveNames: MoveB numDrives,a7L lda @data,x sta r1H .ifdef topdesk128 + +.ifdef scalable_coords + LoadW___ r11,(SC_FROM_END | 32) + ;LoadW___ r11,272+16 +.else LoadW___ r11,272+16+DOUBLE_W +.endif .else LoadW___ r11,272+16 .endif @@ -2568,7 +2581,7 @@ Handler: ldx messageBuffer+1 ; File/Icontabellenadresse nach r0 cmp #WN_SCROLL_R beq @08 cmp #WN_CLOSE - bne @04 + bne @04 jmp CloseService @04: jmp NormHandler @05: jsr PrintDiskInfo @@ -2823,11 +2836,11 @@ DispSizeRectangle: PushW r0 DispJumpTable: .repeat $500 - .byte 0 + .byte 0 .endrep .export __DISPJUMPTABLE__ := DispJumpTable - + MyDispFiles = DispJumpTable DispFiles = MyDispFiles+3 MyCheckFiles = DispFiles+3 @@ -3155,7 +3168,7 @@ Multi_Select: jsr InvertRectangle @10: tax jmp UnMarkFile -TextSprite: +TextSprite: ;j .incbin "topdesk/TextSprite.bf" @@ -3203,7 +3216,7 @@ CloseService2: LoadB messageBuffer,WN_CLOSE lda windowsOpen,x bne CloseService rts - + CloseService: jsr CheckKlick bcc @05 ldx messageBuffer+1 @@ -3352,7 +3365,7 @@ NewDirLoad: ldx activeWindow jsr Redraw ldx #0 @10: rts -MoveService: ; Verschieben/Kopieren von Files zwischen aktivem und +MoveService: ; Verschieben/Kopieren von Files zwischen aktivem und ; (messageBuffer+1)-Fenster mit Multi-File-Bearbeitung LoadB DialBoxFlag,1 PushB messageBuffer+1 diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index 07f8a4ae..be8afe2a 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -124,7 +124,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow jmp @010 @05a: lda (a2),y ; Bitmap vorhanden? cmp #$bf - beq @004 ; >ja + beq @004 ; >ja jsr @geticon txa beq @004 @@ -183,7 +183,9 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow @sc20: .endif + lda #0 ldx a3H + ldy #0 jsr DrawMap ; Darstellung des Filenames, auf dessen Text a1 zeigt, zentriert ; an der Position a4+12, a3H+27 @@ -467,6 +469,5 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell @err: pla sec ; Rechteck ung}ltig rts -C64Icon: ;j +C64Icon: ;j .incbin "topdesk/C64Icon.bf" - diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 47e23480..87b78aa7 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -149,7 +149,7 @@ TestDisk: txa ; Systemvariablen activeWindow: .byte 0,2,3,1 -messageBuffer: +messageBuffer: .repeat 10 .byte 0 .endrep @@ -649,11 +649,26 @@ ClearScreen: ; L|schen des ganzen Bildschirms (mit Ausnahme von Zeile 0-14) lda #0 sta r3L sta r3H +.ifdef scalable_coords + LoadB r2H,<(SC_FROM_END|0) + LoadW___ r4,(SC_FROM_END | 0) + (((SC_FROM_END|0) >> 8) << 12) +.else LoadB r2H,199 LoadW___ r4,319 .ifdef topdesk128 MoveW_ RightMax, r4 .endif +.endif + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX + ldx #r3 + ldy #r2L + jsr NormalizeY + ldx #r4 + ldy #r2H + jsr NormalizeY jmp BackgroundRectangle RedrawAll: ; Redraw des ganzen Bildschirms (mit Ausnahme von Zeile 0-14) @@ -824,7 +839,7 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate jmp AppRubberFrame @mx: .word 0 @my: .byte 0 -DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der +DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der ; Mauszeiger-Koordinaten ; (Initialisierung) MoveW_ r0,moveVector @@ -891,7 +906,7 @@ AppRubberFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordina jsr InvFrame MoveW_ $3a,r4 MoveB $3c,r2H - + ldy #05 ; Neues Rechteck zeichnen @27: lda r2,y sta moveKoords,y @@ -1051,7 +1066,7 @@ CheckUser: ldx activeWindow jsr IsMseInRegion bne @20 ; >ja, also otherPress u. {. umgehen rts ; >otherPress u. {. bearbeiten -@10: lda $3a ; Mauskoordinaten relativ zum +@10: lda $3a ; Mauskoordinaten relativ zum sec ; Arbeitsrechteck ermitteln sbc r3L sta r3L @@ -1118,7 +1133,7 @@ CheckHide: jsr GetWinRec pla ldx activeWindow jmp BackWindow - + CheckSize: jsr GetWinRec lda r2H sec @@ -1286,7 +1301,7 @@ FrontWindow2: lda windowsOpen,x beq @11 jsr GetWinAdrRec - jsr CutRec ; Schneidet anderes Window? + jsr CutRec ; Schneidet anderes Window? bcs @11 ; > nein ldy r0H lda #1 @@ -1295,9 +1310,9 @@ FrontWindow2: @11: dec r0H ldy r0H bpl @10 -@20: ; jetzt ist in r0L die Anzahl der offenen Windows, die hinter (unter) dem - ; nach vorne zu holenden Fenster liegen, und in r1H die Anzahl der - ; offenen Windows, die vor (}ber) dem nach vorne zu holenden +@20: ; jetzt ist in r0L die Anzahl der offenen Windows, die hinter (unter) dem + ; nach vorne zu holenden Fenster liegen, und in r1H die Anzahl der + ; offenen Windows, die vor (}ber) dem nach vorne zu holenden ; Window liegen. ; in r1L steht die Nummer des neuen Front-Windows, in :y dessen ; alter (noch aktueller) Platz in activeWindow @@ -1317,7 +1332,7 @@ FrontWindow2: @25a: jsr DrawShadow rts @y: .byte 0 -@sub: ; alle vor (y) liegenden Pl{tze in activeWindows r}cken um eins nach +@sub: ; alle vor (y) liegenden Pl{tze in activeWindows r}cken um eins nach ; hinten cpx activeWindow beq @s20 @@ -1586,7 +1601,7 @@ MapBreite: .byte 0 DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen ; Par: - ; x y-Koordinate + ; xy y-Koordinate (x low, y high) ; r10 x-Koordinate ; r13L BitmapBreite ; r13H BitmapH|he @@ -1595,6 +1610,8 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen .ifdef topdesk128 txa pha + tya + pha ldx #r10 jsr NormalizeX LoadB @off80, 0 @@ -1614,6 +1631,8 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen asl @schmal: sta r13L + pla + tay pla tax .endif @@ -1647,7 +1666,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen eor #%111 sta r14H - ; jetzt steht in r14L die Anzahl der zu }berspringenden Bytes +1, und in + ; jetzt steht in r14L die Anzahl der zu }berspringenden Bytes +1, und in ; r14H die Nummer des Bits, ab dem einmaskiert werden soll @c0: lda rightMargin ; r15 = rightMargin-r10 ora #%111 @@ -1673,7 +1692,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen and #%111 eor #%111 sta r15H - ; jetzt steht in r15L die max. Anzahl der darzustellen Bytes+1, und + ; jetzt steht in r15L die max. Anzahl der darzustellen Bytes+1, und ; in r15H die Nummer des Bits, ab dem ausmaskiert werden soll LoadB r9H,0 @@ -1685,36 +1704,72 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen sta r3L sta r4L .endif + PushW r2 + inc windowBottom @01: LoadB winOutFlag,0 ; Zeile unter windowTop? + tya + pha + sta r2H txa pha + sta r2L + cmp #($F8-1) + bcc @norm + + ; if larger than, high rest y + and #7 + sty r2L + + asl r2L + rol r2H + asl r2L + rol r2H + asl r2L + rol r2H + + ora r2L + sta r2L + lda r2H + and #7 + sta r2H + +@norm: sec + lda r2L sbc windowTop - lda #00 + lda r2H sbc #00 bmi @02 ; >nein - pla - pha sec ; Zeile }ber windowBottom + lda r2L sbc windowBottom - lda #00 + lda r2H sbc #00 bmi @03 ; >ja - LoadB r13H,1 ; Anzeige anbrechen -@02: LoadB winOutFlag,1 ; Zeile nicht anzeigen +; LoadB r13H,1 ; Anzeige anbrechen +@02: LoadB winOutFlag,0 ; Zeile nicht anzeigen @03: PushW r13 PushB r14L PushB r15L - jsr @sub ; Zeile ggf. darstellen + jsr @sub ; Zeile ggf. darstellen PopB r15L PopB r14L PopW r13 pla tax + pla + tay inx ; n{chste Zeile + bne @04 + iny + txa + ora #$F8 + tax +@04: dec r13H bne @01 + PopW r2 dec windowBottom rts @sub: @@ -1819,7 +1874,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen ldy r11L jsr StoreBits ; und Datenbyte schreiben dec r13L ; Breite verringern - bne @20 + bne @20 tya ; y auf n{chstes Byte einstellen clc .ifdef topdesk128 @@ -1860,7 +1915,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen pla ora r11L ; mit Hintergrund verkn}pfen jsr StoreBits ; und das letztes Byte der Zeile schreiben - sty r11L + sty r11L rts .ifdef topdesk128 @@ -2098,7 +2153,7 @@ Sub80: lda $00,x sta $00,x ldy ScanMode beq @store - + pla sta $01,x @@ -2183,6 +2238,20 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 lda #00 adc a0H sta a0H + + ldy #0 + bit r10L + bpl @21 + + txa + tay + ldx #$f8 + + lda r10L + and #$7F + sta r10L + +@21: LoadB r10H,0 ; xk:=xk*8 asl r10L rol r10H @@ -2425,4 +2494,4 @@ StringLen: ;.Windows_End ;:NewSetDevice = Windows_End ;:DispMarking = NewSetDevice+3 -;:ClearMultiFile = DispMarking+3 \ No newline at end of file +;:ClearMultiFile = DispMarking+3 From 2dd9904c34e74ff7d328b556f907d289f0d8e313 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 6 Jan 2019 23:38:32 +0100 Subject: [PATCH 024/125] Make GEOS run on the latest m65 bitstream, make it properly build using Linux as well. --- Makefile | 3 ++- kernal/hw/hw1b.s | 7 +++++-- tmp2.bin | Bin 0 -> 2 bytes 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 tmp2.bin diff --git a/Makefile b/Makefile index c53146f1..363dc79d 100755 --- a/Makefile +++ b/Makefile @@ -358,6 +358,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; @@ -460,7 +461,7 @@ ifeq ($(VARIANT), bsw128) else @echo Creating $@ from kernal.bin $(DRIVE).bin $(INPUT).bin - printf "\x00\x50" > $(BUILD_DIR)/tmp.bin + cp tmp2.bin $(BUILD_DIR)/tmp.bin dd if=$(BUILD_DIR)/kernal/kernal.bin bs=1 count=16384 >> $(BUILD_DIR)/tmp.bin 2> /dev/null cat $(BUILD_DIR)/drv/$(DRIVE).bin /dev/zero | dd bs=1 count=3456 >> $(BUILD_DIR)/tmp.bin 2> /dev/null cat $(BUILD_DIR)/kernal/kernal.bin /dev/zero | dd bs=1 count=24832 skip=19840 >> $(BUILD_DIR)/tmp.bin 2> /dev/null diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 00884fbf..15226479 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -107,8 +107,9 @@ ASSERT_NOT_BELOW_IO ; 1. Set horizontal border width LDA #$00 STA $D05C + LDA #$80 STA $D05D - + ; Set bitmap mode (makes horizontal borders take effect) LDA #$3B STA $D011 @@ -118,12 +119,14 @@ ASSERT_NOT_BELOW_IO ORA #$C8 STA $D031 - lda #$04 ; 3.5Mhz, H640, bitplanes + lda #$04 ; 3.5Mhz, H640, no bitplanes sta $d030 ; Set to 100 characters per row LDA #100 STA $D058 + LDA #$64 + STA $D05E ; Disable/Enable 16-colour sprite mode for each sprite? LDA #$00 diff --git a/tmp2.bin b/tmp2.bin new file mode 100644 index 0000000000000000000000000000000000000000..d14dbe8be1245570a6c89e46e2f0cbda98a47176 GIT binary patch literal 2 JcmZPw0000|08sz{ literal 0 HcmV?d00001 From ca15f22d125ee25661d107f7a6fdcc96668b175b Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 11 Jan 2019 22:27:33 +0100 Subject: [PATCH 025/125] Adjust and fix to support 720x480 resolution best. DoIcon bugs and text cut off is known. --- inc/const.inc | 6 ++-- inc/geosmac.inc | 2 +- kernal/fonts/fonts2.s | 6 ++-- kernal/graph/normalize.s | 8 ++--- kernal/hw/hw1b.s | 22 ++++++++------ kernal/init/init2.s | 4 +++ kernal/mouse/mouse3.s | 2 +- kernal/sprites/sprites.s | 59 ++++++++++++++++++++++--------------- kernal/start/start64.s | 2 +- topdesk/Main/DeskTop.main.s | 18 ++++++----- 10 files changed, 76 insertions(+), 53 deletions(-) diff --git a/inc/const.inc b/inc/const.inc index 2bad0f46..d42a443d 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -88,11 +88,11 @@ GRBANK2 = %01 GRBANK3 = %00 ; screen -VIC_X_POS_OFF = 7 -VIC_Y_POS_OFF = 24 +VIC_X_POS_OFF = 56 +VIC_Y_POS_OFF = 74 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 -SC_PIX_WIDTH = 800 +SC_PIX_WIDTH = 720 SC_SIZE = 8000 ; 128 screen size constants SCREENBYTEWIDTH = 80 diff --git a/inc/geosmac.inc b/inc/geosmac.inc index 798d9f5a..1b7fa6f6 100644 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -453,7 +453,7 @@ ASSERT_NOT_BELOW_IO .endmacro .macro WordCX xc, yc - .word xc + (yc/256)*16 + .word xc + (yc/256)<<12 .endmacro .endif diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 4333207e..f58b507f 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -970,10 +970,10 @@ FontPutChar: @99: inc r5H inc r6H - inc r5H - inc r6H +; inc r5H +; inc r6H ;AddVB $38, r5L - AddVB $18, r5L + AddVB $C8, r5L @98: sta r6L bcc @8 diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index 363f3f08..298f2457 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -41,10 +41,10 @@ _NormalizeY: lda #<479 clc - sbc zpage,y + ;sbc zpage,y sta zpage,y lda #>479 - sbc zpage,x + ;sbc zpage,x asl asl @@ -71,11 +71,11 @@ _NormalizeX: pha and #$03 sta zpage+1,x - lda #<789 + lda #<719 clc sbc zpage, x sta zpage, x - lda #>789 + lda #>719 sbc zpage+1,x sta zpage+1,x pla diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 15226479..6f0de8df 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -105,11 +105,16 @@ ASSERT_NOT_BELOW_IO ; enable 800x600 mode ; 1. Set horizontal border width - LDA #$00 + LDA #39 STA $D05C LDA #$80 STA $D05D - + LDA #1 + sta $D076 + + lda #$c9 + sta grcntrl2 + ; Set bitmap mode (makes horizontal borders take effect) LDA #$3B STA $D011 @@ -122,11 +127,10 @@ ASSERT_NOT_BELOW_IO lda #$04 ; 3.5Mhz, H640, no bitplanes sta $d030 - ; Set to 100 characters per row - LDA #100 - STA $D058 - LDA #$64 - STA $D05E + ; Set to 100 characters per row + LDA #90 + STA $D058 + STA $D05E ; Disable/Enable 16-colour sprite mode for each sprite? LDA #$00 @@ -159,9 +163,9 @@ ASSERT_NOT_BELOW_IO sta $d048 lda #>74 sta $d049 - lda #<553 + lda #<554 sta $D04A - lda #>553 + lda #>554 sta $d04b lda #<74 diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 63fdad64..70e9999b 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -78,6 +78,10 @@ _FirstInit: LoadB mob0clr, BLUE sta mob1clr LoadB extclr, BLACK + LoadB bakclr0, BLACK ;XXX workaround a + ; bug in the current MEGA65 + ; bitstream showing parts of + ; the background (in blue) END_IO_X .endif .if .defined(mega65) diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index 833c74c3..c147b88f 100644 --- a/kernal/mouse/mouse3.s +++ b/kernal/mouse/mouse3.s @@ -33,7 +33,7 @@ ResetMseRegion: @2: LoadW mouseRight, SCREENPIXELWIDTH-1 .endif LoadB mouseBottom, $DF - LoadW mouseRight, 789 + $1000 + LoadW mouseRight, 719 + $1000 .else LoadW mouseRight, SC_PIX_WIDTH-1 diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index 5c367db6..9652f345 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -87,14 +87,22 @@ _HR_PosSprite: lda r3L rol tay - - lda r5H - lsr lda r5L - ror addv VIC_Y_POS_OFF - + ;sta r6L sta mob0ypos,Y + + lda r5H + ldy $D077 + ldx #1 + jsr @2__ + sta $D077 + + lda #2 + ldy $D078 + jsr @2_ + sta $D078 + .ifdef bsw128 lda graphMode bpl @X @@ -108,28 +116,29 @@ _HR_PosSprite: sta r4L @X: .endif -.ifdef mega65 - MoveW r4, r6 - lda graphMode - bpl @X - asr r6H - ror r6L -@X: - AddVW VIC_X_POS_OFF, r6 -.else +;.ifdef mega65 + ;MoveW r4, r6 + ;lda graphMode + ;bpl @X + ;asr r6H + ;ror r6L +;@X: +; AddVW VIC_X_POS_OFF, r6 +;.else +lda r3L +rol +tay lda r4L addv VIC_X_POS_OFF - sta r6L - lda r4H - adc #0 - sta r6H -.endif - lda r6L + ;sta r6L sta mob0xpos,Y + lda r4H +;.endif - lda #1 ldy msbxpos - jsr @2_ + ldx #1 + + jsr @2__ sta msbxpos lda #2 ldy $d05f @@ -138,6 +147,10 @@ _HR_PosSprite: END_IO rts +@2__: + adc #0 + sta r6H + txa @2_: ldx r3L and r6H @@ -150,7 +163,7 @@ _HR_PosSprite: tya eor #$ff ora BitMaskPow2,x - eor #$ff + eor #$ff rts ;--------------------------------------------------------------- diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 76f3fd49..105fdee0 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -158,7 +158,7 @@ OrigResetHandle: .ifdef mega65 lda #GR_40 sta graphMode - LoadW r5, 800 + LoadW r5, 720 jsr InitScanLineTab .endif ldx #$ff diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 1cf65a9d..c3894f78 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -341,6 +341,7 @@ PrintX = 3 PrintY = 21 Start2: + lda RamTopFlag bne @10 lda ramExpSize @@ -662,7 +663,7 @@ SetMyNewMode: rts @tab1: - wb IconTab+6,(68-TrashX)|128 + wb IconTab+6,(89-TrashX)|128 wb IconTab+14,2 wb IconTab+22,STARTA_X wb IconTab+30,STARTB_X @@ -804,20 +805,20 @@ SetMyNewMode: -STARTA_X = (98-BitX) +STARTA_X = (89-BitX) STARTA_Y = 32 -STARTB_X = (98-BitX) +STARTB_X = (89-BitX) STARTB_Y = 64 -STARTC_X = (98-BitX) +STARTC_X = (89-BitX) STARTC_Y = 96 -STARTD_X = (98-BitX) +STARTD_X = (89-BitX) STARTD_Y = 128 IconTab: .ifdef topdesk128 .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte (98-TrashX)|128,56,TrashX+DOUBLE_B,TrashY + .byte (98-TrashX)|128,60,TrashX+DOUBLE_B,TrashY .word TrashService .word PrintMap .byte 2,193-PrintY,PrintX+DOUBLE_B,PrintY @@ -837,7 +838,7 @@ IconTab: .else .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte (98-TrashX)|128,56,TrashX,TrashY + .byte (98-TrashX)|128,59,TrashX,TrashY .word TrashService .word PrintMap .byte 2,193-PrintY,PrintX,PrintY @@ -1569,7 +1570,8 @@ ReLoadAll2: ;Rts: rts -RedrawHead: lda #2 +RedrawHead: + lda #2 jsr SetPattern jsr i_Rectangle .ifdef scalable_coords From 8c3527e40108904184f35e26771e8a7ed184ab5f Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 13 Jan 2019 13:12:38 +0100 Subject: [PATCH 026/125] Fix/Enable TopDesk window moving/resizing. Fix the Frame rendering/inverting. --- kernal/graph/rect.s | 24 +- topdesk/Include/DeskMain2.inc | 8 +- topdesk/Main/DeskTop.main.s | 19 +- topdesk/Main/DeskTop.sub5.s | 11 +- topdesk/Main/DeskWindows.akt.inc | 98 ++++-- topdesk/WinInclude/InvFrame.inc | 566 +++++++----------------------- topdesk/WinInclude/SpeedFrame.inc | 6 + 7 files changed, 240 insertions(+), 492 deletions(-) diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index eb4980d4..0009da9a 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -67,6 +67,18 @@ _Rectangle: txa .endif jsr _HorizontalLine + lda r11L + cmp r2H + bne @3_ + + lda r4H + and #$F0 + sta r5H + lda r3H + and #$F0 + cmp r5H + beq @3 +@3_: ;lda r11L inc r11L bne @2 @@ -77,17 +89,7 @@ _Rectangle: ;cmp r4H ;bcc @3 @2: - lda r11L - cmp r2H - bne @1 - - lda r4H - and #$F0 - sta r5H - lda r3H - and #$F0 - cmp r5H - bne @1 + bra @1 @3: PopB r5H diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index c85d5f15..b2342e8f 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -144,10 +144,10 @@ GetPos: sta r2H,x rts @xL: .byte <(STARTA_X*8),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) -@xH: .byte (>(STARTA_X*8))+$80 - .byte (>(STARTB_X*8))+$80 - .byte (>(STARTC_X*8))+$80 - .byte (>(STARTD_X*8))+$80 +@xH: .byte (>(STARTA_X*8)) + .byte (>(STARTB_X*8)) + .byte (>(STARTC_X*8)) + .byte (>(STARTD_X*8)) @y: .byte STARTA_Y, STARTB_Y, STARTC_Y, STARTD_Y .endif diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index c3894f78..d5f887ad 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -669,7 +669,7 @@ SetMyNewMode: wb IconTab+30,STARTB_X wb IconTab+38,STARTC_X wb IconTab+46,STARTD_X - ww RightMax, 319 + ww RightMax, 719 wb GraphIndex, 8 .ifdef lang_de ww HauptMenu+4,214 @@ -913,7 +913,8 @@ OpenDa: pha jsr DoneWithIO LoadB KSFlag,0 rts -@10: lda @dr +@10: + lda @dr beq @20 lda ghostFile bpl @20 @@ -934,7 +935,8 @@ OpenDa: pha bpl @loop LoadB AskDiskFlag,$ff jmp RedrawAll -@20: ldx numDrives ; bei numDrives=1 kein Laufwerkswechsel +@20: + ldx numDrives ; bei numDrives=1 kein Laufwerkswechsel dex bne @25 pla @@ -948,7 +950,9 @@ OpenDa: pha beq @27 pla @26: jsr NewSetDevice + jmp OpenNext + @27: pla rts @@ -1897,10 +1901,12 @@ OpenNext: ldx activeWindow ; eventuell selektierte Files stx messageBuffer+1 jsr DispMarking jsr ClearMultiFile -@05: jsr GetNext ; freie WindowNummer holen +@05: + jsr GetNext ; freie WindowNummer holen bcc @11 jmp OpenNext10 ; >keine mehr frei -@11: txa +@11: + txa pha jsr GetDiskName txa @@ -1947,6 +1953,9 @@ OpenNextNr: lda #0 tax sec jsr SpeedWinMax + ;@HOHO: + ;inc $d020 + ;jmp @HOHO pla tax jsr OpenWindow diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index be8afe2a..6e885b25 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -150,6 +150,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow adc #21 sta r2H jsr GetClipRec +.if 0 .ifdef topdesk128 lda SchmalFlag cmp #'*' @@ -165,6 +166,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow ldx #r4 jsr NormalizeX @sc10: +.endif .endif jsr CutRec bcs @005 @@ -172,6 +174,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow MoveW_ a4,r10 LoadB r13L,3 ; Breite immer 3 LoadB r13H,21 ; H|he immer 21 +.if 0 .ifdef topdesk128 lda SchmalFlag cmp #'*' @@ -182,7 +185,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow LoadB r13L, $83 @sc20: .endif - +.endif lda #0 ldx a3H ldy #0 @@ -197,6 +200,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow lda a4H adc #00 sta r11H +.if 0 .ifdef topdesk128 lda SchmalFlag cmp #'*' @@ -216,7 +220,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow inc @scy @sc30: .endif - +.endif MoveW_ a1,r0 ; Filenamenzeiger setzen ldy #16 lda (r0),y @@ -447,6 +451,7 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell lda SchmalFlag cmp #'*' beq @sc10 +.if 0 lda r3H ora #$80 sta r3H @@ -457,11 +462,11 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell jsr NormalizeX ldx #r4 jsr NormalizeX +.endif @sc10: AddW a3, r3 AddW a3, r4 .endif - jsr GetClipRec jsr CutRec ; Schnittfl{che berechnen, Ende pla diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 87b78aa7..312fd8c9 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -777,16 +777,38 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten clc adc #Grenze_oben sta mouseTop + ; unterer Rand = 199 - (yu-yo) + MausYOffSet ; = 199 - yu + yo + MausYOffSet - lda #199 + LoadW r12, 479 + + lda r12L sec sbc moveKoords+1 + sta r12L + lda r12H + sbc #0 + sta r12H clc - adc moveKoords + lda r12L + adc moveKoords + sta r12L + lda r12H + adc #0 + sta r12H clc - adc moveKoords+6 + lda r12L + adc moveKoords+6 sta mouseBottom + lda r12H + adc #0 + sta r12H + rol + rol + rol + rol + ora mouseRight + 1 + sta mouseRight + 1 LoadB moveFlag,$ff rts @@ -801,11 +823,12 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate jmp AppRubberFrame @10: php ; Mauszeiger bewegt? sei - CmpW $3a,@mx + CmpW mouseXPos,@mx bne @20 ; >ja - lda $3c + lda mouseYPos cmp @my - beq @30 ; >nein + bne @20 ; >nein + jmp @30 @20: ldy #05 ; Altes Rechteck l|schen @25: lda moveKoords,y sta r2,y @@ -817,24 +840,46 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate sbc r2L sta r2H SubW r3,r4 - MoveW_ $3a,r3 ; neues x holen + MoveW_ mouseXPos,r3 ; neues x holen SubW moveKoords+7,r3 ; minus Mausabstandx AddW r3,r4 ; aus b mach xr - lda $3c ; neues y holen + + lda mouseYPos ; neues y holen sec sbc moveKoords+6 ; minus Mausabstandy sta r2L + bcs @27a + pha + sec + lda r3H + sbc #16 + sta r3H + sec + lda r4H + sbc #16 + sta r4H + pla +@27a: clc adc r2H ; aus h mach yu sta r2H + bcc @27b + clc + lda r4H + adc #16 + sta r4H +@27b: + ldy #05 ; Neues Rechteck zeichnen @27: lda r2,y sta moveKoords,y dey bpl @27 jsr InvFrame - MoveW_ $3a,@mx - MoveB $3c,@my + + MoveW_ mouseXPos,@mx + MoveB mouseYPos,@my + @30: plp jmp AppRubberFrame @mx: .word 0 @@ -850,8 +895,8 @@ DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der sta moveKoords,y dey bpl @10 - MoveW_ r4,$3a ; mouseX - MoveB r2H,$3c ; mouseY + MoveW_ r4,mouseXPos ; mouseX + MoveB r2H,mouseYPos ; mouseY ; oberer Rand = yo + 40 lda r2L clc @@ -864,7 +909,12 @@ DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der .else LoadW___ mouseRight,319 .endif - LoadB mouseBottom,199 + ; 479 => $1DF + LoadB mouseBottom, $DF + lda mouseRight+1 + adc #16 + sta mouseRight+1 + ; linker Rand = ml + 40 lda moveKoords+2 clc @@ -873,12 +923,12 @@ DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der lda moveKoords+3 adc #00 sta mouseLeft+1 - MoveB $3c,r2H + MoveB mouseYPos,r2H sta moveKoords+1 - lda $3a + lda mouseXPos sta moveKoords+4 sta r4L - lda $3b + lda mouseXPos+1 sta moveKoords+5 sta r4H plp @@ -893,9 +943,9 @@ AppRubberFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordina rts @10: php ; Mauszeiger bewegt? sei - CmpW $3a,@mx + CmpW mouseXPos,@mx bne @20 ; >ja - lda $3c + lda mouseYPos cmp @my beq @30 ; >nein @20: ldy #05 ; Altes Rechteck l|schen @@ -903,9 +953,13 @@ AppRubberFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordina sta r2,y dey bpl @25 + PushW r3 + PushB r2L jsr InvFrame - MoveW_ $3a,r4 - MoveB $3c,r2H + PopB r2L + PopW r3 + MoveW_ mouseXPos,r4 + MoveB mouseYPos,r2H ldy #05 ; Neues Rechteck zeichnen @27: lda r2,y @@ -913,8 +967,8 @@ AppRubberFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordina dey bpl @27 jsr InvFrame - MoveW_ $3a,@mx - MoveB $3c,@my + MoveW_ mouseXPos,@mx + MoveB mouseYPos,@my @30: plp rts @mx: .word 0 diff --git a/topdesk/WinInclude/InvFrame.inc b/topdesk/WinInclude/InvFrame.inc index 766834f1..f8c70074 100644 --- a/topdesk/WinInclude/InvFrame.inc +++ b/topdesk/WinInclude/InvFrame.inc @@ -2,480 +2,153 @@ InvFrame: ; Parameter: r2-r4 Akku: Muster ; Zur}ck: ---- ; Zerst|rt: r0,r1,r5-r7,a,x,y -.ifdef topdesk128 - PushW r2 - PushW r3 - PushW r4 - jsr HideOnlyMouse - PopW r4 - PopW r3 - PopW r2 - lda graphMode - bpl @64n - bmi @64n - PushW r8 - PushW r11 - PushB r2H - MoveB r2L, r11L - jsr InvertLine - Pla - sta r11L - jsr InvertLine - PopW r11 - PopW r8 - rts -@64n: -.endif -.ifdef mega65 - lda r2L - pha -@p87: - lda r2H - pha - sub r2L -@p85: - cmp #64 - bcc @p86 - beq @p86 - clc - ror - and #$FE - jmp @p85 - -@p86: - add r2L - sta r2H - - pla - cmp r2H - pha - ; above? - bcs @p89 ; branch if a is above r2H - sta r2H -@p89: + PushW r2 + PushW r3 + PushW r4 + jsr HideOnlyMouse + PopW r4 + PopW r3 + PopW r2 + ;lda graphMode + ;bpl @64n + ;bmi @64n + + ;lda r3H + ;and #%00001111 + ;sta r3H + ;lda r4H + ;and #%00001111 + ;sta r4H jsr VLine + PushW r8 + PushW r11 + PushB r2H + MoveB r2L, r11L + jsr InvertLine pla - cmp r2H - bcc @p88 - beq @p88 - - ldx r2H - sta r2H - inx - inx - txa + sta r11L + ; if r11L is the bottom end of the frame + ; r3H need to transport the msb of bottom y + lda r3H + and #%00001111 + sta r3H + lda r4H + and #%11110000 + ora r3H + sta r3H + jsr InvertLine + PopW r11 + PopW r8 + rts - sta r2L - jmp @p87 +VLine: + ; r2L - vertical from + ; r2H - vertical to + MoveB r2L, r0L + lda r3H + and #%11110000 + sta r0H + ; determ mask for r3 (r1L) and r4 (r1H) + lda r3L + and #7 + tax + lda Masken,x + sta r1L ; mask in r1L + lda r4L + and #7 + tax + lda Masken,x + sta r1H ; mask in r1L +@loop: + lda r0L + pha + lda r0H + lsr + lsr + lsr + lsr + asl r0L + rol + asl r0L + rol + asl r0L + rol + asl r0L + rol + asl r0L + rol + tay + pla + sta r0L + and #$07 + ora #$f8 + tax -@p88: - pla - sta r2L -.else - jsr VLine -.endif - lda #%10101010 + ;ldx r0L + jsr GetScanLine ; Card -InvHLine: sta r1L lda r3L and #%11111000 clc - adc #8 - sta r0L + adc r5L + sta r6L lda r3H - adc #00 - sta r0H + and #%00001111 + adc r5H + sta r6H ; card address in r3 -> r6 + lda r4L and #%11111000 - sec - sbc r0L - sta r1H - lda r4H - sbc r0H - - ldy #3 -@10: lsr - ror r1H - dey - bne @10 - -.ifdef topdesk128 -.ifndef mega65 - lda graphMode - bpl @64e - lsr r0H - ror r0L - lsr r0H - ror r0L - lsr r0H - ror r0L -.endif -@64e: -.endif - - ldx r2L - jsr @15 - - ldx r2H - -@15: jsr GetScanLine - - lda r5L clc - adc r0L + adc r5L sta r5L - lda r5H - adc r0H - sta r5H - lda r5L - sec - sbc #8 - sta r6L - lda r5H - sbc #0 - sta r6H -.ifdef topdesk128 -.ifndef mega65 - lda graphMode - bpl @64f - lda r6L - clc - adc #7 - sta r6L - lda r6H - adc #0 - sta r6H -@64f: -.endif -.endif - - ldx r1H + lda r4H + and #%00001111 + adc r5H + sta r5H ; card address in r4 -> r5 +@cardLoop: ldy #0 -@20: -.ifdef topdesk128 - lda r5H - bmi @64 - jsr a128 - jmp @128 -;XXX rts -@64: -.endif - lda (r5),y + lda (r6),y eor r1L - sta (r5),y -.ifdef topdesk128 - jmp @64g -@128: - inc r5L - beq @64h2 - bne @22 -@64g: -.else -@128: -.endif - lda r5L - clc - adc #8 - sta r5L -.ifdef topdesk128 -@64h: -.endif - bcc @22 -.ifdef topdesk128 -@64h2: -.endif - inc r5H -@22: dex - bne @20 - - ldy #0 - lda r3L - and #%00000111 - tax - lda @maskTab,x - and r1L -.ifdef topdesk13 - ldx r6H - bmi @65 -.else -;XXX bpl @65 -.endif -.ifdef topdesk128 - jsr c128 - jmp @129 -.endif -@65: - eor (r6),y sta (r6),y -.ifdef topdesk128 -@129: -.endif - lda r4L - and #%00000111 - tax - lda @maskTab,x - eor #$ff - and r1L -.ifdef topdesk128 - ldx r5H -.ifdef topdesk128 - bmi @66 -.else - bpl @66 -.endif - jsr d128 - rts -@66: -.endif - eor (r5),y + lda (r5),y + eor r1H sta (r5),y - rts -@maskTab: .byte %11111111,%01111111,%00111111,%00011111 - .byte %00001111,%00000011,%00000001,%00000000 -VLine: - ; r2L - vertical from - ; r2H - vertical to - ldy #1 -@05: lda r2L,y - and #%11111000 - sta r0L,y - dey - bpl @05 - ldx r0L - jsr GetScanLine ; Card -;XXX lda r5H -;XXX bmi @64n -;XXX rts -;XXX@64n: - lda r3L - ldy r3H - jsr @07 - lda r4L - ldy r4H - -@07: tax -.ifdef topdesk128 -.ifndef mega65 - bit graphMode - bmi @g80 -.endif -.endif - and #%11111000 -.ifdef topdesk128 -@07a: -.endif + lda r2H + cmp r0L + beq @end +@next: + inc r0L + bne @noover clc - adc r5L - sta r6L - tya - adc r5H - sta r6H -.ifdef topdesk128 -.ifndef mega65 - jmp @g40 -@g80: - sty r6H - lsr r6H - ror - lsr r6H - ror - lsr r6H - ror - ldy r6H - jmp @07a -@g40: -.endif -.endif - txa - and #7 - tax - lda Masken,x - sta r1L - -; Einzeichnen des oberen Restes: - - lda r2L - and #7 -.ifdef topdesk128 -.ifndef mega65 - bit graphMode - bpl @09 - pha - tay - iny -@loop: - dey - beq @08 - AddVW__ 80, r6 - jmp @loop -@08: - pla -@09: -.endif -.endif - tay -@10: jsr @110 - tya - sec - sbc #8 -@20: sta r1H ; AnfangsPkt (gerade ung.) -; Mitte: lda r0H - sec - sbc r0L - lsr - lsr - lsr - tax ; x+1 Durchl{ufe - dex - beq @50 -@40: ldy r1H -@30: jsr @110 - dex - bne @40 + adc #16 + sta r0H +@noover: + inc r5L + inc r6L -; Rest Unten: -@50: lda r2H - and #7 - cmp r1H - blt @60 - sta r7L - ldy r1H -@55: jsr @100 - cpy r7L - ble @55 -@60: rts -@100: -.ifdef topdesk128 - lda r6H -;XXX bpl @64 - bmi @64 -;XXX jsr b128 - jsr e128 - jmp @128 -@64: -.endif - lda (r6),y - eor r1L - sta (r6),y -@128: iny - iny -.ifdef topdesk128 -.ifndef mega65 - lda graphMode - bpl @g41 - AddVW__ 160,r6 -@g41: -.endif -.endif - rts -@110: jsr @100 - cpy #8 + ; end of card + lda r5L + and #%00000111 + bne @cardLoop - blt @110 -.ifdef topdesk128 -.ifndef mega65 - lda graphMode - bmi @g81 -.endif -.endif -.ifdef mega65 - lda graphMode - bpl @g88 - - AddVW__ 320,r6 -@g88: -.endif - AddVW__ 320,r6 -;XXX lda r6H -;XXX bpl @65 -;XXX AddVW__ 320,r6 + ; end of card we need to advance + ; by one scan line + bra @loop +@end: + lda r4H + and #%11110000 + cmp r0H + bne @next -;XXX @65: -.ifdef topdesk128 -@g81: -.endif rts + Masken: .byte 128,64,32,16,8,4,2,1 -.ifdef topdesk128 -d128: ;eor (r5),y - ;sta (r5),y - sta @a - PushB r1L - lda @a - sta r1L - jsr a128 - PopB r1L - rts -@a: .byte 0 -c128: ;eor (r6),y - ;sta (r6),y - sta @a - PushB r1L - lda @a - sta r1L - jsr b128 - PopB r1L - rts -@a: .byte 0 -e128: - MoveW_ r6, VDCMem - tya - pha - ldy #0 - jsr a128x - pla - tay - rts -b128: - MoveW_ r6, VDCMem - jmp a128x - -a128: - MoveW_ r5, VDCMem -a128x: - tya - pha - txa - pha - DecW VDCMem - jsr @setadr - IncW VDCMem - - ldx #$1f - jsr GetReg - jsr GetReg - eor r1L - pha - jsr @setadr - pla - ldx #$1f - jsr SetReg - ldx #$12 - jsr SetReg - pla - tax - pla - tay - rts - -@setadr: - tya - clc - adc VDCMem - php - ldx #$13 - jsr SetReg - dex - plp - lda VDCMem+1 - adc #0 - jmp SetReg -VDCMem: .word 0 SetReg: stx $d600 @wait: bit $d600 bpl @wait @@ -486,6 +159,5 @@ GetReg: stx $d600 bpl @wait lda $d601 rts -.endif \ No newline at end of file diff --git a/topdesk/WinInclude/SpeedFrame.inc b/topdesk/WinInclude/SpeedFrame.inc index fb65e959..25956561 100644 --- a/topdesk/WinInclude/SpeedFrame.inc +++ b/topdesk/WinInclude/SpeedFrame.inc @@ -93,6 +93,12 @@ SpeedFrame: dey dey bpl @120 + + lda dblClickCount + bne @w1 + LoadB dblClickCount, 1 +@w1: cmp dblClickCount + beq @w1 dec r8L bne @100 rts From 3b2e501b8a9ae9f25d463033f42fc4be1b0a7912 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 19 Jan 2019 11:16:09 +0100 Subject: [PATCH 027/125] Basic high-res rendering starting to work. --- kernal/fonts/fonts2.s | 54 +++- kernal/init/init4.s | 4 +- topdesk/Main/DeskTop.main.s | 12 +- topdesk/Main/DeskTop.sub5.s | 33 ++- topdesk/Main/DeskWindows.akt.inc | 412 +++++++++++++++++++++++-------- topdesk/WinInclude/InvFrame.inc | 2 + 6 files changed, 388 insertions(+), 129 deletions(-) diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index f58b507f..57d5f18d 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -283,15 +283,45 @@ Font_tabH: .hibytes Font_tab Font_2: - ldx r1H + lda r1H + pha + lda r11H + lsr + lsr + lsr + lsr + asl r1H + rol + asl r1H + rol + asl r1H + rol + asl r1H + rol + asl r1H + rol + tay + pla + sta r1H + and #$07 + ora #$f8 + tax + + ;ldx r1H .ifdef bsw128 jsr _GetScanLine .else jsr GetScanLine .endif + lda leftMargin+1 + tay + and #%00001111 + sta leftMargin+1 + lda FontTVar2+1 + and #%00001111 + tax lda FontTVar2 - ldx FontTVar2+1 - bmi @2 + ;bmi @2 cpx leftMargin+1 bne @1 cmp leftMargin @@ -301,22 +331,23 @@ Font_2: @3: pha and #%11111000 sta r4L + sty leftMargin+1 .ifdef bsw128 bbsf 7, graphMode, @LE319 .endif .ifdef mega65 - ldy #$00 + ldy #$00 sty r1L clc adc r5L sta r5L sta r6L - bcc @4 - inx + bcc @4 + inx @4: - cpx #0 - beq @5 - dex + cpx #0 + beq @5 + dex inc r5H inc r6H bra @4 @@ -357,6 +388,7 @@ Font_2: @LE333: .if .defined(bsw128) || .defined(mega65) lda FontTVar2+1 + and #%00001111 lsr a sta r7L lda FontTVar2 @@ -375,7 +407,9 @@ Font_2: ror a lsr a .else - MoveB FontTVar2+1, r3L + lda FontTVar2+1 + and #%00001111 + sta r3L lsr r3L lda FontTVar2 ror diff --git a/kernal/init/init4.s b/kernal/init/init4.s index e4c037cf..efa2dad0 100644 --- a/kernal/init/init4.s +++ b/kernal/init/init4.s @@ -32,9 +32,9 @@ InitRamTab: .byte 0 ; mouseOn .word mousePicData ; msePicPtr .byte 0 ; windowTop - .byte SC_PIX_HEIGHT-1 ; windowBottom + .byte $df ; windowBottom .word 0 ; leftMargin - .word SC_PIX_WIDTH-1 ; rightMargin + .word $1000 + 719 ; rightMargin .byte 0 ; pressFlag .word appMain diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index d5f887ad..9b6ae40b 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -664,7 +664,7 @@ SetMyNewMode: @tab1: wb IconTab+6,(89-TrashX)|128 - wb IconTab+14,2 + wb IconTab+14,2|128 wb IconTab+22,STARTA_X wb IconTab+30,STARTB_X wb IconTab+38,STARTC_X @@ -728,7 +728,7 @@ SetMyNewMode: @tab2: wb IconTab+6,((39-TrashX)*2)|128 - wb IconTab+14,2*2 + wb IconTab+14,2*2|128 wb IconTab+22,STARTA_X*2 wb IconTab+30,STARTB_X*2 wb IconTab+38,STARTC_X*2 @@ -818,10 +818,10 @@ IconTab: .ifdef topdesk128 .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte (98-TrashX)|128,60,TrashX+DOUBLE_B,TrashY + .byte (89-TrashX)|128,56,TrashX+DOUBLE_B,TrashY .word TrashService .word PrintMap - .byte 2,193-PrintY,PrintX+DOUBLE_B,PrintY + .byte 2|128,56,PrintX+DOUBLE_B,PrintY .word PrintService .word BitMap .byte STARTA_X,STARTA_Y,BitX+DOUBLE_B,BitY @@ -838,10 +838,10 @@ IconTab: .else .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte (98-TrashX)|128,59,TrashX,TrashY + .byte (89-TrashX)|128,56,TrashX,TrashY .word TrashService .word PrintMap - .byte 2,193-PrintY,PrintX,PrintY + .byte 2|128,56,PrintX,PrintY .word PrintService .word BitMap .byte STARTA_X,STARTA_Y,BitX,BitY diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index 6e885b25..45a12e2b 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -186,9 +186,18 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow @sc20: .endif .endif - lda #0 ldx a3H - ldy #0 + lda r10H + tay + and #%00001111 + sta r10H + tya + lsr + lsr + lsr + lsr + tay + lda #0 jsr DrawMap ; Darstellung des Filenames, auf dessen Text a1 zeigt, zentriert ; an der Position a4+12, a3H+27 @@ -296,21 +305,21 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow adc #00 sta a4H .ifdef topdesk128 - lda graphMode - bpl @send - lda SchmalFlag - cmp #'*' - beq @send - AddVW__ 5, a4 + lda graphMode + bpl @send + lda SchmalFlag + cmp #'*' + beq @send + AddVW__ 5, a4 jsr DispNumber - AddVW__ 25, a4 - lsr a4H - ror a4L + AddVW__ 25, a4 + lsr a4H + ror a4L rts @send: .endif jsr DispNumber - rts + rts @geticon: ; Icon nachladen ldy #16 lda (a1),y diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 312fd8c9..e621c24e 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -259,10 +259,19 @@ DrawWindow2: ; Par: a4-a6: Window-Rechteck sta NoClipFlag jsr SetPattern jsr GetClipRec + lda #1 + sta cutDebug jsr CutRec bcc @n10 + lda #0 + sta cutDebug rts -@n10: ldy #5 +@n10: +lda #0 +sta cutDebug + + + ldy #5 @nloop: lda r2L,y cmp a4L,y bne @n20 @@ -354,11 +363,11 @@ DrawWindow2: ; Par: a4-a6: Window-Rechteck bne @l40 lda #0 sec - jsr DrawPoint + ;jsr DrawPoint jmp @weiter @l40: lda #0 sec - jsr DrawLine + ;jsr DrawLine @weiter: lda a1L clc adc #3 @@ -477,6 +486,10 @@ MaxTextWin: ; Ret: x unver{ndert bpl @10 .ifdef topdesk128 MoveW_ RightMax, rightMargin + LoadB windowBottom, $df + lda rightMargin+1 + ora #16 + sta rightMargin+1 .endif rts @b: .byte 0,199 @@ -486,9 +499,9 @@ MaxTextWin: ; Ret: x unver{ndert .word 0,319 .endif SetTextWin: ; Par: r2-r4 zu setzendes Textfenster - jsr GetClipRec - jsr CutRec - bcs @end + ;jsr GetClipRec + ;jsr CutRec + ;bcs @end ldy #5 @loop: lda windowTop,y sta OldClip,y @@ -526,16 +539,29 @@ DrawWindowC: lda #1 jsr DrawWindow2 bcc @geht rts -@geht: MoveB a4L,r2L ; Textfenster f}r Titelstring setzen +@geht: + lda a5H + sta a1L + + MoveB a4L,r2L ; Textfenster f}r Titelstring setzen clc adc #BREITEY-1 sta r2H + lda a1L + bcc @10 + clc + adc #16 +@10: + sta a1H + lda a5L clc adc #3+BREITEX sta r3L lda a5H adc #0 + and #%00001111 + ora a1L sta r3H lda a6L sec @@ -543,12 +569,21 @@ DrawWindowC: lda #1 sta r4L lda a6H sbc #0 + and #%00001111 + ora a1H sta r4H + MoveW_ r3,r11 ; Titeltext einzeichnen lda r2L clc adc #8 sta r1H + bcc @23 + clc + lda r11H + adc #16 + sta r11H +@23: jsr SetTextWin bcs @gn ldy #7 @@ -560,6 +595,7 @@ DrawWindowC: lda #1 ldx @num jsr PutTitle ; PrintTitle jsr RestoreTextWin + @gn: ldy #05 @ploop1: lda windowTop,y pha @@ -748,30 +784,61 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten bpl @10 php sei - lda $3a + + lda r3H + tay + and #%00001111 + sta r3H + lda mouseXPos sec sbc r3L sta moveKoords+7 - lda $3b + lda mouseXPos+1 + and #%00001111 sbc r3H + and #%00001111 sta moveKoords+8 - lda $3c + + tya + lsr + lsr + lsr + lsr + sta r3H + + lda mouseXPos+1 + lsr + lsr + lsr + lsr + sta r3L + lda mouseYPos sec sbc r2L sta moveKoords+6 + lda r3L + sbc r3H + asl + asl + asl + asl + ora moveKoords+8 + sta moveKoords+8 + plp ; rechter Rand = MausXOffset MoveW_ moveKoords+7,mouseLeft ; linker Rand = 319-(xr-xl)+MausXOffset ; = 319-xr+xl+MausXOffSet .ifdef topdesk128 - MoveW_ RightMax, mouseRight + MoveW_ RightMax, mouseRight .else LoadW___ mouseRight,319 .endif SubW moveKoords+4,mouseRight AddW moveKoords+2,mouseRight AddW moveKoords+7,mouseRight + ; oberer Rand = MausYOffset+Grenze_oben lda moveKoords+6 clc @@ -782,20 +849,38 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten ; = 199 - yu + yo + MausYOffSet LoadW r12, 479 - lda r12L + lda moveKoords+5 + lsr + lsr + lsr + lsr + sta r3H + lda moveKoords+3 + lsr + lsr + lsr + lsr + sta r3L + + lda r12L ; minus high sec sbc moveKoords+1 sta r12L lda r12H - sbc #0 + sbc r3H sta r12H clc lda r12L adc moveKoords sta r12L lda r12H - adc #0 + adc r3L sta r12H + + lda mouseRight + 1 + and #%00001111 + sta mouseRight + 1 + clc lda r12L adc moveKoords+6 @@ -835,40 +920,83 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate dey bpl @25 jsr InvFrame + + lda r3H + lsr + lsr + lsr + lsr + sta r0L + lda r4H + lsr + lsr + lsr + lsr + sta r0H + lda r2H ; aus yu/xr mach h/b sec sbc r2L sta r2H + lda r0H + sbc r0L + sta r0H + SubW r3,r4 MoveW_ mouseXPos,r3 ; neues x holen SubW moveKoords+7,r3 ; minus Mausabstandx AddW r3,r4 ; aus b mach xr + lda mouseXPos+1 + lsr + lsr + lsr + lsr + sta r12H + lda moveKoords+8 + lsr + lsr + lsr + lsr + sta r12L + lda mouseYPos ; neues y holen sec sbc moveKoords+6 ; minus Mausabstandy sta r2L - bcs @27a - pha - sec - lda r3H - sbc #16 - sta r3H - sec - lda r4H - sbc #16 - sta r4H - pla -@27a: + lda r12H + sbc r12L + sta r0L + + lda r2L clc adc r2H ; aus h mach yu sta r2H - bcc @27b - clc - lda r4H - adc #16 - sta r4H -@27b: + lda r0L + adc r0H + sta r0H + + lda r0L + asl + asl + asl + asl + sta r0L + lda r0H + asl + asl + asl + asl + sta r0H + + lda r3H + and #%00001111 + ora r0L + sta r3H + lda r4H + and #%00001111 + ora r0H + sta r4H ldy #05 ; Neues Rechteck zeichnen @27: lda r2,y @@ -953,11 +1081,7 @@ AppRubberFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordina sta r2,y dey bpl @25 - PushW r3 - PushB r2L jsr InvFrame - PopB r2L - PopW r3 MoveW_ mouseXPos,r4 MoveB mouseYPos,r2H @@ -1083,6 +1207,9 @@ NewMouseService: bpl @29 .ifdef topdesk128 MoveW_ RightMax, mouseRight + lda mouseRight+1 + ora #16 + sta mouseRight+1 .endif lda moveVector ldx moveVector+1 @@ -1106,7 +1233,7 @@ NewMouseService: lda oldMsVec ldx oldMsVec+1 jmp CallRoutine -@d: .byte 0,199 +@d: .byte 0,$df .ifdef topdesk128 .byte 0, 0 .else @@ -1446,6 +1573,7 @@ BackWindow: ; aktuelles Window nach hinten setzen jmp @59 @70: jsr DrawShadow jmp SendActivate +cutDebug: .byte 0 CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen ; Rechteck 1: r2-r4 ; Rechteck 2: r5-r7 ( bleibt unver{ndert ) @@ -1453,38 +1581,74 @@ CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen ; bei c = 1 keine Schnittfl{che vorhanden ; zerst|rt: A + PushW r0 + lda r3H + and #%11110000 + sta r0L + lda r3H + and #%00001111 + sta r3H + lda r4H + and #%11110000 + sta r0H + lda r4H + and #%00001111 + sta r4H + ; r3 = MAX(r3,r6) lda r6L sec sbc r3L lda r6H + and #%00001111 sbc r3H bmi @10 -@05: MoveW_ r6,r3 + MoveB r6L, r3L + lda r6H + and #%00001111 + sta r3H @10: ; r2L = MAX (r2L,r5L) lda r5L sec sbc r2L - lda #00 - sbc #00 + lda r6H + and #%11110000 + sbc r0L bmi @20 MoveB r5L,r2L + lda r6H + and #%11110000 + sta r0L + lda cutDebug + beq @20 + inc $d021 @20: ; r4 = MIN (r4,r7) lda r7L sec sbc r4L lda r7H + and #%00001111 sbc r4H bpl @30 - MoveW_ r7,r4 + MoveB r7L, r4L + lda r7H + and #%00001111 + sta r4H @30: ; r2H = MIN (r2H,r5H) lda r5H sec sbc r2H - lda #00 - sbc #00 + lda r7H + and #%11110000 + sbc r0H bpl @40 MoveB r5H,r2H + lda r7H + and #%11110000 + sta r0H + lda cutDebug + beq @40 + inc $d021 @40: ; Schnittfl{che jetzt in r2-r4 ; wenn r4=leftMargin? @@ -1768,25 +1948,27 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen txa pha sta r2L - cmp #($F8-1) - bcc @norm + + + ;cmp #($F8-1) + ;bcc @norm ; if larger than, high rest y - and #7 - sty r2L - - asl r2L - rol r2H - asl r2L - rol r2H - asl r2L - rol r2H - - ora r2L - sta r2L - lda r2H - and #7 - sta r2H + ;and #7 + ;sty r2L + + ;asl r2L + ;rol r2H + ;asl r2L + ;rol r2H + ;asl r2L + ;rol r2H + + ;ora r2L + ;sta r2L + ;lda r2H + ;and #7 + ;sta r2H @norm: sec @@ -1817,9 +1999,9 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen inx ; n{chste Zeile bne @04 iny - txa - ora #$F8 - tax + ;txa + ;ora #$F8 + ;tax @04: dec r13H bne @01 @@ -1828,8 +2010,31 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen rts @sub: .ifdef topdesk128 - jsr DispTest + jsr DispTest .endif + lda r2L + pha + lda r2H + ;lsr + ;lsr + ;lsr + ;lsr + asl r2L + rol + asl r2L + rol + asl r2L + rol + asl r2L + rol + asl r2L + rol + tay + pla + sta r2L + and #$07 + ora #$f8 + tax jsr GetScanLine ; Zeilenadresse holen .ifdef topdesk13 @@ -2297,9 +2502,17 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 bit r10L bpl @21 + ; by 8 + sty r10H txa - tay - ldx #$f8 + asl + rol r10H + asl + rol r10H + asl + rol r10H + ldy r10H + tax lda r10L and #$7F @@ -2383,8 +2596,8 @@ MaxWindow: ; actives Window auf Maximalgr|~e setzen / bzw. zur}ck NewPutString: .ifdef topdesk128 - ldx #r11 - jsr NormalizeX + ldx #r11 + jsr NormalizeX .endif ldy #00 lda (r0),y @@ -2400,7 +2613,8 @@ NewPutString: @04: jsr SmallPutChar @05: IncW r0 jmp NewPutString -@10: rts +@10: + rts oldRecoverVec: .word 0 MyRecoverService: ldy #5 @loop0: lda r2L,y diff --git a/topdesk/WinInclude/InvFrame.inc b/topdesk/WinInclude/InvFrame.inc index f8c70074..cc6a9250 100644 --- a/topdesk/WinInclude/InvFrame.inc +++ b/topdesk/WinInclude/InvFrame.inc @@ -29,6 +29,7 @@ InvFrame: sta r11L ; if r11L is the bottom end of the frame ; r3H need to transport the msb of bottom y + PushB r3H lda r3H and #%00001111 sta r3H @@ -37,6 +38,7 @@ InvFrame: ora r3H sta r3H jsr InvertLine + PopB r3H PopW r11 PopW r8 rts From c4a433c688cb3a8f3a5fef02fc00c5edc5a43102 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 19 Jan 2019 14:08:18 +0100 Subject: [PATCH 028/125] Implement video mode selection menu to topdesk. --- topdesk/Include/DeskMain2.inc | 17 +++++++++++++++++ topdesk/Main/DeskTop.main.s | 31 +++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index b2342e8f..453eef59 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -1102,6 +1102,23 @@ GenData: .word GenTab,DARecSpace GenData: .word GenTab,$7f80 .endif +MySubMenuDA2: + pla + clc + adc #1 + sta r0L + pla + adc #0 + sta r0H + MoveW_ RecoverVector,@r1 + LoadW___ RecoverVector,@11 + rts +@11: + MoveW_ @r1,RecoverVector + jmp MyRecoverService + +@r1: .word 0 + MySubMenuDA: LoadW___ GenData+2,DARecSpace bne MySub2 .ifdef topdesk128 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 9b6ae40b..435d936b 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1607,6 +1607,33 @@ RedrawHead: jsr FrameRectangle jmp InitClock +mode_Menue: + jsr MySubMenuDA2 +modeoben: .byte 13+13+1 +modeunten: .byte 8*14+13+13+1+1 ; wird berechnet! + .word 80,171 + .byte 8 | VERTICAL + mpt Mode40Text,MENU_ACTION,Mode_Call + mpt Mode80Text,MENU_ACTION, Mode_Call + mpt ModeNSText,MENU_ACTION,Mode_Call + mpt ModeHRText,MENU_ACTION,Mode_Call + mpt ModeHRSText,MENU_ACTION,Mode_Call + mpt ModeSRText,MENU_ACTION,Mode_Call + mpt ModeSRSText,MENU_ACTION,Mode_Call + mpt ModeHCText,MENU_ACTION,Mode_Call +Mode40Text: .byte " 40-cols",0 +Mode80Text: .byte " 80-cols",0 +ModeNSText: .byte ITALICON, " nice scale",PLAINTEXT,0 +ModeHRText: .byte "* high-res",0 +ModeHRSText: .byte ITALICON, " high-res scaled",PLAINTEXT,0 +ModeSRText: .byte ITALICON, " super-res",PLAINTEXT,0 +ModeSRSText: .byte ITALICON, " super-res scaled",PLAINTEXT,0 +ModeHCText: .byte ITALICON, " high-color",PLAINTEXT,0 + +Mode_Call: + jsr GotoFirstMenu + rts + geos_Menue: jsr DA_Init txa @@ -1619,7 +1646,7 @@ geosunten: .byte 28 ; wird berechnet! geosanz: .byte 1 ; wird eingesetzt! mpt DeskInfoText,MENU_ACTION,DispInfo .ifdef topdesk128 - mpt SwitchText,MENU_ACTION, Switch + mpt SwitchText,DYN_SUB_MENU, mode_Menue .endif mpt DASpace + 0*17,MENU_ACTION,DA_Call mpt DASpace + 1*17,MENU_ACTION,DA_Call @@ -1631,7 +1658,7 @@ geosanz: .byte 1 ; wird eingesetzt! mpt DASpace + 7*17,MENU_ACTION,DA_Call DeskInfoText: .byte "TopDesk Info",0 .ifdef topdesk128 -SwitchText: .byte "switch 40/80",0 +SwitchText: .byte "switch mode",0 .endif maxDesks = 8 ; maximale Anzahl der angezeigten DA's From 9cadcb7e1011902f31afcf3431db3720aae66394 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Mon, 28 Jan 2019 00:19:24 +0100 Subject: [PATCH 029/125] First version that separated multi video mode implementation and implements defaulf of 320x200. --- README.md | 10 +++ config.inc | 2 +- inc/const.inc | 6 +- kernal/c65/map.s | 6 ++ kernal/fonts/fonts2.s | 29 ++++---- kernal/graph/mode.s | 157 +++++++++++++++++++++++++++++++++++---- kernal/graph/normalize.s | 6 +- kernal/graph/scanline.s | 37 +-------- kernal/hw/hw1b.s | 2 + kernal/init/init1.s | 12 ++- kernal/init/init2.s | 3 + kernal/jumptab/jumptab.s | 4 +- kernal/kernal_mega65.cfg | 2 +- kernal/load/load1a.s | 2 +- kernal/mouse/mouse3.s | 15 +++- kernal/sprites/sprites.s | 9 ++- kernal/vars/vars.s | 15 ++++ loader/loader.s | 2 +- 18 files changed, 240 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index d781faf0..81d81c18 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,16 @@ The GEOS KERNAL has a quite complicated memory layout: * $C100-$C2E5: KERNAL Jump Table * $C2E6-$FFFF: KERNAL +For C65/MEGA65 there is a different/specific layout: + +* $9000-$9FFF: KERNAL ("lokernal") +* $A000-$BFFF: KERNEL Underlay (graphics area mapped out as needed) +* $C000-$C01A: KERNAL Header +* $C01B-$C0FF: KERNAL +* $C100-$C2E5: KERNAL Jump Table +* $C2E6-$FFFF: KERNAL +* $D000-$DFFF: I/O area on by default (hidden for calling methods) + The header and the jump table must be at $C000 and $C100, respectively. Together with the graphics bitmap at $A000, this partitions the KERNAL into four parts: lokernal, below header, between header and jump table, and above jump table. The linker config file positions the segments from the source files into these parts. If the code of any segment changes, the header and the jump table will remain at their positions. If a part overruns, the linker will report and error, and you can consult the `kernal.map` output file to find out where to best put the extra code. diff --git a/config.inc b/config.inc index 056b6056..7e32b33f 100644 --- a/config.inc +++ b/config.inc @@ -163,7 +163,7 @@ config_inc = 1 removeToBASIC = 1 ; for 2MHz-on-border on C128 in 64 mode - use2MHz = 1 + ;use2MHz = 1 ; only VLIR and SEQ supported ;onlyVLIR = 1 diff --git a/inc/const.inc b/inc/const.inc index d42a443d..72c06fc1 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -88,8 +88,10 @@ GRBANK2 = %01 GRBANK3 = %00 ; screen -VIC_X_POS_OFF = 56 -VIC_Y_POS_OFF = 74 +VIC_X_POS_OFF = 24 +VIC_Y_POS_OFF = 50 +VIC_X_POS_OFF_H640 = 56 +VIC_Y_POS_OFF_V400 = 74 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 SC_PIX_WIDTH = 720 diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 5df8415e..4fc181ec 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -64,6 +64,7 @@ .import _ReadByte .import __CRC .import __GetRandom +.import _SetNewMode .global _map_FollowChain .global _map_FindFTypes @@ -94,6 +95,7 @@ .global _map_ReadByte .global _map__CRC .global _map__GetRandom +.global _map_SetNewMode .global MapUnderlay .global UnmapUnderlay @@ -325,6 +327,10 @@ _map__GetRandom: jsr MapUnderlay jsr __GetRandom bra __unmap +_map_SetNewMode: + jsr MapUnderlay + jsr _SetNewMode + bra __unmap MapUnderlay: diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 57d5f18d..4c2a852e 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -53,6 +53,8 @@ PrvCharWidth = $880D .global FontPutChar .global _GetRealSize +.import screenNextLine + .segment "fonts2" ;--------------------------------------------------------------- @@ -994,20 +996,21 @@ FontPutChar: bne @8 .ifdef mega65 @88: - inc r5H ; end of block, we need to add a line - inc r6H - bbrf 7, graphMode, @99 - inc r5H - inc r6H - AddVB $78, r5L - bra @98 @99: - inc r5H - inc r6H -; inc r5H -; inc r6H - ;AddVB $38, r5L - AddVB $C8, r5L + clc + lda screenNextLine+1 + adc r5H + sta r5H + clc + lda screenNextLine+1 + adc r6H + sta r6H + + clc + lda screenNextLine + lda #$38 + adc r5L + sta r5L @98: sta r6L bcc @8 diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index fe494751..020cd2ca 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -17,6 +17,7 @@ .global _GraphicsString .global SetNewMode0 +.global i_FillRam .segment "mode" @@ -24,6 +25,22 @@ .import SetVDCRegister .endif .global _SetNewMode +.ifdef mega65 +.global InitScanLineTab +.import LineTabL +.import LineTabH +.import VIC_IniTbl +.import VIC_IniTbl_end +.import SetVICRegs +.endif + +.import screenMaxX +.import screenMaxY +.import screenCardsX +.import spriteXPosOff +.import spriteYPosOff +.import screenNextLine + .global SetRightMargin _SetNewMode: jsr SetRightMargin @@ -46,21 +63,93 @@ SetNewMode0: jmp SetVDCRegister .else START_IO - lda $d031 + lda $d031 bbrf 7, graphMode, @1 - ; 80 column mode - ora #%10000000 - ;sta $d031 - END_IO - rts + ; 80 column mode, or advanced modes +; ora #%10000000 + ;sta $d031 +; END_IO +; rts @1: - ; 40 column mode - and #%01111111 - ;sta $d031 + + ; 40 column compatibility mode + and #%01010111 + sta $d031 + + jsr i_FillRam + .word 1000 + .word COLOR_MATRIX + .byte (DKGREY << 4)+LTGREY + + LoadW screenNextLine, 312 + LoadW screenMaxX, 319 + LoadW screenMaxY, 199 + LoadW screenCardsX, 40 + LoadB spriteXPosOff, VIC_X_POS_OFF + LoadB spriteYPosOff, VIC_Y_POS_OFF + LoadW r0, VIC_IniTbl +.assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" + ldy #<(VIC_IniTbl_end - VIC_IniTbl) + jsr SetVICRegs + + LDA #79 + STA $D05C + LDA #$00 + STA $D05D + LDA #0 + sta $D076 - END_IO - rts + lda #%00111000 + sta $d011 + lda #$38 + sta $d018 + lda #$08 + sta $d016 + + lda #$04 ; 3.5Mhz, H640, no bitplanes + sta $d030 + + lda cia2base + and #%00110000 + ora #%00000101 + sta cia2base + + LDA #$8F + STA $d06D + + lda #<104 + sta $d048 + lda #>104 + sta $d049 + lda #<504 + sta $D04A + lda #>504 + sta $d04b + + + LDA #<$4000 + STA $D068 + LDA #>$4000 + STA $D069 + LDA #1 + STA $D06A + + LDA #<$8c00 + STA $D060 + LDA #>$8c00 + STA $D061 + LDA #0 + STA $D062 + + ;LDA #40 + ;STA $D058 + ;STA $D05E + LoadW r5, 320 + jsr InitScanLineTab + + END_IO + rts .endif SetRightMargin: @@ -70,12 +159,12 @@ SetRightMargin: ldx #>(SC_PIX_WIDTH-1) ldy #<(SC_PIX_WIDTH-1) bbrf 7, graphMode, @1 - LoadB L8890, $ff + ;LoadB L8890, $ff .ifdef bsw128 - lda #1 + ;lda #1 .endif - ldx #>(SCREENPIXELWIDTH-1) - ldy #<(SCREENPIXELWIDTH-1) + ;ldx #>(SCREENPIXELWIDTH-1) + ;ldy #<(SCREENPIXELWIDTH-1) @1: .ifdef bsw128 sta clkreg ; D030 @@ -83,3 +172,41 @@ SetRightMargin: stx rightMargin+1 sty rightMargin jmp UseSystemFont + +.ifdef mega65 + +;--------------------------------------------------------------- +; InitScanLineTab +; +; Function: Inits the scan line tab for given scan line +; size. +; +; Pass: r5 scanline size +; Destroyed: a, x +;--------------------------------------------------------------- +InitScanLineTab: + + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K + + ldx #0 + txa + sta LineTabL, X + sta LineTabH, x +@1: + clc + lda LineTabL,X + add r5L + sta LineTabL+1,X + lda LineTabH,X + adc r5H + sta LineTabH+1,X + inx + cpx #127 + bne @1 + + PopB CPU_DATA + + rts +.endif + \ No newline at end of file diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index 298f2457..acd60db3 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -16,6 +16,8 @@ .global _NormalizeY .endif +.import screenMaxX + .segment "graph5" .ifdef mega65 @@ -71,11 +73,11 @@ _NormalizeX: pha and #$03 sta zpage+1,x - lda #<719 + lda screenMaxX clc sbc zpage, x sta zpage, x - lda #>719 + lda screenMaxX+1 sbc zpage+1,x sta zpage+1,x pla diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 9ee6d0b2..a064271f 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -13,6 +13,8 @@ .global _GetScanLine .ifdef mega65 .global InitScanLineTab +.global LineTabH +.global LineTabL .endif .segment "graph2n" @@ -323,42 +325,7 @@ GSC80_6: rts .endif -.ifdef mega65 - -;--------------------------------------------------------------- -; InitScanLineTab -; -; Function: Inits the scan line tab for given scan line -; size. -; -; Pass: r5 scanline size -; Destroyed: a, x -;--------------------------------------------------------------- -InitScanLineTab: - - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - ldx #0 - txa - sta LineTabL, X - sta LineTabH, x -@1: - clc - lda LineTabL,X - add r5L - sta LineTabL+1,X - lda LineTabH,X - adc r5H - sta LineTabH+1,X - inx - cpx #127 - bne @1 - - PopB CPU_DATA - - rts -.endif .segment "graph2o" diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 6f0de8df..29a96c0d 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -105,6 +105,7 @@ ASSERT_NOT_BELOW_IO ; enable 800x600 mode ; 1. Set horizontal border width + .if 0 LDA #39 STA $D05C LDA #$80 @@ -172,6 +173,7 @@ ASSERT_NOT_BELOW_IO sta $d04e lda #>74 sta $d04f +.endif .else lda #$a5 sta $d02f diff --git a/kernal/init/init1.s b/kernal/init/init1.s index e36e5894..c07958f3 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -23,10 +23,12 @@ .import MapUnderlay .import UnmapUnderlay .endif +.import dtLoad .segment "init1" _InitMachine: +inc $d020 .ifdef mega65 jsr MapUnderlay .endif @@ -36,10 +38,10 @@ _InitMachine: .endif .if .defined(bsw128) || .defined(mega65) .import SetRightMargin -.import SetNewMode0 +.import SetNewMode _InitMachine2: jsr InitGEOEnv - jmp SetNewMode0 + jmp SetNewMode .endif InitGEOEnv: LoadW r0, InitRamTab @@ -47,7 +49,13 @@ InitGEOEnv: LoadB CPU_DATA, RAM_64K jsr _InitRam LoadB CPU_DATA, IO_IN +.ifdef mega65 + jsr MapUnderlay + jsr SetRightMargin + jmp UnmapUnderlay +.else jmp SetRightMargin +.endif .else .ifdef wheels .assert * = _InitRam, error, "Code must run into _InitRam" diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 70e9999b..c0e775a5 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -38,6 +38,9 @@ _FirstInit: sei cld +.ifdef mega65 + LoadB screencolors, $BF +.endif .ifdef bsw128 LoadB screencolors, $BF sta @1 diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index a1cb20d4..531323cf 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -202,6 +202,7 @@ .import _map_ReadByte .import _map__CRC .import _map__GetRandom +.import _map_SetNewMode .else .import _InsertRecord .import _NextRecord @@ -397,6 +398,7 @@ .global SwapRAM .global VerifyRAM .global DoRAMOp +.global SetNewMode .if .defined(bsw128) || .defined(mega65) .global NormalizeX @@ -1005,7 +1007,7 @@ SetMsePic: UNIMPLEMENTED SetNewMode: .import _SetNewMode - jmp _SetNewMode + jmp _map_SetNewMode NormalizeX: jmp _NormalizeX MoveBData: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 8cce07fe..6cab690e 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -42,6 +42,7 @@ SEGMENTS { math2: load = UNDERLAY, type = ro; math1d: load = UNDERLAY, type = ro; hw1b: load = UNDERLAY, type = ro; + mode: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -82,7 +83,6 @@ SEGMENTS { #misc: load = KERNAL, type = ro; hw3: load = KERNAL, type = ro; load2: load = KERNAL, type = ro; - mode: load = KERNAL, type = ro; process1: load = KERNAL, type = ro; process2: load = KERNAL, type = ro; process3a: load = KERNAL, type = ro; diff --git a/kernal/load/load1a.s b/kernal/load/load1a.s index e90f07d4..e502a543 100644 --- a/kernal/load/load1a.s +++ b/kernal/load/load1a.s @@ -54,8 +54,8 @@ _EnterDeskTop: stx firstBoot .endif txs - jsr ClrScr jsr _InitMachine + jsr ClrScr .ifdef useRamExp MoveW DeskTopStart, r0 MoveB DeskTopLgh, r2H diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index c147b88f..7f939741 100644 --- a/kernal/mouse/mouse3.s +++ b/kernal/mouse/mouse3.s @@ -13,6 +13,9 @@ .global RcvrMnu0 .global ResetMseRegion +.import screenMaxX +.import screenMaxY + .segment "mouse3" .ifndef wheels @@ -32,9 +35,15 @@ ResetMseRegion: @1: rts @2: LoadW mouseRight, SCREENPIXELWIDTH-1 .endif - LoadB mouseBottom, $DF - LoadW mouseRight, 719 + $1000 - + MoveB screenMaxY, mouseBottom + MoveB screenMaxX, mouseRight + lda screenMaxY+1 + asl + asl + asl + asl + ora screenMaxX+1 + sta mouseRight+1 .else LoadW mouseRight, SC_PIX_WIDTH-1 LoadB mouseBottom, SC_PIX_HEIGHT-1 diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index 9652f345..415256cf 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -25,6 +25,9 @@ .global _EnablSprite .global _PosSprite +.import spriteXPosOff +.import spriteYPosOff + .segment "sprites" ;--------------------------------------------------------------- @@ -88,7 +91,8 @@ _HR_PosSprite: rol tay lda r5L - addv VIC_Y_POS_OFF + clc + adc spriteYPosOff ;sta r6L sta mob0ypos,Y @@ -129,7 +133,8 @@ lda r3L rol tay lda r4L - addv VIC_X_POS_OFF + clc + adc spriteXPosOff ;sta r6L sta mob0xpos,Y lda r4H diff --git a/kernal/vars/vars.s b/kernal/vars/vars.s index 3631684e..d761156e 100644 --- a/kernal/vars/vars.s +++ b/kernal/vars/vars.s @@ -5,6 +5,7 @@ ; These are not part of the API and can be changed. .include "config.inc" +.include "inc/const.inc" .global menuOptNumber .global menuTop @@ -73,6 +74,13 @@ .global TempCurDrive .global scr_mobx +.global screenCardsX +.global screenMaxX +.global screenMaxY +.global spriteXPosOff +.global spriteYPosOff +.global screenNextLine + .segment "vars" menuOptNumber: .byte 0 @@ -169,3 +177,10 @@ KbdDBncTab: .res 8, 0 .res 3, 0 KbdDMltTab: .res 20, 0 .endif + +screenCardsX: .word 40 +screenMaxX: .word 319 +screenNextLine: .word 312 +screenMaxY: .word 199 +spriteXPosOff: .word VIC_X_POS_OFF +spriteYPosOff: .word VIC_Y_POS_OFF diff --git a/loader/loader.s b/loader/loader.s index c09f0592..05338f22 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -88,7 +88,7 @@ next: .WORD 0 sta $d06f LDA $D054 - ORA #$50 + ORA #$40 STA $D054 lda #$40 sta $d031 From 5ece75d08d7a7af4f32e74d2d1d6cbf7e2108870 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 23 Mar 2019 16:45:17 +0100 Subject: [PATCH 030/125] Basic setup working, DoIcons click fixed for high resolution. --- Makefile | 1 + inc/const.inc | 8 +- inc/geosmac.inc | 8 +- inc/geossym.inc | 2 + kernal/fonts/fonts2.s | 5 +- kernal/graph/clrscr.s | 11 +- kernal/graph/mode.s | 341 +++++++++++++++++++++++++++--- kernal/graph/normalize.s | 15 +- kernal/hw/hw1b.s | 17 +- kernal/icon/icon2.s | 77 ++++++- kernal/kernal_mega65.cfg | 3 +- kernal/start/start64.s | 6 +- kernal/vars/vars.s | 3 + topdesk/Include/DeskMain2.inc | 24 +-- topdesk/Include/Symbol/TopSym.inc | 2 + topdesk/Main/DeskTop.main.s | 72 ++++--- topdesk/Main/DeskTop.sub7.s | 16 +- topdesk/Main/DeskWindows.akt.inc | 125 ++++++----- 18 files changed, 576 insertions(+), 160 deletions(-) diff --git a/Makefile b/Makefile index 363dc79d..2829aacc 100755 --- a/Makefile +++ b/Makefile @@ -359,6 +359,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite GW64.CVT | $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; diff --git a/inc/const.inc b/inc/const.inc index 72c06fc1..4e9a6193 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -90,8 +90,12 @@ GRBANK3 = %00 ; screen VIC_X_POS_OFF = 24 VIC_Y_POS_OFF = 50 -VIC_X_POS_OFF_H640 = 56 -VIC_Y_POS_OFF_V400 = 74 +VIC_X_POS_OFF_640 = 97 +VIC_Y_POS_OFF_640 = 50 +VIC_X_POS_OFF_720 = 56 +VIC_Y_POS_OFF_720 = 74 +VIC_X_POS_OFF_800 = 37 +VIC_Y_POS_OFF_800 = 11 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 SC_PIX_WIDTH = 720 diff --git a/inc/geosmac.inc b/inc/geosmac.inc index 1b7fa6f6..7512acc4 100644 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -180,7 +180,7 @@ CmpB source+0, dest+0 @j: .endmacro - + .macro CmpWI source, immed .local @j CmpBI source+1, >(immed) @@ -445,15 +445,15 @@ ASSERT_NOT_BELOW_IO beq addr bcc addr .endmacro - + .ifdef scalable_coords .macro ByteCY xc, yc - .byte (yc & $FF) + .byte (>8)<<12); | DOUBLE_W | ADD1_W ; x2 -.else .word SCREENPIXELWIDTH-1 ; x2 .endif +inc $d020 rts .endif diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 020cd2ca..4b62fa8f 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -37,6 +37,7 @@ .import screenMaxX .import screenMaxY .import screenCardsX +;.import scrFullCardsX .import spriteXPosOff .import spriteYPosOff .import screenNextLine @@ -63,20 +64,297 @@ SetNewMode0: jmp SetVDCRegister .else START_IO + + lda $d031 - bbrf 7, graphMode, @1 + ;bit graphMode + ;beq @1 + bbsf 7, graphMode, @_1 + jmp @1 +@_1: + LoadW r0, VIC_IniTbl + .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" + ldy #<(VIC_IniTbl_end - VIC_IniTbl) + jsr SetVICRegs + + LDA #80 + STA $D058 + STA $D05E ; 80 column mode, or advanced modes -; ora #%10000000 - ;sta $d031 + ; Set bitmap mode (makes horizontal borders take effect) + LDA #$3B + STA $D011 + lda #$09 + sta $d016 + + ; 90 column mode, or advanced modes + lda #$C0 + sta $d031 + + + ; enable sprite H640 + LDA $D054 + ORA #$10 + STA $D054 + LDA #0 + sta $D076 + + LDA #79 + STA $D05C + LDA #$80 + STA $D05D + + lda #$04 ; 3.5Mhz, H640, no bitplanes + sta $d030 + + lda cia2base + and #%00110000 + ora #%00000101 + sta cia2base + + ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour + ; information for bitmap mode. + ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), + ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole + ; palette. + LDA #<$2000 + STA $D060 + LDA #>$2000 + STA $D061 + LDA #<1 + STA $D062 + LDA #>1 + STA $D063 + ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. + ; (We are using 2nd bank of 64KB for this) + ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. + LDA #<$4000 + STA $D068 + LDA #>$4000 + STA $D069 + LDA #1 + STA $D06A + + LDA #$8F + STA $d06D + + LoadW screenNextLine, 632 + LoadW screenMaxX, 639 + LoadW screenMaxY, 199 + LoadW screenCardsX, 80 + LoadB scrFullCardsX, 80 + LoadB scrFullCardsX+1, 25 + LoadB spriteXPosOff, VIC_X_POS_OFF_640 + LoadB spriteYPosOff, VIC_Y_POS_OFF_640 + + LoadW r5, 640 + jsr InitScanLineTab + END_IO + rts ; END_IO ; rts @1: - + lda graphMode + cmp #3 + beq @12 + jmp @11 +@12: + LoadW r0, VIC_IniTbl + .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" + ldy #<(VIC_IniTbl_end - VIC_IniTbl) + jsr SetVICRegs + + LDA #39 + STA $D05C + LDA #$80 + STA $D05D + LDA #1 + sta $D076 + LDA $D054 + ORA #$10 + STA $D054 + + lda #$c9 + sta grcntrl2 + + ; Set bitmap mode (makes horizontal borders take effect) + LDA #$3B + STA $D011 + + ; 90 column mode, or advanced modes + lda #$C8 + sta $d031 + + LDA #90 + STA $D058 + STA $D05E + + lda #$04 ; 3.5Mhz, H640, no bitplanes + sta $d030 + + lda cia2base + and #%00110000 + ora #%00000101 + sta cia2base + + ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour + ; information for bitmap mode. + ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), + ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole + ; palette. + LDA #<$2000 + STA $D060 + LDA #>$2000 + STA $D061 + LDA #<1 + STA $D062 + LDA #>1 + STA $D063 + ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. + ; (We are using 2nd bank of 64KB for this) + ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. + LDA #<$4000 + STA $D068 + LDA #>$4000 + STA $D069 + LDA #1 + STA $D06A + + LDA #$8F + STA $d06D + + lda #<74 + sta $d048 + lda #>74 + sta $d049 + lda #<554 + sta $D04A + lda #>554 + sta $d04b + + lda #<74 + sta $d04e + lda #>74 + sta $d04f + + LoadW screenNextLine, 712 + LoadW screenMaxX, 719 + LoadW screenMaxY, 479 + LoadW screenCardsX, 90 + LoadB scrFullCardsX, 90 + LoadB scrFullCardsX+1, 60 + LoadB spriteXPosOff, VIC_X_POS_OFF_720 + LoadB spriteYPosOff, VIC_Y_POS_OFF_720 + + LoadW r5, 720 + jsr InitScanLineTab + END_IO + rts +@11: + lda graphMode + cmp #5 + beq @13 + jmp @14 +@13: + LoadW r0, VIC_IniTbl + .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" + ldy #<(VIC_IniTbl_end - VIC_IniTbl) + jsr SetVICRegs + + LDA #20 + STA $D05C + LDA #$80 + STA $D05D + LDA #1 + sta $D076 + LDA $D054 + ORA #$10 + STA $D054 + + lda #$c9 + sta grcntrl2 + + ; Set bitmap mode (makes horizontal borders take effect) + LDA #$3B + STA $D011 + + ; 90 column mode, or advanced modes + lda #$C8 + sta $d031 + + LDA #94 + STA $D058 + STA $D05E + + lda #$04 ; 3.5Mhz, H640, no bitplanes + sta $d030 + + lda cia2base + and #%00110000 + ora #%00000101 + sta cia2base + + ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour + ; information for bitmap mode. + ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), + ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole + ; palette. + LDA #<$2000 + STA $D060 + LDA #>$2000 + STA $D061 + LDA #<1 + STA $D062 + LDA #>1 + STA $D063 + ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. + ; (We are using 2nd bank of 64KB for this) + ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. + LDA #<$4000 + STA $D068 + LDA #>$4000 + STA $D069 + LDA #1 + STA $D06A + + LDA #$8F + STA $d06D + + lda #<11 + sta $d048 + lda #>11 + sta $d049 + lda #<604 + sta $D04A + lda #>604 + sta $d04b + + lda #<11 + sta $d04e + lda #>11 + sta $d04f + + LoadW screenNextLine, 744 + LoadW screenMaxX, 751 + LoadW screenMaxY, 588 + LoadW screenCardsX, 94 + LoadB scrFullCardsX, 94 + LoadB scrFullCardsX+1, 74 + LoadB spriteXPosOff, VIC_X_POS_OFF_800 + LoadB spriteYPosOff, VIC_Y_POS_OFF_800 + + LoadW r5, 752 + jsr InitScanLineTab + END_IO + rts + + +@14: ; 40 column compatibility mode - and #%01010111 + lda #$40 sta $d031 - + jsr i_FillRam .word 1000 .word COLOR_MATRIX @@ -86,27 +364,29 @@ SetNewMode0: LoadW screenMaxX, 319 LoadW screenMaxY, 199 LoadW screenCardsX, 40 + LoadB scrFullCardsX, 40 + LoadB scrFullCardsX+1, 25 LoadB spriteXPosOff, VIC_X_POS_OFF LoadB spriteYPosOff, VIC_Y_POS_OFF LoadW r0, VIC_IniTbl .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" - ldy #<(VIC_IniTbl_end - VIC_IniTbl) + ldy #<(VIC_IniTbl_end - VIC_IniTbl) jsr SetVICRegs - - LDA #79 + + LDA #80 STA $D05C - LDA #$00 + LDA #$80 STA $D05D LDA #0 sta $D076 - lda #%00111000 + lda #%00111011 sta $d011 - lda #$38 - sta $d018 - lda #$08 - sta $d016 - + ;lda #$38 + ;sta $d018 + ;lda #$08 + ;sta $d016 + lda #$04 ; 3.5Mhz, H640, no bitplanes sta $d030 @@ -114,10 +394,10 @@ SetNewMode0: and #%00110000 ora #%00000101 sta cia2base - + LDA #$8F STA $d06D - + lda #<104 sta $d048 lda #>104 @@ -126,8 +406,8 @@ SetNewMode0: sta $D04A lda #>504 sta $d04b - - + + LDA #<$4000 STA $D068 LDA #>$4000 @@ -141,13 +421,19 @@ SetNewMode0: STA $D061 LDA #0 STA $D062 - - ;LDA #40 - ;STA $D058 - ;STA $D05E + + LDA #40 + STA $D058 + STA $D05E + + ; disable sprite H640 + LDA $D054 + AND #$EF + STA $D054 + LoadW r5, 320 jsr InitScanLineTab - + END_IO rts .endif @@ -176,9 +462,9 @@ SetRightMargin: .ifdef mega65 ;--------------------------------------------------------------- -; InitScanLineTab +; InitScanLineTab ; -; Function: Inits the scan line tab for given scan line +; Function: Inits the scan line tab for given scan line ; size. ; ; Pass: r5 scanline size @@ -209,4 +495,3 @@ InitScanLineTab: rts .endif - \ No newline at end of file diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index acd60db3..caa900d4 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -17,6 +17,7 @@ .endif .import screenMaxX +.import screenMaxY .segment "graph5" @@ -41,12 +42,12 @@ _NormalizeY: and #$0F sta zpage+1,x - lda #<479 - clc - ;sbc zpage,y - sta zpage,y - lda #>479 - ;sbc zpage,x + lda screenMaxY + sec + sbc zpage,y + sta zpage,y + lda screenMaxY+1 + sbc zpage,x asl asl @@ -135,4 +136,4 @@ UncompactXY: ora #$F0 @2: rts -.endif \ No newline at end of file +.endif diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 29a96c0d..80d430e0 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -97,7 +97,7 @@ ASSERT_NOT_BELOW_IO ; Enable C65GS IO ; 47, 53 = enable VIC IV ; a5, 96 = enable VIC III - + lda #$47 sta $d02f lda #$53 @@ -105,17 +105,17 @@ ASSERT_NOT_BELOW_IO ; enable 800x600 mode ; 1. Set horizontal border width - .if 0 +.if 0 LDA #39 STA $D05C LDA #$80 STA $D05D LDA #1 sta $D076 - - lda #$c9 + + lda #$c9 sta grcntrl2 - + ; Set bitmap mode (makes horizontal borders take effect) LDA #$3B STA $D011 @@ -127,12 +127,12 @@ ASSERT_NOT_BELOW_IO lda #$04 ; 3.5Mhz, H640, no bitplanes sta $d030 - + ; Set to 100 characters per row LDA #90 STA $D058 STA $D05E - + ; Disable/Enable 16-colour sprite mode for each sprite? LDA #$00 STA $D06B @@ -140,7 +140,7 @@ ASSERT_NOT_BELOW_IO ; Bit 10 of sprite X position for positions >511 LDA #$00 STA $D05F - + LDA #<$4000 STA $D068 LDA #>$4000 @@ -236,4 +236,3 @@ ASSERT_NOT_BELOW_IO .endif ASSERT_NOT_BELOW_IO jmp ResetMseRegion - diff --git a/kernal/icon/icon2.s b/kernal/icon/icon2.s index ef6aa97d..e428ac7b 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -51,7 +51,7 @@ Icons_1: lda r0L ora r0H beq @3 - jsr _BitmapUp + ;jsr _BitmapUp @3: inc r10L lda r10L ldy #0 @@ -125,6 +125,7 @@ FindClkIcon: beq @2 iny lda mouseXPos+1 + and #%00001111 lsr .if .defined(bsw128) || .defined(mega65) sta L888F @@ -141,7 +142,7 @@ FindClkIcon: .if .defined(bsw128) || .defined(mega65) pha lda (IconDescVec),y - jsr LFCCC + jsr LFCCC_ sta L888F pla .endif @@ -166,22 +167,66 @@ FindClkIcon: .endif bcs @2 dey + LoadB L8890, 0 + lda (IconDescVec-1),y + bpl @11 + + ; in GEOS6 scalable mode + lda (IconDescVec),y + bit #%01000000 + beq @23 + + lda (IconDescVec),y + clc + ora #%10000000 + adc scrFullCardsX+1 +@23: + ; we are in cards, so mult by 8 + asl + rol L8890 + asl + rol L8890 + asl + rol L8890 + +@11: + sta L888F + + lda mouseXPos+1 + lsr + lsr + lsr + lsr + pha + lda mouseYPos sec - sbc (IconDescVec),y + sbc L888F + sta L888F + + pla + sbc L8890 + bcc @2 + bne @2 iny iny + lda L888F cmp (IconDescVec),y bcc @3 @2: inc r0L lda r0L ldy #0 cmp (IconDescVec),y - bne @1 + beq @19 + jmp @1 +@19: clc rts -@3: sec +@3: +inc $d020 + + sec rts CalcIconCoords: @@ -243,3 +288,25 @@ LFCCC: pha rts .endif +.if .defined(bsw128) || .defined(mega65) +LFCCC_: + pha + and #%11000000 + + bpl @1 + cmp #%11000000 + bne @2 + + pla + ; x negative case + clc + adc scrFullCardsX + rts +@2: + pla + and #%01111111 + rts +@1: + pla + rts +.endif diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 6cab690e..20452e36 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -43,6 +43,7 @@ SEGMENTS { math1d: load = UNDERLAY, type = ro; hw1b: load = UNDERLAY, type = ro; mode: load = UNDERLAY, type = ro; + dlgbox2: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -105,7 +106,7 @@ SEGMENTS { graph3c: load = KERNAL, type = ro; iojmp: load = KERNAL, type = ro; mouseptr: load = KERNAL, type = ro; - dlgbox2: load = KERNAL, type = ro; + #dlgbox2: load = KERNAL, type = ro; graph2a: load = KERNAL, type = ro; graph2c: load = KERNAL, type = ro; graph2e: load = KERNAL, type = ro; diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 105fdee0..ee3641bc 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -156,18 +156,18 @@ OrigResetHandle: sei cld .ifdef mega65 - lda #GR_40 + lda #5 sta graphMode LoadW r5, 720 jsr InitScanLineTab .endif ldx #$ff .ifdef mega65 - jsr MapUnderlay + jsr MapUnderlay .endif jsr _DoFirstInitIO .ifdef mega65 - jsr UnmapUnderlay + jsr UnmapUnderlay .endif jsr InitGEOEnv .ifdef usePlus60K diff --git a/kernal/vars/vars.s b/kernal/vars/vars.s index d761156e..60d81644 100644 --- a/kernal/vars/vars.s +++ b/kernal/vars/vars.s @@ -75,6 +75,7 @@ .global scr_mobx .global screenCardsX +.global scrFullCardsX .global screenMaxX .global screenMaxY .global spriteXPosOff @@ -179,8 +180,10 @@ KbdDMltTab: .res 20, 0 .endif screenCardsX: .word 40 +scrFullCardsX: .word 40 screenMaxX: .word 319 screenNextLine: .word 312 screenMaxY: .word 199 spriteXPosOff: .word VIC_X_POS_OFF spriteYPosOff: .word VIC_Y_POS_OFF + diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 453eef59..c045310e 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -264,7 +264,7 @@ SwapFile: jsr GetAktlDisk LoadB r6H,$80 ; Dir-Block in $8000 benutzen bne @26 ; sonst @25: LoadB r6H,$83 ; r6 als Zeiger auf 1. Eintrag in $8300 -@26: ldy #29 +@26: ldy #29 @30: lda (r5),y ; Dir-Eintr{ge austauschen pha lda (r6),y @@ -443,7 +443,7 @@ GetAktlWinDisk: ; wie GetWinDisk, jedoch immer f}r das aktuelle Fenster GetWinDisk: ; Diskettennamen aus dem Pfadnamen eines Fensters ermitteln ; Par: x: Fensternummer ; Ret: Diskettenname abgelegt in DiskName - ; z-Flag gesetzt, wenn DiskName mit Diskname des aktl. + ; z-Flag gesetzt, wenn DiskName mit Diskname des aktl. ; Fensters identisch ; r0: Zeiger auf Disknamen (nicht DiskName) des Fensters x txa @@ -561,7 +561,7 @@ ClxR = 319 ClyO = 1 ClyU = ClyO+12 TimeX = 55 -TimeY = 9 +TimeY = 9 DateX = 5 DateY = TimeY ; InitClock @@ -588,15 +588,15 @@ InitClock: ldx #$00 jsr RestartProcess jsr EnableProcess - + rts ProzessTab: .word ShowClock .word 500 year = $8516 -ShowClock: +ShowClock: LoadB dispBufferOn,%10000000 php - sei + sei ldy #4 @10: lda year,y sta MyJahr,y @@ -619,7 +619,7 @@ ShowClock: lda #MinZehner-TagZehner jsr DivnSet @Ausg: - LoadW___ rightMargin,ClxR-1 + LoadW___ rightMargin,ClxR+1 jsr i_PutString .word ClxL-DateX .byte ClyO+DateY @@ -655,7 +655,7 @@ MinZehner: .byte "0" .byte PLAINTEXT MinEiner: .byte "0" .byte PLAINTEXT - .byte " " + .byte " " .byte NULL LoadW___ rightMargin,319 rts @@ -780,7 +780,7 @@ DispMenuRight: @t2: .byte PLAINTEXT," beeing deleted",0 .endif -TrashService: +TrashService: DeskDelete: jsr GotoFirstMenu ldx MultiCount dex @@ -1102,7 +1102,7 @@ GenData: .word GenTab,DARecSpace GenData: .word GenTab,$7f80 .endif -MySubMenuDA2: +MySubMenuDA2: pla clc adc #1 @@ -1113,10 +1113,10 @@ MySubMenuDA2: MoveW_ RecoverVector,@r1 LoadW___ RecoverVector,@11 rts -@11: +@11: MoveW_ @r1,RecoverVector jmp MyRecoverService - + @r1: .word 0 MySubMenuDA: LoadW___ GenData+2,DARecSpace diff --git a/topdesk/Include/Symbol/TopSym.inc b/topdesk/Include/Symbol/TopSym.inc index bbd14d83..bf1317c5 100644 --- a/topdesk/Include/Symbol/TopSym.inc +++ b/topdesk/Include/Symbol/TopSym.inc @@ -399,3 +399,5 @@ windowTop = $33 SC_FROM_END = %100000000000 SC_FROM_CENTER = %010000000000 SC_SCALE = %110000000000 + +scrFullCardsX = $886E diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 435d936b..1654d20e 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -16,6 +16,7 @@ ;.include "topdesk/Main/DeskWindows.ext.inc" ;endif ; d "DeskWin $400" + .include "topdesk/Main/DeskWindows.akt.inc" @@ -150,6 +151,7 @@ __ClearMultiFile: .global SchmalFlag .endif + __STARTUP_RUN__: Start: @@ -341,7 +343,6 @@ PrintX = 3 PrintY = 21 Start2: - lda RamTopFlag bne @10 lda ramExpSize @@ -663,13 +664,13 @@ SetMyNewMode: rts @tab1: - wb IconTab+6,(89-TrashX)|128 + wb IconTab+6,-8|128 wb IconTab+14,2|128 wb IconTab+22,STARTA_X wb IconTab+30,STARTB_X wb IconTab+38,STARTC_X wb IconTab+46,STARTD_X - ww RightMax, 719 + ww RightMax, 639 wb GraphIndex, 8 .ifdef lang_de ww HauptMenu+4,214 @@ -681,6 +682,8 @@ SetMyNewMode: .else ww DispMenuRight,182 .endif + ww modeunten+1, 80 + ww modeunten+3, 171 ww geosoben+4,80 ww Datei_Menue+2+3,28 ww Datei_Menue+4+3,112 @@ -727,12 +730,12 @@ SetMyNewMode: .word 0 @tab2: - wb IconTab+6,((39-TrashX)*2)|128 - wb IconTab+14,2*2|128 - wb IconTab+22,STARTA_X*2 - wb IconTab+30,STARTB_X*2 - wb IconTab+38,STARTC_X*2 - wb IconTab+46,STARTD_X*2 + wb IconTab+6,-8|128 + wb IconTab+14,2|128 + wb IconTab+22,STARTA_X + wb IconTab+30,STARTB_X + wb IconTab+38,STARTC_X + wb IconTab+46,STARTD_X ww RightMax,639 .ifdef mega65 wb GraphIndex,8 @@ -749,6 +752,8 @@ SetMyNewMode: .else ww DispMenuRight,237 .endif + ww modeunten+1, 104 + ww modeunten+3, 235 ww geosoben+4,104 .ifdef lang_de ww Datei_Menue+2+3,36 @@ -805,23 +810,23 @@ SetMyNewMode: -STARTA_X = (89-BitX) -STARTA_Y = 32 -STARTB_X = (89-BitX) -STARTB_Y = 64 -STARTC_X = (89-BitX) -STARTC_Y = 96 -STARTD_X = (89-BitX) -STARTD_Y = 128 +STARTA_X = -8 | 128 +STARTA_Y = 4 +STARTB_X = -8 | 128 +STARTB_Y = 8 +STARTC_X = -8 | 128 +STARTC_Y = 12 +STARTD_X = -8 | 128 +STARTD_Y = 16 IconTab: .ifdef topdesk128 .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte (89-TrashX)|128,56,TrashX+DOUBLE_B,TrashY + .byte -8|128,-20,TrashX+DOUBLE_B,TrashY .word TrashService .word PrintMap - .byte 2|128,56,PrintX+DOUBLE_B,PrintY + .byte 2|128,-20,PrintX+DOUBLE_B,PrintY .word PrintService .word BitMap .byte STARTA_X,STARTA_Y,BitX+DOUBLE_B,BitY @@ -913,7 +918,7 @@ OpenDa: pha jsr DoneWithIO LoadB KSFlag,0 rts -@10: +@10: lda @dr beq @20 lda ghostFile @@ -1574,7 +1579,7 @@ ReLoadAll2: ;Rts: rts -RedrawHead: +RedrawHead: lda #2 jsr SetPattern jsr i_Rectangle @@ -1631,9 +1636,28 @@ ModeSRSText: .byte ITALICON, " super-res scaled",PLAINTEXT,0 ModeHCText: .byte ITALICON, " high-color",PLAINTEXT,0 Mode_Call: + sta graphMode + cmp #1 + bne @10 + lda #$80 + sta graphMode + +@10: jsr GotoFirstMenu + + lda graphMode + sta oldGraphMode + jsr SetNewMode + jsr SetMyNewMode + jsr SetColor + jsr RedrawHead + jsr DispMultiCount + ;jsr SwitchWin + jmp RedrawAll + rts - + + geos_Menue: jsr DA_Init txa @@ -1928,11 +1952,11 @@ OpenNext: ldx activeWindow ; eventuell selektierte Files stx messageBuffer+1 jsr DispMarking jsr ClearMultiFile -@05: +@05: jsr GetNext ; freie WindowNummer holen bcc @11 jmp OpenNext10 ; >keine mehr frei -@11: +@11: txa pha jsr GetDiskName diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 2f6fefad..8c66c7ca 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -250,7 +250,8 @@ StashDrivers: lda sysRAMFlg myserial: .word 0 ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -StartUp: lda RamTopFlag +StartUp: + lda RamTopFlag beq @norm lda sysRAMFlg ; REU-MoveData ausschalten and #$7f @@ -312,7 +313,8 @@ StartUp: lda RamTopFlag @t2: .byte "the same Bootdisk as",0 @t3: .byte "with TopDesk installation.",0 .endif -@allesok: LoadB backPattern,2 +@allesok: + LoadB backPattern,2 LoadW___ keyVector,KeyHandler jsr SetNumDrives ldx numDrives @@ -366,7 +368,7 @@ StartUp: lda RamTopFlag cpy #4 bne @loop3 jmp Start2 - + .include "topdesk/DeskInclude/DosFormat.s.inc" DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher @@ -396,7 +398,7 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher bne @05 ldy #0 sty @abhier - beq @08 + beq @08 @05: LoadB numDrives,4 tay dey ; g}ltige Laufwerke ermitteln @@ -410,7 +412,7 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher @06a: dec numDrives ; Eine ermittelte RAM-Disk wird nicht tya ; als zu formatierendes Laufwerk an- asl ; geboten, in dem das zugeh|rige - tax ; Icon in der Dialogbox nicht + tax ; Icon in der Dialogbox nicht lda @icontab,x ; dargestellt wird, durch sta r0L ; MoveW 0,:icontab+RamLaufw*2 . lda @icontab+1,x @@ -463,7 +465,7 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher LoadB r1L,0 ; Doppelseitig-Flag lda r0L cmp #2 - beq @99 ; Abbruch + beq @99 ; Abbruch cmp #YES bne @99a LoadB r1L,1 ; Doppelseitig-Flag @@ -672,4 +674,4 @@ Relabel: .else @rentext: .byte BOLDON,"Please enter the new",0 @rentxt2: .byte "disk name:",PLAINTEXT,0 -.endif \ No newline at end of file +.endif diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index e621c24e..2ab47883 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -12,6 +12,7 @@ ; t "CiMac" ;endif + Grenze_oben = 15 GD_CLOSE = $02 GD_HIDE = $40 @@ -475,29 +476,17 @@ WindowData: ; LinienEndpunkte in Abh{ngigkeit von den Endpunkten Punkt -1,0,0,0,0 ; Ende MaxTextWin: ; Ret: x unver{ndert -.ifdef topdesk128 - ldy #3 -.else ldy #5 -.endif @10: lda @b,y sta windowTop,y dey bpl @10 -.ifdef topdesk128 - MoveW_ RightMax, rightMargin - LoadB windowBottom, $df - lda rightMargin+1 - ora #16 - sta rightMargin+1 -.endif rts -@b: .byte 0,199 -.ifdef topdesk128 - .byte 0, 0 -.else - .word 0,319 -.endif +@b: + ByteCY 0, 0 + ByteCY 751|0, 400 + WordCX 0, 0 + WordCX 751|0, 400 SetTextWin: ; Par: r2-r4 zu setzendes Textfenster ;jsr GetClipRec ;jsr CutRec @@ -539,10 +528,10 @@ DrawWindowC: lda #1 jsr DrawWindow2 bcc @geht rts -@geht: +@geht: lda a5H sta a1L - + MoveB a4L,r2L ; Textfenster f}r Titelstring setzen clc adc #BREITEY-1 @@ -553,7 +542,7 @@ DrawWindowC: lda #1 adc #16 @10: sta a1H - + lda a5L clc adc #3+BREITEX @@ -572,7 +561,7 @@ DrawWindowC: lda #1 and #%00001111 ora a1H sta r4H - + MoveW_ r3,r11 ; Titeltext einzeichnen lda r2L clc @@ -595,7 +584,7 @@ DrawWindowC: lda #1 ldx @num jsr PutTitle ; PrintTitle jsr RestoreTextWin - + @gn: ldy #05 @ploop1: lda windowTop,y pha @@ -784,7 +773,7 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten bpl @10 php sei - + lda r3H tay and #%00001111 @@ -798,14 +787,14 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten sbc r3H and #%00001111 sta moveKoords+8 - + tya lsr lsr lsr lsr sta r3H - + lda mouseXPos+1 lsr lsr @@ -824,7 +813,7 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten asl ora moveKoords+8 sta moveKoords+8 - + plp ; rechter Rand = MausXOffset MoveW_ moveKoords+7,mouseLeft @@ -838,17 +827,17 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten SubW moveKoords+4,mouseRight AddW moveKoords+2,mouseRight AddW moveKoords+7,mouseRight - + ; oberer Rand = MausYOffset+Grenze_oben lda moveKoords+6 clc adc #Grenze_oben sta mouseTop - + ; unterer Rand = 199 - (yu-yo) + MausYOffSet ; = 199 - yu + yo + MausYOffSet LoadW r12, 479 - + lda moveKoords+5 lsr lsr @@ -861,7 +850,7 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten lsr lsr sta r3L - + lda r12L ; minus high sec sbc moveKoords+1 @@ -876,11 +865,11 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten lda r12H adc r3L sta r12H - + lda mouseRight + 1 and #%00001111 sta mouseRight + 1 - + clc lda r12L adc moveKoords+6 @@ -888,10 +877,10 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten lda r12H adc #0 sta r12H - rol - rol - rol - rol + rol + rol + rol + rol ora mouseRight + 1 sta mouseRight + 1 @@ -941,12 +930,12 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate lda r0H sbc r0L sta r0H - + SubW r3,r4 MoveW_ mouseXPos,r3 ; neues x holen SubW moveKoords+7,r3 ; minus Mausabstandx AddW r3,r4 ; aus b mach xr - + lda mouseXPos+1 lsr lsr @@ -959,7 +948,7 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate lsr lsr sta r12L - + lda mouseYPos ; neues y holen sec sbc moveKoords+6 ; minus Mausabstandy @@ -967,8 +956,8 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate lda r12H sbc r12L sta r0L - - lda r2L + + lda r2L clc adc r2H ; aus h mach yu sta r2H @@ -997,17 +986,17 @@ AppMoveFrame: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinate and #%00001111 ora r0H sta r4H - + ldy #05 ; Neues Rechteck zeichnen @27: lda r2,y sta moveKoords,y dey bpl @27 jsr InvFrame - + MoveW_ mouseXPos,@mx MoveB mouseYPos,@my - + @30: plp jmp AppRubberFrame @mx: .word 0 @@ -1584,13 +1573,13 @@ CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen PushW r0 lda r3H and #%11110000 - sta r0L + sta r0L lda r3H and #%00001111 sta r3H lda r4H and #%11110000 - sta r0H + sta r0H lda r4H and #%00001111 sta r4H @@ -1680,7 +1669,7 @@ CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen ora r0H sta r4H PopW r0 - + clc rts DrawShadow: @@ -1948,8 +1937,8 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen txa pha sta r2L - - + + ;cmp #($F8-1) ;bcc @norm @@ -2016,7 +2005,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen pha lda r2H ;lsr - ;lsr + ;lsr ;lsr ;lsr asl r2L @@ -2030,7 +2019,7 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen asl r2L rol tay - pla + pla sta r2L and #$07 ora #$f8 @@ -2438,6 +2427,7 @@ SpWinFrame: PushW a0 @10: jsr GetWinRec2 @20: PopW a0 rts + NewDoIcons: MoveW_ oldMsVec,mouseVector MoveW_ r0,iconTab jsr DoIcons @@ -2501,7 +2491,26 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 ldy #0 bit r10L bpl @21 + bvc @22 + + ; x negative case + clc + lda r10L + adc scrFullCardsX + sta r10L +@22: + ; deal with neg y case + txa + and #%01000000 + beq @23 + clc + txa + ora #%10000000 + adc scrFullCardsX+1 + tax +@23: + ; GEOS 6 mode for different interpretation ; by 8 sty r10H txa @@ -2518,6 +2527,16 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 and #$7F sta r10L + ; process negative + and #%01000000 + beq @21 + + ; y is from bottom border + ;sec + ;lda scrFullCardsX + ;sbc r10L + ;sta r10L + @21: LoadB r10H,0 ; xk:=xk*8 asl r10L @@ -2528,7 +2547,9 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 rol r10H jsr DrawMap ; Bitmap darstellen dec @num - bne @20 ; und mit n{chstem Icon weitermachen + beq @11 + jmp @20 ; und mit n{chstem Icon weitermachen +@11: MoveW_ curWinData,a0 ; weitere Background-Rekonstruktionen lda #WN_RESTORE ; einleiten ldx #0 From bed3055bc20c9d63db21da8dec7d91e5cf90f40b Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 24 Mar 2019 11:42:13 +0100 Subject: [PATCH 031/125] Basic icon handling fixed for high resolution mode. Moved bitmap RAM to bank 4. Enabled bank 5 as general GEOS bank 0 ram extension. Fixed broken pixel column on the right. --- configure/r0.s | 44 +++++++++---------- kernal/graph/bitmapup.s | 72 +++++++++++++++++++++++--------- kernal/graph/clrscr.s | 1 - kernal/graph/mode.s | 48 ++++++++++----------- kernal/graph/normalize.s | 2 +- kernal/graph/scanline.s | 27 ++++++------ kernal/icon/icon2.s | 20 ++++++--- kernal/init/init1.s | 6 +-- kernal/reu/reu.s | 19 ++++----- loader/loader.s | 14 +++---- topdesk/Main/DeskTop.main.s | 20 ++++----- topdesk/Main/DeskWindows.akt.inc | 1 + 12 files changed, 158 insertions(+), 116 deletions(-) diff --git a/configure/r0.s b/configure/r0.s index ec05463d..8afb82ff 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -23,20 +23,20 @@ L6216 = $6216; .endif ; *=$406 - -;.import L6216 + +;.import L6216 .segment "STARTUP" - + .export L043E .export L0616 .export L0672 .export L0739 .export InitDrive -.export L0911 -.export L0E19 +.export L0911 +.export L0E19 .export L0FA0 -.export L0FB3 +.export L0FB3 .export L0A66 .export L0A6A .export Init1541 @@ -586,7 +586,7 @@ L07B6: rts ; 07B6 60 Init1541: L07B7: lda V212C ; 07B7 AD 2C 21 .,! cmp #$01 ; 07BA C9 01 .. - beq L07DE ; 07BC F0 20 . + beq L07DE ; 07BC F0 20 . cmp #$41 ; 07BE C9 41 .A bne L07D6 ; 07C0 D0 14 .. ldy V212B ; 07C2 AC 2B 21 .+! @@ -729,20 +729,20 @@ L08D6: rts ; 08D6 60 ; ---------------------------------------------------------------------------- InitNewDrive: ; init drive driver jsr InstallDriver ; 08D7 20 C8 09 .. - + lda V212B ; 08DA AD 2B 21 .+! jsr InitDrive ; 08DD 20 3E 07 >. lda firstBoot ; 08E0 AD C5 88 ... cmp #$FF ; 08E3 C9 FF .. beq L08F6 ; 08E5 F0 0F .. - + ldy V212B ; 08E7 AC 2B 21 .+! lda V212F ; 08EA AD 2F 21 ./! sta $8486,y ; 08ED 99 86 84 ... inc NUMDRV ; 08F0 EE 8D 84 ... clv ; 08F3 B8 . bvc L08FF ; 08F4 50 09 P. -L08F6: +L08F6: ; handle non first boot setup, using dialogs jsr SetupDrive ; 08F6 20 05 1E .. lda V212B ; 08F9 AD 2B 21 .+! @@ -791,7 +791,7 @@ L0949: lda r0L ; 0949 A5 02 sta r0H ; 094B 85 03 .. L094D: sty r1L ; 094D 84 04 .. cpy ramExpSize ; 094F CC C3 88 ... - bcs L0974 ; 0952 B0 20 . + bcs L0974 ; 0952 B0 20 . lda V2130,y ; 0954 B9 30 21 .0! iny ; 0957 C8 . cmp #$00 ; 0958 C9 00 .. @@ -926,12 +926,12 @@ L0A3D: pha ; 0A3D 48 rts ; 0A63 60 ` ; ---------------------------------------------------------------------------- ; 2f00 - ??? -; 3c80 - +; 3c80 - ; 4a00 - ; 5780 - ; 6500 - ; 7280 - -; 8000 - NO +; 8000 - NO L0A64: .byte 0, $80 ; 0A64 80 . brk ; 0A65 00 . @@ -1366,12 +1366,12 @@ L0EF5: lda r0H ; 0EF5 A5 03 sta L0F72 ; 0EF7 8D 72 0F .r. lda r0L ; 0EFA A5 02 .. sta L0F71 ; 0EFC 8D 71 0F .q. - lda #$20 ; 0EFF A9 20 . + lda #$20 ; 0EFF A9 20 . sta V2109 ; 0F01 8D 09 21 ..! rts ; 0F04 60 ` ; ---------------------------------------------------------------------------- L0F05: ldy V2109 ; 0F05 AC 09 21 ..! - cpy #$20 ; 0F08 C0 20 . + cpy #$20 ; 0F08 C0 20 . bcs L0F15 ; 0F0A B0 09 .. lda V210A,y ; 0F0C B9 0A 21 ..! inc V2109 ; 0F0F EE 09 21 ..! @@ -1394,7 +1394,7 @@ L0F29: jsr UNLSN ; 0F29 20 AE FF L0F39: jsr ACPTR ; 0F39 20 A5 FF .. sta V210A,y ; 0F3C 99 0A 21 ..! iny ; 0F3F C8 . - cpy #$20 ; 0F40 C0 20 . + cpy #$20 ; 0F40 C0 20 . bcc L0F39 ; 0F42 90 F5 .. jsr UNTLK ; 0F44 20 AB FF .. lda curDrive ; 0F47 AD 89 84 ... @@ -1406,7 +1406,7 @@ L0F39: jsr ACPTR ; 0F39 20 A5 FF lda #$00 ; 0F58 A9 00 .. sta V2109 ; 0F5A 8D 09 21 ..! clc ; 0F5D 18 . - lda #$20 ; 0F5E A9 20 . + lda #$20 ; 0F5E A9 20 . adc L0F71 ; 0F60 6D 71 0F mq. sta L0F71 ; 0F63 8D 71 0F .q. bcc L0F6B ; 0F66 90 03 .. @@ -1417,7 +1417,7 @@ L0F6E: eor $522D ; 0F6E 4D 2D 52 M-R L0F71: brk ; 0F71 00 . L0F72: brk ; 0F72 00 . - .byte $20 ; 0F73 20 + .byte $20 ; 0F73 20 L0F74: lda #$00 ; 0F74 A9 00 .. sta STATUS ; 0F76 85 90 .. lda curDrive ; 0F78 AD 89 84 ... @@ -1455,7 +1455,7 @@ L0FAF: dey ; 0FAF 88 L0FB3: ; if we are a real mega65 we are able to use some of the ROM ; mapped banks for GEOS REU - LoadB ramExpSize, 0 + LoadB ramExpSize, 1 rts .else L0FB3: jsr InitForIO ; 0FB3 20 5C C2 \. @@ -1527,11 +1527,11 @@ L1010: jsr StashRAM ; 105C 20 C8 C2 .. ldy #$07 ; 105F A0 07 .. L1061: lda L1079,y ; 1061 B9 79 10 .y. - cmp V20EA,y ; 1064 D9 EA 20 .. + cmp V20EA,y ; 1064 D9 EA 20 .. bne L1077 ; 1067 D0 0E .. ldx r3L ; 1069 A6 08 .. beq L1072 ; 106B F0 05 .. - cmp V20F2,y ; 106D D9 F2 20 .. + cmp V20F2,y ; 106D D9 F2 20 .. beq L1077 ; 1070 F0 05 .. L1072: dey ; 1072 88 . bpl L1061 ; 1073 10 EC .. @@ -1544,7 +1544,7 @@ L1077: clc ; 1077 18 L1079: .byte "RAMCheck" ; 1079 52 41 4D 43 68 65 63 6B RAMCheck ; ---------------------------------------------------------------------------- L1081: lda sysRAMFlg ; 1081 AD C4 88 ... - and #$20 ; 1084 29 20 ) + and #$20 ; 1084 29 20 ) beq L1094 ; 1086 F0 0C .. lda V2104 ; 1088 AD 04 21 ..! jsr InitDrive ; 108B 20 3E 07 >. diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index 2a894d9f..82036581 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -52,8 +52,41 @@ _BitmapUp: .endif sta r3L sta r4L -@1: jsr BitmapUpHelp + + ldx #$F8 ; y high part + bit r1L + bpl @5 + bit r1H + bvc @2 ; not neg + + clc + lda r1H + ora #%10000000 + adc scrFullCardsX+1 + and #$7F + sta r1H + bra @2 +@5: + lda r1H + and #$07 + ora #$F8 + tax + lsr r1H + lsr r1H + lsr r1H +@2: +@1: txa + pha + jsr BitmapUpHelp + pla + tax + inx + bne @4 + txa + ora #$F8 + tax inc r1H +@4: dec r2H bne @1 PopB r9H @@ -63,18 +96,7 @@ _BitmapUp: rts BitmapUpHelp: - ldx r1H - bit r1L - bpl @scanLine - txa - ;and #$7F - ;lsr a - ;lsr a - ;lsr a - ;tay -@scanLine: -ldy #0 -ldx #$F8 + ldy r1H jsr _GetScanLine MoveB r2L, r3H .if .defined(bsw128) || .defined(mega65) @@ -91,24 +113,34 @@ ldx #$F8 and #$7F cmp #$20 .else - ldx r5H + ldx r5H ldy #0 sty r5H + ldy #3 ; by 8 lda r1L + bit r1L + bpl @41 + bvc @41 + + ; x negative case + clc + adc scrFullCardsX +@41: and #$7f bpl @4 bbrf 7, graphMode, @4 ldy #4 ; by 16 @4: - and #$7F + and #$7F @5: asl a rol r5H - dey - bne @5 + dey + bne @5 + pha - lda r5H + lda r5H stx r5H pha add r5H @@ -118,7 +150,7 @@ ldx #$F8 sta r6H pla - tay + tay .endif .else CmpBI r1L, $20 @@ -128,7 +160,7 @@ ldx #$F8 inc r5H inc r6H @1: - asl + asl asl asl .endif diff --git a/kernal/graph/clrscr.s b/kernal/graph/clrscr.s index ea23023e..01b7481e 100644 --- a/kernal/graph/clrscr.s +++ b/kernal/graph/clrscr.s @@ -84,7 +84,6 @@ ClrScr: .word 0 ; x1 .word SCREENPIXELWIDTH-1 ; x2 .endif -inc $d020 rts .endif diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 4b62fa8f..5c6013f6 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -118,22 +118,22 @@ SetNewMode0: ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole ; palette. - LDA #<$2000 + LDA #<$e000 STA $D060 - LDA #>$2000 + LDA #>$e000 STA $D061 - LDA #<1 + LDA #<4 STA $D062 - LDA #>1 + LDA #>4 STA $D063 ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. ; (We are using 2nd bank of 64KB for this) ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. - LDA #<$4000 + LDA #<$0000 STA $D068 - LDA #>$4000 + LDA #>$0000 STA $D069 - LDA #1 + LDA #4 STA $D06A LDA #$8F @@ -203,22 +203,22 @@ SetNewMode0: ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole ; palette. - LDA #<$2000 + LDA #<$e000 STA $D060 - LDA #>$2000 + LDA #>$e000 STA $D061 - LDA #<1 + LDA #<4 STA $D062 - LDA #>1 + LDA #>4 STA $D063 ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. ; (We are using 2nd bank of 64KB for this) ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. - LDA #<$4000 + LDA #<$0000 STA $D068 - LDA #>$4000 + LDA #>$0000 STA $D069 - LDA #1 + LDA #4 STA $D06A LDA #$8F @@ -300,22 +300,22 @@ SetNewMode0: ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole ; palette. - LDA #<$2000 + LDA #<$e000 STA $D060 - LDA #>$2000 + LDA #>$e000 STA $D061 - LDA #<1 + LDA #<4 STA $D062 - LDA #>1 + LDA #>4 STA $D063 ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. ; (We are using 2nd bank of 64KB for this) ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. - LDA #<$4000 + LDA #<$0000 STA $D068 - LDA #>$4000 + LDA #>$0000 STA $D069 - LDA #1 + LDA #4 STA $D06A LDA #$8F @@ -408,11 +408,11 @@ SetNewMode0: sta $d04b - LDA #<$4000 + LDA #<$0000 STA $D068 - LDA #>$4000 + LDA #>$0000 STA $D069 - LDA #1 + LDA #4 STA $D06A LDA #<$8c00 diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index caa900d4..25dad5ee 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -75,7 +75,7 @@ _NormalizeX: and #$03 sta zpage+1,x lda screenMaxX - clc + sec sbc zpage, x sta zpage, x lda screenMaxX+1 diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index a064271f..0900118c 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -131,11 +131,15 @@ _GetScanLine: bbsf 7, graphMode, @X1 ;;and #%11100000 @X1: - add #$a0 + add #$60 ror - - ldx #0 - jsr _MapHigh + clc + ldx #1 + add #$80 + bcc @Y1 + ldx #2 +@Y1: + jsr _MapHigh lda r5H and #%00011111 @@ -164,7 +168,7 @@ _GetScanLine: ; ; background only ; -@2: +@2: .ifdef bsw128 bvc @3 .else @@ -231,16 +235,16 @@ _GetScanLine: sub #$60 lsr - ldx #0 - jsr _MapHigh + ldx #$FC + jsr _MapHigh ;sub #$40 ;lsr pla lsr add #$90 ; back buffer is at $18000 - ldx #4 - jsr _MapLow + ldx #4 + jsr _MapLow lda r5H and #%00011111 @@ -339,12 +343,12 @@ GSC80_6: LineTabL: ;.lobytes LineTab .repeat 128 - .byte 0 + .byte 0 .endrep LineTabH: ;.hibytes LineTab .repeat 128 - .byte 0 + .byte 0 .endrep @@ -358,4 +362,3 @@ LineTabH: .hibytes LineTab .endif - diff --git a/kernal/icon/icon2.s b/kernal/icon/icon2.s index e428ac7b..9994e1b5 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -51,7 +51,7 @@ Icons_1: lda r0L ora r0H beq @3 - ;jsr _BitmapUp + jsr _BitmapUp @3: inc r10L lda r10L ldy #0 @@ -122,7 +122,9 @@ FindClkIcon: lda (IconDescVec),y iny ora (IconDescVec),y - beq @2 + bne @22 + jmp @2 +@22: iny lda mouseXPos+1 and #%00001111 @@ -168,19 +170,24 @@ FindClkIcon: bcs @2 dey LoadB L8890, 0 - lda (IconDescVec-1),y + dey + lda (IconDescVec),y bpl @11 + + iny ; in GEOS6 scalable mode lda (IconDescVec),y bit #%01000000 beq @23 lda (IconDescVec),y + clc ora #%10000000 adc scrFullCardsX+1 @23: + ; we are in cards, so mult by 8 asl rol L8890 @@ -188,8 +195,12 @@ FindClkIcon: rol L8890 asl rol L8890 - + bra @111 @11: + iny + lda (IconDescVec),y + +@111: sta L888F lda mouseXPos+1 @@ -224,7 +235,6 @@ FindClkIcon: clc rts @3: -inc $d020 sec rts diff --git a/kernal/init/init1.s b/kernal/init/init1.s index c07958f3..9129c6f4 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -28,9 +28,8 @@ .segment "init1" _InitMachine: -inc $d020 .ifdef mega65 - jsr MapUnderlay + jsr MapUnderlay .endif jsr _DoFirstInitIO .ifdef mega65 @@ -52,7 +51,7 @@ InitGEOEnv: .ifdef mega65 jsr MapUnderlay jsr SetRightMargin - jmp UnmapUnderlay + jmp UnmapUnderlay .else jmp SetRightMargin .endif @@ -63,4 +62,3 @@ InitGEOEnv: jmp _InitRam .endif .endif - diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index d409f23e..dd4c597f 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -33,9 +33,9 @@ _StashRAM: lda #>opddmalist ldy #opddmalist_fetch ldy #$2000 + LDA #>$e000 STA $FC - LDA #<1 + LDA #<4 STA $FD - LDA #>1 + LDA #>4 STA $FE LDX #100 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 1654d20e..dca85ccd 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -664,7 +664,7 @@ SetMyNewMode: rts @tab1: - wb IconTab+6,-8|128 + wb IconTab+6,-4|128 wb IconTab+14,2|128 wb IconTab+22,STARTA_X wb IconTab+30,STARTB_X @@ -730,7 +730,7 @@ SetMyNewMode: .word 0 @tab2: - wb IconTab+6,-8|128 + wb IconTab+6,-4|128 wb IconTab+14,2|128 wb IconTab+22,STARTA_X wb IconTab+30,STARTB_X @@ -810,23 +810,23 @@ SetMyNewMode: -STARTA_X = -8 | 128 +STARTA_X = -4 | 128 STARTA_Y = 4 -STARTB_X = -8 | 128 +STARTB_X = -4 | 128 STARTB_Y = 8 -STARTC_X = -8 | 128 +STARTC_X = -4 | 128 STARTC_Y = 12 -STARTD_X = -8 | 128 +STARTD_X = -4 | 128 STARTD_Y = 16 IconTab: .ifdef topdesk128 .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte -8|128,-20,TrashX+DOUBLE_B,TrashY + .byte -4|128,-4,TrashX+DOUBLE_B,TrashY .word TrashService .word PrintMap - .byte 2|128,-20,PrintX+DOUBLE_B,PrintY + .byte 2|128,-4,PrintX+DOUBLE_B,PrintY .word PrintService .word BitMap .byte STARTA_X,STARTA_Y,BitX+DOUBLE_B,BitY @@ -843,10 +843,10 @@ IconTab: .else .byte 0,0,0,0 ; Anzahl wird berechnet .word TrashMap - .byte (89-TrashX)|128,56,TrashX,TrashY + .byte -4|128,-4,TrashX,TrashY .word TrashService .word PrintMap - .byte 2|128,56,PrintX,PrintY + .byte 2|128,-4,PrintX,PrintY .word PrintService .word BitMap .byte STARTA_X,STARTA_Y,BitX,BitY diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 2ab47883..cd874683 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -2431,6 +2431,7 @@ SpWinFrame: PushW a0 NewDoIcons: MoveW_ oldMsVec,mouseVector MoveW_ r0,iconTab jsr DoIcons + MoveW_ curWinData,a0 MoveW_ mouseVector,oldMsVec LoadW___ mouseVector,NewMouseService From 132236470af67132433c2a579fca486edeb818c9 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 30 Mar 2019 22:41:32 +0100 Subject: [PATCH 032/125] Make keyboard and mouse work for 40 mhz mode. --- kernal/keyboard/keyboard1.s | 9 ++++++++- kernal/mouse/mouse2.s | 20 ++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/kernal/keyboard/keyboard1.s b/kernal/keyboard/keyboard1.s index 18a94069..4ffef7ad 100644 --- a/kernal/keyboard/keyboard1.s +++ b/kernal/keyboard/keyboard1.s @@ -37,6 +37,11 @@ _DoKeyboardScan: .ifdef bsw128 PushB clkreg LoadB clkreg, 0 +.endif +.ifdef mega65 + PushB $D054 + and #%10111111 + sta $D054 .endif lda KbdQueFlag bne @1 @@ -100,6 +105,9 @@ _DoKeyboardScan: @5: .ifdef bsw128 PopB clkreg +.endif +.ifdef mega65 + PopB $d054 .endif rts @@ -218,4 +226,3 @@ KbdScanHelp1: .endif rts .endif - diff --git a/kernal/mouse/mouse2.s b/kernal/mouse/mouse2.s index 7a53caea..c1365cf6 100644 --- a/kernal/mouse/mouse2.s +++ b/kernal/mouse/mouse2.s @@ -90,7 +90,7 @@ ProcessMouse: .ifdef wheels_bad_ideas ; While the mouse pointer is not showing, ; Wheels doesn't call the mouse driver. - ; For a joystick, this means that the + ; For a joystick, this means that the ; pointer can't be moved while it's ; invisible, and for a 1531 mouse, it means ; the input registers may overflow in the @@ -98,10 +98,23 @@ ProcessMouse: ; ; This is probably not a good idea. bbrf MOUSEON_BIT, mouseOn, @1 + + ; disable 40 mhz mode from the outside to + ; stay compatible with C64 input drivers + PushB $d054 + and #%10111111 + sta $d054 jsr UpdateMouse + PopB $d054 .else + ; disable 40 mhz mode from the outside to + ; stay compatible with C64 input drivers + PushB $d054 + and #%10111111 + sta $d054 jsr UpdateMouse + PopB $d054 bbrf MOUSEON_BIT, mouseOn, @1 .endif @@ -146,7 +159,7 @@ CheckMsePos: jsr UncompactXY sta r5L sty r5H -.endif +.endif ldy mouseLeft ldx r4L ;mouseLeft+1 @@ -207,7 +220,7 @@ CheckMsePos: bcc @B beq @B @A: smbf OFFMENU_BIT, faultData -@B: +@B: rts .ifdef wheels ; this got moved :( @@ -293,4 +306,3 @@ DoMouseFault: bbsf 6, menuOptNumber, @3 @2: jsr _DoPreviousMenu @3: rts - From 2121e9b058eec5a47271829eed31c4b5f7ed2b6e Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 6 Apr 2019 20:25:04 +0200 Subject: [PATCH 033/125] Keep the working version of scan line calculation, back to back 1, starting $0 --- kernal/graph/scanline.s | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 0900118c..0cf70b4b 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -134,10 +134,11 @@ _GetScanLine: add #$60 ror clc - ldx #1 - add #$80 + ldx #0 + add #$00 bcc @Y1 - ldx #2 + ;ldx #2 + ldx #0 @Y1: jsr _MapHigh From 982708ab3b45b5b9a4544caefc97d7b342ff3c46 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 22 May 2019 21:10:08 +0200 Subject: [PATCH 034/125] Intermediate but working version of CONFIGURE for the MEGA65. --- configure/r0.s | 13 ++-- configure/r1.s | 148 +++++++++++++++++++++++---------------------- drv/drv1541.s | 20 ++++-- drv/drv1571.s | 9 ++- drv/drv1581_21hd.s | 43 +++++++------ 5 files changed, 129 insertions(+), 104 deletions(-) diff --git a/configure/r0.s b/configure/r0.s index 8afb82ff..a1685de9 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -519,7 +519,11 @@ L0736: lda r2L ; 0736 A5 06 ; ---------------------------------------------------------------------------- L0739: lda curDrive ; 0739 AD 89 84 ... eor #$01 ; 073C 49 01 I. -InitDrive: jsr SetDevice ; 073E 20 B0 C2 .. +InitDrive: +;inc $d020 + jsr SetDevice ; 073E 20 B0 C2 .. +inc $d020 +inc $d020 txa ; 0741 8A . bne L0768 ; 0742 D0 24 .$ .ifndef config128 @@ -744,10 +748,10 @@ InitNewDrive: ; init drive driver bvc L08FF ; 08F4 50 09 P. L08F6: ; handle non first boot setup, using dialogs - jsr SetupDrive ; 08F6 20 05 1E .. + jsr SetupDrive ; 08F6 20 05 1E .. lda V212B ; 08F9 AD 2B 21 .+! jsr InitDrive ; 08FC 20 3E 07 >. - +inc $d020 L08FF: dec L180C ; 08FF CE 0C 18 ... ldy V212B ; 0902 AC 2B 21 .+! lda $8486,y ; 0905 B9 86 84 ... @@ -888,7 +892,7 @@ L0A0B: ldy $848F ; 0A0B AC 8F 84 beq L0A18 ; 0A0E F0 08 .. lda #$09 ; 0A10 A9 09 .. jsr L0A3D - jsr $c2c8 + jsr StashRAM L0A18: ldy $8490 ; 0A18 AC 90 84 ... beq L0A25 ; 0A1B F0 08 .. lda #$0A ; 0A1D A9 0A .. @@ -903,6 +907,7 @@ L0A25: ldy V212F ; 0A25 AC 2F 21 lda #$00 ; 0A35 A9 00 .. sta r1L ; 0A37 85 04 .. jsr MoveData ; 0A39 20 7E C1 ~. + rts ; 0A3C 60 ` ; ---------------------------------------------------------------------------- L0A3D: pha ; 0A3D 48 H diff --git a/configure/r1.s b/configure/r1.s index cefab2d3..e252bc2f 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -39,8 +39,8 @@ vdcdata = $d601 .import L0672 .import L0739 .import InitDrive -.import L0911 -.import L0E19 +.import L0911 +.import L0E19 .import L0FA0 .import L0FB3 .import L0A66 @@ -313,7 +313,7 @@ UIEntry: L1472: jsr CloseRecordFile ; 1472 20 77 C2 w. ldx #>incompKernDlg ; 1475 A2 15 .. lda #. ldy V212B ; 15F3 AC 2B 21 .+! @@ -516,28 +516,29 @@ L15DF: lda V212E ; 15DF AD 2E 21 L15FF: lda V212E ; 15FF AD 2E 21 ..! sta r15H ; 1602 85 21 .! lda V212D ; 1604 AD 2D 21 .-! - sta r15L ; 1607 85 20 . + sta r15L ; 1607 85 20 . ldy #$00 ; 1609 A0 00 .. - lda (r15L),y ; 160B B1 20 . + lda (r15L),y ; 160B B1 20 . sta V212B ; 160D 8D 2B 21 .+! jsr InitDrive ; 1610 20 3E 07 >. + inc $d020 ldy V212B ; 1613 AC 2B 21 .+! lda $8486,y ; 1616 B9 86 84 ... sta V212C ; 1619 8D 2C 21 .,! L161C: ldy #$01 ; 161C A0 01 .. - lda (r15L),y ; 161E B1 20 . + lda (r15L),y ; 161E B1 20 . sta V212A ; 1620 8D 2A 21 .*! L1623: clc ; 1623 18 . lda #$02 ; 1624 A9 02 .. - adc r15L ; 1626 65 20 e - sta r15L ; 1628 85 20 . + adc r15L ; 1626 65 20 e + sta r15L ; 1628 85 20 . bcc L162E ; 162A 90 02 .. inc r15H ; 162C E6 21 .! L162E: ldy #$00 ; 162E A0 00 .. - lda (r15L),y ; 1630 B1 20 . + lda (r15L),y ; 1630 B1 20 . sta r13L ; 1632 85 1C .. iny ; 1634 C8 . - lda (r15L),y ; 1635 B1 20 . + lda (r15L),y ; 1635 B1 20 . sta r13H ; 1637 85 1D .. beq L165D ; 1639 F0 22 ." ldy V212A ; 163B AC 2A 21 .*! @@ -715,7 +716,7 @@ L17B2: .endif jsr PutString ; 17C6 20 48 C1 H. L17C9: lda sysRAMFlg ; 17C9 AD C4 88 ... - and #$20 ; 17CC 29 20 ) + and #$20 ; 17CC 29 20 ) beq L17D2 ; 17CE F0 02 .. lda #$02 ; 17D0 A9 02 .. L17D2: ldy #$02 ; 17D2 A0 02 .. @@ -733,11 +734,12 @@ ConfigOtherPressVec: bpl L17EA ; 17E7 10 01 .. rts ; 17E9 60 ` ; ---------------------------------------------------------------------------- -L17EA: +L17EA: lda #$00 ; 17EA A9 00 .. sta L180C ; 17EC 8D 0C 18 ... jsr L1837 ; 17EF 20 37 18 7. jsr L180D ; 17F2 20 0D 18 .. + inc $d020 jsr L181B ; 17F5 20 1B 18 .. lda ramExpSize ; 17F8 AD C3 88 ... beq L1800 ; 17FB F0 03 .. @@ -782,7 +784,7 @@ L1857: ldy #$02 ; 1857 A0 02 jsr IsMseInRegion ; 185C 20 B3 C2 .. beq L1872 ; 185F F0 11 .. lda sysRAMFlg ; 1861 AD C4 88 ... - eor #$20 ; 1864 49 20 I + eor #$20 ; 1864 49 20 I sta sysRAMFlg ; 1866 8D C4 88 ... sta sysFlgCopy ; 1869 8D 12 C0 ... sta $040A ; 186C 8D 0A 04 ... @@ -815,7 +817,7 @@ L1873: LoadW r0, RAMExpStr RAMExpStr: .byte $18 ; 18A5 18 . .byte "RAM expansion: " ; 18A6 52 41 4D 20 65 78 70 61 RAM expa - ; 18AE 6E 73 69 6F 6E 3A 20 nsion: + ; 18AE 6E 73 69 6F 6E 3A 20 nsion: .byte $00 ; 18B5 00 . ; ---------------------------------------------------------------------------- MenuQuit: @@ -838,7 +840,7 @@ L18D6: jmp L043E ; 18D6 4C 3E 04 ; ---------------------------------------------------------------------------- ldx #>SomeTextDlg ; 18D9 A2 18 .. lda #InfoDlg ; 18EC A2 18 .. lda #CantSaveDlg ; 19CE A2 19 .. lda #OptNoDrive @@ -1228,7 +1230,7 @@ L1BB2: .byte >OptShadowed1581 .byte >OptRAM1571 .byte >OptRAM1581 - .byte >OptF011 + .byte >OptF011 ; no drive OptNoDrive: @@ -1325,7 +1327,7 @@ F011Label: .byte "F011" ; 1BCE 31 35 34 31 1541 .byte $00 ; 1BD2 00 . - + L1C39: ldy V212C ; 1C39 AC 2C 21 .,! beq L1C40 ; 1C3C F0 02 .. ldy #$01 ; 1C3E A0 01 .. @@ -1396,7 +1398,7 @@ ShowF011: ldy #10 ; 1C93 A0 05 ; ---------------------------------------------------------------------------- NoF011: ldy #$00 ; 1C96 A0 00 .. rts ; 1C98 60 ` - + ; ---------------------------------------------------------------------------- L1C99: lda V212C ; 1C99 AD 2C 21 .,! cmp #$03 ; 1C9C C9 03 .. @@ -1486,14 +1488,16 @@ InitNoDrive: L1D08: sta L1D9A ; 1D08 8D 9A 1D ... ldx #>UnplugDlg ; 1D0B A2 1D .. lda #PluginDlg ; 1E59 A2 1F .. lda #PluginDlg2 ; 1EEE A2 1F .. lda #D_IRQHandler sta nmivec+1 lda #D_IRQHandler sta $0315 sta $0319 @@ -957,7 +960,7 @@ D_NMIHandler: __DoneWithIO: sei ; 9592 78 x lda L9BEF ; 9593 AD EF 9B ... - sta clkreg ; 9596 8D 30 D0 .0. + sta $d030 ; 9596 8D 30 D0 .0. lda L9BF3 ; 9599 AD F3 9B ... sta mobenble ; 959C 8D 15 D0 ... lda #$7F ; 959F A9 7F .. @@ -967,15 +970,16 @@ __DoneWithIO: sta grirqen ; 95AA 8D 1A D0 ... lda #$a5 - sta $d02f + sta $d02f lda #$96 sta $d02f - -.if (!.defined(mega65)) -.if (!.defined(config128)) || (!.defined(mega65)) + lda saveD031 + sta $D031 + + +.if (!.defined(config128)) || (.defined(mega65)) lda L9BF2 ; 95AD AD F2 9B ... sta CPU_DATA ; 95B0 85 01 .. -.endif .endif lda L9BF0 ; 95B2 AD F0 9B ... pha ; 95B5 48 H @@ -1112,13 +1116,13 @@ L96A7: jsr SendCHUNK ; 96A7 20 CD 96 txa ; 96AA 8A . bne L96CA ; 96AB D0 1D .. clc ; 96AD 18 . - lda #$20 ; 96AE A9 20 . + lda #$20 ; 96AE A9 20 . adc $8D ; 96B0 65 8D e. sta $8D ; 96B2 85 8D .. bcc L96B8 ; 96B4 90 02 .. inc TURBO_DD00 ; 96B6 E6 8E .. L96B8: clc ; 96B8 18 . - lda #$20 ; 96B9 A9 20 . + lda #$20 ; 96B9 A9 20 . adc L96F1 ; 96BB 6D F1 96 m.. sta L96F1 ; 96BE 8D F1 96 ... bcc L96C6 ; 96C1 90 03 .. @@ -1134,13 +1138,13 @@ SendCHUNK: jsr SendDOSCmd ; 96D1 20 B8 95 .. txa ; 96D4 8A . bne L96ED ; 96D5 D0 16 .. - lda #$20 ; 96D7 A9 20 . + lda #$20 ; 96D7 A9 20 . jsr CIOUT ; 96D9 20 A8 FF .. ldy #$00 ; 96DC A0 00 .. L96DE: lda ($8D),y ; 96DE B1 8D .. jsr CIOUT ; 96E0 20 A8 FF .. iny ; 96E3 C8 . - cpy #$20 ; 96E4 C0 20 . + cpy #$20 ; 96E4 C0 20 . bcc L96DE ; 96E6 90 F6 .. jsr UNLSN ; 96E8 20 AE FF .. ldx #$00 ; 96EB A2 00 .. @@ -1846,6 +1850,7 @@ L9BE8: rts ; 9BE8 60 .segment "drv1581_21hd_b": absolute L9BEF: brk ; 9BEF 00 . +saveD031: .byte 0 L9BF0: brk ; 9BF0 00 . L9BF1: brk ; 9BF1 00 . L9BF2: brk ; 9BF2 00 . From c3d43569cdb81fce072b1dfeaeaa5edd42f62416 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 22 May 2019 21:12:39 +0200 Subject: [PATCH 035/125] Working kernel for MEGA65. --- Makefile | 22 ++-- inc/geosmac.inc | 2 + inc/geossym.inc | 2 + kernal/128k/swapdiskdriver.s | 7 +- kernal/c65/iojmp.s | 23 +---- kernal/c65/map.s | 110 ++++++++++---------- kernal/conio/conio1.s | 16 ++- kernal/conio/conio3a.s | 1 - kernal/conio/conio6.s | 4 +- kernal/dlgbox/dlgbox1c.s | 15 ++- kernal/files/files6c.s | 3 +- kernal/fonts/fonts2.s | 47 ++++++--- kernal/graph/inlinefunc.s | 9 +- kernal/graph/line.s | 23 +++-- kernal/graph/mode.s | 193 +++++++++++++++++++++++++++++------ kernal/graph/normalize.s | 4 +- kernal/graph/scanline.s | 169 ++++++++++++++++++++---------- kernal/hw/hw1b.s | 2 +- kernal/init/init4.s | 14 ++- kernal/jumptab/jumptab.s | 44 ++++---- kernal/kernal_mega65.cfg | 6 +- kernal/mainloop/mainloop1.s | 7 +- kernal/mainloop/mainloop3.s | 4 +- kernal/menu/menu1.s | 9 +- kernal/mouse/mouse1.s | 58 ++++++++++- kernal/mouse/mouse3.s | 5 +- kernal/panic/panic.s | 15 ++- kernal/reu/reu.s | 15 ++- kernal/sprites/sprites.s | 8 +- loader/loader.s | 28 ++--- 30 files changed, 583 insertions(+), 282 deletions(-) diff --git a/Makefile b/Makefile index 2829aacc..3fb36ae7 100755 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ VARIANT ?= mega65 DRIVE ?= drvf011 INPUT ?= joydrv +\INPUT ?= mse1531 AS = ca65 LD = ld65 @@ -260,9 +261,9 @@ DRIVER_SOURCES= \ # code that is in MEGA65 compiled with 4502 cpu ifeq ($(VARIANT), mega65) DRIVER_SOURCES += \ - drv/drvf011.bin -endif - + drv/drvf011.bin +endif + DEPS= \ config.inc \ inc/c64.inc \ @@ -301,13 +302,13 @@ ALL_BINS= \ $(BUILD_DIR)/input/mse1531.bin \ $(BUILD_DIR)/input/koalapad.bin \ $(BUILD_DIR)/input/pcanalog.bin - + # code that is in MEGA65 compiled with 4502 cpu ifeq ($(VARIANT), mega65) ALL_BINS += \ $(BUILD_DIR)/drv/drvf011.bin -endif +endif ifeq ($(VARIANT), bsw128) ALL_BINS += \ @@ -360,6 +361,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite GW64.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; @@ -397,7 +399,7 @@ $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configu $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o $(LD) -C configure/configure.cfg -o $@ $(BUILD_DIR)/configure/configure.o -m $(BUILD_DIR)/configure.map $(BUILD_DIR)/configure/r0.o \ $(BUILD_DIR)/configure/r2.o $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o \ - $(BUILD_DIR)/configure/r5.o $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o + $(BUILD_DIR)/configure/r5.o $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Main/DeskTop.main.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub2.o \ @@ -408,13 +410,13 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/topdesk/Main/DeskTop.sub7.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub8.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o \ - $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o + $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o $(LD) -C topdesk/topdesk.cfg -o $@ $(BUILD_DIR)/topdesk/topdesk.o -m $(BUILD_DIR)/topdesk.map $(BUILD_DIR)/topdesk/Main/DeskTop.main.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub2.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub3.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub4.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub5.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub6.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub7.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub8.o \ - $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o + $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg @@ -423,7 +425,7 @@ $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(BUILD_DIR)/compressed_mega65.prg: $(BUILD_DIR)/compressed.bin $(BUILD_DIR)/loader/uncrunch.o $(BUILD_DIR)/loader/loader.o $(LD) -C loader/loader.cfg $(BUILD_DIR)/loader/loader.o -m $(BUILD_DIR)/kernel.map $(BUILD_DIR)/loader/uncrunch.o -o $@ endif - + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/kernal_compressed.prg: $(BUILD_DIR)/compressed_mega65.prg else @@ -526,5 +528,5 @@ $(BUILD_DIR)/kernal/relocator.bin: $(PREFIXED_RELOCATOR_OBJS) kernal/relocator_$ $(LD) -C kernal/relocator_$(VARIANT).cfg $(PREFIXED_RELOCATOR_OBJS) -o $@ -m $(BUILD_DIR)/kernal/relocator.map -Ln $(BUILD_DIR)/kernal/relocator.lab # a must! -love: +love: @echo "Not war, eh?" diff --git a/inc/geosmac.inc b/inc/geosmac.inc index 7512acc4..8f163f32 100644 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -376,6 +376,8 @@ .else .ifdef mega65 .macro START_IO +ASSERT_NOT_BELOW_IO + LoadB CPU_DATA, IO_IN .endmacro .macro END_IO .endmacro diff --git a/inc/geossym.inc b/inc/geossym.inc index 0be9a376..b40879e2 100644 --- a/inc/geossym.inc +++ b/inc/geossym.inc @@ -213,3 +213,5 @@ RESET_VECTOR = $fffc ; --- IRQ_VECTOR = $fffe ; --- scrFullCardsX = $886E +screenMaxX = $8870 +screenMaxY = $8874 diff --git a/kernal/128k/swapdiskdriver.s b/kernal/128k/swapdiskdriver.s index be910823..eb35fea9 100644 --- a/kernal/128k/swapdiskdriver.s +++ b/kernal/128k/swapdiskdriver.s @@ -15,16 +15,19 @@ .global _SwapDiskDriver _SwapDiskDriver: .ifdef mega65 +@HOHO: +inc $d020 +jmp @HOHO ; use DMAgic for swapping memory START_IO - + lda #0 sta $d702 lda #>swapdddmalist sta $d701 lda #$2000 +; STA $D069 +; LDA #1 +; STA $D06A LDA #<$0000 STA $D068 LDA #>$0000 @@ -337,7 +355,7 @@ SetNewMode0: LoadW screenNextLine, 744 LoadW screenMaxX, 751 - LoadW screenMaxY, 588 + LoadW screenMaxY, 587 LoadW screenCardsX, 94 LoadB scrFullCardsX, 94 LoadB scrFullCardsX+1, 74 @@ -351,9 +369,11 @@ SetNewMode0: @14: - ; 40 column compatibility mode - lda #$40 - sta $d031 + LoadW r0, VIC_IniTbl + .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" + ldy #<(VIC_IniTbl_end - VIC_IniTbl) + jsr SetVICRegs + jsr i_FillRam .word 1000 @@ -368,18 +388,18 @@ SetNewMode0: LoadB scrFullCardsX+1, 25 LoadB spriteXPosOff, VIC_X_POS_OFF LoadB spriteYPosOff, VIC_Y_POS_OFF - LoadW r0, VIC_IniTbl -.assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" - ldy #<(VIC_IniTbl_end - VIC_IniTbl) - jsr SetVICRegs LDA #80 STA $D05C - LDA #$80 + LDA #128 STA $D05D LDA #0 sta $D076 + ; 40 column compatibility mode + lda #$40 + sta $d031 + lda #%00111011 sta $d011 ;lda #$38 @@ -390,10 +410,10 @@ SetNewMode0: lda #$04 ; 3.5Mhz, H640, no bitplanes sta $d030 - lda cia2base - and #%00110000 - ora #%00000101 - sta cia2base + ;lda cia2base + ;and #%00110000 + ;ora #%00000101 + ;sta cia2base LDA #$8F STA $d06D @@ -442,6 +462,18 @@ SetRightMargin: .ifdef bsw128 lda #0 .endif + lda screenMaxX + sta rightMargin + lda screenMaxY+1 + asl + asl + asl + asl + ora screenMaxX+1 + sta rightMargin+1 + lda screenMaxY + sta windowBottom + ldx #>(SC_PIX_WIDTH-1) ldy #<(SC_PIX_WIDTH-1) bbrf 7, graphMode, @1 @@ -455,8 +487,8 @@ SetRightMargin: .ifdef bsw128 sta clkreg ; D030 .endif - stx rightMargin+1 - sty rightMargin + ;stx rightMargin+1 + ;sty rightMargin jmp UseSystemFont .ifdef mega65 @@ -495,3 +527,102 @@ InitScanLineTab: rts .endif + +;--------------------------------------------------------------- +; GetRealSize $C1B1 +; +; Function: Returns the size of a character in the current +; mode (bold, italic...) and current Font. +; +; Pass: a ASCII character +; x currentMode +; Return: y character width +; x character height +; a baseline offset +; Destroyed: nothing +;--------------------------------------------------------------- + +.ifndef wheels ; moved +.ifdef mega65 + +GetChWdth2: + cmp #$5f +.ifdef bsw128 ; branch taken/not taken optimization + beq @2 +.else + bne @1 + lda PrvCharWidth + rts +@1: +.endif + asl + tay + iny + iny +.ifdef mega65 + PushB CPU_DATA + LoadB CPU_DATA, RAM_64K +.endif + lda (curIndexTable),y + dey + dey + sec + sbc (curIndexTable),y +.ifdef mega65 + tay + PopB CPU_DATA + tya +.endif + rts +.ifdef bsw128 ; branch taken/not taken optimization +@2: lda PrvCharWidth + rts +.endif + +_GetRealSize: + subv 32 +_GetRealSize2: + jsr GetChWdth2 + tay + txa +.ifndef bsw128 + ldx curHeight + pha +.endif + and #$40 + beq @1 + iny +@1: +.ifdef bsw128 + txa +.else + pla +.endif + and #8 +.ifdef bsw128 + bne @2 + ldx curHeight + lda baselineOffset + rts +@2: ldx curHeight + inx + inx + iny + iny + lda baselineOffset + addv 2 + rts +.else + beq @2 + inx + inx + iny + iny + lda baselineOffset + addv 2 + rts +@2: lda baselineOffset + rts +.endif ; bsw128 +.endif +.endif diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index 25dad5ee..69df3f20 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -16,8 +16,8 @@ .global _NormalizeY .endif -.import screenMaxX -.import screenMaxY +;.import screenMaxX +;.import screenMaxY .segment "graph5" diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 0cf70b4b..8c287523 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -86,19 +86,24 @@ _GetScanLine: @_2: .endif .ifdef mega65 - bbrf 7, graphMode, @X -;; ora #$20 + ;bit grapeMode + ;bne @X ; branch if not mode 0 + ;bbrf 7, graphMode, @X + ;ora #$20 @X: .endif tax ; scan line in x now bbrf 7, dispBufferOn, @2 ; ST_WR_FORE + + .ifdef bsw128 bvs @1 .else - bbsf 6, dispBufferOn, @1 ; ST_WR_BACK + bbrf 6, dispBufferOn, @3 ; ST_WR_BACK .endif - + jmp @1 +@3: ; ; foreground only ; @@ -127,28 +132,33 @@ _GetScanLine: pha ; a/x lower, y/z highter - lda r5H - bbsf 7, graphMode, @X1 - ;;and #%11100000 + lda r5H + ldx graphMode + bne @X1 + and #%11100000 @X1: add #$60 - ror + bcc @Y2 clc - ldx #0 - add #$00 - bcc @Y1 - ;ldx #2 - ldx #0 + ror + ldx #2 + bra @Y1 + +@Y2: + sec + ror + ldx #1 @Y1: jsr _MapHigh lda r5H and #%00011111 - ;;bbrf 7, graphMode, @X2 - and #%00000001 + ldx graphMode + beq @X2 + and #%00000001 @X2: add #$a0 - sta r5H + sta r5H sta r6H pla @@ -170,54 +180,87 @@ _GetScanLine: ; background only ; @2: -.ifdef bsw128 - bvc @3 -.else - bbrf 6, dispBufferOn, @3 ; ST_WR_BACK -.endif - lda LineTabL,x - ora r6H - sta r6L + lda LineTabL,x + ora r6H + sta r5L .ifdef wheels_size_and_speed - sta r5L + sta r6L .endif - lda LineTabH,x - subv >(SCREEN_BASE-BACK_SCR_BASE) - sta r6H + lda LineTabH,x + sta r5H .ifdef bsw128 - jmp GSC80_5 + jmp GSC80_6 .else .ifdef wheels_size_and_speed - sta r5H + sta r6H .else - MoveW r6, r5 + MoveW r5, r6 .endif + +.ifdef mega65 +; map foregroud and translate ptrs + tya + pha + tza + pha + +; a/x lower, y/z highter + lda r5H + ldx graphMode + bne @X2___ + and #%11100000 +@X2___: + add #$00 + bcc @Y2__ + clc + ror + ldx #0 + bra @Y1__ + +@Y2__: + sec + ror + ldx #0 +@Y1__: + jsr _MapLow + + lda r5H + and #%00011111 + ldx graphMode + beq @X2__ + and #%00000001 +@X2__: + add #$60 + sta r5H + sta r6H + pla - tax - rts + taz + pla + tay + .endif -@3: LoadB r5L, <$AF00 - sta r6L - LoadB r5H, >$AF00 - sta r6H + pla tax .ifdef mega65 PopB CPU_DATA .endif rts +.endif + ; ; background and foreground ; -@1: lda LineTabL,x +@1: + lda LineTabL,x ora r6H sta r5L sta r6L lda LineTabH,x sta r5H - subv >(SCREEN_BASE-BACK_SCR_BASE) sta r6H .ifdef mega65 @@ -228,33 +271,53 @@ _GetScanLine: pha ; a/x lower, y/z highter - lda r5H - bbsf 7, graphMode, @X1_ - ;;and #%11100000 + lda r5H + ldx graphMode + bne @X1_ + and #%11100000 @X1_: pha - sub #$60 - lsr - ldx #$FC - jsr _MapHigh + add #$60 + bcc @Y2_ + clc + ror + ldx #2 + bra @Y1_ + +@Y2_: + sec + ror + ldx #1 +@Y1_: + jsr _MapHigh + ;sub #$40 ;lsr pla - lsr - add #$90 ; back buffer is at $18000 + add #$80 + bcc @Y2___ + clc + ror + ldx #0 + bra @Y1___ - ldx #4 +@Y2___: + sec + ror + ldx #0 +@Y1___: jsr _MapLow lda r5H and #%00011111 - ;bbrf 7, graphMode, @X2_ - and #%00000001 + ldx graphMode + beq @X2_ + and #%00000001 @X2_: add #$a0 - sta r5H - sub #$40 + sta r5H + sub #$40 sta r6H pla diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index 80d430e0..a24b0a3e 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -108,7 +108,7 @@ ASSERT_NOT_BELOW_IO .if 0 LDA #39 STA $D05C - LDA #$80 + LDA #$00 STA $D05D LDA #1 sta $D076 diff --git a/kernal/init/init4.s b/kernal/init/init4.s index efa2dad0..2cd8f880 100644 --- a/kernal/init/init4.s +++ b/kernal/init/init4.s @@ -22,6 +22,10 @@ .global InitRamTab +SC_FROM_END = %100000000000 +SC_FROM_CENTER = %010000000000 +SC_SCALE = %110000000000 + .segment "init4" InitRamTab: @@ -31,10 +35,12 @@ InitRamTab: .byte ST_WR_FORE | ST_WR_BACK ; dispBufferOn .byte 0 ; mouseOn .word mousePicData ; msePicPtr - .byte 0 ; windowTop - .byte $df ; windowBottom - .word 0 ; leftMargin - .word $1000 + 719 ; rightMargin + ByteCY 0, 0 ; windowTop + ByteCY SC_FROM_END|0, SC_FROM_END|0 + ; windowBottom + WordCX 0, 0 ; leftMargin + WordCX SC_FROM_END|0, SC_FROM_END|0 + ; rightMargin .byte 0 ; pressFlag .word appMain diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 531323cf..69078d84 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -173,36 +173,36 @@ .import _NormalizeX .ifdef mega65 .import _NormalizeY -.import _map_FollowChain +.import _map_FollowChain .import _map_FindFTypes .import _map_FindFile -.import _map_SetDevice -.import _map_GetFHdrInfo +.import _map_SetDevice +.import _map_GetFHdrInfo .import _map_LdDeskAcc -.import _map_RstrAppl +.import _map_RstrAppl .import _map_LdApplic -.import _map_SaveFile -.import _map_SetGDirEntry +.import _map_SaveFile +.import _map_SetGDirEntry .import _map_BldGDirEntry -.import _map_DeleteFile +.import _map_DeleteFile .import _map_FreeFile -.import _map_FastDelFile +.import _map_FastDelFile .import _map_RenameFile -.import _map_OpenRecordFile +.import _map_OpenRecordFile .import _map_CloseRecordFile -.import _map_UpdateRecordFile +.import _map_UpdateRecordFile .import _map_NextRecord -.import _map_PreviousRecord +.import _map_PreviousRecord .import _map_PointRecord -.import _map_DeleteRecord +.import _map_DeleteRecord .import _map_InsertRecord -.import _map_AppendRecord +.import _map_AppendRecord .import _map_ReadRecord -.import _map_WriteRecord +.import _map_WriteRecord .import _map_ReadByte .import _map__CRC -.import _map__GetRandom .import _map_SetNewMode +.import _map_GetRealSize .else .import _InsertRecord .import _NextRecord @@ -232,10 +232,9 @@ .import _RstrAppl .import _BldGDirEntry .import __CRC -.import __GetRandom - .endif +.import _GetRandom .global InterruptMain .global InitProcesses .global RestartProcess @@ -432,7 +431,6 @@ .import __io_FrameRectangle .import __io_GraphicsString .import __io_SetPattern -.import __io_GetRealSize .endif .ifdef wheels @@ -581,11 +579,7 @@ InitRam: PutDecimal: jmp _PutDecimal GetRandom: -.ifdef mega65 - jmp _map__GetRandom -.else - jmp __GetRandom -.endif + jmp _GetRandom MouseUp: jmp _MouseUp MouseOff: @@ -614,7 +608,7 @@ i_PutString: jmp _i_PutString GetRealSize: .ifdef mega65 - jmp __io_GetRealSize + jmp _map_GetRealSize .else jmp _GetRealSize .endif @@ -860,7 +854,7 @@ AppendRecord: .endif ReadRecord: .ifdef mega65 - jmp _map_ReadRecord + jmp _map_ReadRecord .else jmp _ReadRecord .endif diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 20452e36..5b54bdd3 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -40,10 +40,11 @@ SEGMENTS { files10: load = UNDERLAY, type = ro; tobasic2: load = UNDERLAY, type = ro; math2: load = UNDERLAY, type = ro; - math1d: load = UNDERLAY, type = ro; + #math1d: load = UNDERLAY, type = ro; hw1b: load = UNDERLAY, type = ro; mode: load = UNDERLAY, type = ro; dlgbox2: load = UNDERLAY, type = ro; + dlgbox1k: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -98,6 +99,7 @@ SEGMENTS { memory2: load = KERNAL, type = ro; mouse1: load = KERNAL, type = ro; panic1: load = KERNAL, type = ro; + math1d: load = KERNAL, type = ro; panic2: load = KERNAL, type = ro; panic3: load = KERNAL, type = ro; serial2: load = KERNAL, type = ro; @@ -120,7 +122,7 @@ SEGMENTS { bswfont: load = KERNAL, type = ro; bswfont80: load = KERNAL, type = ro; patterns: load = KERNAL, type = ro; - dlgbox1k: load = KERNAL, type = ro; + #dlgbox1k: load = KERNAL, type = ro; init4: load = KERNAL, type = ro; fonts2: load = KERNAL, type = ro; fonts3: load = KERNAL, type = ro; diff --git a/kernal/mainloop/mainloop1.s b/kernal/mainloop/mainloop1.s index 3308000f..25eee06b 100644 --- a/kernal/mainloop/mainloop1.s +++ b/kernal/mainloop/mainloop1.s @@ -28,6 +28,12 @@ .segment "mainloop1" _MainLoop: + ldx CPU_DATA + cpx #$30 + bne @HOHO + ldx #IO_IN + stx CPU_DATA +@HOHO: .ifdef wheels_screensaver .import RunScreensaver bit saverStatus @@ -76,4 +82,3 @@ _MNLP: jsr CallRoutine .ifdef bsw128 ; XXX junk .byte $88, $88 .endif - diff --git a/kernal/mainloop/mainloop3.s b/kernal/mainloop/mainloop3.s index 12a5d7e6..61595035 100644 --- a/kernal/mainloop/mainloop3.s +++ b/kernal/mainloop/mainloop3.s @@ -10,7 +10,7 @@ .include "kernal.inc" .include "c64.inc" -.import _map__GetRandom +.import _GetRandom .import ProcessCursor .import __ProcessDelays .import __ProcessTimers @@ -30,4 +30,4 @@ _InterruptMain: jsr __ProcessTimers jsr __ProcessDelays jsr ProcessCursor - jmp _map__GetRandom + jmp _GetRandom diff --git a/kernal/menu/menu1.s b/kernal/menu/menu1.s index ef05a000..30337a33 100644 --- a/kernal/menu/menu1.s +++ b/kernal/menu/menu1.s @@ -191,7 +191,7 @@ DoMenu1_1: smbf ICONSON_BIT, mouseOn .endif @5: smbf MENUON_BIT, mouseOn - + .ifdef mega65 PopB CPU_DATA .endif @@ -326,15 +326,17 @@ Menu_2: .else LoadW__ leftMargin, 0 .endif + PushB r1H sec lda menuRight sbc #1 sta rightMargin - lda menuRight+1 + lda rightMargin+1 + and #%11110000 + ora menuRight+1 sbc #0 sta rightMargin+1 LoadW StringFaultVec, MenuStringFault - PushB r1H .ifdef wheels bit menuOptNumber bmi @1 @@ -358,4 +360,3 @@ Menu_2: PopW leftMargin PopW r10 rts - diff --git a/kernal/mouse/mouse1.s b/kernal/mouse/mouse1.s index ed5952c1..cec6ac08 100644 --- a/kernal/mouse/mouse1.s +++ b/kernal/mouse/mouse1.s @@ -13,41 +13,89 @@ .import NormalizeX .global _IsMseInRegion +.global UncompactXY .segment "mouse1" _IsMseInRegion: -.if .defined(bsw128) || .defined(mega65) txa pha +.if .defined(bsw128) || .defined(mega65) ldx #r3 jsr NormalizeX ldx #r4 jsr NormalizeX - pla - tax .endif + PushW r0 + + lda r3H + and #%11110000 + sta r0L + lda r3H + and #%00001111 + sta r3H + lda r4H + and #%11110000 + sta r0H + lda r4H + and #%00001111 + sta r4H + + ; check y within range + lda mouseXPos+1 + and #%11110000 + tax + cmp r0L + bne @6 lda mouseYPos cmp r2L +@6: bcc @5 + + txa + cmp r0H + bne @7 + lda mouseYPos cmp r2H +@7: beq @1 bcs @5 + + ; check y within range @1: lda mouseXPos+1 + and #%00001111 cmp r3H bne @2 lda mouseXPos cmp r3L @2: bcc @5 + lda mouseXPos+1 + and #%00001111 cmp r4H bne @3 lda mouseXPos cmp r4L @3: beq @4 bcs @5 -@4: lda #$ff + +@4: jsr @9 + PopW r0 + pla + tax + lda #$ff rts -@5: lda #0 +@5: jsr @9 + PopW r0 + pla + tax + lda #0 rts +@9: lda r3H + ora r0L + sta r3H + lda r4H + ora r0H + sta r4H + rts diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index 7f939741..25021350 100644 --- a/kernal/mouse/mouse3.s +++ b/kernal/mouse/mouse3.s @@ -13,8 +13,8 @@ .global RcvrMnu0 .global ResetMseRegion -.import screenMaxX -.import screenMaxY +;.import screenMaxX +;.import screenMaxY .segment "mouse3" @@ -50,4 +50,3 @@ ResetMseRegion: .endif rts .endif - diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index 9ebe4bdf..3a7dcacf 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -14,6 +14,7 @@ .import DoDlgBox .import Ddec .import EnterDeskTop +.import UnmapUnderlay ; syscall .global _Panic @@ -80,7 +81,7 @@ SwapMemory: SwapRAMArgs: .word DISK_BASE ; CBM addr - .word $c000 ; REU addr + .word dum$c000 ; REU addr .word 0 ; count .byte 0 ; REU bank @@ -107,6 +108,17 @@ _Panic: pla sbc #0 .else +.ifdef mega65 + LoadB CPU_DATA, IO_IN +@13: + inc $d020 + jmp @13 + lda countHighMap + beq @12 + jsr UnmapUnderlay + bra @13 +@12: +.endif .ifdef bsw128 pla pla @@ -160,7 +172,6 @@ _Panic: @3: addv '0'+7 @4: sta _PanicAddr,x rts - .segment "panic2" _PanicDB_DT: diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index dd4c597f..69806950 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -23,12 +23,16 @@ _StashRAM: START_IO_X + ;LDA #$A5 ; C65: VIC-III enable sequence + ;STA $D02F + ;LDA #$96 + ;STA $D02F ; C65: VIC-III enabled + MoveW r2, opLength MoveW r0, opFromAddr lda r1L sta opToAddr lda r1H - and #$7f sta opToAddr+1 lda #>opddmalist @@ -39,17 +43,12 @@ _StashRAM: _FetchRAM: START_IO_X - LDA #$A5 ; C65: VIC-III enable sequence - STA $D02F - LDA #$96 - STA $D02F ; C65: VIC-III enabled MoveW r2, opLength_fetch MoveW r0, opToAddr_fetch lda r1L sta opFromAddr_fetch lda r1H - and #$7f sta opFromAddr_fetch+1 lda #>opddmalist_fetch @@ -73,7 +72,7 @@ opddmalist: ; enchanced dma mode header .byte $0a .byte $80, $00 - .byte $81, $FF + .byte $81, $00 .byte 0 .byte 0 ; swap opLength: @@ -89,7 +88,7 @@ opToAddr: opddmalist_fetch: ; enchanced dma mode header .byte $0a - .byte $80, $ff + .byte $80, $00 .byte $81, $00 .byte 0 .byte 0 ; swap diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index 415256cf..c1001884 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -95,7 +95,7 @@ _HR_PosSprite: adc spriteYPosOff ;sta r6L sta mob0ypos,Y - + lda r5H ldy $D077 ldx #1 @@ -106,7 +106,7 @@ _HR_PosSprite: ldy $D078 jsr @2_ sta $D078 - + .ifdef bsw128 lda graphMode bpl @X @@ -142,7 +142,7 @@ tay ldy msbxpos ldx #1 - + jsr @2__ sta msbxpos lda #2 @@ -165,7 +165,7 @@ tay rts @2_clear: - tya + tya eor #$ff ora BitMaskPow2,x eor #$ff diff --git a/loader/loader.s b/loader/loader.s index 95956452..4db068a6 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -48,23 +48,25 @@ next: .WORD 0 SEE ; just to be sure: 8 bit stack EOM + ; 10113/10114 clear device numbers of the f011 drive, we will + ; manage those independent of dos lda #$10 - sta $02 - lda #$01 - sta $03 - lda #$01 - sta $04 + sta $02 + lda #$01 + sta $03 + lda #$01 + sta $04 lda #$00 - sta $05 + sta $05 lda #$18 - LDZ #2 + LDZ #3 EOM - sta ($02), Z - lda #$19 + sta ($02), Z + lda #$19 INZ EOM - sta ($02), Z + sta ($02), Z ; Just to be sure, enable newVic mode, to access eg VIC-3 register $30 ; We don't need Mega65 fast mode here at any price, let's do that @@ -87,7 +89,10 @@ next: .WORD 0 lda #$80 sta $d06f - LDA $D054 + LDA #$00 + sta $D710 + + LDA $D054 ;40 mhz ORA #$40 STA $D054 lda #$40 @@ -116,7 +121,6 @@ next: .WORD 0 LDA #1 STA $D06A - ; Setup foreground/background colours .if 1 LDA #<$e000 From 74efd31bf168ae45b3574d334623596555598d21 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 22 May 2019 21:14:17 +0200 Subject: [PATCH 036/125] Initial scalable version of TopDesk 6.0. --- topdesk/DeskInclude/EditText.inc | 18 +++--- topdesk/Include/DeskMain2.inc | 18 +++--- topdesk/Include/Symbol/TopSym.inc | 2 + topdesk/Main/DeskTop.main.s | 56 ++++++++++++++---- topdesk/Main/DeskTop.sub4.s | 2 +- topdesk/Main/DeskWindows.akt.inc | 96 +++++++++++++++++++++++-------- 6 files changed, 138 insertions(+), 54 deletions(-) diff --git a/topdesk/DeskInclude/EditText.inc b/topdesk/DeskInclude/EditText.inc index 150f9ce5..6e37054a 100644 --- a/topdesk/DeskInclude/EditText.inc +++ b/topdesk/DeskInclude/EditText.inc @@ -24,14 +24,14 @@ EditText: ; Text-Editierung @codeok: dey bpl @testcodeloop .ifdef topdesk128 - LoadW___ r3, $8000+80 - ldx #r3 - jsr NormalizeX - MoveW_ r3, PositionXL - LoadW___ r3, $8000 + 80 + 160 - ldx #r3 - jsr NormalizeX - MoveW_ r3, PositionXR + ;LoadW___ r3, $8000+80 + ;ldx #r3 + ;jsr NormalizeX + ;MoveW_ r3, PositionXL + ;LoadW___ r3, $8000 + 80 + 160 + ;ldx #r3 + ;jsr NormalizeX + ;MoveW_ r3, PositionXR .endif ldy #5 @@ -449,6 +449,6 @@ Pointer: .repeat MaxZeilen+1 .byte 0 .endrep - + ; Pointer enth{lt f}r jede Zeile einen Offset auf das erste Zeichen der Zeile ; max. 22 Zeilen diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index c045310e..60350319 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -130,12 +130,12 @@ GetPos: ldy curDrive lda @xL-8,y sta r3L,x - clc - adc #21 + sec + sbc #21 sta r4L,x lda @xH-8,y sta r3H,x - adc #0 + sbc #0 sta r4H,x lda @y-8,y sta r2L,x @@ -143,12 +143,12 @@ GetPos: adc #21 sta r2H,x rts -@xL: .byte <(STARTA_X*8),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) -@xH: .byte (>(STARTA_X*8)) - .byte (>(STARTB_X*8)) - .byte (>(STARTC_X*8)) - .byte (>(STARTD_X*8)) -@y: .byte STARTA_Y, STARTB_Y, STARTC_Y, STARTD_Y +@xL: .byte <(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)) +@xH: .byte (>(SC_FROM_END|(4*8))) + .byte (>(SC_FROM_END|(4*8))) + .byte (>(SC_FROM_END|(4*8))) + .byte (>(SC_FROM_END|(4*8))) +@y: .byte STARTA_Y*8, STARTB_Y*8, STARTC_Y*8, STARTD_Y*8 .endif SetWindows: jsr GotoFirstMenu diff --git a/topdesk/Include/Symbol/TopSym.inc b/topdesk/Include/Symbol/TopSym.inc index bf1317c5..c9f6d89a 100644 --- a/topdesk/Include/Symbol/TopSym.inc +++ b/topdesk/Include/Symbol/TopSym.inc @@ -401,3 +401,5 @@ SC_FROM_CENTER = %010000000000 SC_SCALE = %110000000000 scrFullCardsX = $886E +screenMaxX = $8870 +screenMaxY = $8874 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index dca85ccd..12d6967e 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -2038,10 +2038,16 @@ GetStartPos: ldx #00 clc adc #21 sta r2H,x + + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX + rts -@xL: .byte <(STARTA_X*8),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) -@xH: .byte >(STARTA_X*8),>(STARTB_X*8),>(STARTC_X*8),>(STARTD_X*8) -@y: .byte STARTA_Y,STARTB_Y,STARTC_Y,STARTD_Y +@xL: .byte <(SC_FROM_END|(4*8)),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) +@xH: .byte >(SC_FROM_END|(4*8)),>(STARTB_X*8),>(STARTC_X*8),>(STARTD_X*8) +@y: .byte 100,STARTB_Y,STARTC_Y,STARTD_Y .endif ReLoad2: @@ -2370,15 +2376,41 @@ PrintDiskInfo: PushW r0 jsr GetWorkArea bcs @10 jsr RestoreTextWin -@10: SubVW_ 10,r4 - ldx r2H - inx - inx - stx r2L - txa +@10: + SubVW_ 10,r4 + + lda r4H + and #%11110000 + sta r0L + sta r0H + + lda r2H + clc + adc #2 + sta r2L + bcc @11 + lda r0L + adc #16 + sta r0L + sta r0H +@11: clc adc #8 sta r2H + bcc @12 + lda r0H + adc #16 + sta r0H +@12: + lda r3H + and #%00001111 + ora r0L + sta r3H + lda r4H + and #%00001111 + ora r0H + sta r4H + lda r3L clc adc #10 @@ -2386,9 +2418,11 @@ PrintDiskInfo: PushW r0 lda r3H adc #00 sta r11H + ldx r2H - dex + ;dex stx r1H + jsr SetTextWin bcs @21 lda messageBuffer+1 @@ -2650,7 +2684,7 @@ Handler: ldx messageBuffer+1 ; File/Icontabellenadresse nach r0 ldx messageBuffer+1 jsr GetWorkArea bcs @05a - jsr DispSizeRectangle + ;jsr DispSizeRectangle jsr MyDispFiles txa beq @05a diff --git a/topdesk/Main/DeskTop.sub4.s b/topdesk/Main/DeskTop.sub4.s index eb049b16..f9087818 100644 --- a/topdesk/Main/DeskTop.sub4.s +++ b/topdesk/Main/DeskTop.sub4.s @@ -137,7 +137,7 @@ DispThisInfo: ; File-Info des Files Name darstellen lda #(FIB_RECHTS-FIB_LINKS)/2-10 sec sbc r1L - sta @titelpos+1 + sta @titelpos+1 LoadW___ a1,$8100+77 LoadW___ a3,$8100+97 LoadW___ a4,@ta diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index cd874683..3387fce2 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -12,7 +12,6 @@ ; t "CiMac" ;endif - Grenze_oben = 15 GD_CLOSE = $02 GD_HIDE = $40 @@ -476,17 +475,32 @@ WindowData: ; LinienEndpunkte in Abh{ngigkeit von den Endpunkten Punkt -1,0,0,0,0 ; Ende MaxTextWin: ; Ret: x unver{ndert + txa + pha ldy #5 @10: lda @b,y sta windowTop,y dey bpl @10 + + ldx #leftMargin + jsr NormalizeX + ldx #rightMargin + jsr NormalizeX + ldx #leftMargin + ldy #windowTop + jsr NormalizeY + ldx #rightMargin + ldy #windowBottom + jsr NormalizeY + pla + tax rts @b: ByteCY 0, 0 - ByteCY 751|0, 400 + ByteCY SC_FROM_END|0, SC_FROM_END|0 WordCX 0, 0 - WordCX 751|0, 400 + WordCX SC_FROM_END|0, SC_FROM_END|0 SetTextWin: ; Par: r2-r4 zu setzendes Textfenster ;jsr GetClipRec ;jsr CutRec @@ -614,7 +628,8 @@ DrawWindowC: lda #1 rts @num: .byte 0 @flag: .byte 0 -PutTitle: jmp NewPutString +PutTitle: + jmp NewPutString .if 0 stx r14L PushB r1H @@ -749,7 +764,7 @@ RestoreRectangle: ; Wiederstellung des Bereichs r2-r4 durch evtl. teilweises Ein tax lda windowsOpen,x beq @nicht - jsr DrawWindow + ;jsr DrawWindow @nicht: pla tay dey @@ -820,7 +835,8 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten ; linker Rand = 319-(xr-xl)+MausXOffset ; = 319-xr+xl+MausXOffSet .ifdef topdesk128 - MoveW_ RightMax, mouseRight + MoveW_ screenMaxX, mouseRight + ;MoveW_ RightMax, mouseRight .else LoadW___ mouseRight,319 .endif @@ -836,7 +852,7 @@ DoMove: ; Bewegung eines Rahmens an Abh{ngigkeit der Mauszeiger-Koordinaten ; unterer Rand = 199 - (yu-yo) + MausYOffSet ; = 199 - yu + yo + MausYOffSet - LoadW r12, 479 + MoveW screenMaxY, r12 lda moveKoords+5 lsr @@ -1022,15 +1038,18 @@ DoRubber: ; Gr|~enver{nderung eines Rahmens an Abh{ngigkeit der sta r2H ; unterer Rand und rechter Rand auf Maximum .ifdef topdesk128 - MoveW_ RightMax, mouseRight + MoveW screenMaxX, mouseRight .else LoadW___ mouseRight,319 .endif - ; 479 => $1DF - LoadB mouseBottom, $DF - lda mouseRight+1 - adc #16 - sta mouseRight+1 + MoveB screenMaxY, mouseBottom + lda screenMaxY + 1 + asl + asl + asl + asl + ora mouseRight + 1 + sta mouseRight + 1 ; linker Rand = ml + 40 lda moveKoords+2 @@ -1168,7 +1187,7 @@ SendActivate: lda #WN_ACTIVATE jmp SendMessage2 oldMsVec: .word 0 NewMouseService: - lda mouseData ; Maus-Release? + lda mouseData ; Maus-Release? bpl @10 ; >nein @05: jmp @35 @10: lda menuNumber ; Men} downgepullt ? @@ -1195,10 +1214,15 @@ NewMouseService: dey bpl @29 .ifdef topdesk128 - MoveW_ RightMax, mouseRight - lda mouseRight+1 - ora #16 - sta mouseRight+1 + MoveW_ screenMaxX, mouseRight + MoveB screenMaxY, mouseBottom + lda screenMaxY + asl + asl + asl + asl + ora mouseRight+1 + sta mouseRight+1 .endif lda moveVector ldx moveVector+1 @@ -1222,9 +1246,9 @@ NewMouseService: lda oldMsVec ldx oldMsVec+1 jmp CallRoutine -@d: .byte 0,$df +@d: .byte 0,$4b .ifdef topdesk128 - .byte 0, 0 + .byte 0, 0 .else .word 0,319 .endif @@ -1400,10 +1424,22 @@ CheckScroll_UD: jsr GetWinRec ldx activeWindow jmp SendMessage2 CheckMove: jsr GetWinRec + lda r4H + and #%00001111 + sta r4H + lda r3H + and #%11110000 + ora r4H + sta r4H lda r2L clc adc #BREITEY sta r2H + bcc @04 + lda r4H + add #16 + sta r4H +@04: jsr IsMseInRegion ; Move-Balken angeklickt bne @10 ; >ja @05: rts @@ -1673,7 +1709,8 @@ CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen clc rts DrawShadow: -RemoveShadow: PushW a0 +RemoveShadow: + PushW a0 ldx activeWindow lda windowsOpen,x beq @01 @@ -1707,15 +1744,25 @@ GetWorkArea: ; Ermittlung des Arbeitsbereiches von Window x (0-3) @sub: jsr GetWinAdrRec ; WindowRechteck holen IncW r3 ; Rand abziehen DecW r4 - dec r2H + ;dec r2H lda r2L ; MoveBalken abziehen clc adc #BREITEY+1 sta r2L + bcc @sub1 + lda r3H + add #16 + sta r3H +@sub1: lda r2H sec - sbc #BREITEY + sbc #BREITEY+1 sta r2H + bcs @sub2 + lda r3H + sub #16 + sta r3H +@sub2: SubVW_ BREITEX,r4 ; rechten Scrollrand abziehen @19: rts ToggleTitel: ; Anbringen bzw. Entfernen eines Stricherasters im Titelbalken des @@ -2617,6 +2664,7 @@ MaxWindow: ; actives Window auf Maximalgr|~e setzen / bzw. zur}ck .word 100,219 NewPutString: +@11: .ifdef topdesk128 ldx #r11 jsr NormalizeX @@ -2634,7 +2682,7 @@ NewPutString: @03: lda #'*' @04: jsr SmallPutChar @05: IncW r0 - jmp NewPutString + jmp @11 @10: rts oldRecoverVec: .word 0 From 05ba3461c02a89ee9e9c767e3949aa2ef7d5eed0 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 23 May 2019 21:25:28 +0200 Subject: [PATCH 037/125] TopDesk Clippable Icon drawing not accepts top and bottom bounds in high res. --- topdesk/Main/DeskWindows.akt.inc | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 3387fce2..8440ea8f 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -2007,21 +2007,39 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen ;sta r2H @norm: + ldx r13L + + lda leftMargin+1 + lsr + lsr + lsr + lsr + sta r13L + sec - lda r2L + lda r2L sbc windowTop lda r2H - sbc #00 + sbc r13L bmi @02 ; >nein + + lda rightMargin+1 + lsr + lsr + lsr + lsr + sta r13L + sec ; Zeile }ber windowBottom - lda r2L + lda r2L sbc windowBottom lda r2H - sbc #00 + sbc r13L bmi @03 ; >ja ; LoadB r13H,1 ; Anzeige anbrechen -@02: LoadB winOutFlag,0 ; Zeile nicht anzeigen -@03: PushW r13 +@02: LoadB winOutFlag,1 ; Zeile nicht anzeigen +@03: stx r13L + PushW r13 PushB r14L PushB r15L jsr @sub ; Zeile ggf. darstellen From ec98bf0e99079274b7eb61aa965d9dd3f6e13c9c Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 25 May 2019 19:18:14 +0200 Subject: [PATCH 038/125] Make InvertRectable high res compatible and fix a bug in PrepareCoord for high res cases. --- kernal/graph/line.s | 16 +++++++++---- kernal/graph/rect.s | 55 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/kernal/graph/line.s b/kernal/graph/line.s index 52ce5940..31dca0bc 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -67,14 +67,22 @@ PrepareXCoord: ldx #r4 jsr _NormalizeX - lda r4L - ldx r4H - cpx r3H + ldy r3H + tya + and #$0F + sta r3H + lda r4H + and #$0F + cmp r3H + sty r3H bne @1 + lda r4L cmp r3L @1: bcs @2 ; swap coordintaes - ldy r3H + lda r4L + ldx r4H + ;ldy r3H sty r4H ldy r3L sty r4L diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index 0009da9a..0add1c59 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -42,10 +42,10 @@ _Rectangle: PushB r4H PushB r5H - ldx #r3 + ldx #r3 ldy #r2L jsr _NormalizeY - ldx #r4 + ldx #r4 ldy #r2H jsr _NormalizeY @@ -109,12 +109,51 @@ _Rectangle: ; Destroyed: a, x, y, r5 - r8 ;--------------------------------------------------------------- _InvertRectangle: - MoveB r2L, r11L -@1: jsr _InvertLine - lda r11L - inc r11L - cmp r2H - bne @1 + PushW r2 + PushB r3H + PushB r4H + PushB r5H + + ldx #r3 + ldy #r2L + jsr _NormalizeY + ldx #r4 + ldy #r2H + jsr _NormalizeY + + MoveB r2L, r11L +@1: jsr _InvertLine + + lda r11L + cmp r2H + bne @3_ + beq @3 + + lda r4H + and #$F0 + sta r5H + lda r3H + and #$F0 + cmp r5H + beq @3 +@3_: + inc r11L + bne @2 + + lda r3H + add #16 + sta r3H + ;lda r4H + ;add #16 + ;sta r4H +@2: + bra @1 + +@3: + PopB r5H + PopB r4H + PopB r3H + PopW r2 rts .segment "graph2e" From 3ecfc15968198c30b18a031cf1d27257085228d6 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 26 May 2019 11:44:19 +0200 Subject: [PATCH 039/125] Fix TopDesk icon mode selection and rendering in high resolution. --- topdesk/Main/DeskTop.sub5.s | 86 ++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index 45a12e2b..f348b359 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -249,6 +249,12 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow adc #27 .endif sta r1H + bcc @19 + clc + lda r11H + adc #16 + sta r11H +@19: lda r11L sta r3L clc @@ -281,6 +287,16 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow and #%11 ; durch 4 teilbar ? bne @10 ; >nein AddVB 33,a3H ; yk=yk+33 + bcc @11 + clc + lda a4H + adc #16 + sta a4H + clc + lda a5H + adc #16 + sta a5H +@11: jsr @sub1 ; xk auf Zeilenanfang jmp @20 @10: AddvW 60,a4 @@ -439,15 +455,7 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell adc #10 sta r2L ; Jetzt steht in r2L die obere y-Koordinate -.ifndef topdesk128 - AddW a3,r3 -.endif - AddB_ a2L,r2L - bcs @err ; y-Koordinate zu gro~! - clc - adc #20 - sta r2H - ; Jetzt steht in r2H die untere y-Koordinate + lda r3L clc adc #23 @@ -456,26 +464,54 @@ _GetFileRect: ; Ermittlung des Iconrechtecks eines Files einer DispFile-Darstell adc #00 sta r4H ; Jetzt steht in r4 die rechte x-Koordinate -.ifdef topdesk128 - lda SchmalFlag - cmp #'*' - beq @sc10 + +.ifndef topdesk128 + AddW a3,r3 +.else + lda SchmalFlag + cmp #'*' + beq @sc10 .if 0 - lda r3H - ora #$80 - sta r3H - lda r4H - ora #$a0 - sta r4H - ldx #r3 - jsr NormalizeX - ldx #r4 - jsr NormalizeX + lda r3H + ora #$80 + sta r3H + lda r4H + ora #$a0 + sta r4H + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX .endif @sc10: - AddW a3, r3 - AddW a3, r4 + AddW a3, r3 + AddW a3, r4 .endif + + AddB_ a2L,r2L + ;bcs @err ; y-Koordinate zu gro~! + bcc @11 + clc + lda r3H + adc #16 + sta r3H + clc + lda r4H + adc #16 + sta r4H +@11: + clc + lda r2L + adc #20 + sta r2H + bcc @12 + clc + lda r4H + adc #16 + sta r4H +@12: + + ; Jetzt steht in r2H die untere y-Koordinate jsr GetClipRec jsr CutRec ; Schnittfl{che berechnen, Ende pla From efb79d5756a7fcf4fdccd35977cec5914964da87 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Mon, 27 May 2019 08:39:43 +0200 Subject: [PATCH 040/125] Fixing some topdesk position details that cause high res issues. --- topdesk/Include/DeskMain2.inc | 9 +++++++++ topdesk/Main/DeskTop.main.s | 9 +++++++++ topdesk/Main/DeskTop.sub5.s | 11 +++++++++++ topdesk/Main/DeskWindows.akt.inc | 10 ++++++---- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 60350319..cd050efc 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -105,6 +105,15 @@ MyDCFilesSub: ldx messageBuffer+1 sec sbc #5 sta r2L + bcs @1 + + lda r3H + sub #16 + sta r3H + lda a5H + sub #16 + sta a5H +@1: AddVW__ 6,r3 rts diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 12d6967e..7b292107 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -2193,6 +2193,15 @@ MyDCFilesSub: ldx messageBuffer+1 sec sbc #5 sta r2L + bcs @1 + + lda r3H + sub #16 + sta r3H + lda a5H + sub #16 + sta a5H +@1: AddVW__ 6,r3 rts diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index f348b359..aae7da3f 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -102,6 +102,17 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow jsr SetTextWin LoadB a3L,0 ; a3L = Nummer des aktl. Files AddVB 10,a3H ; a3H = n{chste y-Koordinate + bcc @09 + clc + lda a4H + adc #16 + sta a4H + clc + lda a5H + adc #16 + sta a5H + +@09: PushW r0 LoadW___ r0,University jsr LoadCharSet diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 8440ea8f..adbb6882 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -675,7 +675,8 @@ PutTitle: bne @ploop @ganz: jmp NewPutString .endif -NewRectangle: jsr GetClipRec +NewRectangle: + jsr GetClipRec jsr CutRec bcs @nicht jsr Rectangle @@ -1759,12 +1760,13 @@ GetWorkArea: ; Ermittlung des Arbeitsbereiches von Window x (0-3) sbc #BREITEY+1 sta r2H bcs @sub2 - lda r3H + lda r4H sub #16 - sta r3H + sta r4H @sub2: SubVW_ BREITEX,r4 ; rechten Scrollrand abziehen -@19: rts +@19: + rts ToggleTitel: ; Anbringen bzw. Entfernen eines Stricherasters im Titelbalken des ; aktiven Windows jsr GetWinRec From 67b36f1b84a77a7a7cbe757cb1aa0c2b28b17310 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Mon, 27 May 2019 21:36:45 +0200 Subject: [PATCH 041/125] Fix title focus rendering for high resolution positions. --- topdesk/Main/DeskWindows.akt.inc | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index adbb6882..3c106d14 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -1774,8 +1774,14 @@ ToggleTitel: ; Anbringen bzw. Entfernen eines Stricherasters im Titelbalken des clc adc #BREITEY sta r2H - inc r2L - inc r2L + lda r2L + add #2 + sta r2L + bcc @11 + lda r3H + add #16 + sta r3H +@11: IncW r3 DecW r4 AddVW__ BREITEX,r3 @@ -1819,10 +1825,14 @@ ToggleTitel: ; Anbringen bzw. Entfernen eines Stricherasters im Titelbalken des DecW r3 DecW r3 PopW r4 - ldx r11L - inx - inx - stx r11L + lda r11L + add #2 + sta r11L + bcc @12 + lda r3H + add #16 + sta r3H +@12: ldx r11L cpx r2H bne @33 rts From 0f087bdc499a556f8e17d764181e2d424028d9fc Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 31 May 2019 20:54:35 +0200 Subject: [PATCH 042/125] Make icon view rendering work in high resolution. --- kernal/128k/swapdiskdriver.s | 7 ++-- kernal/fonts/fonts2.s | 56 +++++++++++++++++++++++++++----- topdesk/Main/DeskTop.main.s | 15 ++++++--- topdesk/Main/DeskTop.sub5.s | 5 +++ topdesk/Main/DeskWindows.akt.inc | 2 ++ 5 files changed, 69 insertions(+), 16 deletions(-) diff --git a/kernal/128k/swapdiskdriver.s b/kernal/128k/swapdiskdriver.s index eb35fea9..64f3108d 100644 --- a/kernal/128k/swapdiskdriver.s +++ b/kernal/128k/swapdiskdriver.s @@ -14,10 +14,8 @@ .global _SwapDiskDriver _SwapDiskDriver: +.if 0 .ifdef mega65 -@HOHO: -inc $d020 -jmp @HOHO ; use DMAgic for swapping memory START_IO @@ -41,10 +39,12 @@ jmp @HOHO lda config and #$FE sta config ; enable I/O +.endif .endif rts .ifdef mega65 +.if 0 swapdddmalist: .byte 4 ; swap .word DISK_DRV_LGH @@ -70,6 +70,7 @@ swapdddmalist: .byte 1 ; bank 1 .word 0 ; unsued mod .endif +.endif .if !.defined(mega65) ; XXX almost a copy of PrepForFetch diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 60e9f346..51f806ce 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -217,12 +217,29 @@ Font_1: .endif sta r5H SubB r5H, r1H + bcs @11 + lda r11H + sub #16 + sta r11H +@11: stx r10H tya pha - lda r11H - bmi @3 - CmpW rightMargin, r11 + lda #%00001000 + bit r11H + bne @3 + ;bmi @3 + ldx r10H + lda r11H + and #$0F + sta r10H + lda rightMargin + 1 + and #$0F + cmp r10H + stx r10H + bne @3b + CmpB rightMargin, r11L +@3b: bcc Font_16 @3: lda currentMode and #SET_ITALIC @@ -437,12 +454,20 @@ Font_2: sta r9L ldy r11L dey - ldx rightMargin+1 - lda rightMargin - cpx r11H + + lda rightMargin+1 + and #$0F + sta r4H + + lda r11H + and #$0F + cmp r4H bne @8 - cmp r11L -@8: bcs @9 + lda r11L + cmp rightMargin +@8: bcc @9 + ;beq @9 + lda rightMargin tay @9: tya and #%00000111 @@ -946,6 +971,7 @@ FontPutChar: LoadB CPU_DATA, RAM_64K .endif PushB r1H + PushB r11H tya jsr Font_1 ; put pointer in r13 bcc @9_ ; return @@ -1046,10 +1072,22 @@ FontPutChar: .endif @8: inc r1H + bne @8b + lda r11H + add #16 + sta r11H +@8b: dec r10H beq @9 jmp @1 -@9: PopB r1H +@9: lda r11H + and #$0F + sta r11H + pla + and #$F0 + ora r11H + sta r11H + PopB r1H .ifdef mega65 PopB CPU_DATA .endif diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 7b292107..17e9a99e 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -2399,7 +2399,7 @@ PrintDiskInfo: PushW r0 sta r2L bcc @11 lda r0L - adc #16 + add #16 sta r0L sta r0H @11: @@ -2408,7 +2408,7 @@ PrintDiskInfo: PushW r0 sta r2H bcc @12 lda r0H - adc #16 + add #16 sta r0H @12: lda r3H @@ -2428,9 +2428,16 @@ PrintDiskInfo: PushW r0 adc #00 sta r11H - ldx r2H + lda r2L + add #7 + sta r1H + bcc @13 + lda r11H + add #16 + sta r11H +@13: ;dex - stx r1H + ;stx r1H jsr SetTextWin bcs @21 diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index aae7da3f..fb2e09e0 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -403,6 +403,11 @@ DispNumber: ; Darstellung der aktuellen Filenummer an der Position a4-20/a3H+6 clc adc #10 sta r1H + bcc @10b + lda r11H + add #16 + sta r11H +@10b: lda #%11000000 jmp PutDecimal diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 3c106d14..350fb82a 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -544,6 +544,7 @@ DrawWindowC: lda #1 rts @geht: lda a5H + and #%11110000 sta a1L MoveB a4L,r2L ; Textfenster f}r Titelstring setzen @@ -566,6 +567,7 @@ DrawWindowC: lda #1 and #%00001111 ora a1L sta r3H + lda a6L sec sbc #1+BREITEX*2 From 084aaa97d74397e9aba8ca68660ec7d1da5ec0f1 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Tue, 11 Jun 2019 00:03:50 +0200 Subject: [PATCH 043/125] Make TopDesk speed frame and windows work on high resolution modes. --- topdesk/Main/DeskTop.sub5.s | 24 +++- topdesk/Main/DeskWindows.akt.inc | 23 +-- topdesk/WinInclude/SpeedFrame.inc | 227 ++++++++++++++++++++++++++---- 3 files changed, 236 insertions(+), 38 deletions(-) diff --git a/topdesk/Main/DeskTop.sub5.s b/topdesk/Main/DeskTop.sub5.s index fb2e09e0..c4c1bbcd 100644 --- a/topdesk/Main/DeskTop.sub5.s +++ b/topdesk/Main/DeskTop.sub5.s @@ -160,6 +160,11 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow clc adc #21 sta r2H + bcc @009 + lda r4H + add #16 + sta r4H +@009: jsr GetClipRec .if 0 .ifdef topdesk128 @@ -213,7 +218,7 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow ; Darstellung des Filenames, auf dessen Text a1 zeigt, zentriert ; an der Position a4+12, a3H+27 @005: - lda a4L + lda a4L clc adc #12 sta r11L @@ -275,13 +280,30 @@ _DispFiles: ; Darstellung von FILE_ANZ Fileintr{gen im Textwindow sta r3H adc r4H sta r4H + lda r1H clc adc #1 sta r2H + bcc @019 + lda r3H + add #16 + sta r3H + lda r4H + add #16 + sta r4H +@019: + lda r2H sec sbc #6 sta r2L + bcs @020 + sec + lda r3H + sbc #16 + sta r3H +@020: + jsr GetClipRec jsr CutRec bcs @nicht diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 350fb82a..3a5ffe1a 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -262,7 +262,15 @@ DrawWindow2: ; Par: a4-a6: Window-Rechteck lda #1 sta cutDebug jsr CutRec + + php + MoveW r2, $88ee + MoveW r3, $88ee+2 + MoveW r4, $88ee+4 + plp + bcc @n10 + inc $d020 lda #0 sta cutDebug rts @@ -767,7 +775,7 @@ RestoreRectangle: ; Wiederstellung des Bereichs r2-r4 durch evtl. teilweises Ein tax lda windowsOpen,x beq @nicht - ;jsr DrawWindow + jsr DrawWindow @nicht: pla tay dey @@ -1649,7 +1657,7 @@ CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen sta r0L lda cutDebug beq @20 - inc $d021 + ;inc $d021 @20: ; r4 = MIN (r4,r7) lda r7L sec @@ -1694,13 +1702,8 @@ CutRec: ; Schnittfl{che zwischen zwei Rechtecken berechnen sbc r2L lda r0H sbc r0L - bpl @60 - lda cutDebug - beq @60 -@61: - inc $d021 - jmp @61 -@60: + bmi @49 + lda r3H ora r0L sta r3H @@ -2525,7 +2528,9 @@ NewDoDlgBox: inc DialBoxFlag BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 lda backPattern jsr SetPattern + jsr Rectangle + ; Einzeichnen der Icons der iconTab nur innerhalb des Rechtecks r2-r4 ldy #05 ; Rette Textwindow @10: lda windowTop,y ; Textwindow := r2-r4 diff --git a/topdesk/WinInclude/SpeedFrame.inc b/topdesk/WinInclude/SpeedFrame.inc index 25956561..93a8b072 100644 --- a/topdesk/WinInclude/SpeedFrame.inc +++ b/topdesk/WinInclude/SpeedFrame.inc @@ -13,9 +13,9 @@ Schrw = 15 SpeedFrame: .ifdef topdesk128 .ifndef mega65 - lda graphMode - bpl @z40 - rts + lda graphMode + bpl @z40 + rts .endif @z40: .endif @@ -26,20 +26,118 @@ SpeedFrame: sta r10L,x dex bpl @e10 + ; **** - ldx #r13 - ldy #1 -@10: lda r10L,y + ; r13L bottom y diff + ; r10L top y diff + ldx r3H + lda r4H + lsr + lsr + lsr + lsr + sta r3H + and #%00001000 + beq @f4 + lda r3H + ora #$F0 + sta r3H +@f4: + lda r10H sec - sbc r2L,y - sta $00,x - lda #0 - sbc #0 - sta $01,x - ldx #r10 - dey - bpl @10 - ldy #2 + sbc r2H + sta r13L + php + lda r12H + lsr + lsr + lsr + lsr + plp + sbc r3H + sta r13H + and #%00001000 + beq @f1 + lda r13H + ora #$F0 + sta r13H +@f1: + txa + lsr + lsr + lsr + lsr + sta r3H + and #%00001000 + beq @f3 + lda r3H + ora #$F0 + sta r3H +@f3: + + lda r10L + sec + sbc r2L + sta r10L + php + lda r11H + lsr + lsr + lsr + lsr + plp + sbc r3H + sta r10H + and #%00001000 + beq @f2 + lda r10H + ora #$F0 + sta r10H +@f2: + stx r3H + + PushW r3 + PushW r4 + + lda r11H + bpl @20a + ora #$F0 + bra @20b +@20a: + and #$0F +@20b: + sta r11H + + lda r12H + bpl @20c + ora #$F0 + bra @20d +@20c: + and #$0F +@20d: + sta r12H + + lda r3H + bpl @21a + ora #$F0 + bra @21b +@21a: + and #$0F +@21b: + sta r3H + + lda r4H + bpl @21c + ora #$F0 + bra @21d +@21c: + and #$0F +@21d: + sta r4H + + + ; x left/right from to diff + ldy #2 @20: lda r11L,y sec sbc r3L,y @@ -50,9 +148,12 @@ SpeedFrame: dey dey bpl @20 + PopW r4 + PopW r3 + + ; div r10, r11 by steps LoadB r0L,Schrw LoadB r0H,0 - ldx #r10 ldy #r0 @30: jsr DSdiv @@ -60,7 +161,7 @@ SpeedFrame: inx cpx #r14 bcc @30 - MoveB r13L,r10H + ldx #0 @40: lda r2,x pha @@ -75,30 +176,100 @@ SpeedFrame: bpl @50 @60: LoadB r8L,Schrw @100: jsr InvFrame - ldy #1 -@110: lda r2L,y + + ; advance y coordinates + lda r3H + lsr + lsr + lsr + lsr + tay + lda r3H + and #$0F + sta r3H + and #%00001000 + beq @f5 + lda r3H + ora #$F0 + sta r3H +@f5: + + lda r2L clc - adc r10L,y - sta r2L,y - dey - bpl @110 + adc r10L + sta r2L + tya + adc r10H + asl + asl + asl + asl + ora r3H + sta r3H + + lda r4H + lsr + lsr + lsr + lsr + tay + lda r4H + and #$0F + sta r4H + and #%00001000 + beq @f6 + lda r4H + ora #$F0 + sta r4H +@f6: + + + lda r2H + clc + adc r13L + sta r2H + tya + adc r13H + asl + asl + asl + asl + ora r4H + sta r4H + ldy #2 @120: lda r3L,y clc adc r11L,y sta r3L,y + lda r3H,y + and #$F0 + tax + lda r3H,y + bpl @120a + ora #$f0 + bra @120b +@120a: + and #$0F +@120b: adc r11H,y - sta r3H,y + and #$0F + sta r3H,y + txa + ora r3H,y + sta r3H,y dey dey bpl @120 - + lda dblClickCount bne @w1 LoadB dblClickCount, 1 -@w1: cmp dblClickCount - beq @w1 +@w1: lda dblClickCount + bne @w1 dec r8L - bne @100 + beq @100a + jmp @100 +@100a: rts From a8a543e649873087795c151e93fa58424463f0cb Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 15 Jun 2019 20:35:15 +0200 Subject: [PATCH 044/125] Make Draw line high resolution. Move some code part to underlay to have more room, also introduced highres version of GetScanLine to eliminate code copy. --- kernal/files/files6c.s | 6 +- kernal/fonts/fonts2.s | 17 ++- kernal/graph/line.s | 49 ++++----- kernal/graph/point.s | 171 ++++++++++++++++++++++--------- kernal/graph/scanline.s | 32 ++++++ kernal/init/init1.s | 15 +-- kernal/kernal_mega65.cfg | 5 +- kernal/panic/panic.s | 2 - kernal/time/time1.s | 7 +- topdesk/Main/DeskWindows.akt.inc | 37 ++++++- 10 files changed, 236 insertions(+), 105 deletions(-) diff --git a/kernal/files/files6c.s b/kernal/files/files6c.s index 598b2609..9748d0a2 100644 --- a/kernal/files/files6c.s +++ b/kernal/files/files6c.s @@ -187,13 +187,13 @@ IsDeviceValid: lda _driveType,y sta curType ;beq @7 -.if .defined(bsw128) || .defined(mega65) +.if .defined(bsw128) ldx curDrive .endif cpy curDrive beq @3 sty curDrive -.if .defined(bsw128) || .defined(mega65) +.if .defined(bsw128) bbrf 6, sysRAMFlg, @4 .else bbrf 6, sysRAMFlg, @3 @@ -207,7 +207,7 @@ IsDeviceValid: jsr PrepForFetch @3: ldx #NULL rts -.if .defined(bsw128) || .defined(mega65) +.if .defined(bsw128) @4: txa eor curDrive and #1 diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 51f806ce..470549b5 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -48,6 +48,7 @@ PrvCharWidth = $880D .import GetScanLine .import GetRealSize .endif +.import _GetScanLine_HR .global Font_9 .global FontPutChar @@ -303,16 +304,12 @@ Font_2: lsr lsr lsr + ldx #5 +@11: asl r1H rol - asl r1H - rol - asl r1H - rol - asl r1H - rol - asl r1H - rol + dex + bne @11 tay pla sta r1H @@ -322,9 +319,9 @@ Font_2: ;ldx r1H .ifdef bsw128 - jsr _GetScanLine + jsr _GetScanLine_HR .else - jsr GetScanLine + jsr _GetScanLine .endif lda leftMargin+1 tay diff --git a/kernal/graph/line.s b/kernal/graph/line.s index 31dca0bc..feec422f 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -36,6 +36,7 @@ .ifdef mega65 .import GetLeftXAddress .import _NormalizeY +.import _GetScanLine_HR .endif .global ImprintLine @@ -91,29 +92,29 @@ PrepareXCoord: @2: .endif .ifdef mega65 - lda r11L - pha - lda r3H - lsr - lsr - lsr - lsr - asl r11L - rol - asl r11L - rol - asl r11L - rol - asl r11L - rol - asl r11L - rol - tay - pla - sta r11L - and #$07 - ora #$f8 - tax + ;lda r11L + ;pha + ;lda r3H + ;lsr + ;lsr + ;lsr + ;lsr + ;asl r11L + ;rol + ;asl r11L + ;rol + ;asl r11L + ;rol + ;asl r11L + ;rol + ;asl r11L + ;rol + ;tay + ;pla + ;sta r11L + ;and #$07 + ;ora #$f8 + ;tax .else lda r11L pha @@ -135,7 +136,7 @@ PrepareXCoord: ora #$f8 tax .endif - jsr _GetScanLine + jsr _GetScanLine_HR lda r4L and #%00000111 tax diff --git a/kernal/graph/point.s b/kernal/graph/point.s index 4eef798b..69f44ce1 100644 --- a/kernal/graph/point.s +++ b/kernal/graph/point.s @@ -32,6 +32,8 @@ .import LF4A7 .import GetLeftXAddress .import _NormalizeX +.import UncompactXY +.import _GetScanLine_HR .global _TestPoint .global _DrawPoint @@ -56,39 +58,76 @@ _DrawLine: php .if .defined(bsw128) || .defined(mega65) - bmi @Y - lda r11L - cmp r11H - bne @Y - lda #$FF + ldx #r3 + jsr _NormalizeX + ldx #r4 + jsr _NormalizeX +.endif + ; + CmpB r11L, r11H + bne @Y2 + lda r3H + and #%11110000 + sta r14L + lda r4H + and #%11110000 + cmp r14L + bne @Y2 + plp + php + bmi @Y2 + bne @Y2 + lda #$FF bcs @X lda #0 -@X: +@X: + plp .ifdef mega65 jmp __io_HorizontalLine .else jmp _HorizontalLine .endif -@Y: ldx #r3 - jsr _NormalizeX - ldx #r4 - jsr _NormalizeX -.endif - LoadB r7H, 0 - lda r11H + +@Y2: + plp + PushW r14 + php + ; uncompact x coordinates + lda r4H + jsr UncompactXY + sta r4H + sty r14H + MoveB r11H, r14L + lda r3H + tax + jsr UncompactXY + sta r3H + sty r11H + + lda r14L sub r11L sta r7L + lda r14H + sbc r11H + sta r7H bcs @1 - lda #0 - sub r7L - sta r7L -@1: lda r4L + + ; neg? + ldx #r7 +.ifdef bsw128 + jsr _Dabs +.else + jsr Dabs +.endif +@1: + lda r4L sub r3L sta r12L lda r4H sbc r3H sta r12H + ldx #r12 .ifdef bsw128 jsr _Dabs @@ -228,27 +267,29 @@ _DrawLine: sta r10H asl r10L rol r10H - LoadB r13L, $ff - CmpW r3, r4 + LoadW r13L, $ffff + jsr CmpWR3R4 bcc @4 - CmpB r11L, r11H + CmpW r11, r14 bcc @3 - LoadB r13L, 1 + LoadW r13, 1 @3: ldy r3H ldx r3L MoveW r4, r3 sty r4H stx r4L - MoveB r11H, r11L + MoveW r14, r11 bra @5 -@4: ldy r11H - cpy r11L +@4: CmpW r11, r14 bcc @5 - LoadB r13L, 1 -@5: plp + LoadW r13, 1 +@5: jsr @99 + plp php + pha jsr _DrawPoint - CmpW r3, r4 + PopB r3H + jsr CmpWR3R4 bcs @8 inc r3L bne @6 @@ -256,11 +297,10 @@ _DrawLine: @6: bbrf 7, r8H, @7 AddW r9, r8 bra @5 -@7: AddB_ r13L, r11L +@7: AddW r13, r11 AddW r10, r8 bra @5 -@8: plp - rts +@8: jmp @E @9: lda r12L asl sta r9L @@ -282,26 +322,35 @@ _DrawLine: asl r10L rol r10H LoadW r13, $ffff - CmpB r11L, r11H + + CmpW r11, r14 bcc @B - CmpW r3, r4 + + jsr CmpWR3R4 bcc @A LoadW r13, 1 -@A: MoveW r4, r3 +@A: + MoveW r4, r3 ldx r11L - lda r11H - sta r11L - stx r11H + ldy r11H + MoveW r14, r11 + stx r14L + sty r14H bra @C -@B: CmpW r3, r4 +@B: + jsr CmpWR3R4 bcs @C LoadW r13, 1 -@C: plp +@C: jsr @99 + plp php + pha jsr _DrawPoint - CmpB r11L, r11H + PopB r3H + + CmpW r11, r14 bcs @E - inc r11L + IncW r11 bbrf 7, r8H, @D AddW r9, r8 bra @C @@ -309,6 +358,18 @@ _DrawLine: AddW r10, r8 bra @C @E: plp + PopW r14 + rts +@99: ldx r3H + txa + lda r11H + asl + asl + asl + asl + ora r3H + sta r3H + txa rts .endif @@ -328,24 +389,32 @@ _DrawPoint: ldx #r3 jsr _NormalizeX .endif + +.ifdef mega65 +.else ldx r11L - jsr _GetScanLine +.endif + jsr _GetScanLine_HR .ifdef bsw128 bbsf 7, graphMode, DrwPoi80 .endif - lda r3L - and #%11111000 .ifdef mega65 - ldy r3H + lda r3H + and #%00001111 + tay +.endif +.ifdef mega65 @1c: - beq @1b - inc r5H - inc r6H - dey - bra @1c + beq @1b + inc r5H + inc r6H + dey + bra @1c @1b: - tay + lda r3L + and #%11111000 + tay .else tay lda r3H @@ -453,6 +522,7 @@ TestPoi80: rts LF29F: clc rts +.endif CmpWR3R4: lda r3H @@ -461,4 +531,3 @@ CmpWR3R4: lda r3L cmp r4L LF2AB: rts -.endif diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 8c287523..ff8b3970 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -15,6 +15,7 @@ .global InitScanLineTab .global LineTabH .global LineTabL +.global _GetScanLine_HR .endif .segment "graph2n" @@ -28,6 +29,37 @@ BACK_SCR_BASE65 = $9000 .import _MapLow .endif +;--------------------------------------------------------------- +; GetScanLine_HR +; +; Function: Returns the address of the beginning of a scanline + +; Pass: r11L lower byte of y coordinates +; r3H upper 4 bits are high bit of y coordinate +; Return: r5 add of 1st byte of foreground scr +; r6 add of 1st byte of background scr +; Destroyed: a, r11L +;--------------------------------------------------------------- +_GetScanLine_HR: + lda r11L + pha + lda r3H + lsr + lsr + lsr + lsr + ldx #5 +@21: + asl r11L + rol + dex + bne @21 + tay + pla + sta r11L + and #$07 + ora #$f8 + tax ;--------------------------------------------------------------- ; GetScanLine $C13C diff --git a/kernal/init/init1.s b/kernal/init/init1.s index 9129c6f4..f53588ea 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -45,14 +45,17 @@ _InitMachine2: InitGEOEnv: LoadW r0, InitRamTab .if .defined(bsw128) || .defined(mega65) - LoadB CPU_DATA, RAM_64K - jsr _InitRam - LoadB CPU_DATA, IO_IN .ifdef mega65 - jsr MapUnderlay - jsr SetRightMargin - jmp UnmapUnderlay + jsr MapUnderlay + LoadB CPU_DATA, RAM_64K + jsr _InitRam + LoadB CPU_DATA, IO_IN + jsr SetRightMargin + jmp UnmapUnderlay .else +LoadB CPU_DATA, RAM_64K +jsr _InitRam +LoadB CPU_DATA, IO_IN jmp SetRightMargin .endif .else diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 5b54bdd3..2e23589a 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -26,7 +26,7 @@ SEGMENTS { sprites: load = LOKERNAL, type = ro; misc: load = LOKERNAL, type = ro; - # icons: $BF40-$BFFF + # icons: $a000-$BFFF files6a: load = UNDERLAY, type = ro; files6b: load = UNDERLAY, type = ro; files6c: load = UNDERLAY, type = ro; @@ -45,6 +45,7 @@ SEGMENTS { mode: load = UNDERLAY, type = ro; dlgbox2: load = UNDERLAY, type = ro; dlgbox1k: load = UNDERLAY, type = ro; + init4: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -123,7 +124,7 @@ SEGMENTS { bswfont80: load = KERNAL, type = ro; patterns: load = KERNAL, type = ro; #dlgbox1k: load = KERNAL, type = ro; - init4: load = KERNAL, type = ro; + #init4: load = KERNAL, type = ro; fonts2: load = KERNAL, type = ro; fonts3: load = KERNAL, type = ro; fonts4: load = KERNAL, type = ro; diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index 3a7dcacf..60732643 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -111,8 +111,6 @@ _Panic: .ifdef mega65 LoadB CPU_DATA, IO_IN @13: - inc $d020 - jmp @13 lda countHighMap beq @12 jsr UnmapUnderlay diff --git a/kernal/time/time1.s b/kernal/time/time1.s index 704945da..bd3db2dd 100644 --- a/kernal/time/time1.s +++ b/kernal/time/time1.s @@ -142,6 +142,8 @@ ConvertBCD: @2: rts DoClockAlarm: +; TODO, bring back to life in the underlay +.if 0 lda alarmWarnFlag bne @3 .ifdef bsw128 @@ -167,5 +169,6 @@ DoClockAlarm: lda #$1e sta alarmWarnFlag dec alarmSetFlag -@3: rts - +@3: +.endif + rts diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 3a5ffe1a..81421366 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -310,21 +310,48 @@ sta cutDebug bvs @rechts @links: AddW a5,a3 jmp @10 -@rechts: lda a6L +@rechts: + lda a6L sec sbc a3L sta a3L lda a6H sbc a3H sta a3H + @10: bit a2L bmi @unten -@oben: AddB_ a4L,a2H +@oben: + AddB_ a4L,a2H + lda a3H + and #%00001111 + sta a3H + lda a5H + and #%11110000 + ora a3H + bcc @oben2 + clc + adc #16 +@oben2: + sta a3H jmp @20 -@unten: lda a4H +@unten: + lda a4H sec sbc a2H sta a2H + lda a3H + and #%00001111 + sta a3H + lda a6H + and #%11110000 + ora a3H + bcs @unten2 + sec + sbc #16 +@unten2: + sta a3H + @20: lda a2L and #%00100000 bne @line @@ -371,11 +398,11 @@ sta cutDebug bne @l40 lda #0 sec - ;jsr DrawPoint + jsr DrawPoint jmp @weiter @l40: lda #0 sec - ;jsr DrawLine + jsr DrawLine @weiter: lda a1L clc adc #3 From 46702501e39a4d7589ada817e9e6ae371000e12a Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 16 Jun 2019 09:13:33 +0200 Subject: [PATCH 045/125] Implement graph mode switch when exectuing application from TopDesk. --- topdesk/Include/SubDir.src.inc | 74 +++++++++++++++++++++------------- topdesk/Main/DeskTop.main.s | 33 ++++++++++++++- 2 files changed, 77 insertions(+), 30 deletions(-) diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index ebf43c55..cff11f52 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -4,10 +4,10 @@ ; r10L - Nummer des Verzeichnisses ; - b7=1 alle Verzeichnisse ; r11L - Anzahl der einzulesenden Files im akt. Dir -; +; ; r11H - Anzahl der zu }berlesenden Eintr{ge ; 0 f}r keinen Eintrag }berlesen -; r12L - b7=1 b6=1 gel|schte Files und Leereintr{ge +; r12L - b7=1 b6=1 gel|schte Files und Leereintr{ge ; }berlesen ; - b7=1 b6=0 gel|schte Files einlesen, ; Leereintr{ge }berlesen @@ -57,7 +57,7 @@ FindDirFiles: .ifdef topdesk13 MoveW_ r3,@r3 ; Kn 22.9.91 .endif -@10: +@10: .ifdef topdesk13 MoveW_ @r3,r3 .endif @@ -145,13 +145,13 @@ SortInBuffer: bcc @16 ldx #11 rts -@16: +@16: ; MoveW_ r3,r0 bit r10L bmi @15 .ifdef topdesk13 - ldy #1 ; Kn 22.9.91: autom. l|schen von + ldy #1 ; Kn 22.9.91: autom. l|schen von lda (r5),y ; tempor{r-Dateien beq @16a ldy #23 @@ -175,7 +175,7 @@ SortInBuffer: cpy #16+4 bne @16c beq @16d -@16a: +@16a: .endif ldy #$00 lda (r5),y @@ -194,7 +194,7 @@ SortInBuffer: bpl @11 bvs @1000 ldy #4 - lda (r5),y ; Filename = 0 + lda (r5),y ; Filename = 0 bne @11 beq @1000 @11: lda r11H @@ -245,7 +245,7 @@ DiskInitTurboIO: ; Internal Routine ; - Kopiert TrSc nach r1 ; - ReadBlock -; - setzt TrSc neu, falls x <> 0 +; - setzt TrSc neu, falls x <> 0 ; Achtung!!! ; EnterTurbo und InitForIO m}ssen gesetzt sein !! @@ -271,7 +271,7 @@ ReadTrScBlock: ; y Count-1 (0 = 256) ; ; Destroys -; a,y, +; a,y, CopyFW: sty @10+1 @@ -328,7 +328,7 @@ FormString: ; ; Returns ; x = 0 No Error -; r1 - Track und Sector des Directoryblocks der den +; r1 - Track und Sector des Directoryblocks der den ; Fileeintrag enth{lt ; r5 - Zeiger auf den Directoryeintrag ; ohne (!) Dir-Ebene @@ -388,7 +388,7 @@ ChangeDrive: sta @a @15: tya ; RAM-Disk vor}bergehend inaktivieren jsr SetDevice jsr i_MoveData ; RAM-Driver merken - .word $9000,$7ff0-$d80,$d80 + .word $9000,$7ff0-$d80,$d80 ldy curDrive lda driveType-8,y sta @ramdrivetyp @@ -472,11 +472,11 @@ Change: pha jsr SetDevice .ifndef topdesk13 ldy curDrive - lda driveType,y + lda driveType,y sta curType .endif jmp @RAM -@NoRAM: +@NoRAM: lda r0L jsr ChangeDiskDevice @RAM: ldy curDrive @@ -510,7 +510,7 @@ DriverLow: .byte $00,$80,$00,$80 ; x = 0 No_Error ; REKURSIV ; NO_DIR_FREE -; sonst x-Fehler durch +; sonst x-Fehler durch ; - FindFile ; - GetBlock ; r10L - Verzeichnisnummer (undefiniert, wenn Fehler!) @@ -575,7 +575,7 @@ UpperDir: sta (r0),y dey lda (r0),y -@1000: +@1000: sta r10L rts @@ -608,7 +608,7 @@ ClearList: ; Returns ; x = 0 No_Error ; r10L - Verzeichnisnummer (undefiniert, wenn Fehler!) -; +; ; Destroys ; a,y ; r1,r4,r6, @@ -658,7 +658,7 @@ SetNumDrives: jsr GetMaxDrives sta numDrives rts - + ; GetMaxDrives ; Parameter - keine ; R}ckgabewert @@ -694,7 +694,7 @@ GetMaxDrives: ldy numDrives iny bne @30 rts - + TestNumDrives: lda DiskDriverFlag beq @10 @@ -768,7 +768,7 @@ XDispErr: jsr MaxTextWin LoadW___ r0,XErrorDial jsr NewDoDlgBox rts - + XErrorDial: .byte $81 .byte OK @@ -816,7 +816,7 @@ XSubDir: MoveW_ r15,r6 bne XError1 ldx #SUB_DIR rts - + XInput64: lda c128Flag bpl XPrinter jmp XDispErr @@ -970,11 +970,11 @@ XDocErr: MoveB curDrive,XMycurDrive cmp #1 beq XDocErr1 lda #8 - jsr XSearchDrive + jsr XSearchDrive lda r7H beq XApplLoad0 lda #9 - jsr XSearchDrive + jsr XSearchDrive lda r7H beq XApplLoad0 lda #10 @@ -1088,17 +1088,35 @@ TestGraphMode: ; lda #$c0 ; bne @06 ;@05a: lda #$00 -@06: cmp #$00 +@06: cmp #$00 ; col40 support only bne @07 + lda graphMode - bpl @10 + cmp #0 + beq @10 + ldx #19 ; force col40 + rts @06a: ldx #INCOMPATIBLE rts @07: cmp #$c0 bne @10 + ; force col80 lda graphMode - bpl @06a -@10: ldx #0 + cmp #$80 + beq @10 + ldx #20 + rts +@10: and #%00000001 + bne @10a ; scalable app, so just fine + ; ensure we are col40 or col80 + lda graphMode + beq @10a + cmp #$80 + beq @10a + ldx #21 + rts +@10a: + ldx #0 rts CLS: ldy #r15H-r0L @@ -1120,7 +1138,7 @@ CLS: ldy #r15H-r0L bpl @64 jsr i_Rectangle .byte 0,199 - .word 0,319|DOUBLE_W|ADD1_W + .word 0,319 ;|DOUBLE_W|ADD1_W rts @64: jsr i_Rectangle .byte 0,199 @@ -1129,5 +1147,3 @@ CLS: ldy #r15H-r0L ChangeDiskFlag: .byte $ff - - \ No newline at end of file diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 17e9a99e..407d61f1 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -3219,7 +3219,7 @@ OpenFile: jsr ClearMultiFile2 @10: @14: rts @15: cmp #14 ; INCOMPATIBLE - bne @16 + bne @16b jsr StashMain jsr TestTopDesk bcs @18 @@ -3228,6 +3228,37 @@ OpenFile: jsr ClearMultiFile2 sta graphMode jsr SetNewMode jmp @04 + +@16b: cmp #19 ; force col40 + bne @16c + lda #0 + sta graphMode + jsr SetNewMode + jmp @04 + +@16c: cmp #20 ; force col80 + bne @16d + lda #$80 + sta graphMode + jsr SetNewMode + jmp @04 + +@16d: + cpx #21 ; force col40 or col80 (one of the compatibility modes) + bne @16 + + lda graphMode + cmp #$40 + bne @16e + lda #$00 +@16f: + sta graphMode + jsr SetNewMode + jmp @04 +@16e: + lda #$80 + bra @16f + @16: cpx #15 bne @17 jsr SetNumDrives From ed0faf087a5b0054adfee53c242f2ebcbddba4a0 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 22 Jun 2019 22:52:46 +0200 Subject: [PATCH 046/125] Intro of C128 compatible scaling video mode. Shortend/disabled some time code part to get some room. Padded some bytes to align below IO. Cleanup needed there. --- inc/const.inc | 4 +-- kernal/conio/conio3b.s | 6 ++-- kernal/graph/line.s | 10 +++--- kernal/graph/mode.s | 13 ++++++-- kernal/graph/normalize.s | 13 +++++--- kernal/graph/rect.s | 44 ++++++++++++++------------ kernal/load/load1a.s | 5 +-- kernal/panic/panic.s | 2 +- kernal/start/start64.s | 2 +- kernal/time/time1.s | 5 +-- kernal/time/time2.s | 3 ++ topdesk/Main/DeskTop.main.s | 62 +++++++++++++++++++++++++++++-------- 12 files changed, 114 insertions(+), 55 deletions(-) diff --git a/inc/const.inc b/inc/const.inc index 4e9a6193..030a3d95 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -432,9 +432,9 @@ USELAST = 127 SHORTCUT = 128 ; C128 640 support -ADD1_W = $0000 +ADD1_W = $2000 ADD1_B = $20 -DOUBLE_W = $0000 +DOUBLE_W = $8000 DOUBLE_B = $80 ; C128 bsw128 diff --git a/kernal/conio/conio3b.s b/kernal/conio/conio3b.s index 49cf8424..c547ddc3 100644 --- a/kernal/conio/conio3b.s +++ b/kernal/conio/conio3b.s @@ -41,7 +41,10 @@ PrvCharWidth = $880D _UseSystemFont: .if .defined(bsw128) || .defined(mega65) - bbsf 7, graphMode, @X + lda graphMode + bmi @X + cmp #$41 + beq @X LoadW r0, BSWFont bra _LoadCharSet @X: LoadW r0, BSWFont80 @@ -110,4 +113,3 @@ GetChWdth1: @2: lda PrvCharWidth rts .endif - diff --git a/kernal/graph/line.s b/kernal/graph/line.s index feec422f..d88064fa 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -148,8 +148,8 @@ PrepareXCoord: lda BitMaskLeadingSet,x sta r8L .if .defined(bsw128) || .defined(mega65) - bbrf 7, graphMode, @3 - jsr GetLeftXAddress + ;bbrf 7, graphMode, @3 + ;jsr GetLeftXAddress @3: .endif lda r3L @@ -189,9 +189,9 @@ _InvertLine: inc r6H @1: .else - bbrf 7, graphMode, @11 - ldy #0 - bra @12 + ;bbrf 7, graphMode, @11 + ;ldy #0 + ;bra @12 @11: ldy r3L lda r3H diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index d45b5236..55183a9d 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -163,9 +163,13 @@ SetNewMode0: ; rts @1: lda graphMode - cmp #3 + cmp #3|64 beq @12 - jmp @11 + cmp #1|64 + bne @11b + jmp @_1 +@11b: + jmp @11 @12: LoadW r0, VIC_IniTbl .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" @@ -263,7 +267,7 @@ SetNewMode0: rts @11: lda graphMode - cmp #5 + cmp #5|64 beq @13 jmp @14 @13: @@ -451,6 +455,9 @@ SetNewMode0: AND #$EF STA $D054 + LDA #0 + STA $D05D + LoadW r5, 320 jsr InitScanLineTab diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index 69df3f20..c5979e6b 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -23,6 +23,9 @@ .ifdef mega65 _NormalizeY: + bbsf 6, graphMode, @10 + jmp _NormalizeX +@10: lda zpage+1,x and #%11000000 cmp #%10000000 @@ -65,11 +68,11 @@ _NormalizeY: .endif _NormalizeX: -.ifdef scalable_coords + bbrf 6, graphMode, @10 lda zpage+1,x and #%00001100 cmp #%00001000 - bne @4 + bne @5 lda zpage+1,x pha and #$03 @@ -86,11 +89,12 @@ _NormalizeX: ora zpage+1,x sta zpage+1,x rts -@4: +@5: lda zpage+1,x and #$F3 sta zpage+1,x -.else + rts +@10: lda zpage+1,x bpl @2 rol @@ -114,7 +118,6 @@ _NormalizeX: @3: ora #$E0 sta zpage+1,x @4: -.endif rts .ifdef mega65 diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index 0add1c59..3310a1b6 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -38,20 +38,16 @@ ;--------------------------------------------------------------- _Rectangle: PushW r2 - PushB r3H - PushB r4H - PushB r5H + PushW r3 + PushW r4 + ;PushB r5H - ldx #r3 - ldy #r2L - jsr _NormalizeY - ldx #r4 - ldy #r2H - jsr _NormalizeY + jsr _NormRect MoveB r2L, r11L -@1: lda r11L +@1: + lda r11L and #$07 tay .ifdef bsw128 @@ -92,9 +88,9 @@ _Rectangle: bra @1 @3: - PopB r5H - PopB r4H - PopB r3H + ;PopB r5H + PopW r4 + PopW r3 PopW r2 rts @@ -114,12 +110,7 @@ _InvertRectangle: PushB r4H PushB r5H - ldx #r3 - ldy #r2L - jsr _NormalizeY - ldx #r4 - ldy #r2H - jsr _NormalizeY + jsr _NormRect MoveB r2L, r11L @1: jsr _InvertLine @@ -200,6 +191,17 @@ _ImprintRectangle: .segment "graph2i1" +_NormRect: + ldx #r3 + ldy #r2L + jsr _NormalizeY + ldx #r4 + ldy #r2H + jmp _NormalizeY + + .repeat 13 + .byte 0 + .endrep ;--------------------------------------------------------------- ; FrameRectangle $C127 ; @@ -213,8 +215,12 @@ _ImprintRectangle: ;--------------------------------------------------------------- _FrameRectangle: sta r9H + + jsr _NormRect + ldy r2L sty r11L + lda r9H jsr _HorizontalLine MoveB r2H, r11L lda r9H diff --git a/kernal/load/load1a.s b/kernal/load/load1a.s index e502a543..d7184285 100644 --- a/kernal/load/load1a.s +++ b/kernal/load/load1a.s @@ -55,6 +55,8 @@ _EnterDeskTop: .endif txs jsr _InitMachine + lda #$41 + sta graphMode jsr ClrScr .ifdef useRamExp MoveW DeskTopStart, r0 @@ -138,9 +140,8 @@ _StartAppl: lda r7L .ifdef bsw128 jsr CallRoutine - cli + cli jmp MainLoop .else jmp _MNLP .endif - diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index 60732643..ad797abf 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -186,7 +186,7 @@ _PanicDB_DT: _PanicDB_Str: .byte BOLDON .ifdef wheels_size - .byte "Error near " + .byte "ar " .else .byte "System error near " .endif diff --git a/kernal/start/start64.s b/kernal/start/start64.s index ee3641bc..0aa0d1c1 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -156,7 +156,7 @@ OrigResetHandle: sei cld .ifdef mega65 - lda #5 + lda #5|64 sta graphMode LoadW r5, 720 jsr InitScanLineTab diff --git a/kernal/time/time1.s b/kernal/time/time1.s index bd3db2dd..006e011d 100644 --- a/kernal/time/time1.s +++ b/kernal/time/time1.s @@ -65,7 +65,8 @@ _DoUpdateTime: beq @5 jmp (alarmTmtVector) @5: bbrf 6, alarmSetFlag, @6 - jsr DoClockAlarm + ; TODO + ;jsr DoClockAlarm @6: cli rts @@ -170,5 +171,5 @@ DoClockAlarm: sta alarmWarnFlag dec alarmSetFlag @3: -.endif rts + .endif diff --git a/kernal/time/time2.s b/kernal/time/time2.s index 88237160..9ac4234c 100644 --- a/kernal/time/time2.s +++ b/kernal/time/time2.s @@ -15,11 +15,14 @@ .segment "time2" + pingTab: +.if 0 .byte $00, $10, $00, $08, $40, $08, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $0f +.endif pingTabEnd: .if (!.defined(remove_dead_bytes)) && (!.defined(bsw128)) diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 407d61f1..7a82ee07 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -639,7 +639,8 @@ G80: jmp Doppeln SetMyNewMode: lda graphMode - bpl @40 + cmp #$41 + bne @40 @80: LoadW___ r0, @tab2 jmp @10 @@ -1613,11 +1614,42 @@ RedrawHead: jmp InitClock mode_Menue: + ldx #35 + ldy #7 +@1: lda modetab,x + sta r1L + lda modetab+1,x + sta r1H + + tya + pha + lda graphMode + and #%00111111 + sta r2L + lda #' ' + cpy r2L + bne @2 + lda #'*' +@2: + + ldy #0 + sta (r1),y + dex + dex + dex + dex + dex + pla + tay + dey + bpl @1 + jsr MySubMenuDA2 modeoben: .byte 13+13+1 modeunten: .byte 8*14+13+13+1+1 ; wird berechnet! .word 80,171 .byte 8 | VERTICAL +modetab: mpt Mode40Text,MENU_ACTION,Mode_Call mpt Mode80Text,MENU_ACTION, Mode_Call mpt ModeNSText,MENU_ACTION,Mode_Call @@ -1628,20 +1660,24 @@ modeunten: .byte 8*14+13+13+1+1 ; wird berechnet! mpt ModeHCText,MENU_ACTION,Mode_Call Mode40Text: .byte " 40-cols",0 Mode80Text: .byte " 80-cols",0 -ModeNSText: .byte ITALICON, " nice scale",PLAINTEXT,0 +ModeNSText: .byte " ", ITALICON, " nice scale",PLAINTEXT,0 ModeHRText: .byte "* high-res",0 -ModeHRSText: .byte ITALICON, " high-res scaled",PLAINTEXT,0 -ModeSRText: .byte ITALICON, " super-res",PLAINTEXT,0 -ModeSRSText: .byte ITALICON, " super-res scaled",PLAINTEXT,0 -ModeHCText: .byte ITALICON, " high-color",PLAINTEXT,0 +ModeHRSText: .byte " ", ITALICON, " high-res scaled",PLAINTEXT,0 +ModeSRText: .byte " super-res",PLAINTEXT,0 +ModeSRSText: .byte " ", ITALICON, " super-res scaled",PLAINTEXT,0 +ModeHCText: .byte " ", ITALICON, " high-color",PLAINTEXT,0 Mode_Call: + cmp #2 + beq @11 + cmp #4 + beq @11 + cmp #6 + beq @11 + cmp #7 + beq @11 + ora #$40 sta graphMode - cmp #1 - bne @10 - lda #$80 - sta graphMode - @10: jsr GotoFirstMenu @@ -1654,8 +1690,8 @@ Mode_Call: jsr DispMultiCount ;jsr SwitchWin jmp RedrawAll - - rts +@11: + jmp GotoFirstMenu geos_Menue: From 740e68305765069a39cb0f05f12ab357da9217f8 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 23 Jun 2019 12:47:07 +0200 Subject: [PATCH 047/125] Fix COL80 mode support for bitmap output positioning. --- kernal/graph/bitmapup.s | 4 ++++ kernal/graph/rect.s | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index 82036581..ce63eddd 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -52,10 +52,12 @@ _BitmapUp: .endif sta r3L sta r4L + bbrf 6, graphMode, @5 ldx #$F8 ; y high part bit r1L bpl @5 + bit r1H bvc @2 ; not neg @@ -119,6 +121,7 @@ BitmapUpHelp: ldy #3 ; by 8 lda r1L + bbrf 6, graphMode, @42 bit r1L bpl @41 bvc @41 @@ -128,6 +131,7 @@ BitmapUpHelp: adc scrFullCardsX @41: and #$7f +@42: bpl @4 bbrf 7, graphMode, @4 ldy #4 ; by 16 diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index 3310a1b6..2fe86af4 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -199,7 +199,7 @@ _NormRect: ldy #r2H jmp _NormalizeY - .repeat 13 + .repeat 5 .byte 0 .endrep ;--------------------------------------------------------------- From a410b953784e4da1fd47787ade9696f202b90cb4 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 23 Jun 2019 23:33:11 +0200 Subject: [PATCH 048/125] Fix background screen address calculation. --- kernal/graph/scanline.s | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index ff8b3970..d0e0df14 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -246,7 +246,7 @@ _GetScanLine: bcc @Y2__ clc ror - ldx #0 + ldx #1 bra @Y1__ @Y2__: @@ -327,15 +327,15 @@ _GetScanLine: ;sub #$40 ;lsr pla - add #$80 + add #$c0 bcc @Y2___ - clc + sec ror ldx #0 bra @Y1___ @Y2___: - sec + clc ror ldx #0 @Y1___: @@ -351,7 +351,6 @@ _GetScanLine: sta r5H sub #$40 sta r6H - pla taz pla From 630aaf17b4f796ffbc40920dc103486ce9a56244 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 27 Jun 2019 20:52:22 +0200 Subject: [PATCH 049/125] Rearrange memory, to properly map below io code. Short Panic to fix memory. --- kernal/graph/bitmapup.s | 18 ++++++++++++++++-- kernal/icon/icon2.s | 1 + kernal/kernal_mega65.cfg | 2 +- kernal/panic/panic.s | 26 ++++++++++++++------------ 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index ce63eddd..b43857cd 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -305,8 +305,22 @@ BitmapDecode2: ora #1 sta config .endif - ldy #0 - lda (r0),y + ;lda r0H + ;cmp #$a0 + ;bcc @11 + + ; get image from UNDERLAY + PushW r1 + LoadW r1, 0 + LDZ #0 + EOM + lda (r0L), Z + taz + PopW r1 + tza + + ;ldy #0 + ;lda (r0),y .ifdef bsw128 pha lda config diff --git a/kernal/icon/icon2.s b/kernal/icon/icon2.s index 9994e1b5..2d45b6d0 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -178,6 +178,7 @@ FindClkIcon: iny ; in GEOS6 scalable mode lda (IconDescVec),y + bbrf 6, graphMode, @111 bit #%01000000 beq @23 diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 2e23589a..a1727c45 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -62,6 +62,7 @@ SEGMENTS { # kernal code map: load = KERNAL, type = ro; #sprites: load = KERNAL, type = ro; + dlgbox1e1: load = KERNAL, type = ro; fonts1: load = KERNAL, type = ro; tobasic1: load = KERNAL, type = ro; serial1: load = KERNAL, type = ro; @@ -161,7 +162,6 @@ SEGMENTS { dlgbox1b: load = KERNAL, type = ro; dlgbox1c: load = KERNAL, type = ro; dlgbox1d: load = KERNAL, type = ro; - dlgbox1e1: load = KERNAL, type = ro; dlgbox1e2: load = KERNAL, type = ro; dlgbox1f: load = KERNAL, type = ro; dlgbox1g: load = KERNAL, type = ro; diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index ad797abf..f8ea4b4a 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -100,6 +100,8 @@ StackPtr: ; Return: does not return ;--------------------------------------------------------------- _Panic: + inc $d020 + bra _Panic .ifdef wheels sec pla @@ -109,12 +111,12 @@ _Panic: sbc #0 .else .ifdef mega65 - LoadB CPU_DATA, IO_IN + ;LoadB CPU_DATA, IO_IN @13: - lda countHighMap - beq @12 - jsr UnmapUnderlay - bra @13 + ;lda countHighMap + ;beq @12 + ;jsr UnmapUnderlay + ;bra @13 @12: .endif .ifdef bsw128 @@ -127,7 +129,7 @@ _Panic: pla pla .endif - PopW r0 + ;PopW r0 .ifdef bsw128 ldx #r0 jsr Ddec @@ -136,9 +138,9 @@ _Panic: .else SubVW 2, r0 .endif - lda r0H + ;lda r0H .endif - ldx #0 + ;ldx #0 jsr @1 .ifdef wheels tya @@ -151,8 +153,8 @@ _Panic: .ifdef wheels jmp EnterDeskTop .endif -@1: pha - lsr +@1: ;pha + ;lsr lsr lsr lsr @@ -184,9 +186,9 @@ _PanicDB_DT: .segment "panic3" _PanicDB_Str: - .byte BOLDON + ;.byte BOLDON .ifdef wheels_size - .byte "ar " + ;.byte "" .else .byte "System error near " .endif From 8e63288e3aecf9be95f08dce42075e4225474356 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 27 Jun 2019 22:31:09 +0200 Subject: [PATCH 050/125] Fix RecoverRectangle. --- kernal/graph/graph2p.s | 2 ++ kernal/graph/line.s | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/kernal/graph/graph2p.s b/kernal/graph/graph2p.s index 852b55e7..3d19d83e 100644 --- a/kernal/graph/graph2p.s +++ b/kernal/graph/graph2p.s @@ -17,6 +17,7 @@ ; out: r5, r6 card address ; X bit number .global GetLeftXAddress +.if 0 GetLeftXAddress: PushB r3H lda r3L @@ -49,3 +50,4 @@ GetLeftXAddress: tax PopB r3H rts +.endif diff --git a/kernal/graph/line.s b/kernal/graph/line.s index d88064fa..be0e70c0 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -600,10 +600,10 @@ ImprintLine: inc r6H @3: .else - bbrf 7, graphMode, @11 - ldy #0 - bra @12 -@11: + ;bbrf 7, graphMode, @11 + ;ldy #0 + ;bra @12 +;@11: ldy r3L lda r3H beq @12 From fce4e0c17fc9b004efb44b964b94b622fa29031b Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 29 Jun 2019 10:04:35 +0200 Subject: [PATCH 051/125] Fix all video mode placings according to the new bitstream. Fix video mode fallback when entering desktop. --- inc/const.inc | 8 ++++---- kernal/graph/clrscr.s | 10 ++++++++++ kernal/graph/mode.s | 35 ++++++++++++++++++----------------- kernal/load/load1a.s | 11 +++++++++-- kernal/panic/panic.s | 8 ++++---- 5 files changed, 45 insertions(+), 27 deletions(-) diff --git a/inc/const.inc b/inc/const.inc index 030a3d95..6aea9c7f 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -90,12 +90,12 @@ GRBANK3 = %00 ; screen VIC_X_POS_OFF = 24 VIC_Y_POS_OFF = 50 -VIC_X_POS_OFF_640 = 97 +VIC_X_POS_OFF_640 = 60 VIC_Y_POS_OFF_640 = 50 -VIC_X_POS_OFF_720 = 56 +VIC_X_POS_OFF_720 = 20 VIC_Y_POS_OFF_720 = 74 -VIC_X_POS_OFF_800 = 37 -VIC_Y_POS_OFF_800 = 11 +VIC_X_POS_OFF_800 = 6 +VIC_Y_POS_OFF_800 = 5 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 SC_PIX_WIDTH = 720 diff --git a/kernal/graph/clrscr.s b/kernal/graph/clrscr.s index 01b7481e..fee2f8f7 100644 --- a/kernal/graph/clrscr.s +++ b/kernal/graph/clrscr.s @@ -29,6 +29,16 @@ SC_SCALE = %110000000000 ;--------------------------------------------------------------- ClrScr: .ifdef mega65 + ldx #$41 + lda graphMode + bmi @2 + asl + bmi @1 + dex +@2: + stx graphMode + +@1: LoadB dispBufferOn, ST_WR_FORE .else .ifdef bsw128 diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 55183a9d..846d5877 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -91,7 +91,7 @@ SetNewMode0: lda #$09 sta $d016 - LDA #79 + LDA #59 STA $D05C LDA #128 STA $D05D @@ -176,7 +176,7 @@ SetNewMode0: ldy #<(VIC_IniTbl_end - VIC_IniTbl) jsr SetVICRegs - LDA #39 + LDA #19 STA $D05C LDA #128 STA $D05D @@ -276,15 +276,16 @@ SetNewMode0: ldy #<(VIC_IniTbl_end - VIC_IniTbl) jsr SetVICRegs - LDA #20 - STA $D05C - LDA #128 - STA $D05D - LDA #$FF - sta $D076 - LDA $D054 - ORA #$10 - STA $D054 + ; left boarder size + LDA #5 + STA $D05C + LDA #128 + STA $D05D + LDA #$FF + sta $D076 + LDA $D054 + ORA #$10 + STA $D054 lda #$c9 sta grcntrl2 @@ -343,18 +344,18 @@ SetNewMode0: LDA #$8F STA $d06D - lda #<11 + lda #<5 sta $d048 - lda #>11 + lda #>5 sta $d049 - lda #<604 + lda #<593 sta $D04A - lda #>604 + lda #>593 sta $d04b - lda #<11 + lda #<5 sta $d04e - lda #>11 + lda #>5 sta $d04f LoadW screenNextLine, 744 diff --git a/kernal/load/load1a.s b/kernal/load/load1a.s index d7184285..bade0d9c 100644 --- a/kernal/load/load1a.s +++ b/kernal/load/load1a.s @@ -55,8 +55,15 @@ _EnterDeskTop: .endif txs jsr _InitMachine - lda #$41 - sta graphMode +; ldx #$41 +; lda graphMode +; bmi @2 +; ;asl +; ;bmi @1 +; ;dex +;@2: +; stx graphMode +@1: jsr ClrScr .ifdef useRamExp MoveW DeskTopStart, r0 diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index f8ea4b4a..f8c54cbc 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -155,10 +155,10 @@ _Panic: .endif @1: ;pha ;lsr - lsr - lsr - lsr - jsr @2 + ;lsr + ;lsr + ;lsr + ;jsr @2 inx pla and #%00001111 From 2c2cdd3ae4a2ce8b1e44916b7119c9ea8a21ea78 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 29 Jun 2019 20:35:51 +0200 Subject: [PATCH 052/125] Add MEGAphone compatible video mode (8) and remove unclear code that case 2 drives to appear after app launch in TopDesk. --- kernal/graph/mode.s | 58 +++++++++++++++++++++++++++++----- kernal/start/start64.s | 2 +- topdesk/Include/SubDir.src.inc | 6 +++- topdesk/Main/DeskTop.main.s | 10 +++--- 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 846d5877..014ec1fa 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -269,6 +269,8 @@ SetNewMode0: lda graphMode cmp #5|64 beq @13 + cmp #8|64 + beq @13 jmp @14 @13: LoadW r0, VIC_IniTbl @@ -277,8 +279,15 @@ SetNewMode0: jsr SetVICRegs ; left boarder size - LDA #5 - STA $D05C + LDx #0 + LDA graphMode + cmp #8|64 + beq @13a + LDx #5 + +@13a: + STx $D05C + LDA #128 STA $D05D LDA #$FF @@ -298,9 +307,14 @@ SetNewMode0: lda #$C8 sta $d031 - LDA #94 - STA $D058 - STA $D05E + LDx #100 + LDA graphMode + cmp #8|64 + beq @13b + LDx #94 +@13b: + STx $D058 + STx $D05E LDA #0 STA $D05D @@ -344,7 +358,11 @@ SetNewMode0: LDA #$8F STA $d06D - lda #<5 + + LDA graphMode + cmp #8|64 + beq @13c + lda #<5 sta $d048 lda #>5 sta $d049 @@ -366,8 +384,32 @@ SetNewMode0: LoadB scrFullCardsX+1, 74 LoadB spriteXPosOff, VIC_X_POS_OFF_800 LoadB spriteYPosOff, VIC_Y_POS_OFF_800 - - LoadW r5, 752 + LoadW r5, 752 + bra @13d +@13c: + lda #<60 + sta $d048 + lda #>60 + sta $d049 + lda #<540 + sta $D04A + lda #>540 + sta $d04b + + lda #<60 + sta $d04e + lda #>60 + sta $d04f + LoadW screenNextLine, 792 + LoadW screenMaxX, 773 + LoadW screenMaxY, 479 + LoadW screenCardsX, 100 + LoadB scrFullCardsX, 96 + LoadB scrFullCardsX+1, 60 + LoadB spriteXPosOff, VIC_X_POS_OFF_800B + LoadB spriteYPosOff, VIC_Y_POS_OFF_800B + LoadW r5, 800 +@13d: jsr InitScanLineTab END_IO rts diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 0aa0d1c1..d3790708 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -156,7 +156,7 @@ OrigResetHandle: sei cld .ifdef mega65 - lda #5|64 + lda #8|64 sta graphMode LoadW r5, 720 jsr InitScanLineTab diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index cff11f52..89cdb2d4 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -359,7 +359,8 @@ ChangeC: ldx #10 ; ChangeDrive ; tauscht Drive a gegen x ; Par: a,x - DriveNummer (8,9,10,11) ; Bem: mind. 1. RAM-Disk bei 4 Laufwerken -ChangeDrive: sta @a +ChangeDrive: + sta @a stx @x lda numDrives cmp #4 @@ -696,11 +697,14 @@ GetMaxDrives: ldy numDrives rts TestNumDrives: +.if 0 +; stange causes 2nd drive to appear lda DiskDriverFlag beq @10 LoadB numDrives,1 rts @10: LoadB numDrives,2 +.endif rts ; NewGetFile diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 7a82ee07..982451ef 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1614,8 +1614,8 @@ RedrawHead: jmp InitClock mode_Menue: - ldx #35 - ldy #7 + ldx #40 + ldy #8 @1: lda modetab,x sta r1L lda modetab+1,x @@ -1646,9 +1646,9 @@ mode_Menue: jsr MySubMenuDA2 modeoben: .byte 13+13+1 -modeunten: .byte 8*14+13+13+1+1 ; wird berechnet! +modeunten: .byte 9*14+13+13+1+1 ; wird berechnet! .word 80,171 - .byte 8 | VERTICAL + .byte 9 | VERTICAL modetab: mpt Mode40Text,MENU_ACTION,Mode_Call mpt Mode80Text,MENU_ACTION, Mode_Call @@ -1658,6 +1658,7 @@ modetab: mpt ModeSRText,MENU_ACTION,Mode_Call mpt ModeSRSText,MENU_ACTION,Mode_Call mpt ModeHCText,MENU_ACTION,Mode_Call + mpt ModeMPText,MENU_ACTION,Mode_Call Mode40Text: .byte " 40-cols",0 Mode80Text: .byte " 80-cols",0 ModeNSText: .byte " ", ITALICON, " nice scale",PLAINTEXT,0 @@ -1666,6 +1667,7 @@ ModeHRSText: .byte " ", ITALICON, " high-res scaled",PLAINTEXT,0 ModeSRText: .byte " super-res",PLAINTEXT,0 ModeSRSText: .byte " ", ITALICON, " super-res scaled",PLAINTEXT,0 ModeHCText: .byte " ", ITALICON, " high-color",PLAINTEXT,0 +ModeMPText: .byte " MEGAphone",PLAINTEXT,0 Mode_Call: cmp #2 From 30fdefd35105a9b08d81e71b60bf8d4196d6cf36 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 30 Jun 2019 12:05:22 +0200 Subject: [PATCH 053/125] Fix col-80 and scalable mode dialog box positioning. --- inc/const.inc | 2 ++ kernal/dlgbox/dlgbox1c.s | 15 +++++++++++++++ kernal/icon/icon2.s | 1 + 3 files changed, 18 insertions(+) diff --git a/inc/const.inc b/inc/const.inc index 6aea9c7f..bcd28f90 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -96,6 +96,8 @@ VIC_X_POS_OFF_720 = 20 VIC_Y_POS_OFF_720 = 74 VIC_X_POS_OFF_800 = 6 VIC_Y_POS_OFF_800 = 5 +VIC_X_POS_OFF_800B = 1 +VIC_Y_POS_OFF_800B = 60 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 SC_PIX_WIDTH = 720 diff --git a/kernal/dlgbox/dlgbox1c.s b/kernal/dlgbox/dlgbox1c.s index 2fc05da0..bfabac9c 100644 --- a/kernal/dlgbox/dlgbox1c.s +++ b/kernal/dlgbox/dlgbox1c.s @@ -81,6 +81,8 @@ DrwDlgSpd0: lda (DBoxDesc),y bpl DrwDlgSpd1 LoadW DBoxDesc, DBDefinedPos-1 + bbrf 6, graphMode, DrwDlgSpd1 + LoadW DBoxDesc, DBDefinedPosScalable-1 DrwDlgSpd1: ldy #1 lda (DBoxDesc),y @@ -135,6 +137,7 @@ DrwDlgSpd1: jsr SetPattern clc jsr CalcDialogCoords + bbrf 6, graphMode, @11 lda rightMargin+1 and #%11110000 sta rightMargin @@ -143,6 +146,10 @@ DrwDlgSpd1: ora rightMargin sta rightMargin+1 MoveB r4L, rightMargin + bra @12 +@11: + MoveW r4, rightMargin +@12: jsr Rectangle .ifndef wheels_size_and_speed ; redundant clc @@ -183,6 +190,8 @@ CalcDialogCoords: lda (DBoxDesc),y bpl @2 LoadW DBoxDesc, DBDefinedPos-1 + bbrf 6, graphMode, @2 + LoadW DBoxDesc, DBDefinedPosScalable-1 @2: ldx #0 ldy #1 @3: lda (DBoxDesc),y @@ -221,6 +230,12 @@ MSB = 0 .word MSB | DEF_DB_LEFT .word MSB | DEF_DB_RIGHT +DBDefinedPosScalable: + .byte DEF_DB_TOP + .byte DEF_DB_BOT + .word DEF_DB_LEFT + .word DEF_DB_RIGHT + _RstrFrmDialogue: jsr Dialog_2 jsr Dialog_1 diff --git a/kernal/icon/icon2.s b/kernal/icon/icon2.s index 2d45b6d0..621bace0 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -301,6 +301,7 @@ LFCCC: pha .if .defined(bsw128) || .defined(mega65) LFCCC_: + bbrf 6, graphMode, LFCCC pha and #%11000000 From e1b4569984f99ff4fa618b2da97270544a855c16 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 30 Jun 2019 22:32:29 +0200 Subject: [PATCH 054/125] Add preliminary version of mega phone input driver. --- Makefile | 9 +- input/megaphn.cfg | 7 ++ input/megaphn.s | 314 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 328 insertions(+), 2 deletions(-) create mode 100644 input/megaphn.cfg create mode 100644 input/megaphn.s diff --git a/Makefile b/Makefile index 3fb36ae7..78cde285 100755 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VARIANT ?= mega65 DRIVE ?= drvf011 -INPUT ?= joydrv +INPUT ?= megaphn \INPUT ?= mse1531 AS = ca65 @@ -252,6 +252,7 @@ DRIVER_SOURCES= \ drv/drv1571ram.bin \ drv/drv1581ram.bin \ input/joydrv.bin \ + input/megaphn.bin \ input/amigamse.bin \ input/lightpen.bin \ input/mse1531.bin \ @@ -297,6 +298,7 @@ ALL_BINS= \ $(BUILD_DIR)/drv/drv1571ram.bin \ $(BUILD_DIR)/drv/drv1581ram.bin \ $(BUILD_DIR)/input/joydrv.bin \ + $(BUILD_DIR)/input/megaphn.bin \ $(BUILD_DIR)/input/amigamse.bin \ $(BUILD_DIR)/input/lightpen.bin \ $(BUILD_DIR)/input/mse1531.bin \ @@ -360,7 +362,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite GW64.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GW128.CVT | $(C1541) $@ >/dev/null; \ echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ @@ -499,6 +501,9 @@ $(BUILD_DIR)/input/amigamse.bin: $(BUILD_DIR)/input/amigamse.o input/amigamse.cf $(BUILD_DIR)/input/joydrv.bin: $(BUILD_DIR)/input/joydrv.o input/joydrv.cfg $(DEPS) $(LD) -C input/joydrv.cfg $(BUILD_DIR)/input/joydrv.o -o $@ +$(BUILD_DIR)/input/megaphn.bin: $(BUILD_DIR)/input/megaphn.o input/megaphn.cfg $(DEPS) + $(LD) -C input/megaphn.cfg $(BUILD_DIR)/input/megaphn.o -o $@ + $(BUILD_DIR)/input/lightpen.bin: $(BUILD_DIR)/input/lightpen.o input/lightpen.cfg $(DEPS) $(LD) -C input/lightpen.cfg $(BUILD_DIR)/input/lightpen.o -o $@ diff --git a/input/megaphn.cfg b/input/megaphn.cfg new file mode 100644 index 00000000..61a1018f --- /dev/null +++ b/input/megaphn.cfg @@ -0,0 +1,7 @@ +MEMORY { + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + megaphn: load = MOUSE_BASE, type = ro; +} diff --git a/input/megaphn.s b/input/megaphn.s new file mode 100644 index 00000000..4d1be03a --- /dev/null +++ b/input/megaphn.s @@ -0,0 +1,314 @@ +; GEOS by Berkeley Softworks +; reverse engineered by Maciej Witkowiak, Michael Steil +; +; Joystick input driver + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "jumptab.inc" +.include "c64.inc" + +.segment "megaphn" + +MouseInit: + jmp _MouseInit +SlowMouse: + jmp _SlowMouse +UpdateMouse: + jmp _UpdateMouse +SetMouse: + +joyStat0: + .byte 0 +joyStat1: + .byte 0 +joyStat2: + .byte 0 +joyStat3: + .byte 0 +joyStat4: + .byte 0 +joyStat5: + .byte 0 +joyStat6: + .byte 0 +joyStat7: + .byte 0 + +isDown: + .byte 0 +potentialClick: + .byte 0 +downX: + .word 0 +downY: + .word 0 +clickState: + .byte 0 + +; GS $D6B0.0 - Touch event 1 in progress +; GS $D6B9 - Touch pad touch #1 X LSB +; GS $D6BA - Touch pad touch #1 Y LSB +; GS $D6BB.0-1 - Touch pad touch #1 X MSBs +; GS $D6BB.5-4 - Touch pad touch #1 Y MSBs + +TOUCH_X_OFF = -40 +TOUCH_Y_OFF = -(4*8+16) + +_MouseInit: + jsr _SlowMouse + sta joyStat2 + sta mouseXPos + sta mouseXPos+1 + sta mouseYPos + LoadB inputData, $ff + rts + ;jmp JProc1_4 + +_SlowMouse: + LoadB mouseSpeed, NULL +SlowMse0: + rts + +; starting GEOS 6.0 the high byte of Y positiokn is passed and update in r3H +; after uncompacting mouseXPos/mouseYPos +_UpdateMouse: + lda clickState + beq @3 + lda #$00 + sta mouseData + smbf MOUSE_BIT, pressFlag + LoadB clickState, 0 + +@3: + bbsf 0, $D6B0, @4 + jmp @1 +@4: + ; move current physical pos to r0, r1 + MoveB $D6B9, r0L + lda $D6BB + and #$0f + sta r0H + + MoveB $D6BA, r1L + lda $D6BB + lsr + lsr + lsr + lsr + sta r1H + + lda isDown + bne @ongoing + + ; new touch, remember the positiokn + MoveW r0, downX + MoveW r1, downY + + LoadB isDown, $FF + LoadB potentialClick, $FF + +@ongoing: + clc + lda r0L + adc #<(TOUCH_X_OFF) + sta mouseXPos + lda r0H + adc #>(TOUCH_X_OFF) + sta mouseXPos+1 + + clc + lda r1L + adc #<(TOUCH_Y_OFF) + sta mouseYPos + lda r1H + adc #>(TOUCH_Y_OFF) + sta r3H + + ; actual Click, if not substantially away from the start pos + SubW downX, r0 + ldx #r0 + jsr Dabs + CmpW r0, 4 + bcs @off + + SubW downY, r1 + ldx #r1 + jsr Dabs + CmpW r1, 4 + bcs @off + rts +@off: + ;LoadB potentialClick, 0 + rts +@1: + lda isDown + beq @2 + lda potentialClick + beq @2 + + LoadB clickState, $FF + lda #$80 + sta mouseData + smbf MOUSE_BIT, pressFlag + +@2: + LoadB isDown, 0 + rts + +.if 0 + jsr JoyProc3 + bbrf MOUSEON_BIT, mouseOn, SlowMse0 + jsr JoyProc1 + jsr JoyProc2 + ldy #0 + lda joyStat4 + bpl UpdMse0 + dey +UpdMse0: + sty r1H + asl + rol r1H + asl + rol r1H + asl + rol r1H + add joyStat1 + sta joyStat1 + lda r1H + adc mouseYPos + sta mouseYPos + tya + adc r3H + sta r3H + rts + +JoyProc1: + ldx inputData + bmi JProc1_2 + CmpB maxMouseSpeed, mouseSpeed + bcc JProc1_1 + AddB mouseAccel, joyStat2 + bcc JProc1_4 + inc mouseSpeed + bra JProc1_4 +JProc1_1: + sta mouseSpeed +JProc1_2: + CmpB minMouseSpeed, mouseSpeed + bcs JProc1_3 + SubB mouseAccel, joyStat2 + bcs JProc1_4 + dec mouseSpeed + bra JProc1_4 +JProc1_3: + sta mouseSpeed +JProc1_4: + ldx inputData + bmi JProc1_5 + ldy mouseSpeed + sty r0L + jsr JoyProc4 + MoveB r1H, joyStat3 + MoveB r2H, joyStat4 + rts +JProc1_5: + LoadB joyStat3, 0 + sta joyStat4 + rts + +JoyProc2: + ldy #$ff + lda joyStat3 + bmi JProc2_1 + iny +JProc2_1: + sty r11H + asl + rol r11H + asl + rol r11H + asl + rol r11H + add joyStat0 + sta joyStat0 + lda r11H + adc mouseXPos + sta mouseXPos + tya + adc mouseXPos+1 + sta mouseXPos+1 + rts + +JoyProc3: + LoadB cia1base, $ff + lda cia1base+1 + eor #$ff + cmp joyStat7 + sta joyStat7 + bne JProc3_2 + and #%00001111 + cmp joyStat6 + beq JProc3_1 + sta joyStat6 + tay + lda JoyDirectionTab,y + sta inputData + smbf INPUT_BIT, pressFlag + jsr JProc1_4 +JProc3_1: + lda joyStat7 + and #%00010000 + cmp joyStat5 + beq JProc3_2 + sta joyStat5 + asl + asl + asl + eor #%10000000 + sta mouseData + smbf MOUSE_BIT, pressFlag +JProc3_2: + rts + +JoyDirectionTab: + .byte $ff, $02, $06, $ff + .byte $04, $03, $05, $ff + .byte $00, $01, $07, $ff + .byte $ff, $ff, $ff, $ff + +JoyProc4: + lda JoyTab1,x + sta r1L + lda JoyTab1+2,x + sta r2L + lda JoyTab2,x + pha + ldx #r1 + ldy #r0 + jsr BBMult + ldx #r2 + jsr BBMult + pla + pha + bpl JProc4_1 + ldx #r1 + jsr Dnegate +JProc4_1: + pla + and #%01000000 + beq JProc4_2 + ldx #r2 + jsr Dnegate +JProc4_2: + rts + +JoyTab1: + .byte $ff, $b5, $00, $b5 + .byte $ff, $b5, $00, $b5 + .byte $ff, $b5 +JoyTab2: + .byte $00, $40, $40, $c0 + .byte $80, $80, $00, $00 +.endif From c0669857de0483a5ec66ba16192d6151de0bbe34 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 17 Aug 2019 23:00:03 +0200 Subject: [PATCH 055/125] Add super-debugger to GEOS for MEGA65. --- Makefile | 3 +- config.inc | 2 + kernal/debug/main.s | 1516 +++++++++++++++++++++++++++++++++++ kernal/kernal_mega65.cfg | 5 +- kernal/mainloop/mainloop2.s | 18 +- kernal/panic/panic.s | 44 + kernal/start/start64.s | 10 +- loader/loader.s | 9 +- 8 files changed, 1597 insertions(+), 10 deletions(-) create mode 100644 kernal/debug/main.s diff --git a/Makefile b/Makefile index 78cde285..eefd22ca 100755 --- a/Makefile +++ b/Makefile @@ -117,7 +117,8 @@ KERNAL_SOURCES= \ kernal/time/time1.s \ kernal/time/time2.s \ kernal/tobasic/tobasic2.s \ - kernal/vars/vars.s + kernal/vars/vars.s \ + kernal/debug/main.s \ # code that is in front bank of C64 only ifneq ($(VARIANT), bsw128) diff --git a/config.inc b/config.inc index 7e32b33f..a5a62ef2 100644 --- a/config.inc +++ b/config.inc @@ -103,6 +103,8 @@ config_inc = 1 ; ;.setcpu "4510" + debugger = 1 + ; make use of all reusable Wheels optimizations and fixes wheels_size = 1 wheels_size_and_speed = 1 diff --git a/kernal/debug/main.s b/kernal/debug/main.s new file mode 100644 index 00000000..8db22ff7 --- /dev/null +++ b/kernal/debug/main.s @@ -0,0 +1,1516 @@ +; GEOS KERNAL by Berkeley Softworks +; reverse engineered by Maciej Witkowiak, Michael Steil +; +; Misc 6502 helpers + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "config.inc" +.include "kernal.inc" + +.global DebugMain + +.import _DoKeyboardScan +.import _GetNextChar + +; syscalls + +.segment "debug" + +.import _DebugStart + +STACK_OFFSET = 4 + + +consoleCols: + .byte 80 +consoleLines: + .byte 25 +posX: + .byte 0 +posY: + .byte 0 +cursorBlinks: + .byte 0 +cursorCount: + .byte 0 +promptBuf: + .repeat 100 + .byte 0 + .endrep +promptLen: + .byte 0 +promptLenOld: + .byte 0 +stackPointer: + .byte 0 +initialized: + .byte 0 + + +saveIRQ_VECTOR: + .word 0 +saveD011: + .byte 0 +saveD018: + .byte 0 +saveDD00: + .byte 0 +saveD016: + .byte 0 +saveD031: + .byte 0 +saveD020: + .byte 0 +saveD021: + .byte 0 +saveD015: + .byte 0 + +u_cl: + .word 0 + +breakList: + .word 0, 0, _DebugStart, 0, 0, 0, 0, 0, 0, 0 +breakOpList: + .byte 0, 0, $ea, 0, 0, 0, 0, 0, 0, 0 + +consoleBufAddr: + .word consoleBuf +consoleBuf: + .repeat 80*25 + .byte 0 + .endrep +DebugMain: + + ; on any entry? + tsx + stx stackPointer + + MoveW IRQ_VECTOR, saveIRQ_VECTOR + LoadW IRQ_VECTOR, IRQHandler + cli + + ; correct PC after BRK + ldy stackPointer + sec + lda $106+STACK_OFFSET,y + sbc #2 + sta $106+STACK_OFFSET,y + sta u_cl + lda $107+STACK_OFFSET,y + sbc #0 + sta $107+STACK_OFFSET,y + sta u_cl+1 + + PushW r0 + PushW r1 + PushW r2 + PushW r3 + + jsr ClearConsole + LoadW r0, welcome + jsr PutString + + jsr PrintRegs + +@HOHO: + LoadW r0, promptBuf + ldx #100 + jsr Prompt + + ; handle the entry + jsr ProcessPrompt + + bcc @HOHO + + ; GO situation + + ; restore breakpoint at current PC + jsr RestorePCBreakpoint + + jsr ExitConsole + + PopW r3 + PopW r2 + PopW r1 + PopW r0 + + MoveW saveIRQ_VECTOR, IRQ_VECTOR + + rts + +welcome: .byte "SuperDebugger V6.0",13,"Copyright (C) 2019 blueway.Softworks", 13, 13, 0 + +ClearConsole: + ldx #0 + stx posX ; output position top left + stx posY + MoveW consoleBufAddr, r0 +@2: + lda #' ' + ldy #0 +@1: + sta (r0), y + iny + cpy consoleCols + bcc @1 + lda r0L + clc + adc consoleCols + sta r0L + lda r0H + adc #0 + sta r0H + inx + cpx consoleLines + bcc @2 + rts + +PutChar: + pha + jsr HandleScroll + pla + tax + tya + pha + + cpx #29 + bne @10 + + lda posX + bne @11 + lda posY + beq @10 + dec posY + lda consoleCols + sta posX +@11: + dec posX + +@10: + + MoveW consoleBufAddr, r1 + ldy posY + beq @1 +@2: + lda r1L + clc + adc consoleCols + sta r1L + lda r1H + adc #0 + sta r1H + dey + bne @2 +@1: + txa + bne @7 + + ldy posX + lda (r1), y + eor #%10000000 + sta (r1), y + bra @4 +@7: + cmp #29 + bne @9 + + ldy posX + lda #' ' + sta (r1), y + iny + lda (r1), y + and #%01111111 + sta (r1), y + bra @4 + +@9: + cmp #13 + beq @3 + cmp #96 + bcc @6 + sec + sbc #96 +@6: + ldy posX + sta (r1), y + inc posX + iny + cpy consoleCols + bcc @4 + inc posY + lda #0 + sta posX +@4: + pla + tay + rts +@3: + ldy posX + lda (r1), y + and #%01111111 + sta (r1), y + + inc posY + lda #0 + sta posX + bra @4 + +PutString: + ldy #0 +@1: + lda (r0), y + beq @2 + jsr PutChar + iny + bne @1 +@2: + rts + +HandleScroll: + + lda posY + sec + sbc consoleLines + bcc @1 + + ; we need to scroll up + tax + inx + pha + MoveW consoleBufAddr, r2 + MoveW consoleBufAddr, r3 +@2: + lda r3L + clc + adc consoleCols + sta r3L + lda r3H + adc #0 + sta r3H + dec posY + dex + bne @2 + pla ; lines to scroll up + tax + inx + tya + pha +@3: + ldy #0 +@4: + lda (r3), y + sta (r2), y + iny + cpy consoleCols + bne @4 + + lda r2L + clc + adc consoleCols + sta r2L + lda r2H + adc #0 + sta r2H + + lda r3L + clc + adc consoleCols + sta r3L + lda r3H + adc #0 + sta r3H + + inx + cpx consoleLines + bne @3 + + ; empty line with spaces, do 1 line here + ldy #0 +@5: + lda #' ' + sta (r2), y + iny + cpy consoleCols + bne @5 + + pla + tay + +@1: + rts + +Prompt: + lda #'>' + jsr PutChar + + jsr EnterConsole + + MoveB promptLen, promptLenOld + LoadB promptLen, 0 + + LoadB cursorCount, 10 + lda #0 + jsr PutChar +@1: + lda cursorCount + bne @3 + lda #0 + jsr PutChar + LoadB cursorCount, 10 +@3: + jsr GetKeyPress + cmp #0 + beq @1 + cmp #13 + beq @2 + cmp #29 + beq @5 + cmp #',' + beq @6 +@8: + ldy promptLen + cpy #100 + bcs @4 + sta promptBuf, y + inc promptLen + jsr PutChar +@4: + bra @1 +@2: + jsr PutChar + rts +@5: + ldy promptLen + beq @1 + dec promptLen + jsr PutChar + bra @1 +@6: + ldy promptLen + bne @8 + ldy #0 +@7: + lda promptBuf, y + jsr PutChar + iny + cpy promptLenOld + bne @7 + MoveB promptLenOld, promptLen + bra @1 + +GetKeyPress: + + ; wait to receive next key press from buffer + jsr _GetNextChar + + + rts + +IRQHandler: + + cld + pha + txa + pha + tya + pha + + ldx #0 +@2: + lda r0,x + pha + inx + cpx #32 + bne @2 + + jsr _DoKeyboardScan + + lda cursorCount + beq @7 + dec cursorCount +@7: + + ldx #31 +@6: + pla + sta r0,x + dex + bpl @6 + + pla + tay + pla + tax + pla + rti + +CursorOn: + LoadB cursorBlinks, $FF + lda #0 + jsr PutChar + rts + +CursorOff: + LoadB cursorBlinks, $00 + lda #0 + jsr PutChar + rts + +UpdateCursor: + lda cursorBlinks + beq @1 + dec cursorCount + bne @1 + + lda #0 + jsr PutChar + + +@1: + rts + +ProcessPrompt: + + ldy promptLen + cpy #1 + bcc @1 + + lda promptBuf + cmp #'r' + beq @2 + cmp #'R' + beq @2 + cmp #'b' + beq @3 + cmp #'B' + beq @3 + + cmp #'s' + beq @4 + + cmp #'g' + beq @5 + + cmp #'d' + beq @6 + + bra @1 + +@2: + jmp PrintRegs +@1: + LoadW r0, syntaxError + jsr PutString + clc + rts +@3: + jmp PrintBreakpoints +@4: + LoadW r0, promptBuf + LoadW r1, setbCommand + jsr StrBeginsWith + bne @1 + + clc + tya + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + jsr EvalAddrExpr + bcs @1 + + jsr SetBreakpoint + + clc + rts +@5: + sec + rts + +@6: + ldy promptLen + cpy #1 + beq @6c + LoadW r0, promptBuf + clc + lda #1 + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + jsr EvalAddrExpr + bcs @6c + MoveW r1, u_cl + +@6c: + MoveW u_cl, r0 + + ldx #0 +@6b: + txa + pha + jsr DebugOpcode_Print + pla + tax + inx + cpx #20 + bne @6b + + MoveW r0, u_cl + + clc + rts + +PrintRegs: + LoadW r0, regsHeader + jsr PutString + + ldy stackPointer + lda #'$' + jsr PutChar + lda $104+STACK_OFFSET, y + jsr PrintByteHex + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + lda $103+STACK_OFFSET, y + jsr PrintByteHex + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + lda $102+STACK_OFFSET, y + jsr PrintByteHex + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + lda $101+STACK_OFFSET, y + jsr PrintByteHex + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + lda $107+STACK_OFFSET, y + jsr PrintByteHex + lda $106+STACK_OFFSET, y + jsr PrintByteHex + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + lda stackPointer + jsr PrintByteHex + lda #' ' + jsr PutChar + + lda $105+STACK_OFFSET, y + jsr PrintByteBin + lda #' ' + jsr PutChar + + lda $01 + jsr PrintByteBin + lda #' ' + jsr PutChar + + lda #13 + jsr PutChar + + clc + rts + +PrintByteHex: + pha + lsr + lsr + lsr + lsr + jsr @3 + pla + and #$0F + +@3: + cmp #10 + bcc @1 + clc + adc #($41-10) + bra @2 +@1: + clc + adc #$30 +@2: + jsr PutChar + rts + +PrintByteBin: + + ldy #0 +@1: + asl + pha + lda #'0' + bcc @2 + lda #'1' +@2: + jsr PutChar + pla + iny + cpy #8 + bne @1 + + rts + +PrintBreakpoints: + + ldy #0 +@2: + lda breakList, y + ora breakList+1,y + beq @1 + + lda breakList+1, y + jsr PrintByteHex + lda breakList, y + jsr PrintByteHex + + lda #13 + jsr PutChar + +@1: + iny + iny + cpy #16 + bne @2 + + clc + rts + +regsHeader: + .byte "Acc X Y Z PC SP NV-BDIZC MemMap", 13, 0 + +EnterConsole: + ; clear color all on any entry for now +.if 1 + LDA #<$f800 + STA r0L + LDA #>$f800 + STA r0H + LDA #<1 + STA r1L + LDA #>1 + STA r1H + + LDX #8 + LDZ #$00 + LDA #1 +colloop: + + NOP + STA (r0),Z + INZ + Bne colloop + inc r0H + dex + bne colloop + ;inc r1L + ;ldy r1L + ;cpy #$40 + ;bne colloop +.endif + + CmpWI consoleBufAddr, $0800 + bne @do + rts +@do: + ; video ram @ 0800, chargen @1800 + MoveB $d018, saveD018 + lda #$26 + sta $d018 + + ;; Set DDR on CIA2 for IEC bus, VIC-II banking + MoveB $DD00, saveDD00 + lda $DD00 + and #%11111100 + ora #%00000011 ; bank in $0000-$4000 + sta $DD00 + + ;; Set up default IO values (Compute's Mapping the 64 p215) + MoveB $d011, saveD011 + lda #$1b ; Enable text mode + sta $d011 + MoveB $d016, saveD016 + lda #$c8 ; 40 column etc + sta $d016 + + MoveB $d031, saveD031 + lda #%11000000 + sta $d031 + + ;; Compute's Mapping the 64, p156 + ;; We use a different colour scheme of white text on all blue + + MoveB $d020, saveD020 + MoveB $d021, saveD021 + lda #$06 + sta $D020 + sta $D021 + + ;; Turn off sprites + ;; (observed hanging around after running programs and resetting) + MoveB $d015, saveD015 + lda #$00 + sta $D015 + + jsr SwapConsoleBuf + LoadW consoleBufAddr, $0800 + + rts + +ExitConsole: + + CmpWI consoleBufAddr, $0800 + beq @do + rts +@do: + + MoveB saveD011, $d011 + MoveB saveD018, $d018 + MoveB saveDD00, $dd00 + MoveB saveD016, $d016 + MoveB saveD031, $d031 + MoveB saveD020, $d020 + MoveB saveD021, $d021 + MoveB saveD015, $d015 + + jsr SwapConsoleBuf + LoadW consoleBufAddr, consoleBuf + rts + +SwapConsoleBuf: + LoadW r2, consoleBuf + LoadW r3, $0800 + ldx #0 +@2: + ldy #0 +@1: + lda (r3), y + taz + lda (r2), y + sta (r3), y + tza + sta (r2), y + iny + cpy consoleCols + bcc @1 + lda r2L + clc + adc consoleCols + sta r2L + lda r2H + adc #0 + sta r2H + lda r3L + clc + adc consoleCols + sta r3L + lda r3H + adc #0 + sta r3H + inx + cpx consoleLines + bcc @2 + rts + +StrBeginsWith: + ldy #0 +@2: + lda (r1),y + beq @1 + cmp (r0),y + bne @1 + iny + bne @2 +@1: + rts + +EvalAddrExpr: + ldy #0 +@2: + lda (r0),y + beq @1 + cmp #' ' + bne @3 + iny + bra @2 +@3: + cmp #'$' + bne @1 + + iny + jsr EvalHexWord + bcs @1 + lda (r0), y + bne @1 + clc + rts + +@1: + jsr PutChar + sec + rts + +EvalHexWord: + LoadW r1, 0 +@2: + lda (r0), y + beq @5 + cmp #$30 + bcc @1 + cmp #$3a + bcs @3 + sec + sbc #$30 +@4: + and #%00001111 + tax + asl r1L + rol r1H + asl r1L + rol r1H + asl r1L + rol r1H + asl r1L + rol r1H + txa + ora r1L + sta r1L + iny + bra @2 +@3: + cmp #'A' + bcc @1 + cmp #'G' + bcs @1 + sec + sbc #'A'-10 + bra @4 +@5: + clc + rts +@1: + sec + rts + +SetBreakpoint: + ldy #0 + lda (r1),y + tax +@2: + lda breakList,y + ora breakList+1,y + beq @1 + iny + iny + cpy #16 + bne @2 + clc + rts +@1: + lda r1L + sta breakList,y + lda r1H + sta breakList+1,y + tya + lsr + tay + txa + sta breakOpList, y + ldy #0 + tya + sta (r1), y + clc + rts + +RestorePCBreakpoint: + + ldy stackPointer + lda $106+STACK_OFFSET,y + sta r1L + lda $107+STACK_OFFSET,y + sta r1H + + ldy #0 +@2: + lda breakList,y + cmp r1L + bne @3 + lda breakList+1,y + cmp r1H + bne @3 + + ; hit + tya + lsr + tay + lda breakOpList, y + ldy #0 + sta (r1), y + + rts + +@3: + iny + iny + cpy #16 + bne @2 + rts + +syntaxError: + .byte "Syntax Error!", 13, 0 +setbCommand: + .byte "setb", 0 + .byte "superdebugger!" +foundAndSet: + .byte "found and set", 13, 0 + +INDX = 1 +ZP = 2 +IMM = 3 +ZPX = 4 +ZPY = 5 +IDSP = 6 +IND = 7 +ABSX = 8 +ABSY = 9 +WREL = 10 +INDZ = 11 +INDY = 12 +ABS = 13 +BREL = 14 +WINDX = 15 + +OpcodeLength: + .byte 1 + .byte 2 ;INDX = 1 + .byte 2 ;ZP = 2 + .byte 2 ;IMM = 3 + .byte 2 ;ZPX = 4 + .byte 2 ;ZPY = 5 + .byte 2 ;IDSP = 6 + .byte 3 ;IND = 7 + .byte 3 ;ABSX = 8 + .byte 3 ;ABSY = 9 + .byte 3 ;WREL = 10 + .byte 2 ;INDZ = 11 + .byte 2 ;INDY = 12 + .byte 3 ;ABS = 13 + .byte 2 ;BREL = 14 + .byte 3 ;WINDX = 15 + +; in: A = opcode +; out: A = len +DebugOpcode_GetLen: + + ldy #0 + sty r1H + + asl + rol r1H + asl + rol r1H + sta r1L + + clc + lda #Opcodes + adc r1H + sta r1H + + ldx #1 + + ldy #3 + lda (r1), y + + tax + lda OpcodeLength,x + + rts + +; in: r0 - address of opcode +; out: r0 - point to next opcode +DebugOpcode_Print: + + lda #'$' + jsr PutChar + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + lda #' ' + jsr PutChar + + LoadB r2H,0 + + ldy #0 + lda (r0), Y + iny + pha + + + asl + rol r2H + asl + rol r2H + sta r2L + + clc + lda #Opcodes + adc r2H + sta r2H + + ldy #0 + lda (r2), y + jsr PutChar + + ldy #1 + lda (r2), y + jsr PutChar + + ldy #2 + lda (r2), y + jsr PutChar + + lda #' ' + jsr PutChar + + + ldy #3 + lda (r2), Y + cmp #0 + bne @1 + + jmp @done +@1: + cmp #ABS + bne @2 + + lda #'$' + jsr PutChar + + ldy #2 + lda (r0), Y + jsr PrintByteHex + + ldy #1 + lda (r0), Y + jsr PrintByteHex + + jmp @done +@2: + cmp #IMM + bne @3 + + lda #'#' + jsr PutChar + lda #'$' + jsr PutChar + ldy #1 + lda (r0), Y + jsr PrintByteHex + jmp @done +@3: + cmp #ZP + bne @4 + + lda #'$' + jsr PutChar + + ldy #1 + lda (r0), Y + jsr PrintByteHex + + jmp @done + +@4: + cmp #ZPX + bne @5 + + lda #'$' + jsr PutChar + + ldy #1 + lda (r0), Y + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'X' + jsr PutChar + + bra @done + +@5: + cmp #ZPY + bne @6 + + lda #'$' + jsr PutChar + + ldy #1 + lda (r0), Y + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'Y' + jsr PutChar + + bra @done +@6: + cmp #ABSY + bne @7 + + lda #'$' + jsr PutChar + + ldy #2 + lda (r0), Y + jsr PrintByteHex + + ldy #1 + lda (r0), Y + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'Y' + jsr PutChar + + bra @done + +@7: + cmp #ABSX + bne @done + + lda #'$' + jsr PutChar + + ldy #2 + lda (r0), Y + jsr PrintByteHex + + ldy #1 + lda (r0), Y + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'X' + jsr PutChar + + bra @done + +@done: + lda #13 + jsr PutChar + + pla + jsr DebugOpcode_GetLen + + clc + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + rts + +Opcodes: + .byte "BRK", 0 + .byte "ORA", INDX + .byte "CLE", 0 + .byte "SEE", 0 + .byte "TSB", ZP + .byte "ORA", ZP + .byte "ASL", ZP + .byte "RMB", ZP ; RMB0 + .byte "PHP", 0 + .byte "ORA", IMM + .byte "ASL", 0 + .byte "TSY", 0 + .byte "TSB", ABS + .byte "ORA", ABS + .byte "ASL", ABS + .byte "BBR", ZP ; BBR0 + + .byte "BPL", BREL + .byte "ORA", INDY + .byte "ORA", INDZ + .byte "BPL", WREL + .byte "TRB", ZPX + .byte "ORA", ZPX + .byte "ASL", ZPX + .byte "RMB", ZP ; RMB1 + .byte "CLC", 0 + .byte "ORA", ABSY + .byte "INC", 0 + .byte "INZ", 0 + .byte "TRB", ABS + .byte "ORA", ABSX + .byte "ASL", ABSX + .byte "BBR", ZP ; BBR1 + + .byte "JSR", ABS + .byte "AND", INDX + .byte "JSR", IND + .byte "JSR", WINDX + .byte "BIT", ZP + .byte "AND", ZP + .byte "ROL", ZP + .byte "RMB", ZP ; RMB2 + .byte "PLP", 0 + .byte "AND", IMM + .byte "ROL", 0 + .byte "TYS", 0 + .byte "BIT", ABS + .byte "AND", ABS + .byte "ROL", ABS + .byte "BBR", ZP ; BBR2 + + .byte "BMI", BREL + .byte "AND", INDY + .byte "AND", INDZ + .byte "BMI", WREL + .byte "BIT", ZPX + .byte "AND", ZPX + .byte "ROL", ZPX + .byte "RMB", ZP ; RMB3 + .byte "SEC", 0 + .byte "AND", ABSY + .byte "DEC", 0 + .byte "DEZ", 0 + .byte "BIT", ABSX + .byte "AND", ABSX + .byte "ROL", ABSX + .byte "BBR", ZP ; BBR3 + + .byte "RTI", 0 + .byte "EOR", INDX + .byte "NEG", 0 + .byte "ASR", 0 + .byte "ASR", ZP + .byte "EOR", ZP + .byte "LSR", ZP + .byte "RMB", ZP ; RMB4 + .byte "PHA", 0 + .byte "EOR", IMM + .byte "LSR", 0 + .byte "TAZ", 0 + .byte "JMP", ABS + .byte "EOR", ABS + .byte "LSR", ABS + .byte "BBR", ZP ; BBR4 + + .byte "BVC", BREL + .byte "EOR", INDY + .byte "EOR", INDZ + .byte "BVC", WREL + .byte "ASR", ZPX + .byte "EOR", ZPX + .byte "LSR", ZPX + .byte "RMB", ZP ; RMB5 + .byte "CLI", 0 + .byte "EOR", ABSY + .byte "PHY", 0 + .byte "TAB", 0 + .byte "MAP", 0 + .byte "EOR", ABSX + .byte "LSR", ABSX + .byte "BBR", ZP ; BBR5 + + .byte "RTS", 0 + .byte "ADC", INDX + .byte "RTN", 0 + .byte "BSR", WREL + .byte "STZ", ZP + .byte "ADC", ZP + .byte "ROR", ZP + .byte "RMB", ZP ; RMB6 + .byte "PLA", 0 + .byte "ADC", IMM + .byte "ROR", 0 + .byte "TZA", 0 + .byte "JMP", IND + .byte "ADC", ABS + .byte "ROR", ABS + .byte "BBR", ZP ;BBR6 + + .byte "BVS", BREL + .byte "ADC", INDY + .byte "ADC", INDZ + .byte "BVS", WREL + .byte "STZ", ZPX + .byte "ADC", ZPX + .byte "ROR", ZPX + .byte "RMB", ZP ; RMB7 + .byte "SEI", 0 + .byte "ADC", ABSY + .byte "PLY", ABSY + .byte "TBA", ABSY + .byte "JMP", WINDX + .byte "ADC", ABSX + .byte "ROR", ABSX + .byte "BBR", ZP ; BBR7 + + .byte "BRU", BREL + .byte "STA", INDX + .byte "STA", IDSP + .byte "BRU", WREL + .byte "STY", ZP + .byte "STA", ZP + .byte "STX", ZP + .byte "SMB", ZP ;SMB0 + .byte "DEY", 0 + .byte "BIT", IMM + .byte "TXA", 0 + .byte "STY", ABSX + .byte "STY", ABS + .byte "STA", ABS + .byte "STX", ABS + .byte "BBS", ZP ;BBS0 + + .byte "BCC", BREL + .byte "STA", INDY + .byte "STA", INDZ + .byte "BCC", WREL + .byte "STY", ZPX + .byte "STA", ZPX + .byte "STX", ZPY + .byte "SMB", ZP ;SMB1 + .byte "TYA", 0 + .byte "STA", ABSY + .byte "TXS", 0 + .byte "STX", ABSY + .byte "STZ", ABS + .byte "STA", ABSX + .byte "STZ", ABSX + .byte "BBS", ZP ;BBS1 + + .byte "LDY", IMM + .byte "LDA", INDX + .byte "LDX", IMM + .byte "LDZ", IMM + .byte "LDY", ZP + .byte "LDA", ZP + .byte "LDX", ZP + .byte "SMB", ZP ; SMB2 + .byte "TAY", 0 + .byte "LDA", IMM + .byte "TAX", 0 + .byte "LDZ", ABS + .byte "LDY", ABS + .byte "LDA", ABS + .byte "LDX", ABS + .byte "BBS", ZP ; BBS2 + + .byte "BCS", BREL + .byte "LDA", INDY + .byte "LDA", INDZ + .byte "BCS", WREL + .byte "LDY", ZPX + .byte "LDA", ZPX + .byte "LDX", ZPY + .byte "SMB", ZP ; SMB3 + .byte "CLV", 0 + .byte "LDA", ABSY + .byte "TSX", 0 + .byte "LDZ", ABSX + .byte "LDY", ABSX + .byte "LDA", ABSX + .byte "LDX", ABSY + .byte "BBS", ZP ; BBS3 + + .byte "CPY", IMM + .byte "CMP", INDX + .byte "CPZ", IMM + .byte "DEW", ZP + .byte "CPY", ZP + .byte "CMP", ZP + .byte "DEC", ZP + .byte "SMB", ZP ; SMB4 + .byte "INY", 0 + .byte "CMP", IMM + .byte "DEX", 0 + .byte "ASW", ABS + .byte "CPY", ABS + .byte "CMP", ABS + .byte "DEC", ABS + .byte "BBS", ZP ; BBS4 + + .byte "BNE", BREL + .byte "CMP", INDY + .byte "CMP", INDZ + .byte "BNE", WREL + .byte "CPZ", ZP + .byte "CMP", ZPX + .byte "DEC", ZPX + .byte "SMB", ZP ; SMB5 + .byte "CLD", 0 + .byte "CMP", ABSY + .byte "PHX", 0 + .byte "PHZ", 0 + .byte "CPZ", ABS + .byte "CMP", ABSX + .byte "DEC", ABSX + .byte "BBS", ZP ;BBS5 + + .byte "CPX", IMM + .byte "SBC", INDX + .byte "LDA", IDSP + .byte "INW", ZP + .byte "CPX", ZP + .byte "SBC", ZP + .byte "INC", ZP + .byte "SMB", ZP ; SMB6 + .byte "INX", 0 + .byte "SBC", IMM + .byte "EOM", 0 ; NOP + .byte "ROW", ABS + .byte "CPX", ABS + .byte "SBC", ABS + .byte "INC", ABS + .byte "BBS", ZP ; BBS6 + + .byte "BEQ", BREL + .byte "SBC", INDY + .byte "SBC", INDZ + .byte "BEQ", WREL + .byte "PHD", IMM + .byte "SBC", ZPX + .byte "INC", ZPX + .byte "SMB", ZP ; SMB7 + .byte "SED", 0 + .byte "SBC", ABSY + .byte "PLX", 0 + .byte "PLZ", 0 + .byte "PHD", ABS + .byte "SBC", ABSX + .byte "INC", ABSX + .byte "BBS", ZP ; BBS7 diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index a1727c45..9d034869 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -1,6 +1,7 @@ MEMORY { START: start = $5000, size = $1000, fill = yes, file = %O; - PADDING1: start = $6000, size = $3D80, fill = yes, file = %O; + DEBUG: start = $6000, size = $2000, fill = yes, file = %O; + PADDING1: start = $8000, size = $1D80, fill = yes, file = %O; LOKERNAL: start = $9D80, size = $0280, fill = yes, file = %O; #PADDING2: start = $A000, size = $1F40, fill = yes, file = %O; #ICONS: start = $BF40, size = $00C0, fill = yes, file = %O; @@ -18,6 +19,8 @@ SEGMENTS { start: load = START, type = ro; ramexp1: load = START, type = ro; + debug: load = DEBUG, type = ro; + # lokernal: $9D80-$9FFF files1a2a: load = LOKERNAL, type = ro; files1a2b: load = LOKERNAL, type = ro; diff --git a/kernal/mainloop/mainloop2.s b/kernal/mainloop/mainloop2.s index 58972030..c963acdb 100644 --- a/kernal/mainloop/mainloop2.s +++ b/kernal/mainloop/mainloop2.s @@ -13,16 +13,24 @@ .import _MainLoop .global _MainLoop2 +.global _MapLow .segment "mainloop2" .if (!.defined(wheels)) && (!.defined(bsw128)) _MainLoop2: - START_IO_X - lda grcntrl1 - and #%01111111 - ;sta grcntrl1 - END_IO_X +; START_IO_X +; lda grcntrl1 +; and #%01111111 +; ;sta grcntrl1 +; END_IO_X + + ; map $50000-$52000 to $06000 + ; x = bank, a=offset + ldx #$02 + lda #$50 + jsr _MapLow + jmp _MainLoop .endif diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index f8c54cbc..efddbca4 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -15,6 +15,9 @@ .import Ddec .import EnterDeskTop .import UnmapUnderlay +.import DebugMain +.import _MapLow +.import tempIRQAcc ; syscall .global _Panic @@ -100,6 +103,46 @@ StackPtr: ; Return: does not return ;--------------------------------------------------------------- _Panic: +.ifdef debugger + + pha ; flags + lda tempIRQAcc + pha + txa + pha + tya + pha + tza + pha + + lda lowMap + pha + lda lowMapBnk + pha + + lda #$00 + tax + jsr _MapLow + + ; unmap to $6000 + jsr DebugMain + + pla + tax + pla + jsr _MapLow + + pla + taz + pla + tay + pla + tax + pla + + rti + +.else inc $d020 bra _Panic .ifdef wheels @@ -182,6 +225,7 @@ _PanicDB_DT: .byte DBSYSOPV .endif .byte NULL +.endif .segment "panic3" diff --git a/kernal/start/start64.s b/kernal/start/start64.s index d3790708..7d56f401 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -49,6 +49,10 @@ .import UnmapUnderlay .endif +.ifdef debugger +.global _DebugStart +.endif + .segment "start" ; The original version of GEOS 2.0 has purgeable init code @@ -135,9 +139,13 @@ ASSERT_NOT_BELOW_IO sta year,y dey bpl @6 - ; jsr FirstInit + +.ifdef debugger +_DebugStart: + brk +.endif jsr MouseInit lda #currentInterleave sta interleave diff --git a/loader/loader.s b/loader/loader.s index 4db068a6..37c712fc 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -35,6 +35,7 @@ next: .WORD 0 .CODE .PROC main + SEI CLD LDA #0 @@ -80,6 +81,8 @@ next: .WORD 0 STA 0 LDA #$37 STA 1 + + ; Various VIC register stuffs STZ $D030 ; turn ROM mappings / etc OFF STZ $D031 @@ -89,8 +92,9 @@ next: .WORD 0 lda #$80 sta $d06f - LDA #$00 - sta $D710 +; not working with xemu +; LDA #$00 +; sta $D710 LDA $D054 ;40 mhz ORA #$40 @@ -98,6 +102,7 @@ next: .WORD 0 lda #$40 sta $d031 + ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour ; information for bitmap mode. ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), From 5b3eaf991925e4217f9a1591d2c56e67edf46c8d Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 28 Sep 2019 12:05:19 +0200 Subject: [PATCH 056/125] Added basic debugger functionality. Fixed some of the video mapping bugs, made GEOPAINT working. --- Makefile | 5 +- inc/kernal.inc | 1 + kernal/c65/map.s | 6 +- kernal/debug/main.s | 479 ++++++++++++++++++++++++++++++++++-- kernal/graph/point.s | 2 +- kernal/graph/scanline.s | 8 +- kernal/mainloop/mainloop2.s | 16 +- kernal/panic/panic.s | 6 + kernal/start/start64.s | 9 +- 9 files changed, 492 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index eefd22ca..d99b9272 100755 --- a/Makefile +++ b/Makefile @@ -1,8 +1,9 @@ VARIANT ?= mega65 DRIVE ?= drvf011 -INPUT ?= megaphn -\INPUT ?= mse1531 +#INPUT ?= megaphn +#INPUT ?= mse1531 +INPUT ?= joydrv AS = ca65 LD = ld65 diff --git a/inc/kernal.inc b/inc/kernal.inc index e7c05797..ac174875 100644 --- a/inc/kernal.inc +++ b/inc/kernal.inc @@ -142,6 +142,7 @@ highMap = $8898 highMapBnk = $8893 lastHighMap = $8899 countHighMap = $8894 +lastHighMapBnk = $889A uncompactedY0 = $888D uncompactedY1 = $888E diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 3ea49e55..62f5d196 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -345,6 +345,8 @@ MapUnderlay: bne @1 lda highMap sta lastHighMap + lda highMapBnk + sta lastHighMapBnk lda #0 ldx #0 jsr _MapHigh @@ -374,11 +376,9 @@ UnmapUnderlay: tza pha dec countHighMap - lda countHighMap - cmp #0 bne @1 lda lastHighMap - ldx #0 + ldx lastHighMapBnk jsr _MapHigh lda #0 sta lastHighMap diff --git a/kernal/debug/main.s b/kernal/debug/main.s index 8db22ff7..ac0179fc 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -67,6 +67,8 @@ saveD021: .byte 0 saveD015: .byte 0 +saveR0: + .word 0 u_cl: .word 0 @@ -104,19 +106,37 @@ DebugMain: sta $107+STACK_OFFSET,y sta u_cl+1 + PushB CPU_DATA + LoadB CPU_DATA, IO_IN + PushW r0 + MoveW r0, saveR0 PushW r1 PushW r2 PushW r3 + jsr ResetSingleStep + jsr UpdatePCBreakpoint + + lda initialized + bne @2 + LoadB initialized, $FF jsr ClearConsole LoadW r0, welcome jsr PutString +@2: + ;jsr PrintRegs - jsr PrintRegs + ldy stackPointer + lda $107+STACK_OFFSET, y + sta r0H + lda $106+STACK_OFFSET, y + sta r0L + jsr DebugOpcode_Print @HOHO: LoadW r0, promptBuf + LoadB promptLen, 0 ldx #100 jsr Prompt @@ -137,11 +157,13 @@ DebugMain: PopW r1 PopW r0 + PopB CPU_DATA + MoveW saveIRQ_VECTOR, IRQ_VECTOR rts -welcome: .byte "SuperDebugger V6.0",13,"Copyright (C) 2019 blueway.Softworks", 13, 13, 0 +welcome: .byte "SuperDebugger V6.0",13,"(C) 2019", 13, 13, 0 ClearConsole: ldx #0 @@ -345,7 +367,6 @@ HandleScroll: Prompt: lda #'>' jsr PutChar - jsr EnterConsole MoveB promptLen, promptLenOld @@ -472,9 +493,111 @@ UpdateCursor: @1: rts +ProcessTrace: + + LoadW r0, trace + jsr PutString + + jsr ResetSingleStep + + ; calc next break address + ; move PC to r1 + ldy stackPointer + lda $107+STACK_OFFSET, y + sta r0H + lda $106+STACK_OFFSET, y + sta r0L + + ldy #0 + ;lda (r0), y ; get opcode at PC + jsr GetByte + + ; special opcode handling for single step + cmp #$4C ; JMP + bne @1 + + ldy #1 + lda (r0), y ; get jmp address low + tax + iny + lda (r0), y ; get jmp address high + sta r0H + stx r0L + + bra @2 + +@1: + jsr DebugOpcode_GetLen + + clc + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H +@2: + MoveW r0, r1 + + + jsr SetupSingleStep + + sec + rts + + +; pass: r1 address to break next +SetupSingleStep: + + ldy #0 + lda (r1),y + tax + ldy #18 + lda r1L + sta breakList,y + lda r1H + sta breakList+1,y + tya + lsr + tay + txa + sta breakOpList, y + ldy #0 + tya + sta (r1), y + rts + +ResetSingleStep: + ldy #18 + lda breakList,y + ora breakList+1,y + beq @1 + + lda breakList,y + sta r1L + lda breakList+1,y + sta r1H + + tya + lsr + tay + lda breakOpList, y + ldy #0 + sta (r1), y + + tya + ldy #18 + sta breakList,y + sta breakList+1,y + +@1: + rts + + ProcessPrompt: ldy promptLen + lda #0 + sta promptBuf, y cpy #1 bcc @1 @@ -495,9 +618,20 @@ ProcessPrompt: beq @5 cmp #'d' - beq @6 - - bra @1 + bne @6d + jmp @6 +@6d: + cmp #'D' + bne @8 + jmp ProcessDump +@8: + cmp #'t' + bne @7 + jmp ProcessTrace +@7: + cmp #'m' + bne @1 + jmp ProcessMap @2: jmp PrintRegs @@ -509,6 +643,11 @@ ProcessPrompt: @3: jmp PrintBreakpoints @4: + LoadW r0, promptBuf + LoadW r1, stackCommand + jsr StrBeginsWith + beq @4b + LoadW r0, promptBuf LoadW r1, setbCommand jsr StrBeginsWith @@ -532,7 +671,25 @@ ProcessPrompt: @5: sec rts +@4b: + LoadW r0, currentStack + jsr PutString + ldx #0 + ldy stackPointer + tya + clc + adc #6+STACK_OFFSET + tay +@4c: + jsr DumpStackFromOffset + iny + inx + cpx #20 + bne @4c + + clc + rts @6: ldy promptLen cpy #1 @@ -569,6 +726,103 @@ ProcessPrompt: clc rts +DumpStackFromOffset: + txa + pha + tya + pha + LoadB r0H, $01 + sty r0L + lda #'$' + jsr PutChar + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + lda #' ' + jsr PutChar + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + ldy #0 + lda (r0), y + jsr PrintByteHex + + lda #' ' + jsr PutChar + + lda #'$' + jsr PutChar + ldy #1 + lda (r0), y + jsr PrintByteHex + ldy #0 + lda (r0), y + jsr PrintByteHex + + + lda #13 + jsr PutChar + pla + tay + pla + tax + rts + +ProcessDump: + ldy promptLen + cpy #1 + beq @6c + LoadW r0, promptBuf + clc + lda #1 + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + jsr EvalAddrExpr + bcs @6c + MoveW r1, u_cl +@6c: + MoveW u_cl, r0 + + lda #'$' + jsr PutChar + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + lda #' ' + jsr PutChar + + ldx #0 +@6b: + txa + pha + tay + ;lda (r0), y + jsr GetByte + jsr PrintByteHex + lda #' ' + jsr PutChar + pla + tax + inx + cpx #20 + bne @6b + + lda #13 + jsr PutChar + + MoveW r0, u_cl + + clc + rts + PrintRegs: LoadW r0, regsHeader jsr PutString @@ -870,7 +1124,6 @@ EvalAddrExpr: rts @1: - jsr PutChar sec rts @@ -880,7 +1133,9 @@ EvalHexWord: lda (r0), y beq @5 cmp #$30 + beq @7 bcc @1 +@7: cmp #$3a bcs @3 sec @@ -980,11 +1235,46 @@ RestorePCBreakpoint: bne @2 rts +UpdatePCBreakpoint: + + ldx #0 +@2: + lda breakList,x + ora breakList+1,x + beq @1 + + lda breakList,x + sta r1L + lda breakList+1,x + sta r1H + + ldy #0 + tya + sta (r1), y + +@1: + inx + inx + cpx #16 + bne @2 + rts + +trace: + .byte "Trace!", 13, 0 + syntaxError: .byte "Syntax Error!", 13, 0 +currentStack: + .byte "Current Stack:", 13, "addr byte word return address", 13, 0 +lowMapLabel: + .byte "Low map: ", 0 +highMapLabel: + .byte "High map: ", 0 setbCommand: .byte "setb", 0 - .byte "superdebugger!" +stackCommand: + .byte "stack", 0 + .byte "sup!" foundAndSet: .byte "found and set", 13, 0 @@ -1056,7 +1346,6 @@ DebugOpcode_GetLen: ; in: r0 - address of opcode ; out: r0 - point to next opcode DebugOpcode_Print: - lda #'$' jsr PutChar lda r0H @@ -1069,7 +1358,8 @@ DebugOpcode_Print: LoadB r2H,0 ldy #0 - lda (r0), Y + ;lda (r0), Y + jsr GetByte iny pha @@ -1118,11 +1408,13 @@ DebugOpcode_Print: jsr PutChar ldy #2 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex jmp @done @@ -1135,7 +1427,8 @@ DebugOpcode_Print: lda #'$' jsr PutChar ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex jmp @done @3: @@ -1146,7 +1439,8 @@ DebugOpcode_Print: jsr PutChar ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex jmp @done @@ -1159,7 +1453,8 @@ DebugOpcode_Print: jsr PutChar ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex lda #',' jsr PutChar @@ -1176,7 +1471,8 @@ DebugOpcode_Print: jsr PutChar ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex lda #',' jsr PutChar @@ -1192,11 +1488,13 @@ DebugOpcode_Print: jsr PutChar ldy #2 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex lda #',' jsr PutChar @@ -1213,11 +1511,13 @@ DebugOpcode_Print: jsr PutChar ldy #2 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex ldy #1 - lda (r0), Y + ;lda (r0), Y + jsr GetByte jsr PrintByteHex lda #',' jsr PutChar @@ -1239,9 +1539,83 @@ DebugOpcode_Print: lda r0H adc #0 sta r0H - rts +GetByte: + PushW r0 + clc + tya + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + CmpWI r0, r0 + bne @a1 + lda saveR0 + bra @3 +@a1: + CmpWI r0, r0+1 + bne @a2 + lda saveR0+1 + bra @3 +@a2: + + CmpWI r0, $800 + bcc @a3 + CmpWI r0, $800+80*25 + beq @a3 + bcs @a3 + + SubVW $800, r0 + lda #consoleBuf + adc r0H + sta r0H + ldy #0 + lda (r0), y + bra @3 +@a3: + ; check mapped area $6000-$7FFF + + + ldy #0 +@2: + lda breakList, y + ora breakList+1,y + beq @1 + + lda breakList+1, y + cmp r0H + bne @1 + lda breakList, y + cmp r0L + bne @1 + + tya + lsr + tay + lda breakOpList, Y + bra @3 + +@1: + iny + iny + cpy #16 + bne @2 + + ldy #0 + lda (r0), Y +@3: + tay + PopW r0 + tya + rts + Opcodes: .byte "BRK", 0 .byte "ORA", INDX @@ -1514,3 +1888,66 @@ Opcodes: .byte "SBC", ABSX .byte "INC", ABSX .byte "BBS", ZP ; BBS7 + +ProcessMap: + LoadW r0, lowMapLabel + jsr PutString + + ldy stackPointer + lda $101+STACK_OFFSET-2, y + sta r0H + + + ldy stackPointer + lda $102+STACK_OFFSET-2, y + sta r0L + + lda #$60 + jsr @1 + + LoadW r0, highMapLabel + jsr PutString + + MoveB highMapBnk, r0H + MoveB highMap, r0L + lda #$A0 + +@1: + pha + lda r0H + jsr PrintByteHex + + lda #' ' + jsr PutChar + + lda r0L + jsr PrintByteHex + + lda #' ' + jsr PutChar + + asl r0L + rol r0H + + pla + clc + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + lda #'$' + jsr PutChar + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + lda #0 + jsr PrintByteHex + + lda #13 + jsr PutChar + + clc + rts diff --git a/kernal/graph/point.s b/kernal/graph/point.s index 69f44ce1..06fba249 100644 --- a/kernal/graph/point.s +++ b/kernal/graph/point.s @@ -281,7 +281,7 @@ _DrawLine: MoveW r14, r11 bra @5 @4: CmpW r11, r14 - bcc @5 + bcs @5 LoadW r13, 1 @5: jsr @99 plp diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index d0e0df14..59bbcd89 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -242,15 +242,15 @@ _GetScanLine: bne @X2___ and #%11100000 @X2___: - add #$00 + add #$c0 bcc @Y2__ - clc + sec ror - ldx #1 + ldx #0 bra @Y1__ @Y2__: - sec + clc ror ldx #0 @Y1__: diff --git a/kernal/mainloop/mainloop2.s b/kernal/mainloop/mainloop2.s index c963acdb..4c170520 100644 --- a/kernal/mainloop/mainloop2.s +++ b/kernal/mainloop/mainloop2.s @@ -19,17 +19,17 @@ .if (!.defined(wheels)) && (!.defined(bsw128)) _MainLoop2: -; START_IO_X -; lda grcntrl1 -; and #%01111111 -; ;sta grcntrl1 -; END_IO_X + ;START_IO_X + ;lda grcntrl1 + ;and #%01111111 + ;sta grcntrl1 + ;END_IO_X ; map $50000-$52000 to $06000 ; x = bank, a=offset - ldx #$02 - lda #$50 - jsr _MapLow + ;ldx #$02 + ;lda #$50 + ;jsr _MapLow jmp _MainLoop .endif diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index efddbca4..e300c985 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -102,9 +102,15 @@ StackPtr: ; Pass: nothing ; Return: does not return ;--------------------------------------------------------------- + .byte 0, 0, 0, 0, 0, 0, 0, 0 + .byte 0, 0, 0, 0, 0, 0, 0, 0 + .byte 0, 0, 0, 0, 0, 0, 0, 0 + .byte 0, 0, 0, 0, 0, 0, 0, 0 + _Panic: .ifdef debugger + pha ; flags lda tempIRQAcc pha diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 7d56f401..79868227 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -47,6 +47,7 @@ .import InitScanLineTab .import MapUnderlay .import UnmapUnderlay +.import _MapLow .endif .ifdef debugger @@ -142,6 +143,11 @@ ASSERT_NOT_BELOW_IO ; jsr FirstInit + ; start with bank $6000-$8000 swapped out so we prevent debugger from beeing destroyed + ldx #$00 + lda #$60 + jsr _MapLow + .ifdef debugger _DebugStart: brk @@ -164,7 +170,8 @@ OrigResetHandle: sei cld .ifdef mega65 - lda #8|64 + lda #5|64 + ;lda #1|64 sta graphMode LoadW r5, 720 jsr InitScanLineTab From 07d7b10cf2fed28203fb00541c268367dbc46300 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 6 Oct 2019 10:07:58 +0200 Subject: [PATCH 057/125] Make debugger runnable on real MEGA65 hw. There are a lot of details issues that matter between XEMU and VHDL. --- kernal/debug/main.s | 171 +++++++++++++++++++++++++++++++------------- 1 file changed, 121 insertions(+), 50 deletions(-) diff --git a/kernal/debug/main.s b/kernal/debug/main.s index ac0179fc..8749ae65 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -69,6 +69,24 @@ saveD015: .byte 0 saveR0: .word 0 +saveD060: + .byte 0 +saveD061: + .byte 0 +saveD062: + .byte 0 +saveD063: + .byte 0 +saveD068: + .byte 0 +saveD069: + .byte 0 +saveD06A: + .byte 0 +saveD058: + .byte 0 +saveD05E: + .byte 0 u_cl: .word 0 @@ -86,13 +104,13 @@ consoleBuf: .endrep DebugMain: - ; on any entry? - tsx - stx stackPointer - - MoveW IRQ_VECTOR, saveIRQ_VECTOR - LoadW IRQ_VECTOR, IRQHandler - cli + ; on any entry? + tsx + stx stackPointer + + MoveW IRQ_VECTOR, saveIRQ_VECTOR + LoadW IRQ_VECTOR, IRQHandler + ; correct PC after BRK ldy stackPointer @@ -122,23 +140,23 @@ DebugMain: bne @2 LoadB initialized, $FF jsr ClearConsole + LoadW r0, welcome jsr PutString @2: ;jsr PrintRegs + ldy stackPointer lda $107+STACK_OFFSET, y sta r0H lda $106+STACK_OFFSET, y sta r0L jsr DebugOpcode_Print + cli @HOHO: - LoadW r0, promptBuf - LoadB promptLen, 0 - ldx #100 - jsr Prompt + jsr Prompt ; handle the entry jsr ProcessPrompt @@ -163,7 +181,7 @@ DebugMain: rts -welcome: .byte "SuperDebugger V6.0",13,"(C) 2019", 13, 13, 0 +welcome: .byte "SuperDebugger V6.0",13,"(C) 2019 blueway.Softworks", 13, 13, 0 ClearConsole: ldx #0 @@ -369,6 +387,7 @@ Prompt: jsr PutChar jsr EnterConsole + MoveB promptLen, promptLenOld LoadB promptLen, 0 @@ -427,46 +446,52 @@ GetKeyPress: ; wait to receive next key press from buffer jsr _GetNextChar - rts IRQHandler: - cld - pha + pha txa pha tya pha + PushB CPU_DATA + LoadB CPU_DATA, IO_IN ldx #0 @2: - lda r0,x + lda r0,x pha inx cpx #32 bne @2 - jsr _DoKeyboardScan - lda cursorCount - beq @7 - dec cursorCount -@7: + jsr _DoKeyboardScan + lda #1 + sta $D019 + + lda cursorCount + beq @7 + ldx #0 + dec cursorCount +@7: ldx #31 @6: - pla + pla sta r0,x dex bpl @6 - pla - tay - pla - tax - pla - rti + PopB CPU_DATA + pla + tay + pla + tax + pla + + rti CursorOn: LoadB cursorBlinks, $FF @@ -991,45 +1016,81 @@ colloop: bne @do rts @do: - ; video ram @ 0800, chargen @1800 - MoveB $d018, saveD018 - lda #$26 - sta $d018 - - ;; Set DDR on CIA2 for IEC bus, VIC-II banking - MoveB $DD00, saveDD00 - lda $DD00 - and #%11111100 - ora #%00000011 ; bank in $0000-$4000 - sta $DD00 + MoveB $D063, saveD063 + MoveB $D060, saveD060 + MoveB $D061, saveD061 + MoveB $D062, saveD062 + + LDA #<$0800 + STA $D060 + LDA #>$0800 + STA $D061 + LDA #<0 + STA $D062 + LDA #>0 + STA $D063 + + MoveB $D068, saveD068 + MoveB $D069, saveD069 + MoveB $D06A, saveD06A + + LDA #<$0800 + STA $D068 + LDA #>$0800 + STA $D069 + LDA #0 + STA $D06A + + MoveB $D058, saveD058 + MoveB $D05E, saveD05E + + LDA #80 + STA $D058 + STA $D05E + + ; video ram @ 0800, chargen @1800 + MoveB $d018, saveD018 + lda #$26 + sta $d018 + + ;; Set DDR on CIA2 for IEC bus, VIC-II banking + MoveB $DD00, saveDD00 + lda $DD00 + and #%11111100 + ora #%00000011 ; bank in $0000-$4000 + sta $DD00 ;; Set up default IO values (Compute's Mapping the 64 p215) - MoveB $d011, saveD011 + MoveB $d011, saveD011 lda #$1b ; Enable text mode sta $d011 - MoveB $d016, saveD016 + MoveB $d016, saveD016 lda #$c8 ; 40 column etc sta $d016 - - MoveB $d031, saveD031 - lda #%11000000 - sta $d031 + + MoveB $d031, saveD031 + lda #%11000000 + sta $d031 ;; Compute's Mapping the 64, p156 ;; We use a different colour scheme of white text on all blue - - MoveB $d020, saveD020 - MoveB $d021, saveD021 - lda #$06 + + MoveB $d020, saveD020 + MoveB $d021, saveD021 + lda #$06 sta $D020 sta $D021 ;; Turn off sprites ;; (observed hanging around after running programs and resetting) - MoveB $d015, saveD015 + MoveB $d015, saveD015 lda #$00 sta $D015 + lda $D05D + and #%01111111 + sta $D05D + jsr SwapConsoleBuf LoadW consoleBufAddr, $0800 @@ -1051,6 +1112,16 @@ ExitConsole: MoveB saveD021, $d021 MoveB saveD015, $d015 + MoveB saveD060, $D060 + MoveB saveD061, $D061 + MoveB saveD062, $D062 + MoveB saveD063, $D063 + MoveB saveD068, $D068 + MoveB saveD069, $D069 + MoveB saveD06A, $D06A + MoveB saveD058, $D058 + MoveB saveD05E, $D05E + jsr SwapConsoleBuf LoadW consoleBufAddr, consoleBuf rts From 7be492bad1d4639b5e51fd1760ef0601e6faa4b4 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 12 Oct 2019 05:32:56 +0200 Subject: [PATCH 058/125] More GEOS128 compatibility. --- Makefile | 2 +- kernal/debug/main.s | 79 ++++++++++++++++++++++++++++++++++++++-- kernal/graph/scanline.s | 45 ++++++++++++++++++++++- kernal/jumptab/jumptab.s | 4 +- kernal/kernal_mega65.cfg | 2 + kernal/panic/panic.s | 1 - kernal/serial/serial1.s | 3 +- kernal/start/start64.s | 2 +- loader/loader.s | 2 +- 9 files changed, 128 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index d99b9272..fa2047cb 100755 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ VARIANT ?= mega65 DRIVE ?= drvf011 #INPUT ?= megaphn #INPUT ?= mse1531 -INPUT ?= joydrv +INPUT ?= joydrv AS = ca65 LD = ld65 diff --git a/kernal/debug/main.s b/kernal/debug/main.s index 8749ae65..d4229bca 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -1532,7 +1532,7 @@ DebugOpcode_Print: lda #'X' jsr PutChar - bra @done + jmp @done @5: cmp #ZPY @@ -1550,7 +1550,7 @@ DebugOpcode_Print: lda #'Y' jsr PutChar - bra @done + jmp @done @6: cmp #ABSY bne @7 @@ -1572,11 +1572,11 @@ DebugOpcode_Print: lda #'Y' jsr PutChar - bra @done + jmp @done @7: cmp #ABSX - bne @done + bne @8 lda #'$' jsr PutChar @@ -1596,7 +1596,78 @@ DebugOpcode_Print: jsr PutChar bra @done +@8: + cmp #BREL + bne @9 + lda #'$' + jsr PutChar + + PushW r0 + + + ldy #1 + ;lda (r0), Y + jsr GetByte + pha + + clc + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + lda r0L + clc + adc #2 + sta r0L + lda r0H + adc #0 + sta r0H + pla + bpl @8a + dec r0H +@8a: + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + + PopW r0 + + bra @done + +@9: + ldy #'Y' + cmp #INDY + beq @9a + ldy #'X' + cmp #INDX + beq @9a + ldy #'Z' + cmp #INDZ + bne @10 +@9a: + tya + pha + lda #'(' + jsr PutChar + lda #'$' + jsr PutChar + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + lda #')' + jsr PutChar + lda #',' + jsr PutChar + pla + jsr PutChar + bra @done +@10: @done: lda #13 jsr PutChar diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 59bbcd89..d485ac30 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -11,6 +11,7 @@ .include "c64.inc" .global _GetScanLine +.global _GetScanLineExt .ifdef mega65 .global InitScanLineTab .global LineTabH @@ -27,8 +28,31 @@ BACK_SCR_BASE65 = $9000 .import _MapHigh .import _MapLow +.import MapUnderlay +.import UnmapUnderlay .endif +; API call of this function in 80 col GEOS 128 compatibility +; mode, should map $A000-$C000 to second background buffer +; area. + +_GetScanLineExt: + bit graphMode + bpl _GetScanLine + + ; if 80 col compat mode + jsr MapUnderlay + jsr GSC80 + jsr UnmapUnderlay + txa + pha + ldx #$00 + lda #$70 + jsr _MapHigh + pla + tax + rts + ;--------------------------------------------------------------- ; GetScanLine_HR ; @@ -126,6 +150,14 @@ _GetScanLine: .endif tax ; scan line in x now + lda LineTabL,x + ora r6H + sta r5L + sta r6L + lda LineTabH,x + sta r5H + sta r6H + bbrf 7, dispBufferOn, @2 ; ST_WR_FORE @@ -139,6 +171,7 @@ _GetScanLine: ; ; foreground only ; +.if 0 lda LineTabL,x ora r6H sta r5L @@ -147,14 +180,17 @@ _GetScanLine: .endif lda LineTabH,x sta r5H +.endif .ifdef bsw128 jmp GSC80_6 .else +.if 0 .ifdef wheels_size_and_speed sta r6H .else MoveW r5, r6 .endif +.endif .ifdef mega65 ; map foregroud and translate ptrs @@ -212,6 +248,7 @@ _GetScanLine: ; background only ; @2: +.if 0 lda LineTabL,x ora r6H sta r5L @@ -220,14 +257,17 @@ _GetScanLine: .endif lda LineTabH,x sta r5H +.endif .ifdef bsw128 jmp GSC80_6 .else +.if 0 .ifdef wheels_size_and_speed sta r6H .else MoveW r5, r6 .endif +.endif .ifdef mega65 ; map foregroud and translate ptrs @@ -287,6 +327,7 @@ _GetScanLine: ; @1: +.if 0 lda LineTabL,x ora r6H sta r5L @@ -294,6 +335,7 @@ _GetScanLine: lda LineTabH,x sta r5H sta r6H +.endif .ifdef mega65 ; map foregroud and translate ptrs @@ -366,7 +408,8 @@ _GetScanLine: rts -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) +.segment "graph2nu" GSC80: txa pha diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 69078d84..c621e796 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -140,7 +140,7 @@ .import _ImprintRectangle .import _BitmapUp .import _TestPoint -.import _GetScanLine +.import _GetScanLineExt .import _DrawPoint .import _DrawLine .import _RecoverRectangle @@ -529,7 +529,7 @@ GraphicsString: SetPattern: jmp _SetPattern GetScanLine: - jmp _GetScanLine + jmp _GetScanLineExt TestPoint: jmp _TestPoint BitmapUp: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 9d034869..255abcc6 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -49,6 +49,8 @@ SEGMENTS { dlgbox2: load = UNDERLAY, type = ro; dlgbox1k: load = UNDERLAY, type = ro; init4: load = UNDERLAY, type = ro; + graph2nu: load = UNDERLAY, type = ro; + # kernal header: $c000 header: load = KERNALHDR, type = ro; diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index e300c985..e8c8b2d4 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -110,7 +110,6 @@ StackPtr: _Panic: .ifdef debugger - pha ; flags lda tempIRQAcc pha diff --git a/kernal/serial/serial1.s b/kernal/serial/serial1.s index 5cc0afab..f473d9d1 100644 --- a/kernal/serial/serial1.s +++ b/kernal/serial/serial1.s @@ -23,7 +23,8 @@ SerialNumber: .word $FD8D .else ; This matches the serial in the cbmfiles.com GEOS64.D64 - .word $58B5 + ;.word $58B5 + .word $FD8D .endif .endif diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 79868227..19a3a65c 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -150,7 +150,7 @@ ASSERT_NOT_BELOW_IO .ifdef debugger _DebugStart: - brk + brk .endif jsr MouseInit lda #currentInterleave diff --git a/loader/loader.s b/loader/loader.s index 37c712fc..5f9b8ed3 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -98,7 +98,7 @@ next: .WORD 0 LDA $D054 ;40 mhz ORA #$40 - STA $D054 + ;STA $D054 lda #$40 sta $d031 From 22275119eeba291a6a3ff35f2713c60c23489a65 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 16 Oct 2019 18:13:24 +0200 Subject: [PATCH 059/125] Fix bitmap positioning in 80 col compatibility mode if no DOUBLE_B is present. (GeoWrite 128 case) --- kernal/graph/bitmapup.s | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index b43857cd..b15b932e 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -131,19 +131,24 @@ BitmapUpHelp: adc scrFullCardsX @41: and #$7f + bra @43 @42: - bpl @4 + lda r1L +@43: + bpl @4 ; not DOUBLE_B bbrf 7, graphMode, @4 - ldy #4 ; by 16 + ldy #4 ; by 16, if DOBULE_B on C80 @4: and #$7F + + ; pure x in cards in @5: asl a rol r5H dey bne @5 - pha + pha ; low offset lda r5H stx r5H pha From 9e2bf97e56fa18c3034e4b00caf14c8f2b046026 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 20 Oct 2019 19:40:49 +0200 Subject: [PATCH 060/125] Bugfixings, introduced EndScanLine. --- Makefile | 5 ++- kernal/c65/map.s | 4 +- kernal/debug/main.s | 53 ++++++++++++---------- kernal/fonts/fonts2.s | 3 +- kernal/graph/bitmapclip.s | 3 +- kernal/graph/bitmapup.s | 3 +- kernal/graph/line.s | 5 ++- kernal/graph/rect.s | 3 -- kernal/graph/scanline.s | 91 +++++++++----------------------------- kernal/jumptab/jumptab.s | 16 +++++-- kernal/kernal_mega65.cfg | 6 ++- kernal/memory/backram.s | 93 ++++++++++++++++++++++++++++++++++++++- kernal/panic/panic.s | 32 ++++++-------- kernal/start/start64.s | 4 +- 14 files changed, 190 insertions(+), 131 deletions(-) diff --git a/Makefile b/Makefile index fa2047cb..b1975bcd 100755 --- a/Makefile +++ b/Makefile @@ -181,7 +181,8 @@ ifeq ($(VARIANT), mega65) kernal/graph/graph2p.s \ kernal/c65/map.s \ kernal/c65/iojmp.s \ - kernal/128k/swapdiskdriver.s + kernal/128k/swapdiskdriver.s \ + kernal/memory/backram.s endif # code that is in C128 back bank @@ -365,7 +366,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite GW128.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite GPT128.CVT | $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 62f5d196..d6cd72ba 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -65,6 +65,7 @@ .import __CRC .import _SetNewMode .import _GetRealSize +.import _EndScanLine .global _map_FollowChain .global _map_FindFTypes @@ -326,7 +327,8 @@ __unmap: _map_SetNewMode: jsr MapUnderlay jsr _SetNewMode - bra __unmap + jsr UnmapUnderlay + jmp _EndScanLine _map_GetRealSize: jsr MapUnderlay jsr _GetRealSize diff --git a/kernal/debug/main.s b/kernal/debug/main.s index d4229bca..d9a2b6a3 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -165,11 +165,11 @@ DebugMain: ; GO situation + jsr ExitConsole + ; restore breakpoint at current PC jsr RestorePCBreakpoint - jsr ExitConsole - PopW r3 PopW r2 PopW r1 @@ -564,7 +564,9 @@ ProcessTrace: MoveW r0, r1 + jsr ExitConsole jsr SetupSingleStep + jsr EnterConsole sec rts @@ -688,8 +690,9 @@ ProcessPrompt: jsr EvalAddrExpr bcs @1 - + jsr ExitConsole jsr SetBreakpoint + jsr EnterConsole clc rts @@ -1696,7 +1699,7 @@ GetByte: CmpWI r0, r0 bne @a1 lda saveR0 - bra @3 + jmp @3 @a1: CmpWI r0, r0+1 bne @a2 @@ -1704,26 +1707,6 @@ GetByte: bra @3 @a2: - CmpWI r0, $800 - bcc @a3 - CmpWI r0, $800+80*25 - beq @a3 - bcs @a3 - - SubVW $800, r0 - lda #consoleBuf - adc r0H - sta r0H - ldy #0 - lda (r0), y - bra @3 -@a3: - ; check mapped area $6000-$7FFF - ldy #0 @2: @@ -1750,6 +1733,28 @@ GetByte: cpy #16 bne @2 + CmpWI consoleBufAddr, $800 + bne @a3 + CmpWI r0, $800 + bcc @a3 + CmpWI r0, $800+80*25 + beq @a3 + bcs @a3 + + SubVW $800, r0 + lda #consoleBuf + adc r0H + sta r0H + ldy #0 + lda (r0), y + bra @3 +@a3: + ; check mapped area $6000-$7FFF + ldy #0 lda (r0), Y @3: diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 470549b5..55432c91 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -49,6 +49,7 @@ PrvCharWidth = $880D .import GetRealSize .endif .import _GetScanLine_HR +.import _EndScanLine .global Font_9 .global FontPutChar @@ -1088,7 +1089,7 @@ FontPutChar: .ifdef mega65 PopB CPU_DATA .endif - rts + jmp _EndScanLine .ifdef bsw128 ; FontPutChar for 80 column mode diff --git a/kernal/graph/bitmapclip.s b/kernal/graph/bitmapclip.s index 1d87ee27..c167e382 100644 --- a/kernal/graph/bitmapclip.s +++ b/kernal/graph/bitmapclip.s @@ -15,6 +15,7 @@ .ifdef bsw128 .import _TempHideMouse .endif +.import _EndScanLine .global _BitOtherClip .global _BitmapClip @@ -113,7 +114,7 @@ BitmClp1: .ifdef bsw128 PopB rcr .endif - rts + jmp _EndScanLine BitmHelpClp: cmp #0 diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index b15b932e..f21d669c 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -11,6 +11,7 @@ .include "c64.inc" .import _GetScanLine +.import _EndScanLine .ifdef bsw128 .import _TempHideMouse ; XXX wrong bank @@ -95,7 +96,7 @@ _BitmapUp: .ifdef bsw128 PopB rcr .endif - rts + jmp _EndScanLine BitmapUpHelp: ldy r1H diff --git a/kernal/graph/line.s b/kernal/graph/line.s index be0e70c0..e7729107 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -37,6 +37,7 @@ .import GetLeftXAddress .import _NormalizeY .import _GetScanLine_HR +.import _EndScanLine .endif .global ImprintLine @@ -265,7 +266,7 @@ _InvertLine: LineEnd: PopW r4 PopW r3 - rts + jmp _EndScanLine LineCommon: sta r11H @@ -869,7 +870,7 @@ _VerticalLine: beq @1 bcc @1 PopB r4L - rts + jmp _EndScanLine .ifdef bsw128 VLin80: diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index 2fe86af4..cf8f8ea3 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -199,9 +199,6 @@ _NormRect: ldy #r2H jmp _NormalizeY - .repeat 5 - .byte 0 - .endrep ;--------------------------------------------------------------- ; FrameRectangle $C127 ; diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index d485ac30..1f8b4058 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -17,6 +17,7 @@ .global LineTabH .global LineTabL .global _GetScanLine_HR +.global _EndScanLine .endif .segment "graph2n" @@ -45,12 +46,19 @@ _GetScanLineExt: jsr GSC80 jsr UnmapUnderlay txa +_EndScanLine: + bit graphMode + bpl @1 pha ldx #$00 lda #$70 jsr _MapHigh + ldx #$00 + lda #$60 + jsr _MapLow pla tax +@1: rts ;--------------------------------------------------------------- @@ -171,26 +179,9 @@ _GetScanLine: ; ; foreground only ; -.if 0 - lda LineTabL,x - ora r6H - sta r5L -.ifdef wheels_size_and_speed - sta r6L -.endif - lda LineTabH,x - sta r5H -.endif .ifdef bsw128 jmp GSC80_6 .else -.if 0 -.ifdef wheels_size_and_speed - sta r6H -.else - MoveW r5, r6 -.endif -.endif .ifdef mega65 ; map foregroud and translate ptrs @@ -227,47 +218,23 @@ _GetScanLine: @X2: add #$a0 sta r5H - sta r6H - - pla - taz - pla - tay - -.endif + bra gslend +.else pla tax -.ifdef mega65 PopB CPU_DATA -.endif rts .endif +.endif ; ; background only ; @2: -.if 0 - lda LineTabL,x - ora r6H - sta r5L -.ifdef wheels_size_and_speed - sta r6L -.endif - lda LineTabH,x - sta r5H -.endif .ifdef bsw128 jmp GSC80_6 .else -.if 0 -.ifdef wheels_size_and_speed - sta r6H -.else - MoveW r5, r6 -.endif -.endif .ifdef mega65 ; map foregroud and translate ptrs @@ -304,22 +271,14 @@ _GetScanLine: @X2__: add #$60 sta r5H - sta r6H - - pla - taz - pla - tay - -.endif + bra gslend +.else pla tax -.ifdef mega65 - PopB CPU_DATA -.endif rts .endif +.endif ; @@ -327,16 +286,6 @@ _GetScanLine: ; @1: -.if 0 - lda LineTabL,x - ora r6H - sta r5L - sta r6L - lda LineTabH,x - sta r5H - sta r6H -.endif - .ifdef mega65 ; map foregroud and translate ptrs tya @@ -392,20 +341,24 @@ _GetScanLine: add #$a0 sta r5H sub #$40 +gslend: sta r6H + pla taz pla tay -.endif - pla tax -.ifdef mega65 PopB CPU_DATA -.endif rts +.else + + pla + tax + rts +.endif .if .defined(bsw128) || .defined(mega65) diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index c621e796..9dfaa765 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -777,7 +777,11 @@ PutDirHead: NxtBlkAlloc: jmp (_NxtBlkAlloc) ImprintRectangle: +.ifdef mega65 + jmp __io_ImprintRectangle +.else jmp _ImprintRectangle +.endif i_ImprintRectangle: jmp _i_ImprintRectangle DoDlgBox: @@ -989,6 +993,12 @@ ColorRectangle: .elseif .defined(mega65) .macro UNIMPLEMENTED + brk + nop + nop +.endmacro + +.macro UNIMPLEMENTED_NO_ACTION rts nop nop @@ -996,7 +1006,7 @@ ColorRectangle: ; C128 syscalls TempHideMouse: - UNIMPLEMENTED + UNIMPLEMENTED_NO_ACTION SetMsePic: UNIMPLEMENTED SetNewMode: @@ -1005,7 +1015,7 @@ SetNewMode: NormalizeX: jmp _NormalizeX MoveBData: - UNIMPLEMENTED + jmp _MoveBData SwapBData: UNIMPLEMENTED VerifyBData: @@ -1015,7 +1025,7 @@ DoBOp: AccessCache: UNIMPLEMENTED HideOnlyMouse: - UNIMPLEMENTED + UNIMPLEMENTED_NO_ACTION SetColorMode: UNIMPLEMENTED ColorCard: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 255abcc6..bc2c9a09 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -50,6 +50,7 @@ SEGMENTS { dlgbox1k: load = UNDERLAY, type = ro; init4: load = UNDERLAY, type = ro; graph2nu: load = UNDERLAY, type = ro; + backram_under: load = UNDERLAY, type = ro; # kernal header: $c000 @@ -107,8 +108,9 @@ SEGMENTS { mouse1: load = KERNAL, type = ro; panic1: load = KERNAL, type = ro; math1d: load = KERNAL, type = ro; - panic2: load = KERNAL, type = ro; - panic3: load = KERNAL, type = ro; + #panic2: load = KERNAL, type = ro; + #panic3: load = KERNAL, type = ro; + backram: load = KERNAL, type = ro; serial2: load = KERNAL, type = ro; memory3: load = KERNAL, type = ro; load3: load = KERNAL, type = ro; diff --git a/kernal/memory/backram.s b/kernal/memory/backram.s index 9b8da1c6..7aded267 100644 --- a/kernal/memory/backram.s +++ b/kernal/memory/backram.s @@ -2,6 +2,7 @@ ; reverse engineered by Maciej Witkowiak, Michael Steil ; ; C128 "Back-RAM" syscalls +; for C128 M65 GEOS emulates back ram access .include "const.inc" .include "geossym.inc" @@ -15,6 +16,13 @@ .global _VerifyBData .global _DoBOp +.ifdef mega65 +.import _StashRAM +.import _FetchRAM +.import MapUnderlay +.import UnmapUnderlay +.endif + .segment "backram" ;--------------------------------------------------------------- @@ -30,7 +38,11 @@ ;--------------------------------------------------------------- _MoveBData: ldy #0 +.ifdef mega65 + beq _map_DoBOp +.else beq _DoBOp +.endif ;--------------------------------------------------------------- ; SwapBData $C2E6 ; @@ -44,7 +56,11 @@ _MoveBData: ;--------------------------------------------------------------- _SwapBData: ldy #2 - bne _DoBOp +.ifdef mega65 + beq _map_DoBOp +.else + beq _DoBOp +.endif ;--------------------------------------------------------------- ; VerifyBData $C2E9 ; @@ -59,7 +75,20 @@ _SwapBData: ;--------------------------------------------------------------- _VerifyBData: ldy #3 - bne _DoBOp +.ifdef mega65 + beq _map_DoBOp +.else + beq _DoBOp +.endif + +.ifdef mega65 +_map_DoBOp: + jsr MapUnderlay + jsr _DoBOp + jmp UnmapUnderlay +.segment "backram_under" +.endif + ;--------------------------------------------------------------- ; DoBOp $C2EC ; @@ -75,6 +104,65 @@ _VerifyBData: ; Destroyed: a, y ;--------------------------------------------------------------- _DoBOp: +.ifdef mega65 + cpy #0 + beq @1 + brk +@1: + PushW r0 + PushW r1 + PushW r2 + PushW r3 + + lda r3L + cmp #0 ; bank 1 + beq @fetch + + ; r0 main mem src + ; r1 REU address, normalized + LoadB r3L, 5 + + lda r1L + sec + sbc #$00 + sta r1L + lda r1H + sbc #0 + sta r1H + + jsr _StashRAM + bra @31 +@fetch: + ; r0 main mem dest + ; r1 REU address, normalized + LoadB r3L, 5 + + ldy r0L + lda r1L + sta r0L + sty r1L + ldy r0H + lda r1H + sta r0H + sty r1H + + lda r1L + sec + sbc #$00 + sta r1L + lda r1H + sbc #0 + sta r1H + + jsr _FetchRAM + +@31: PopW r3 + PopW r2 + PopW r1 + PopW r0 + rts + +.else PushB rcr and #$F0 ora #$08 @@ -285,4 +373,5 @@ _DoBOp: PopB config PopB rcr txa +.endif rts diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index e8c8b2d4..54c3f240 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -95,18 +95,13 @@ StackPtr: .byte 0, 0, 0 ; PADDING -.else +.else ; gateway ;--------------------------------------------------------------- ; Panic $C2C2 ; ; Pass: nothing ; Return: does not return ;--------------------------------------------------------------- - .byte 0, 0, 0, 0, 0, 0, 0, 0 - .byte 0, 0, 0, 0, 0, 0, 0, 0 - .byte 0, 0, 0, 0, 0, 0, 0, 0 - .byte 0, 0, 0, 0, 0, 0, 0, 0 - _Panic: .ifdef debugger @@ -147,7 +142,7 @@ _Panic: rti -.else +.else ; debugger inc $d020 bra _Panic .ifdef wheels @@ -157,7 +152,7 @@ _Panic: tay pla sbc #0 -.else +.else ; wheels .ifdef mega65 ;LoadB CPU_DATA, IO_IN @13: @@ -166,7 +161,7 @@ _Panic: ;jsr UnmapUnderlay ;bra @13 @12: -.endif +.endif ; mega65 .ifdef bsw128 pla pla @@ -176,31 +171,31 @@ _Panic: pla pla pla -.endif +.endif ; bsw128 ;PopW r0 .ifdef bsw128 ldx #r0 jsr Ddec ldx #r0 jsr Ddec -.else +.else ; bsw128 SubVW 2, r0 -.endif +.endif ; bsw128 ;lda r0H -.endif +.endif ; mega65 ;ldx #0 jsr @1 .ifdef wheels tya -.else +.else ; wheels lda r0L -.endif +.endif ; wheels jsr @1 LoadW r0, _PanicDB_DT jsr DoDlgBox .ifdef wheels jmp EnterDeskTop -.endif +.endif ; wheels @1: ;pha ;lsr ;lsr @@ -228,9 +223,8 @@ _PanicDB_DT: .word _PanicDB_Str .ifdef wheels .byte DBSYSOPV -.endif +.endif ; wheels .byte NULL -.endif .segment "panic3" @@ -247,3 +241,5 @@ _PanicDB_Str: _PanicAddr: .byte "xxxx" .byte NULL + +.endif ; debugger diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 19a3a65c..4d00a72d 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -170,8 +170,8 @@ OrigResetHandle: sei cld .ifdef mega65 - lda #5|64 - ;lda #1|64 + ;lda #5|64 + lda #1|64 sta graphMode LoadW r5, 720 jsr InitScanLineTab From ec06ea2213d705661c46b4ddf9b2932a7c0646ec Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 27 Oct 2019 22:31:38 +0100 Subject: [PATCH 061/125] Increase GEOS128 compatibility. Change memory handling to become more compatible, especially for to support GeoWrite 128 and GeoPaint 128. --- kernal/debug/main.s | 92 ++++++++++++++++++++++++++++++++++++---- kernal/graph/rect.s | 15 +++++-- kernal/graph/scanline.s | 40 +++++++++++------ kernal/jumptab/jumptab.s | 2 +- kernal/start/start64.s | 2 +- loader/loader.s | 2 +- 6 files changed, 123 insertions(+), 30 deletions(-) diff --git a/kernal/debug/main.s b/kernal/debug/main.s index d9a2b6a3..b405dcb0 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -69,6 +69,12 @@ saveD015: .byte 0 saveR0: .word 0 +saveR1: + .word 0 +saveR2: + .word 0 +saveR3: + .word 0 saveD060: .byte 0 saveD061: @@ -130,8 +136,11 @@ DebugMain: PushW r0 MoveW r0, saveR0 PushW r1 + MoveW r1, saveR1 PushW r2 + MoveW r2, saveR2 PushW r3 + MoveW r3, saveR3 jsr ResetSingleStep jsr UpdatePCBreakpoint @@ -1704,9 +1713,42 @@ GetByte: CmpWI r0, r0+1 bne @a2 lda saveR0+1 - bra @3 + jmp @3 @a2: + CmpWI r0, r1 + bne @a3_ + lda saveR1 + jmp @3 +@a3_: + CmpWI r0, r1+1 + bne @a4 + lda saveR1+1 + jmp @3 +@a4: + + CmpWI r0, r2 + bne @a5 + lda saveR2 + jmp @3 +@a5: + CmpWI r0, r2+1 + bne @a6 + lda saveR2+1 + jmp @3 +@a6: + + CmpWI r0, r3 + bne @a7 + lda saveR3 + jmp @3 +@a7: + CmpWI r0, r3+1 + bne @a8 + lda saveR3+1 + jmp @3 +@a8: + ldy #0 @2: @@ -1725,7 +1767,7 @@ GetByte: lsr tay lda breakOpList, Y - bra @3 + jmp @3 @1: iny @@ -1753,15 +1795,47 @@ GetByte: lda (r0), y bra @3 @a3: - ; check mapped area $6000-$7FFF + ; check mapped area $6000-$7FFF + CmpWI r0, $6000 + bcc @b5 + CmpWI r0, $8000 + beq @b5 + bcs @b5 - ldy #0 - lda (r0), Y + PushW r0 + PushW r1 + + lda r0L + sec + sbc #$00 + sta r0L + lda r0H + sbc #$40 + sta r0H + lda #1 + sta r1L + lda #0 + sta r1H + + LDZ #0 + EOM + lda (r0L), Z + tay + + PopW r1 + PopW r0 + + tya + + bra @3 +@b5: + ldy #0 + lda (r0), Y @3: - tay - PopW r0 - tya - rts + tay + PopW r0 + tya + rts Opcodes: .byte "BRK", 0 diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index cf8f8ea3..32320e67 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -108,7 +108,7 @@ _InvertRectangle: PushW r2 PushB r3H PushB r4H - PushB r5H + ;PushB r5H jsr _NormRect @@ -141,7 +141,7 @@ _InvertRectangle: bra @1 @3: - PopB r5H + ;PopB r5H PopB r4H PopB r3H PopW r2 @@ -212,6 +212,10 @@ _NormRect: ;--------------------------------------------------------------- _FrameRectangle: sta r9H + PushW r2 + PushW r3 + PushB r4H + ;PushB r5H jsr _NormRect @@ -222,7 +226,7 @@ _FrameRectangle: MoveB r2H, r11L lda r9H jsr _HorizontalLine - PushW r3 + ;PushW r3 PushW r4 MoveW r3, r4 MoveW r2, r3 @@ -231,5 +235,8 @@ _FrameRectangle: PopW r4 lda r9H jsr _VerticalLine - PopW r3 + ;PopW r3 + PopB r4H + PopW r3 + PopW r2 rts diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 1f8b4058..44f8be19 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -54,7 +54,7 @@ _EndScanLine: lda #$70 jsr _MapHigh ldx #$00 - lda #$60 + lda #$80 jsr _MapLow pla tax @@ -261,17 +261,20 @@ _GetScanLine: ror ldx #0 @Y1__: - jsr _MapLow - - lda r5H - and #%00011111 - ldx graphMode - beq @X2__ - and #%00000001 -@X2__: - add #$60 - sta r5H - bra gslend + ldz #0 + bra gslend2 + +; jsr _MapLow + +; lda r5H +; and #%00011111 +; ldx graphMode +; beq @X2__ +; and #%00000001 +;@X2__: +; add #$60 +; sta r5H +; bra gslend .else pla @@ -330,6 +333,13 @@ _GetScanLine: ror ldx #0 @Y1___: + ldz #$40 +gslend2: + stz r6H + ldy graphMode + bne @Z1 + lda #$80 +@Z1: jsr _MapLow lda r5H @@ -338,9 +348,11 @@ _GetScanLine: beq @X2_ and #%00000001 @X2_: - add #$a0 + add #$60 + add r6H sta r5H - sub #$40 + + sub r6H gslend: sta r6H diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 9dfaa765..4be1088b 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -1008,7 +1008,7 @@ ColorRectangle: TempHideMouse: UNIMPLEMENTED_NO_ACTION SetMsePic: - UNIMPLEMENTED + UNIMPLEMENTED_NO_ACTION SetNewMode: .import _SetNewMode jmp _map_SetNewMode diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 4d00a72d..fdce2c7f 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -145,7 +145,7 @@ ASSERT_NOT_BELOW_IO ; start with bank $6000-$8000 swapped out so we prevent debugger from beeing destroyed ldx #$00 - lda #$60 + lda #$80 jsr _MapLow .ifdef debugger diff --git a/loader/loader.s b/loader/loader.s index 5f9b8ed3..37c712fc 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -98,7 +98,7 @@ next: .WORD 0 LDA $D054 ;40 mhz ORA #$40 - ;STA $D054 + STA $D054 lda #$40 sta $d031 From ead40653d8c5b3d1af31d3e8fb76b2c2e1dfa68d Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 12 Dec 2019 22:29:53 +0100 Subject: [PATCH 062/125] Make TopDesk and Configure scalable applications. --- Makefile | 6 ++- configure/ConfigIcon.bf | Bin 0 -> 63 bytes configure/configure65.grc | 4 +- configure/r0.s | 2 +- configure/r1.s | 80 ++++++++++++++++++------------- inc/const.inc | 4 ++ kernal/graph/clrscr.s | 4 -- kernal/graph/rect.s | 5 +- kernal/init/init4.s | 4 -- topdesk/Include/SubDir.src.inc | 7 ++- topdesk/Main/DeskWindows.akt.inc | 2 +- topdesk/TopDeskIcon.bf | Bin 0 -> 63 bytes topdesk/topdesk65.grc | 4 +- 13 files changed, 72 insertions(+), 50 deletions(-) create mode 100644 configure/ConfigIcon.bf create mode 100644 topdesk/TopDeskIcon.bf diff --git a/Makefile b/Makefile index b1975bcd..190e9f83 100755 --- a/Makefile +++ b/Makefile @@ -376,7 +376,8 @@ ifeq ($(VARIANT), mega65) $(BUILD_DIR)/topdesk/topdesk.o: @mkdir -p `dirname $@` - $(GRC) -s $(BUILD_DIR)/topdesk/topdesk.s -o $(BUILD_DIR)/topdesk/topdesk.c topdesk/topdesk65.grc + $(GRC) -s $(BUILD_DIR)/topdesk/topdesk.s2 -o $(BUILD_DIR)/topdesk/topdesk.c2 topdesk/topdesk65.grc + sed 's/192/1/g' $(BUILD_DIR)/topdesk/topdesk.s2 > $(BUILD_DIR)/topdesk/topdesk.s $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/topdesk/topdesk.s -o $@ else @@ -389,7 +390,8 @@ endif ifeq ($(VARIANT), mega65) $(BUILD_DIR)/configure/configure.o: @mkdir -p `dirname $@` - $(GRC) -s $(BUILD_DIR)/configure/configure.s -o $(BUILD_DIR)/configure/configure.c configure/configure65.grc + $(GRC) -s $(BUILD_DIR)/configure/configure.s2 -o $(BUILD_DIR)/configure/configure.c2 configure/configure65.grc + sed 's/192/1/g' $(BUILD_DIR)/configure/configure.s2 > $(BUILD_DIR)/configure/configure.s $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ else diff --git a/configure/ConfigIcon.bf b/configure/ConfigIcon.bf new file mode 100644 index 0000000000000000000000000000000000000000..df375a37d8b1e86a49f1776bc155fc7cf1d14355 GIT binary patch literal 63 zcmV-F0KotM|Nnph0f51QfdWB+!a;!|L4e7DfB*r9|NV#n4UhmGzyJN906nMwJ)rnI Vpa3<$|Lc`iRf?*sfmK!i|Nq(iAddh5 literal 0 HcmV?d00001 diff --git a/configure/configure65.grc b/configure/configure65.grc index 9b8eb24e..450599c4 100644 --- a/configure/configure65.grc +++ b/configure/configure65.grc @@ -1,9 +1,11 @@ -HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V2.1" { +HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V6.0" { author "BSW/Jim Collette" info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." date 23 12 91 22 54 mode any structure VLIR + mode 80only + icon "configure/ConfigIcon.bf" } MEMORY { diff --git a/configure/r0.s b/configure/r0.s index a1685de9..8fa090bb 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -247,7 +247,7 @@ L050E: jmp EnterDeskTop ; 050E 4C 2C C2 configFileClass: .ifdef config128 .ifdef mega65 - .byte "65 Config V2.1", 0 + .byte "65 Config V6.0", 0 .else .byte "128 Config V2.1" ; 0511 43 6F 6E 66 69 67 75 72 Configur diff --git a/configure/r1.s b/configure/r1.s index e252bc2f..f8b4d7b5 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -82,12 +82,20 @@ vdcdata = $d601 L6819 = $6819 +.ifdef mega65 +CFG_DOUBLE_W = 0 +CFG_ADD1_W = 0 +.else +CFG_DOUBLE_W = DOUBLE_W +CFG_ADD1_W = ADD1_W +.endif + ; ---------------------------------------------------------------------------- AreaTable: ;#0 .byte $69, $c4 .ifdef config128 - .word $b4 + DOUBLE_W, $136 + DOUBLE_W + .word $b4 + CFG_DOUBLE_W, $136 + CFG_DOUBLE_W .else .word $b4, $136 .endif @@ -95,7 +103,7 @@ AreaTable: ;#1 .byte $85, $8f .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -103,7 +111,7 @@ AreaTable: ;#2 .byte $A1, $AB .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -112,7 +120,7 @@ AreaTable: .byte $07 .byte $62 ; 13C4 62 b .ifdef config128 - .word $1e+DOUBLE_W, $a0+DOUBLE_W + .word $1e+CFG_DOUBLE_W, $a0+CFG_DOUBLE_W .else .word $1e, $a0 .endif @@ -121,7 +129,7 @@ AreaTable: .byte $07 ; 13C9 07 . .byte $62 ; 13CA 62 b .ifdef config128 - .word $b4 + DOUBLE_W, $136 + DOUBLE_W + .word $b4 + CFG_DOUBLE_W, $136 + CFG_DOUBLE_W .else .word $b4, $136 .endif @@ -129,7 +137,7 @@ AreaTable: ;#5 .byte $69, $c4 .ifdef config128 - .word $1e + DOUBLE_W, $a0 + DOUBLE_W + .word $1e + CFG_DOUBLE_W, $a0 + CFG_DOUBLE_W .else .word $1e, $a0 .endif @@ -137,7 +145,7 @@ AreaTable: ;#6 .byte $17, $21 ; 13D5 17 . .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -146,7 +154,7 @@ AreaTable: .byte $23 ; 13DB 23 # .byte $2d .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -155,7 +163,7 @@ AreaTable: .byte $2F ; 13E1 2F / .byte $39 .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -164,7 +172,7 @@ AreaTable: .byte $3B ; 13E7 3B ; .byte $45 .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -172,7 +180,7 @@ AreaTable: ;#10 .byte $47, $51 .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -180,7 +188,7 @@ AreaTable: ;#11 .byte $53, $5d ; 13F3 53 .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -188,7 +196,7 @@ AreaTable: ;#12 .byte $17, $21 ; 13F9 17 .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -196,7 +204,7 @@ AreaTable: ;#13 .byte $23, $2d .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -204,7 +212,7 @@ AreaTable: ;#14 .byte $2F, $39 ; 1405 2F / .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -212,7 +220,7 @@ AreaTable: ;#15 .byte $3B, $45 ; 140B 3B ; .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -220,7 +228,7 @@ AreaTable: ;#16 .byte $47, $51 .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -228,7 +236,7 @@ AreaTable: ;#17 .byte $53, $5d .ifdef config128 - .word $011e + DOUBLE_W, $0130 + DOUBLE_W + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W .else .word $011e, $0130 .endif @@ -236,7 +244,7 @@ AreaTable: ;#18 .byte $79, $83 ; 141D 79 y .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -244,7 +252,7 @@ AreaTable: ;#19 .byte $85, $8f .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -252,7 +260,7 @@ AreaTable: ;#20 .byte $91, $9b .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -260,7 +268,7 @@ AreaTable: ;#21 .byte $9d, $a7 .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -268,7 +276,7 @@ AreaTable: ;#22 .byte $a9, $b3 .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -276,7 +284,7 @@ AreaTable: ;#23 .byte $b5, $bf .ifdef config128 - .word $88 + DOUBLE_W, $9a + DOUBLE_W + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W .else .word $88, $9a .endif @@ -354,11 +362,19 @@ L14A6: lda driveType,y ; 14A6 B9 8E 84 .byte 0 .byte RECTANGLETO .ifdef config128 - .word 319 + DOUBLE_W + ADD1_W +.ifdef mega65 + .word SC_FROM_END+0 + (((SC_FROM_END|0) >> 8) << 12) +.else + .word 319 + CFG_DOUBLE_W + CFG_ADD1_W +.endif .else .word 319 .endif +.ifdef mega65 + .byte 0 +.else .byte 199 +.endif .byte NULL .ifdef config128 @@ -596,7 +612,7 @@ L16A2: ldy #$03 ; 16A2 A0 03 lda #$13 ; 16AF A9 13 .. sta r1H ; 16B1 85 05 .. .ifdef config128 - LoadW r11, $4F + DOUBLE_W + LoadW r11, $4F + CFG_DOUBLE_W .else LoadW r11, $4F .endif @@ -611,7 +627,7 @@ L16CC: ldy #$04 ; 16CC A0 04 lda #$13 ; 16D9 A9 13 .. sta r1H ; 16DB 85 05 .. .ifdef config128 - LoadW r11, $E5 + DOUBLE_W + LoadW r11, $E5 + CFG_DOUBLE_W .else LoadW r11, $E5 .endif @@ -626,7 +642,7 @@ L16F6: ldy #$05 ; 16F6 A0 05 lda #$75 ; 1703 A9 75 .u sta r1H ; 1705 85 05 .. .ifdef config128 - LoadW r11, $4F + DOUBLE_W + LoadW r11, $4F + CFG_DOUBLE_W .else LoadW r11, $4F .endif @@ -674,7 +690,7 @@ L1761: lda #$A4 ; 1769 A9 A4 .. sta r1H ; 176B 85 05 .. .ifdef config128 - LoadW r11, $BE + DOUBLE_W + LoadW r11, $BE + CFG_DOUBLE_W .else LoadW r11, $BE .endif @@ -683,7 +699,7 @@ L1761: lda #$B2 ; 1780 A9 B2 .. sta r1H ; 1782 85 05 .. .ifdef config128 - LoadW r11, $BE + DOUBLE_W + LoadW r11, $BE + CFG_DOUBLE_W .else LoadW r11, $BE .endif @@ -710,7 +726,7 @@ L17B2: lda #$8D ; 17BA A9 8D .. sta r1H ; 17BC 85 05 .. .ifdef config128 - LoadW r11, $BE + DOUBLE_W + LoadW r11, $BE + CFG_DOUBLE_W .else LoadW r11, $BE .endif @@ -796,7 +812,7 @@ L1873: LoadW r0, RAMExpStr lda #$75 ; 187B A9 75 .u sta r1H ; 187D 85 05 .. .ifdef config128 - LoadW r11, $BE + DOUBLE_W + LoadW r11, $BE + CFG_DOUBLE_W .else LoadW r11, $BE .endif diff --git a/inc/const.inc b/inc/const.inc index bcd28f90..65638420 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -448,3 +448,7 @@ GR_80 = $80 ; graphMode ; high resolution HIGH_Y_MASK = %00011111 + +SC_FROM_END = %100000000000 +SC_FROM_CENTER = %010000000000 +SC_SCALE = %110000000000 diff --git a/kernal/graph/clrscr.s b/kernal/graph/clrscr.s index fee2f8f7..dbf22f46 100644 --- a/kernal/graph/clrscr.s +++ b/kernal/graph/clrscr.s @@ -18,10 +18,6 @@ .global ClrScr -SC_FROM_END = %100000000000 -SC_FROM_CENTER = %010000000000 -SC_SCALE = %110000000000 - .ifndef wheels ;--------------------------------------------------------------- diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index 32320e67..55c4415d 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -212,13 +212,13 @@ _NormRect: ;--------------------------------------------------------------- _FrameRectangle: sta r9H + + jsr _NormRect PushW r2 PushW r3 PushB r4H ;PushB r5H - jsr _NormRect - ldy r2L sty r11L lda r9H @@ -236,6 +236,7 @@ _FrameRectangle: lda r9H jsr _VerticalLine ;PopW r3 + PopB r4H PopW r3 PopW r2 diff --git a/kernal/init/init4.s b/kernal/init/init4.s index 2cd8f880..9deff06a 100644 --- a/kernal/init/init4.s +++ b/kernal/init/init4.s @@ -22,10 +22,6 @@ .global InitRamTab -SC_FROM_END = %100000000000 -SC_FROM_CENTER = %010000000000 -SC_SCALE = %110000000000 - .segment "init4" InitRamTab: diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index 89cdb2d4..4de2aeb4 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -1141,8 +1141,11 @@ CLS: ldy #r15H-r0L lda c128Flag bpl @64 jsr i_Rectangle - .byte 0,199 - .word 0,319 ;|DOUBLE_W|ADD1_W +; .byte 0,199 + .byte 0,0 +; .word 0,319 ;|DOUBLE_W|ADD1_W + .word 0, SC_FROM_END+0 + (((SC_FROM_END|0) >> 8) << 12) + rts @64: jsr i_Rectangle .byte 0,199 diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 81421366..b99a25f1 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -47,7 +47,7 @@ MyName: .byte "Dos",0,0,0,0,0,0,0,0,0,0,0,0,0 .ifdef topdesk128 .ifdef topdesk13 .ifdef mega65 -MyClass: .byte "TopDesk65 V1.3",0 +MyClass: .byte "TopDesk65 V6.0",0 .else MyClass: .byte "TopDesk128 V1.3",0 .endif diff --git a/topdesk/TopDeskIcon.bf b/topdesk/TopDeskIcon.bf new file mode 100644 index 0000000000000000000000000000000000000000..298598a108229129005551c92527fd556288c912 GIT binary patch literal 63 zcmezW|NkUU#sB~98yFb(|3ABc!FT`vgFtfm|G!HZIQJBsZE4iq^H6iiMBP0pXMrNi P|NjK5ISW+(|NnmgcyS|c literal 0 HcmV?d00001 diff --git a/topdesk/topdesk65.grc b/topdesk/topdesk65.grc index 83c2ed87..47b9a6e3 100644 --- a/topdesk/topdesk65.grc +++ b/topdesk/topdesk65.grc @@ -1,8 +1,10 @@ -HEADER APPLICATION "65 DESKTOP" "TopDesk65" "V1.3" { +HEADER APPLICATION "65 DESKTOP" "TopDesk65" "V6.0" { author "DPT KnCiGo" info "New desk top." date 9 10 93 23 54 structure VLIR + mode 80only + icon "topdesk/TopDeskIcon.bf" } MEMORY { From 27fa5e70d7f88a24e4691cde180b8b7761d2c289 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 14 Dec 2019 11:20:13 +0100 Subject: [PATCH 063/125] Video's reworked/cleaned up, adapted for new hdmi video modes. --- inc/const.inc | 10 - kernal/graph/mode.s | 658 +++++++++++++----------------------- kernal/vars/vars.s | 4 +- topdesk/Main/DeskTop.main.s | 6 +- 4 files changed, 242 insertions(+), 436 deletions(-) diff --git a/inc/const.inc b/inc/const.inc index 65638420..c426b286 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -88,16 +88,6 @@ GRBANK2 = %01 GRBANK3 = %00 ; screen -VIC_X_POS_OFF = 24 -VIC_Y_POS_OFF = 50 -VIC_X_POS_OFF_640 = 60 -VIC_Y_POS_OFF_640 = 50 -VIC_X_POS_OFF_720 = 20 -VIC_Y_POS_OFF_720 = 74 -VIC_X_POS_OFF_800 = 6 -VIC_Y_POS_OFF_800 = 5 -VIC_X_POS_OFF_800B = 1 -VIC_Y_POS_OFF_800B = 60 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 SC_PIX_WIDTH = 720 diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 014ec1fa..8db13152 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -69,441 +69,48 @@ SetNewMode0: START_IO - lda $d031 - ;bit graphMode - ;beq @1 - bbsf 7, graphMode, @_1 - jmp @1 + lda $d031 + ;bit graphMode + ;beq @1 + bbsf 7, graphMode, @_1 + jmp @1 @_1: - LoadW r0, VIC_IniTbl - .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" - ldy #<(VIC_IniTbl_end - VIC_IniTbl) - jsr SetVICRegs - - LDA #80 - STA $D058 - STA $D05E - - ; 80 column mode, or advanced modes - ; Set bitmap mode (makes horizontal borders take effect) - LDA #$3B - STA $D011 - lda #$09 - sta $d016 - - LDA #59 - STA $D05C - LDA #128 - STA $D05D - - ; 90 column mode, or advanced modes - lda #$C0 - sta $d031 - - - ; enable sprite H640 - LDA $D054 - ORA #$10 - STA $D054 - LDA #0 - sta $D076 - - - lda #$04 ; 3.5Mhz, H640, no bitplanes - sta $d030 - - lda cia2base - and #%00110000 - ora #%00000101 - sta cia2base + + lda #1 ; init 80 col + jsr InitVideoMode - ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour - ; information for bitmap mode. - ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), - ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole - ; palette. - LDA #<$e000 - STA $D060 - LDA #>$e000 - STA $D061 - LDA #<4 - STA $D062 - LDA #>4 - STA $D063 - ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. - ; (We are using 2nd bank of 64KB for this) - ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. - LDA #<$0000 - STA $D068 - LDA #>$0000 - STA $D069 - LDA #4 - STA $D06A - - LDA #$8F - STA $d06D - - LoadW screenNextLine, 632 - LoadW screenMaxX, 639 - LoadW screenMaxY, 199 - LoadW screenCardsX, 80 - LoadB scrFullCardsX, 80 - LoadB scrFullCardsX+1, 25 - LoadB spriteXPosOff, VIC_X_POS_OFF_640 - LoadB spriteYPosOff, VIC_Y_POS_OFF_640 - - LDA #0 - STA $D05D - - LoadW r5, 640 - jsr InitScanLineTab END_IO rts -; END_IO -; rts @1: - lda graphMode - cmp #3|64 - beq @12 - cmp #1|64 - bne @11b - jmp @_1 + lda graphMode + cmp #3|64 ; high res mode + beq @12 + cmp #1|64 + bne @11b + jmp @_1 @11b: - jmp @11 + jmp @11 @12: - LoadW r0, VIC_IniTbl - .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" - ldy #<(VIC_IniTbl_end - VIC_IniTbl) - jsr SetVICRegs - - LDA #19 - STA $D05C - LDA #128 - STA $D05D - LDA #$FF - sta $D076 - LDA $D054 - ORA #$10 - STA $D054 - - lda #$c9 - sta grcntrl2 - - ; Set bitmap mode (makes horizontal borders take effect) - LDA #$3B - STA $D011 - - ; 90 column mode, or advanced modes - lda #$C8 - sta $d031 - - LDA #90 - STA $D058 - STA $D05E - - LDA #0 - STA $D05D - - lda #$04 ; 3.5Mhz, H640, no bitplanes - sta $d030 - - lda cia2base - and #%00110000 - ora #%00000101 - sta cia2base - - ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour - ; information for bitmap mode. - ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), - ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole - ; palette. - LDA #<$e000 - STA $D060 - LDA #>$e000 - STA $D061 - LDA #<4 - STA $D062 - LDA #>4 - STA $D063 - ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. - ; (We are using 2nd bank of 64KB for this) - ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. - LDA #<$0000 - STA $D068 - LDA #>$0000 - STA $D069 - LDA #4 - STA $D06A - - LDA #$8F - STA $d06D - - lda #<74 - sta $d048 - lda #>74 - sta $d049 - lda #<554 - sta $D04A - lda #>554 - sta $d04b - - lda #<74 - sta $d04e - lda #>74 - sta $d04f - - LoadW screenNextLine, 712 - LoadW screenMaxX, 719 - LoadW screenMaxY, 479 - LoadW screenCardsX, 90 - LoadB scrFullCardsX, 90 - LoadB scrFullCardsX+1, 60 - LoadB spriteXPosOff, VIC_X_POS_OFF_720 - LoadB spriteYPosOff, VIC_Y_POS_OFF_720 - - LoadW r5, 720 - jsr InitScanLineTab + lda #2 + jsr InitVideoMode END_IO rts @11: - lda graphMode - cmp #5|64 - beq @13 - cmp #8|64 - beq @13 - jmp @14 + lda graphMode + cmp #5|64 + beq @13 + cmp #8|64 + beq @13 + jmp @14 @13: - LoadW r0, VIC_IniTbl - .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" - ldy #<(VIC_IniTbl_end - VIC_IniTbl) - jsr SetVICRegs - - ; left boarder size - LDx #0 - LDA graphMode - cmp #8|64 - beq @13a - LDx #5 - -@13a: - STx $D05C - - LDA #128 - STA $D05D - LDA #$FF - sta $D076 - LDA $D054 - ORA #$10 - STA $D054 - - lda #$c9 - sta grcntrl2 - - ; Set bitmap mode (makes horizontal borders take effect) - LDA #$3B - STA $D011 - - ; 90 column mode, or advanced modes - lda #$C8 - sta $d031 - - LDx #100 - LDA graphMode - cmp #8|64 - beq @13b - LDx #94 -@13b: - STx $D058 - STx $D05E - LDA #0 - STA $D05D - - lda #$04 ; 3.5Mhz, H640, no bitplanes - sta $d030 - - ;lda cia2base - ;and #%00110000 - ;ora #%00000101 - ;sta cia2base - - ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour - ; information for bitmap mode. - ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), - ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole - ; palette. - LDA #<$e000 - STA $D060 - LDA #>$e000 - STA $D061 - LDA #<4 - STA $D062 - LDA #>4 - STA $D063 - ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. - ; (We are using 2nd bank of 64KB for this) - ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. -; LDA #<$2000 -; STA $D068 -; LDA #>$2000 -; STA $D069 -; LDA #1 -; STA $D06A - LDA #<$0000 - STA $D068 - LDA #>$0000 - STA $D069 - LDA #4 - STA $D06A - - LDA #$8F - STA $d06D - - - LDA graphMode - cmp #8|64 - beq @13c - lda #<5 - sta $d048 - lda #>5 - sta $d049 - lda #<593 - sta $D04A - lda #>593 - sta $d04b - - lda #<5 - sta $d04e - lda #>5 - sta $d04f - - LoadW screenNextLine, 744 - LoadW screenMaxX, 751 - LoadW screenMaxY, 587 - LoadW screenCardsX, 94 - LoadB scrFullCardsX, 94 - LoadB scrFullCardsX+1, 74 - LoadB spriteXPosOff, VIC_X_POS_OFF_800 - LoadB spriteYPosOff, VIC_Y_POS_OFF_800 - LoadW r5, 752 - bra @13d -@13c: - lda #<60 - sta $d048 - lda #>60 - sta $d049 - lda #<540 - sta $D04A - lda #>540 - sta $d04b - - lda #<60 - sta $d04e - lda #>60 - sta $d04f - LoadW screenNextLine, 792 - LoadW screenMaxX, 773 - LoadW screenMaxY, 479 - LoadW screenCardsX, 100 - LoadB scrFullCardsX, 96 - LoadB scrFullCardsX+1, 60 - LoadB spriteXPosOff, VIC_X_POS_OFF_800B - LoadB spriteYPosOff, VIC_Y_POS_OFF_800B - LoadW r5, 800 -@13d: - jsr InitScanLineTab + lda #3 ; super res + jsr InitVideoMode END_IO rts - @14: - LoadW r0, VIC_IniTbl - .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" - ldy #<(VIC_IniTbl_end - VIC_IniTbl) - jsr SetVICRegs - - - jsr i_FillRam - .word 1000 - .word COLOR_MATRIX - .byte (DKGREY << 4)+LTGREY - - LoadW screenNextLine, 312 - LoadW screenMaxX, 319 - LoadW screenMaxY, 199 - LoadW screenCardsX, 40 - LoadB scrFullCardsX, 40 - LoadB scrFullCardsX+1, 25 - LoadB spriteXPosOff, VIC_X_POS_OFF - LoadB spriteYPosOff, VIC_Y_POS_OFF - - LDA #80 - STA $D05C - LDA #128 - STA $D05D - LDA #0 - sta $D076 - - ; 40 column compatibility mode - lda #$40 - sta $d031 - - lda #%00111011 - sta $d011 - ;lda #$38 - ;sta $d018 - ;lda #$08 - ;sta $d016 - - lda #$04 ; 3.5Mhz, H640, no bitplanes - sta $d030 - - ;lda cia2base - ;and #%00110000 - ;ora #%00000101 - ;sta cia2base - - LDA #$8F - STA $d06D - - lda #<104 - sta $d048 - lda #>104 - sta $d049 - lda #<504 - sta $D04A - lda #>504 - sta $d04b - - - LDA #<$0000 - STA $D068 - LDA #>$0000 - STA $D069 - LDA #4 - STA $D06A - - LDA #<$8c00 - STA $D060 - LDA #>$8c00 - STA $D061 - LDA #0 - STA $D062 - - LDA #40 - STA $D058 - STA $D05E - - ; disable sprite H640 - LDA $D054 - AND #$EF - STA $D054 - - LDA #0 - STA $D05D - - LoadW r5, 320 - jsr InitScanLineTab - + lda #0 + jsr InitVideoMode END_IO rts .endif @@ -543,6 +150,217 @@ SetRightMargin: .ifdef mega65 +InitVideoMode: + pha + + LoadW r0, VIC_IniTbl + .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" + ldy #<(VIC_IniTbl_end - VIC_IniTbl) + jsr SetVICRegs + + pla + tax + asl + tay + + LDA vmiSideBorder, y + STA $D05C ; width of side border + LDA vmiSideBorder+1, y + STA $D05D ; bit 7 enable VICII hot register, bit 6 raster delay + + lda vmiD030, x + sta $d030 + + ; 80 column mode, or advanced modes + ; Set bitmap mode (makes horizontal borders take effect) + LDA vmiD011, x + STA $D011 + LDA vmiD016, x + sta $d016 + + LDA vmiFullCardsY, X + sta $d07b + + LDA vmiCardsX, X + STA $D058 ; characters per logical text row + STA $D05E ; Number of characters to diplay per row + + ; 90 column mode, or advanced modes + lda vmiD031,x + sta $d031 + + LDA #0 + STA $D05D ; reset hot registers, + ; so that other reg acces doesn't reset + ; everything + + ; enable sprite H640 + LDA $D054 + ORA vmiSpriteH640_OR, x + and vmiSpriteH640_AND, x + STA $D054 + + lda vmiSpriteV400, x + sta $D076 + + lda #0 + sta $D059 + + lda cia2base + and #%00110000 + ora #%00000101 + sta cia2base + + ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour + ; information for bitmap mode. + ; First byte is foreground colour (8-bit) and second byte is background colour (also 8-bit), + ; so each 8x8 cell can still have only 2 colours, but they can be chosen from the whole + ; palette. + LDA vmiColorRAMOffset, y + STA $D060 + LDA vmiColorRAMOffset+1 , y + STA $D061 + LDA vmiColorRAMBank,y + STA $D062 + LDA vmiColorRAMBank+1,y + STA $D063 + + ; Set bitmap data to somewhere that has 100x60 x 8 = 48,000 bytes of RAM. + ; (We are using 2nd bank of 64KB for this) + ; NOTE: This can't actually be set freely (yet), but will be on 16KB boundaries. + LDA vmiBitmapRAMOffset, y + STA $D068 + LDA vmiBitmapRAMOffset+1, y + STA $D069 + LDA vmiBitmapRAMBank,x + STA $D06A + + lda vmiSpritePtrAddr, x + STA $d06D + + lda vmiNextLine, y + sta screenNextLine + lda vmiNextLine+1, y + sta screenNextLine+1 + + lda vmiMaxX, y + sta screenMaxX + lda vmiMaxX+1, y + sta screenMaxX+1 + + lda vmiMaxY, y + sta screenMaxY + lda vmiMaxY+1, y + sta screenMaxY+1 + + lda vmiCardsX, y + sta screenCardsX + lda vmiCardsX+1, y + sta screenCardsX+1 + + lda vmiFullCardsX, x + sta scrFullCardsX + lda vmiFullCardsY, x + sta scrFullCardsX+1 + + lda vmiSpriteXPosOff, x + sta spriteXPosOff + lda vmiSpriteYPosOff, x + sta spriteYPosOff + + lda vmiTopBorder, y + sta $d048 + sta $d04e + lda vmiTopBorder+1, y + sta $d049 + sta $d04f + lda vmiBottomBorder, y + sta $D04A + lda vmiBottomBorder+1, y + sta $D04B + + LDA #0 + STA $D05D ; reset hot registers, + ; so that other reg acces doesn't reset + ; everything + + LDA vmiCardsX, Y + STA $D058 ; characters per logical text row + STA $D05E ; Number of characters to diplay per row + LDA vmiCardsX+1, Y + STA $d059 + LDA vmiFullCardsY, X + sta $d07b + + lda vmiScanLineLen, y + sta r5L + lda vmiScanLineLen+1, y + sta r5H + jsr InitScanLineTab + + rts + +; +; Video Modes init table +; + +; +; 320x200x2 640x200x2 640x400x2 720xYx2(dyn) +; (320x200x256) (640x200x16) (640x400x4) +vmiScanLineLen: + .word 320, 640, 640, 720 +vmiNextLine: + .word 312, 632, 632, 712 +vmiMaxX: + .word 319, 639, 639, 719 +vmiMaxY: + .word 199, 199, 399, 575 +vmiCardsX: + .word 40, 80, 80, 90 +vmiFullCardsX: + .byte 40, 80, 80, 90 +vmiFullCardsY: + .byte 25, 25, 50, 72 +vmiSpriteXPosOff: + .byte 25, 60, 60, 26 +vmiSpriteYPosOff: + .byte 50, 50, 104, 1 +vmiD011: + .byte %00111011, $3B, $3B, $3b +vmiD016: + .byte $09, $09, $09, $09 +vmiSideBorder: + .word 79 | $8000, 59 | $8000, 59 | $8000, 26 | $8000 +vmiD031: + .byte $40, $C0, $C8, $C8 +vmiSpriteH640_OR: + .byte $00, $10, $10, $10 +vmiSpriteH640_AND: + .byte $EF, $FF, $FF, $FF +vmiSpriteV400: + .byte 0, $00, $FF, $FF +vmiD030: ; 3.5Mhz, H640, no bitplanes + .byte $04, $04, $04, $04 +vmiSpritePtrAddr: + .byte $8F, $8F, $8F, $8F +vmiColorRAMOffset: + .word $8c00, $e000, $e000, $e000 +vmiColorRAMBank: + .word 0, 4, 4, 4 +vmiBitmapRAMOffset: + .word $0000, $0000, $0000, $0000 +vmiBitmapRAMBank: + .byte 4, 4, 4, 4 + ;104 + ;504 +vmiTopBorder: + .word 104, 104, 104, 1 +vmiBottomBorder: + .word 504, 504, 504, 577 +.endif + +.ifdef mega65 + ;--------------------------------------------------------------- ; InitScanLineTab ; diff --git a/kernal/vars/vars.s b/kernal/vars/vars.s index 60d81644..0f45cf77 100644 --- a/kernal/vars/vars.s +++ b/kernal/vars/vars.s @@ -184,6 +184,6 @@ scrFullCardsX: .word 40 screenMaxX: .word 319 screenNextLine: .word 312 screenMaxY: .word 199 -spriteXPosOff: .word VIC_X_POS_OFF -spriteYPosOff: .word VIC_Y_POS_OFF +spriteXPosOff: .word 25 +spriteYPosOff: .word 50 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 982451ef..a2657d0d 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1646,9 +1646,9 @@ mode_Menue: jsr MySubMenuDA2 modeoben: .byte 13+13+1 -modeunten: .byte 9*14+13+13+1+1 ; wird berechnet! +modeunten: .byte 8*14+13+13+1+1 ; wird berechnet! .word 80,171 - .byte 9 | VERTICAL + .byte 8 | VERTICAL modetab: mpt Mode40Text,MENU_ACTION,Mode_Call mpt Mode80Text,MENU_ACTION, Mode_Call @@ -1658,7 +1658,6 @@ modetab: mpt ModeSRText,MENU_ACTION,Mode_Call mpt ModeSRSText,MENU_ACTION,Mode_Call mpt ModeHCText,MENU_ACTION,Mode_Call - mpt ModeMPText,MENU_ACTION,Mode_Call Mode40Text: .byte " 40-cols",0 Mode80Text: .byte " 80-cols",0 ModeNSText: .byte " ", ITALICON, " nice scale",PLAINTEXT,0 @@ -1667,7 +1666,6 @@ ModeHRSText: .byte " ", ITALICON, " high-res scaled",PLAINTEXT,0 ModeSRText: .byte " super-res",PLAINTEXT,0 ModeSRSText: .byte " ", ITALICON, " super-res scaled",PLAINTEXT,0 ModeHCText: .byte " ", ITALICON, " high-color",PLAINTEXT,0 -ModeMPText: .byte " MEGAphone",PLAINTEXT,0 Mode_Call: cmp #2 From f7a8e47f04c71de5db61132bb896abf8939d20ee Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 14 Dec 2019 20:55:37 +0100 Subject: [PATCH 064/125] Basic 4 drive support implemented for Configure 65. --- configure/r1.s | 106 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 5 deletions(-) diff --git a/configure/r1.s b/configure/r1.s index f8b4d7b5..0a3a8259 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -289,6 +289,55 @@ AreaTable: .word $88, $9a .endif +;#24 + .byte $79, $83 ; 141D 79 y +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $9a +.endif + +;#25 + .byte $85, $8f +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $9a +.endif + +;#26 + .byte $91, $9b +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $9a +.endif + +;#27 + .byte $9d, $a7 +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $9a +.endif + +;#28 + .byte $a9, $b3 +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $9a +.endif + +;#29 + .byte $b5, $bf +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $9a +.endif + + L1441: LoadW r0, AreaTable cpy #$00 ; 1449 C0 00 .. @@ -484,10 +533,11 @@ L1590: jsr L16A2 ; 1590 20 A2 16 jsr L16CC ; 1593 20 CC 16 .. lda ramExpSize ; 1596 AD C3 88 ... beq L159E ; 1599 F0 03 .. - jsr L16F6 ; 159B 20 F6 16 .. -L159E: ldy #$00 ; 159E A0 00 .. - jsr L15AA ; 15A0 20 AA 15 .. - jsr L1752 ; 15A3 20 52 17 R. + jsr L16F6 ; 159B 20 F6 16 + jsr RenderDriveD +L159E: ;ldy #$00 ; 159E A0 00 .. + ;jsr L15AA ; 15A0 20 AA 15 .. + ;jsr L1752 ; 15A3 20 52 17 R. jsr ExitTurbo ; 15A6 20 32 C2 2. rts ; 15A9 60 ` ; ---------------------------------------------------------------------------- @@ -589,6 +639,10 @@ DriveCStr: .byte $18 ; 1672 00 18 .. .byte "Drive C" ; 1674 44 72 69 76 65 20 43 Drive C .byte $00 ; 167B 00 . +DriveDStr: + .byte $18 + .byte "Drive D" + .byte $00 ; ---------------------------------------------------------------------------- L167C: ldy #$03 ; 167C A0 03 .. jsr L1720 ; 167E 20 20 17 . @@ -598,11 +652,14 @@ L167C: ldy #$03 ; 167C A0 03 beq L1690 ; 1689 F0 05 .. ldy #$05 ; 168B A0 05 .. jsr L1720 ; 168D 20 20 17 . + ldy #$00 ; 168B A0 05 .. + jsr L1720 ; 168D 20 20 17 . L1690: jsr L16BE ; 1690 20 BE 16 .. jsr L16E8 ; 1693 20 E8 16 .. lda ramExpSize ; 1696 AD C3 88 ... beq L169E ; 1699 F0 03 .. jsr L1712 ; 169B 20 12 17 .. + jsr L1712b L169E: jsr ExitTurbo ; 169E 20 32 C2 2. rts ; 16A1 60 ` ; ---------------------------------------------------------------------------- @@ -651,6 +708,21 @@ L1712: LoadW V212D, L1B99 jsr L1A74 ; 171C 20 74 1A t. rts ; 171F 60 ` ; ---------------------------------------------------------------------------- +RenderDriveD: ldy #$00 ; 16F6 A0 05 .. + jsr L15AA ; 16F8 20 AA 15 .. + LoadW r0, DriveDStr + lda #$75 ; 1703 A9 75 .u + sta r1H ; 1705 85 05 .. +.ifdef config128 + LoadW r11, $E5 + CFG_DOUBLE_W +.else + LoadW r11, $E5 +.endif + jsr PutString ; 170F 20 48 C1 H. +L1712b: LoadW V212D, L1B99_D + jsr L1A74 ; 171C 20 74 1A t. + rts ; 171F 60 ` +; ---------------------------------------------------------------------------- L1720: jsr L1441 ; 1720 20 41 14 A. clc ; 1723 18 . lda #$02 ; 1724 A9 02 .. @@ -753,13 +825,14 @@ ConfigOtherPressVec: L17EA: lda #$00 ; 17EA A9 00 .. sta L180C ; 17EC 8D 0C 18 ... - jsr L1837 ; 17EF 20 37 18 7. + ;jsr L1837 ; 17EF 20 37 18 7. jsr L180D ; 17F2 20 0D 18 .. inc $d020 jsr L181B ; 17F5 20 1B 18 .. lda ramExpSize ; 17F8 AD C3 88 ... beq L1800 ; 17FB F0 03 .. jsr L1829 ; 17FD 20 29 18 ). + jsr L1829_D L1800: lda L180C ; 1800 AD 0C 18 ... beq L180B ; 1803 F0 06 .. jsr L0FA0 ; 1805 20 A0 0F .. @@ -782,6 +855,11 @@ L1829: jsr L15DF ; 1833 20 DF 15 .. rts ; 1836 60 ` ; ---------------------------------------------------------------------------- +L1829_D: + LoadW V212D, L1B99_D + jsr L15DF ; 1833 20 DF 15 .. + rts ; 1836 60 ` +; ---------------------------------------------------------------------------- L1837: lda ramExpSize ; 1837 AD C3 88 ... beq L1872 ; 183A F0 36 .6 ldy #$01 ; 183C A0 01 .. @@ -1224,6 +1302,24 @@ L1B99: brk ; 1BA7 00 . brk ; 1BA8 00 . +L1B99_D: + .byte 11 + .byte $18 ; 1B9A 18 . + brk ; 1B9B 00 . + brk ; 1B9C 00 . + brk ; 1B9D 00 . + brk ; 1B9E 00 . + brk ; 1B9F 00 . + brk ; 1BA0 00 . + brk ; 1BA1 00 . + brk ; 1BA2 00 . + brk ; 1BA3 00 . + brk ; 1BA4 00 . + brk ; 1BA5 00 . + brk ; 1BA6 00 . + brk ; 1BA7 00 . + brk ; 1BA8 00 . + L1BA9: .byte Date: Sat, 25 Jan 2020 11:01:56 +0100 Subject: [PATCH 065/125] Intermediate update with 4 drive and config support. --- configure/r0.s | 236 ++++- configure/r1.s | 286 +++--- drv/_drv1581_21hd.s | 13 +- drv/drv1541.s | 8 +- drv/drv1571.s | 16 +- drv/drv1581_21hd.s | 12 +- drv/drvf011.s | 289 +++++- drv/drvf0110.s | 1290 +++++++++++++++++++++++++ inc/const.inc | 15 + kernal/files/files6c.s | 2 + kernal/hw/hw1b.s | 8 +- kernal/irq/irq.s | 6 +- kernal/mainloop/mainloop1.s | 4 +- kernal/start/start64.s | 224 ++++- loader/loader.s | 27 +- topdesk/DeskInclude/SearchDisk.inc | 10 +- topdesk/Include/DeskMain2.inc | 12 +- topdesk/Include/SubDir.src.inc | 36 +- topdesk/Include/Symbol/Sym128.erg.inc | 4 +- topdesk/Main/DeskTop.main.s | 77 +- topdesk/Main/DeskTop.sub2.s | 3 +- topdesk/Main/DeskTop.sub4.s | 6 +- topdesk/Main/DeskTop.sub6.s | 3 +- 23 files changed, 2334 insertions(+), 253 deletions(-) create mode 100644 drv/drvf0110.s diff --git a/configure/r0.s b/configure/r0.s index 8fa090bb..ec96c1ee 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -48,6 +48,9 @@ L6216 = $6216; .export InitRAM1571 .export InitRAM1581 .export InitF011 +.export InitSD81 +.export InitSD71 +.export InitSD ;.export L043E ; = $043E; fix! ;.export L0616 ; = $0616; fix! @@ -82,19 +85,24 @@ L6216 = $6216; .import V20F2 .import V20EA .import CheckDrive +.import V2551 ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- - .byte $02,$02 ; 0406 01 03 .. + .byte $00,$00 ; 0406 01 03 .. L0408: .byte $00,$00 ; 0408 03 00 .. L040A: .byte $a0 ;$E0 ; 040A E0 . ; ---------------------------------------------------------------------------- __STARTUP_RUN__: + jsr i_FillRam + .word V2551-V20D9+1 + .word V20D9 + .byte 0 .ifndef config128 jsr L047C ; 040B 20 7C 04 |. .endif - lda firstBoot ; 040E AD C5 88 ... + lda firstBoot ; 040E AD C5 88 ... cmp #$FF ; 0411 C9 FF .. bne L0418 ; 0413 D0 03 .. jmp L04EC ; 0415 4C EC 04 L.. @@ -110,7 +118,7 @@ L0418: bit c128Flag ; 0418 2C 13 C0 tay ; 0423 A8 . lda $8486,y ; 0424 B9 86 84 ... sta V2105 ; 0427 8D 05 21 ..! - jsr L0FB3 ; 042A 20 B3 0F .. + jsr L0FB3 ; 042A 20 B3 0F .. jsr i_MoveData ; 042D 20 B7 C1 .. .word $5000 .word V2150 ;SaveBootCode @@ -119,7 +127,7 @@ L0418: bit c128Flag ; 0418 2C 13 C0 ;bvc L0483 ; 0431 50 50 PP ;and ($00,x) ; 0433 21 00 !. ;.byte $04 ; 0435 04 . - lda #$01 ; 0436 A9 01 .. + lda #$01 ; 0436 A9 01 .. sta NUMDRV ; 0438 8D 8D 84 ... jsr L0558 ; 043B 20 58 05 X. L043E: lda V2104 ; 043E AD 04 21 ..! @@ -161,7 +169,7 @@ L0470: ;brk ; 0475 00 . ;bvc L0478 ; 0476 50 00 P. ;.byte $04 ; 0478 04 . -L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. +L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. ; ---------------------------------------------------------------------------- .ifndef config128 L047C: bit c128Flag ; 047C 2C 13 C0 ,.. @@ -296,40 +304,62 @@ L0557: rts ; 0557 60 ; ---------------------------------------------------------------------------- L0558: jsr ExitTurbo ; 0558 20 32 C2 2. lda ramExpSize ; 055B AD C3 88 ... - beq L0563 ; 055E F0 03 .. + beq L0563 ; 055E F0 03 .. lda L040A ; 0560 AD 0A 04 ... L0563: and #$A0 ; 0563 29 A0 ). sta sysRAMFlg ; 0565 8D C4 88 ... sta sysFlgCopy ; 0568 8D 12 C0 ... - lda V2105 ; 056B AD 05 21 ..! +.if 1 + lda V2105 ; 056B AD 05 21 ..! cmp #$02 ; 056E C9 02 .. bcs L057B ; 0570 B0 09 .. - jsr L0E64 ; 0572 20 64 0E d. - cmp #$FF ; 0575 C9 FF .. + + ; restore/detect drives? + jsr L0E64 ; 0572 20 64 0E d. + + cmp #$FF ; 0575 C9 FF .. bne L057B ; 0577 D0 02 .. lda #$01 ; 0579 A9 01 .. -L057B: sta V2106 ; 057B 8D 06 21 ..! +L057B: + sta V2106 ; 057B 8D 06 21 ..! +.endif +.if 1 lda curDrive ; 057E AD 89 84 ... eor #$01 ; 0581 49 01 I. - jsr SetDevice ; 0583 20 B0 C2 .. + jsr SetDevice ; 0583 20 B0 C2 .. jsr L0E64 ; 0586 20 64 0E d. - cmp #$FF ; 0589 C9 FF .. + cmp #$FF ; 0589 C9 FF .. bne L058F ; 058B D0 02 .. lda #$00 ; 058D A9 00 .. L058F: sta V2107 ; 058F 8D 07 21 ..! +.endif +.if 1 lda ramExpSize ; 0592 AD C3 88 ... beq L05A3 ; 0595 F0 0C .. - lda #$0A ; 0597 A9 0A .. + + lda #$0A ; 0597 A9 0A .. jsr SetDevice ; 0599 20 B0 C2 .. jsr L0E64 ; 059C 20 64 0E d. - cmp #$FF ; 059F C9 FF .. + cmp #$FF ; 0589 C9 FF .. bne L05A5 ; 05A1 D0 02 .. +.endif L05A3: lda #$00 ; 05A3 A9 00 .. L05A5: sta V2108 ; 05A5 8D 08 21 ..! + lda V2104 ; 05A8 AD 04 21 ..! jsr SetDevice ; 05AB 20 B0 C2 .. - jsr L06B2 ; 05AE 20 B2 06 .. - jsr L064A ; 05B1 20 4A 06 J. + + ; restore saved drive + jsr L06B2 ; 05AE 20 B2 06 .. + + ; setup default drive + ldx V2104 + lda V2105 + sta V2106-8,x + jsr SetupDefaulDrives + + ; load required drivers? + jsr L064A ; 05B1 20 4A 06 J. txa ; 05B4 8A . bne L05F7 ; 05B5 D0 40 .@ jsr PurgeTurbo ; 05B7 20 35 C2 5. @@ -342,10 +372,13 @@ L05C1: sta driveType,y ; 05C1 99 8E 84 sta ramBase,y ; 05CA 99 C7 88 ... dey ; 05CD 88 . bpl L05C1 ; 05CE 10 F1 .. - jsr L05F8 ; 05D0 20 F8 05 .. - lda V2106 ; 05D3 AD 06 21 ..! + + ; install drivers in RAM (if available) + jsr L05F8 ; 05D0 20 F8 05 .. + + lda V2106 ; 05D3 AD 06 21 ..! jsr L0769 ; 05D6 20 69 07 i. - lda V2107 ; 05D9 AD 07 21 ..! + lda V2107 ; 05D9 AD 07 21 ..! beq L05E7 ; 05DC F0 09 .. jsr L0739 ; 05DE 20 39 07 9. lda V2107 ; 05E1 AD 07 21 ..! @@ -397,7 +430,7 @@ L0649: rts ; 0649 60 ; ---------------------------------------------------------------------------- L064A: lda V2106 ; 064A AD 06 21 ..! jsr L0672 ; 064D 20 72 06 r. - bne L0671 ; 0650 D0 1F .. + bne L0671 ; 0650 D0 1F .. lda V2107 ; 0652 AD 07 21 ..! jsr L0672 ; 0655 20 72 06 r. bne L0671 ; 0658 D0 17 .. @@ -415,23 +448,31 @@ L0671: rts ; 0671 60 L0672: ldx #$00 ; 0672 A2 00 .. tay ; 0674 A8 . beq L06AA ; 0675 F0 33 .3 - jsr L0A76 ; 0677 20 76 0A v. - lda L06AD,y ; 067A B9 AD 06 ... + + ; get VLIR record offset from type + jsr L0A76 ; 0677 20 76 0A v. + + ; already loaded? + lda L06AD,y ; 067A B9 AD 06 ... bne L06AA ; 067D D0 2B .+ - tya ; 067F 98 . + + tya ; 067F 98 . pha ; 0680 48 H jsr OpenConfigFile ; 0681 20 22 05 ". pla ; 0684 68 h tay ; 0685 A8 . txa ; 0686 8A . bne L06AA ; 0687 D0 21 .! - lda #$FF ; 0689 A9 FF .. + + lda #$FF ; 0689 A9 FF .. sta L06AD,y ; 068B 99 AD 06 ... - lda L0A64,y ; 068E B9 64 0A .d. + + lda L0A64,y ; 068E B9 64 0A .d. sta r7L ; 0691 85 10 .. lda L0A69,y ; 0693 B9 69 0A .i. sta r7H ; 0696 85 11 .. - tya ; 0698 98 . + + tya ; 0698 98 . clc ; 0699 18 . adc #$02 ; 069A 69 02 i. jsr PointRecord ; 069C 20 80 C2 .. @@ -442,6 +483,51 @@ L0672: ldx #$00 ; 0672 A2 00 jsr ReadRecord ; 06A7 20 8C C2 .. L06AA: txa ; 06AA 8A . rts ; 06AB 60 ` + + +SetupDefaulDrives: + jsr SetupInternalFloppy + jsr SetupSDMountD81 + jsr SetupSDMountD71 + rts + +SetupInternalFloppy: + ldx #0 +@3: + lda V2106, x + beq @2 + cmp #DRV_F011_0 + beq @1 + inx + cpx #3 + bne @3 + bra @1 +@2: + lda #DRV_F011_0 + sta V2106, x +@1: + rts + +SetupSDMountD81: + rts + +SetupSDMountD71: + rts + +GetFreeDrive: + ldx #0 +@2: + lda driveType, x + beq @1 + inx + cpx #4 + bne @2 + sec + rts + +@1: clc + rts + ; ---------------------------------------------------------------------------- L06AC: brk ; 06AC 00 . L06AD: brk ; 06AD 00 . @@ -459,7 +545,8 @@ L06B2: lda #$01 ; 06B2 A9 01 ldx V2107 ; 06BF AE 07 21 ..! jsr L06EB ; 06C2 20 EB 06 .. sta V2107 ; 06C5 8D 07 21 ..! - ldy V2104 ; 06C8 AC 04 21 ..! + + ldy V2104 ; 06C8 AC 04 21 ..! lda $03FE,y ; 06CB B9 FE 03 ... and #$7F ; 06CE 29 7F ). ldx V2106 ; 06D0 AE 06 21 ..! @@ -520,10 +607,11 @@ L0736: lda r2L ; 0736 A5 06 L0739: lda curDrive ; 0739 AD 89 84 ... eor #$01 ; 073C 49 01 I. InitDrive: -;inc $d020 - jsr SetDevice ; 073E 20 B0 C2 .. -inc $d020 -inc $d020 + ;ldy curDrive ; 074D AC 89 84 ... + ;lda $8486,y ; 0750 B9 86 84 ... + ;beq L0768 ; 0753 F0 06 .. + + jsr SetDevice ; 073E 20 B0 C2 .. txa ; 0741 8A . bne L0768 ; 0742 D0 24 .$ .ifndef config128 @@ -560,8 +648,17 @@ L077F: cmp #$02 ; 077F C9 02 jmp L07DF ; 0783 4C DF 07 L.. ; ---------------------------------------------------------------------------- L0786: cmp #$03 ; 0786 C9 03 .. - bne L078D ; 0788 D0 03 .. + bne @1 ; 0788 D0 03 .. jmp L07EF ; 078A 4C EF 07 L.. +@1: cmp #DRV_SD_81 + bne @2 + jmp InitSD81 +@2: cmp #DRV_SD_71 + bne @3 + jmp InitSD71 +@3: cmp #DRV_F011_0 + bne L078D + jmp InitF011 ; ---------------------------------------------------------------------------- L078D: cmp #$41 ; 078D C9 41 .A bne L0797 ; 078F D0 06 .. @@ -628,12 +725,42 @@ L07EF: lda V212C ; 07EF AD 2C 21 ; ---------------------------------------------------------------------------- L07FE: rts ; 07FE 60 ` ; ---------------------------------------------------------------------------- -InitF011: - lda V212C ; 07EF AD 2C 21 .,! +InitF011: + lda V212C ; 07EF AD 2C 21 .,! cmp #$04 ; 07F2 C9 03 .. beq L07FE ; 07F4 F0 08 .. + lda #$04 ; 07F6 A9 03 .. sta V212F ; 07F8 8D 2F 21 ./! + jsr InitNewDrive ; 07FB 4C D7 08 L.. + + rts +; ---------------------------------------------------------------------------- +InitSD81: + lda V212C ; 07EF AD 2C 21 .,! + cmp #$06 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$06 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + jmp InitNewDrive ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +InitSD: + lda V212C ; 07EF AD 2C 21 .,! + cmp #DRV_SD_81 + beq L07FE + cmp #DRV_SD_71 + beq L07FE + + lda #DRV_SD_81 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + jmp InitNewDrive ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +InitSD71: + lda V212C ; 07EF AD 2C 21 .,! + cmp #$07 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$07 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! jmp InitNewDrive ; 07FB 4C D7 08 L.. ; ---------------------------------------------------------------------------- AlreadyF011: rts ; 07FE 60 ` @@ -733,8 +860,7 @@ L08D6: rts ; 08D6 60 ; ---------------------------------------------------------------------------- InitNewDrive: ; init drive driver jsr InstallDriver ; 08D7 20 C8 09 .. - - lda V212B ; 08DA AD 2B 21 .+! + lda V212B ; 08DA AD 2B 21 .+! jsr InitDrive ; 08DD 20 3E 07 >. lda firstBoot ; 08E0 AD C5 88 ... cmp #$FF ; 08E3 C9 FF .. @@ -758,6 +884,7 @@ L08FF: dec L180C ; 08FF CE 0C 18 sta $03FE,y ; 0908 99 FE 03 ... lda #$00 ; 090B A9 00 .. sta driveData,y ; 090D 99 BF 88 ... + rts ; 0910 60 ` ; ---------------------------------------------------------------------------- L0911: pha ; 0911 48 H @@ -883,22 +1010,38 @@ L09F0: lda sysRAMFlg ; 09F0 AD C4 88 sta sysRAMFlg ; 09F5 8D C4 88 ... sta sysFlgCopy ; 09F8 8D 12 C0 ... sta L040A ; 09FB 8D 0A 04 ... + + ; stash driver a driver ldy driveType ; 09FE AC 8E 84 ... beq L0A0B ; 0A01 F0 08 .. lda #$08 ; 0A03 A9 08 .. jsr L0A3D ; 0A05 20 3D 0A =. jsr StashRAM ; 0A08 20 C8 C2 .. + + ; stash driver b driver L0A0B: ldy $848F ; 0A0B AC 8F 84 ... beq L0A18 ; 0A0E F0 08 .. lda #$09 ; 0A10 A9 09 .. jsr L0A3D jsr StashRAM + + ; stash driver c driver L0A18: ldy $8490 ; 0A18 AC 90 84 ... - beq L0A25 ; 0A1B F0 08 .. + beq L0A18_D ; 0A1B F0 08 .. lda #$0A ; 0A1D A9 0A .. jsr L0A3D ; 0A1F 20 3D 0A =. jsr StashRAM ; 0A22 20 C8 C2 .. -L0A25: ldy V212F ; 0A25 AC 2F 21 ./! + + ; stash driver d driver +L0A18_D: + ldy $8491 ; 0A18 AC 90 84 ... + beq L0A25 ; 0A1B F0 08 .. + lda #$0B ; 0A1D A9 0A .. + jsr L0A3D ; 0A1F 20 3D 0A =. + jsr StashRAM ; 0A22 20 C8 C2 .. + +L0A25: + ldy V212F ; 0A25 AC 2F 21 ./! lda V212B ; 0A28 AD 2B 21 .+! jsr L0A3D ; 0A2B 20 3D 0A =. jsr StashRAM ; 0A2E 20 C8 C2 .. @@ -981,6 +1124,12 @@ L0A81: ldy #$04 ; 0A81 A0 04 L0A85: and #$0F ; 0A85 29 0F ). tay ; 0A87 A8 . dey ; 0A88 88 . + + ; drive type 4 and above use driver index 3 + cpy #3 + bcc L0A89 + ldy #3 ; use M65 device driver (F011) + L0A89: rts ; 0A89 60 ` ; ---------------------------------------------------------------------------- L0A8A: ldy V212B ; 0A8A AC 2B 21 .+! @@ -1322,7 +1471,8 @@ L0E82: cpx #$00 ; 0E82 E0 00 L0E9D: lda #$00 ; 0E9D A9 00 .. L0E9F: rts ; 0E9F 60 ` ; ---------------------------------------------------------------------------- -L0EA0: jsr L0EF5 ; 0EA0 20 F5 0E .. +L0EA0: + jsr L0EF5 ; 0EA0 20 F5 0E .. lda #$01 ; 0EA3 A9 01 .. sta r2H ; 0EA5 85 07 .. lda #$00 ; 0EA7 A9 00 .. @@ -1375,7 +1525,8 @@ L0EF5: lda r0H ; 0EF5 A5 03 sta V2109 ; 0F01 8D 09 21 ..! rts ; 0F04 60 ` ; ---------------------------------------------------------------------------- -L0F05: ldy V2109 ; 0F05 AC 09 21 ..! +L0F05: + ldy V2109 ; 0F05 AC 09 21 ..! cpy #$20 ; 0F08 C0 20 . bcs L0F15 ; 0F0A B0 09 .. lda V210A,y ; 0F0C B9 0A 21 ..! @@ -1386,7 +1537,10 @@ L0F05: ldy V2109 ; 0F05 AC 09 21 L0F15: jsr InitForIO ; 0F15 20 5C C2 \. LoadW r0, L0F6E jsr L0F74 ; 0F20 20 74 0F t. - beq L0F29 ; 0F23 F0 04 .. + beq L0F29 ; 0F23 F0 04 .. + ;@22: + ; inc $d020 + ; bra @22 jsr DoneWithIO ; 0F25 20 5F C2 _. rts ; 0F28 60 ` ; ---------------------------------------------------------------------------- diff --git a/configure/r1.s b/configure/r1.s index 0a3a8259..3f485f52 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -54,6 +54,9 @@ vdcdata = $d601 .import InitRAM1571 .import InitRAM1581 .import InitF011 +.import InitSD81 +.import InitSD71 +.import InitSD .export V20D9 .export V2102 @@ -79,6 +82,7 @@ vdcdata = $d601 .export V20F2 .export V20EA .export CheckDrive +.export V2551 L6819 = $6819 @@ -573,11 +577,12 @@ L15DF: lda V212E ; 15DF AD 2E 21 ldy #$00 ; 15E9 A0 00 .. lda (r15L),y ; 15EB B1 20 . sta V212B ; 15ED 8D 2B 21 .+! - jsr InitDrive ; 15F0 20 3E 07 >. + jsr InitDrive ; 15F0 20 3E 07 >. ldy V212B ; 15F3 AC 2B 21 .+! lda $8486,y ; 15F6 B9 86 84 ... sta V212C ; 15F9 8D 2C 21 .,! - jmp L161C ; 15FC 4C 1C 16 L.. + jsr L161C ; 15FC 4C 1C 16 L.. + rts ; ---------------------------------------------------------------------------- L15FF: lda V212E ; 15FF AD 2E 21 ..! sta r15H ; 1602 85 21 .! @@ -625,7 +630,8 @@ L1657: inc V212A ; 1657 EE 2A 21 bvc L1623 ; 165B 50 C6 P. L165D: rts ; 165D 60 ` ; ---------------------------------------------------------------------------- -L165E: jmp (r0L) ; 165E 6C 02 00 l.. +L165E: + jmp (r0L) ; 165E 6C 02 00 l.. ; ---------------------------------------------------------------------------- DriveAStr: .byte $18 ; 1661 18 . @@ -750,73 +756,6 @@ L172E: sec ; 172E 38 jsr Rectangle ; 174E 20 24 C1 $. rts ; 1751 60 ` ; ---------------------------------------------------------------------------- -L1752: jsr L1873 ; 1752 20 73 18 s. - lda ramExpSize ; 1755 AD C3 88 ... - beq L1760 ; 1758 F0 06 .. - jsr L1761 ; 175A 20 61 17 a. - jsr L17B2 ; 175D 20 B2 17 .. -L1760: rts ; 1760 60 ` -; ---------------------------------------------------------------------------- -L1761: - LoadW r0, DMAMoveDataStr - lda #$A4 ; 1769 A9 A4 .. - sta r1H ; 176B 85 05 .. -.ifdef config128 - LoadW r11, $BE + CFG_DOUBLE_W -.else - LoadW r11, $BE -.endif - jsr PutString ; 1775 20 48 C1 H. - LoadW r0, DMAMoveDataStr2 - lda #$B2 ; 1780 A9 B2 .. - sta r1H ; 1782 85 05 .. -.ifdef config128 - LoadW r11, $BE + CFG_DOUBLE_W -.else - LoadW r11, $BE -.endif - jsr PutString ; 178C 20 48 C1 H. -L178F: lda sysRAMFlg ; 178F AD C4 88 ... - and #$80 ; 1792 29 80 ). - beq L1798 ; 1794 F0 02 .. - lda #$02 ; 1796 A9 02 .. -L1798: ldy #$01 ; 1798 A0 01 .. - jsr L15CF ; 179A 20 CF 15 .. - rts ; 179D 60 ` -; ---------------------------------------------------------------------------- -DMAMoveDataStr: - .byte $18 ; 179E 18 . - .byte "DMA for" ; 179F 44 4D 41 20 66 6F 72 DMA for - .byte $00 -DMAMoveDataStr2: - .byte $22 ; 17A6 00 22 ." - .byte "MoveData" ; 17A8 4D 6F 76 65 44 61 74 61 MoveData - .byte $22,$00 ; 17B0 22 00 ". -; ---------------------------------------------------------------------------- -L17B2: - LoadW r0, RAMRebootStr - lda #$8D ; 17BA A9 8D .. - sta r1H ; 17BC 85 05 .. -.ifdef config128 - LoadW r11, $BE + CFG_DOUBLE_W -.else - LoadW r11, $BE -.endif - jsr PutString ; 17C6 20 48 C1 H. -L17C9: lda sysRAMFlg ; 17C9 AD C4 88 ... - and #$20 ; 17CC 29 20 ) - beq L17D2 ; 17CE F0 02 .. - lda #$02 ; 17D0 A9 02 .. -L17D2: ldy #$02 ; 17D2 A0 02 .. - jsr L15CF ; 17D4 20 CF 15 .. - rts ; 17D7 60 ` -; ---------------------------------------------------------------------------- -RAMRebootStr: - .byte $18 ; 17D8 18 . - .byte "RAM Reboot" ; 17D9 52 41 4D 20 52 65 62 6F RAM Rebo - ; 17E1 6F 74 ot - .byte $00 ; 17E3 00 . -; ---------------------------------------------------------------------------- ConfigOtherPressVec: lda mouseData ; 17E4 AD 05 85 ... bpl L17EA ; 17E7 10 01 .. @@ -831,13 +770,18 @@ L17EA: jsr L181B ; 17F5 20 1B 18 .. lda ramExpSize ; 17F8 AD C3 88 ... beq L1800 ; 17FB F0 03 .. + jsr L1829 ; 17FD 20 29 18 ). jsr L1829_D + L1800: lda L180C ; 1800 AD 0C 18 ... beq L180B ; 1803 F0 06 .. + + jsr L0FA0 ; 1805 20 A0 0F .. jsr L167C ; 1808 20 7C 16 |. -L180B: rts ; 180B 60 ` +L180B: + rts ; 180B 60 ` ; ---------------------------------------------------------------------------- L180C: brk ; 180C 00 . L180D: @@ -847,7 +791,7 @@ L180D: ; ---------------------------------------------------------------------------- L181B: LoadW V212D, L1B89 - jsr L15FF ; 1825 20 FF 15 .. + jsr L15FF ; 1825 20 FF 15 d .. rts ; 1828 60 ` ; ---------------------------------------------------------------------------- L1829: @@ -858,34 +802,9 @@ L1829: L1829_D: LoadW V212D, L1B99_D jsr L15DF ; 1833 20 DF 15 .. - rts ; 1836 60 ` -; ---------------------------------------------------------------------------- -L1837: lda ramExpSize ; 1837 AD C3 88 ... - beq L1872 ; 183A F0 36 .6 - ldy #$01 ; 183C A0 01 .. - jsr L1441 ; 183E 20 41 14 A. - jsr IsMseInRegion ; 1841 20 B3 C2 .. - beq L1857 ; 1844 F0 11 .. - lda sysRAMFlg ; 1846 AD C4 88 ... - eor #$80 ; 1849 49 80 I. - sta sysRAMFlg ; 184B 8D C4 88 ... - sta sysFlgCopy ; 184E 8D 12 C0 ... - sta $040A ; 1851 8D 0A 04 ... - jmp L178F ; 1854 4C 8F 17 L.. -; ---------------------------------------------------------------------------- -L1857: ldy #$02 ; 1857 A0 02 .. - jsr L1441 ; 1859 20 41 14 A. - jsr IsMseInRegion ; 185C 20 B3 C2 .. - beq L1872 ; 185F F0 11 .. - lda sysRAMFlg ; 1861 AD C4 88 ... - eor #$20 ; 1864 49 20 I - sta sysRAMFlg ; 1866 8D C4 88 ... - sta sysFlgCopy ; 1869 8D 12 C0 ... - sta $040A ; 186C 8D 0A 04 ... - jmp L17C9 ; 186F 4C C9 17 L.. -; ---------------------------------------------------------------------------- -L1872: rts ; 1872 60 ` + rts ; 1836 60 ` ; ---------------------------------------------------------------------------- +.if 0 L1873: LoadW r0, RAMExpStr lda #$75 ; 187B A9 75 .u sta r1H ; 187D 85 05 .. @@ -910,9 +829,10 @@ L1873: LoadW r0, RAMExpStr ; ---------------------------------------------------------------------------- RAMExpStr: .byte $18 ; 18A5 18 . - .byte "RAM expansion: " ; 18A6 52 41 4D 20 65 78 70 61 RAM expa + .byte "RAMe: " ; 18A6 52 41 4D 20 65 78 70 61 RAM expa ; 18AE 6E 73 69 6F 6E 3A 20 nsion: .byte $00 ; 18B5 00 . +.endif ; ---------------------------------------------------------------------------- MenuQuit: jsr DoPreviousMenu ; 18B6 20 90 C1 .. @@ -1145,28 +1065,60 @@ L1AA0: lda #$00 ; 1AA0 A9 00 sta (r15L),y ; 1AA2 91 20 . dey ; 1AA4 88 . bpl L1AA0 ; 1AA5 10 F9 .. - jsr L1C39 ; 1AA7 20 39 1C 9. + + ; no drive + jsr L1C39 ; 1AA7 20 39 1C 9. + jsr L1B5B ; 1AAA 20 5B 1B [. + + jsr CheckF011 ; 1AA7 20 39 1C 9. jsr L1B5B ; 1AAA 20 5B 1B [. + + jsr CheckSD + jsr L1B5B + + ; 1541 (shadowed 1541) jsr L1C41 ; 1AAD 20 41 1C A. jsr L1B5B ; 1AB0 20 5B 1B [. + + ; shadowed 1541 (1541) jsr L1C56 ; 1AB3 20 56 1C V. jsr L1B5B ; 1AB6 20 5B 1B [. - jsr L1C88 ; 1AB9 20 88 1C .. + + ; 1571 + jsr L1C88 ; 1AB9 20 88 1C .. jsr L1B5B ; 1ABC 20 5B 1B [. + + ; 1581 jsr L1C99 ; 1ABF 20 99 1C .. jsr L1B5B ; 1AC2 20 5B 1B [. + .ifndef config128 - jsr L1CAA ; 1AC5 20 AA 1C .. + ; Dir Shadow 1581 + jsr L1CAA ; 1AC5 20 AA 1C .. jsr L1B5B ; 1AC8 20 5B 1B [. .endif + ; RAM 1541 jsr L1C6F ; 1ACB 20 6F 1C o. jsr L1B5B ; 1ACE 20 5B 1B [. + + ; RAM 1571 jsr L1CC3 ; 1AD1 20 C3 1C .. jsr L1B5B ; 1AD4 20 5B 1B [. - jsr L1CDC ; 1AD7 20 DC 1C .. + + ; RAM 1581 + jsr L1CDC ; 1AD7 20 DC 1C .. jsr L1B5B ; 1ADA 20 5B 1B [. - jsr CheckF011 ; 1AA7 20 39 1C 9. + + + ;jsr CheckF011_1 ; 1AA7 20 39 1C 9. + ;jsr L1B5B ; 1AAA 20 5B 1B [. + + jsr CheckSD81 ; 1AA7 20 39 1C 9. jsr L1B5B ; 1AAA 20 5B 1B [. + + jsr CheckSD71 ; 1AA7 20 39 1C 9. + jsr L1B5B ; 1AAA 20 5B 1B [. + lda V212E ; 1ADD AD 2E 21 ..! sta r15H ; 1AE0 85 21 .! lda V212D ; 1AE2 AD 2D 21 .-! @@ -1332,6 +1284,13 @@ L1BA9: .byte OptNoDrive .byte >Opt1541 @@ -1343,6 +1302,12 @@ L1BB2: .byte >OptRAM1571 .byte >OptRAM1581 .byte >OptF011 + .byte >OptF011_1 + .byte >OptSD81 + .byte >OptSD71 + .byte >OptF011_V + .byte >OptSD + ; no drive OptNoDrive: @@ -1436,9 +1401,53 @@ OptF011: .word F011Label .word InitF011 F011Label: - .byte "F011" ; 1BCE 31 35 34 31 1541 + .byte "Internal 3.5", 34 ; 1BCE 31 35 34 31 1541 .byte $00 ; 1BD2 00 . +; F011_1 +OptF011_1: + .byte $05 + .word F011_1Label + .word InitF011 +F011_1Label: + .byte "1565" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + +; SD81 +OptSD81: + .byte $06 + .word SD81Label + .word InitSD81 +SD81Label: + .byte "SD D81" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + +; SD71 +OptSD71: + .byte $07 + .word SD71Label + .word InitSD71 +SD71Label: + .byte "SD D41/D71" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + +; F011_V +OptF011_V: + .byte $08 + .word F011_VLabel + .word InitF011 +F011_VLabel: + .byte "1" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + +; SD +OptSD: + .byte $09 + .word SDLabel + .word InitSD +SDLabel: + .byte "SD Mount" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . L1C39: ldy V212C ; 1C39 AC 2C 21 .,! beq L1C40 ; 1C3C F0 02 .. @@ -1500,13 +1509,67 @@ L1C96: ldy #$00 ; 1C96 A0 00 rts ; 1C98 60 ` ; ---------------------------------------------------------------------------- -CheckF011: lda V212C ; 1C88 AD 2C 21 .,! - cmp #$04 ; 1C8B C9 02 .. +CheckF011_1: + lda V212C ; 1C88 AD 2C 21 .,! + cmp #$05 + beq ShowF011_1 + + cmp #0 + bne L1C96 +ShowF011_1: + ldy #11 + rts + +CheckSD: + lda V212C ; 1C88 AD 2C 21 .,! + cmp #DRV_SD_71 + beq L1C96 + cmp #DRV_SD_81 + beq L1C96 + cmp #0 + bne L1C96 +ShowSD: + ldy #15 + rts + +CheckSD81: + lda V212C ; 1C88 AD 2C 21 .,! + cmp #DRV_SD_71 + beq ShowSD81 + cmp #DRV_SD_81 + bne L1C96 +ShowSD81: + ldy #12 + rts + +CheckSD71: lda V212C ; 1C88 AD 2C 21 .,! + cmp #DRV_SD_81 + beq ShowSD71 + cmp #DRV_SD_71 + bne L1C96 +ShowSD71: + ldy #13 + rts + +CheckF011: + lda V212C ; 1C88 AD 2C 21 .,! + cmp #$04 ; 1C8B C9 02 .. beq ShowF011 ; 1C8D F0 04 .. cmp #$00 ; 1C8F C9 00 .. bne NoF011 ; 1C91 D0 03 .. -ShowF011: ldy #10 ; 1C93 A0 05 .. - rts ; 1C95 60 ` + + ; check if Floppy is already selected + ldy #0 +@1: + lda driveType,y + cmp #DRV_F011_0 + beq NoF011 + iny + cpy #4 + bne @1 +ShowF011: ; 1C93 A0 05 .. + ldy #10 + rts ; 1C95 60 ` ; ---------------------------------------------------------------------------- NoF011: ldy #$00 ; 1C96 A0 00 .. rts ; 1C98 60 ` @@ -1604,7 +1667,8 @@ L1D08: sta L1D9A ; 1D08 8D 9A 1D lda r0L ; 1D12 A5 02 .. cmp #$02 ; 1D14 C9 02 .. beq L1D27 ; 1D16 F0 0F .. - jsr L1D28 ; 1D18 20 28 1D (. + + jsr L1D28 ; 1D18 20 28 1D (. L1D1B: lda V212B ; 1D1B AD 2B 21 .+! jsr L1DF2 ; 1D1E 20 F2 1D .. inc $d020 diff --git a/drv/_drv1581_21hd.s b/drv/_drv1581_21hd.s index 42338530..d2eba0dd 100644 --- a/drv/_drv1581_21hd.s +++ b/drv/_drv1581_21hd.s @@ -973,11 +973,14 @@ __DoneWithIO: lda L9BF1 ; 95A7 AD F1 9B ... sta grirqen ; 95AA 8D 1A D0 ... - lda #$a5 - sta $d02f - lda #$96 - sta $d02f - + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + lda $d031 + ora #$40 + sta $d031 + .if (!.defined(config128)) || .defined(mega65) lda L9BF2 ; 95AD AD F2 9B ... sta CPU_DATA ; 95B0 85 01 .. diff --git a/drv/drv1541.s b/drv/drv1541.s index 3437fdf4..70d503a9 100644 --- a/drv/drv1541.s +++ b/drv/drv1541.s @@ -653,10 +653,10 @@ __DoneWithIO: lda tmpgrirqen sta grirqen - lda #$a5 - sta $d02f - lda #$96 - sta $d02f + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f lda $d031 ora #$40 sta $d031 diff --git a/drv/drv1571.s b/drv/drv1571.s index 76b52658..f28538ef 100644 --- a/drv/drv1571.s +++ b/drv/drv1571.s @@ -804,10 +804,10 @@ __DoneWithIO: lda tmpgrirqen sta grirqen - lda #$a5 - sta $d02f - lda #$96 - sta $d02f + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f lda $d031 ora #$40 sta $d031 @@ -987,8 +987,8 @@ Hst_RecvByte_0: sec Hst_RecvByte_1: lda rasreg - sbc #$31 - bcc Hst_RecvByte_2 + sbc #$28 + bcc Hst_RecvByte_1 and #6 beq Hst_RecvByte_1 Hst_RecvByte_2: @@ -1052,8 +1052,8 @@ Hst_SendByte_01: sec Hst_SendByte_1: lda rasreg - sbc #$31 - bcc Hst_SendByte_2 + sbc #$28 + bcc Hst_SendByte_1 and #6 beq Hst_SendByte_1 Hst_SendByte_2: diff --git a/drv/drv1581_21hd.s b/drv/drv1581_21hd.s index 43593409..cf444dcd 100644 --- a/drv/drv1581_21hd.s +++ b/drv/drv1581_21hd.s @@ -969,12 +969,12 @@ __DoneWithIO: lda L9BF1 ; 95A7 AD F1 9B ... sta grirqen ; 95AA 8D 1A D0 ... - lda #$a5 - sta $d02f - lda #$96 - sta $d02f - lda saveD031 - sta $D031 + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + lda saveD031 + sta $D031 .if (!.defined(config128)) || (.defined(mega65)) diff --git a/drv/drvf011.s b/drv/drvf011.s index 8b48663e..a571d8fe 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -86,6 +86,7 @@ _ReadBuff: __GetBlock: JSR InitForIO JSR ReadBlock + JSR DoneWithIO TXA @@ -165,6 +166,10 @@ __OpenDisk: ;90ba STA tmpDriveType AND #%10111111 STA _driveType,y + + lda #128 + sta curtrk + JSR NewDisk bnex OpenDsk1 JSR GetDirHead @@ -622,26 +627,41 @@ __InitForIO: ;95c6 STA tmpPS SEI -.ifdef mega65 - LoadB CPU_DATA, IO_IN -.endif - -.ifndef mega65 LDA CPU_DATA STA tmpCPU_DATA LoadB CPU_DATA, KRNL_IO_IN -.endif + LDA grirqen STA tmpgrirqen LDA clkreg STA tmpclkreg LDY #0 STY clkreg + STY grirqen LDA #%01111111 STA grirq STA cia1base+13 STA cia2base+13 +.if 1 + lda #>D_IRQHandler + sta irqvec+1 +.if .defined(config128) & (!.defined(mega65)) + sta nmivec+1 +.endif + lda #D_NMIHandler + sta nmivec+1 + lda #curDirHead ;90b1 + LDY #dir2Head ;90b9 + LDY #dir3Head ;90c1 + LDY #D_IRQHandler + sta irqvec+1 +.if .defined(config128) & (!.defined(mega65)) + sta nmivec+1 +.endif + lda #D_NMIHandler + sta nmivec+1 + lda #= 20 + LDA #$00 + ROL + ;EOR #1 + STA $D086 ; side + ;EOR #1 + BEQ @1 + LDA #$14 +@1: + NEG + CLC + ADC r1H + LSR + INC + STA $D085 ; sector + + LDA #$00 + ROR + STA evenFlag + + lda curType + cmp #DRV_F011_0 + bne @2 + + jsr _InitControl + bcs @3 + jsr _FindTrack +@2: + CLC + RTS +@3: + sec + rts + + +_SideMask: + .byte $08, $00 + +_InitControl: + lda control_store + and #$60 + tay + + ldx $D086 ; side + lda _SideMask, x + bne @5 +@5: + ora #$60 ; motor (+led) + ;ora drive + jsr _ControlReg + tya + bne @4 + + jsr _MotorDelay +@4: + lda #$01 ; reset_bp + sta $D081 + jsr _WaitReady + dec $D081 + jsr _WaitReady + + + lda #96 ; steprate + sta $D089 + lda #$FF + sta $D088 + + ; got a disc? + lda $D083 ;statb + and #$08 + beq @err + + ; seek the Track + lda curtrk + bpl @1 + + lda #$10 ; stin + +@3: + lsr $D082 ; stata + bcs @2 + jsr _ExecCommand + inc $D020 + bra @3 +@2: + jsr _SettleHead + lda #0 + sta curtrk +@1: + clc + rts +@err: + inc $d021 + bra @err + sec + rts + + +curtrk: + .byte 0 +control_store: + .byte 0 + +; destroys: y, a, x +_FindTrack: + ldy #0 + lda $D084 ; track we want +@5: + jsr _WaitReady + cmp curtrk + beq @1 + bcc @3 + + inc curtrk + ldy #$18 ; stout + bra @4 +@3: + dec curtrk + ldy #$10 ; stin +@4: + sty $D081 + inc $d020 + bra @5 +@1: + tya + beq @2 + jsr _SettleHead +@2: + rts + +_ControlReg: + pha + jsr _CheckDC + lda #2 + tsb $D080 ; control + jsr _WaitReady + pla + sta $D080 + sta control_store + bra _WaitReady + +_CheckDC: + + rts + +_SettleHead: + jsr _WaitReady + lda #192 ; settle rate + sta $D089 ; step + lda #$14 ; timer (1 step delay) + jsr _ExecCommand + jsr _ExecCommand + jsr _ExecCommand + jsr _ExecCommand + jsr _ExecCommand + jsr _ExecCommand + lda #96 ; step rate + sta $D089 ; step + jsr _WaitReady + rts + +_MotorDelay: + ldx #0 +@1: + inx + stx $D089 ; step + lda #$14 ; time + jsr _ExecCommand + cpx #96 ; step rate + bcc @1 + rts + +_ExecCommand: + STA $D081 +_WaitReady: +@1: + inc $D020 + BIT $D082 + BMI @1 + RTS + +_CheckResult: + JSR _WaitReady + LDA $D082 + AND #$18 + BEQ @1 + + SEC + RTS +@1: + CLC + RTS + +_DriveReady: + JSR _WaitReady + LDA $D082 + AND #$02 + BNE @1 + CLC + RTS +@1: + SEC + RTS + +__WriteBlock: ;9960 +ldy curType +cpy #DRV_F011_0 +bne @111 + brk +@111: + JSR CheckParams + BCC _WriteBlockEnd + + JSR ReadBlockDirBlock + + ; f011 block write here + JSR _SetOperation ; set track, side, sector + BCS _WriteBlockEnd + + JSR _DriveReady ; drive ready, not wrote protect + BCS _WriteBlockEnd + + LDA #$40 + JSR _ExecCommand ; execute read + JSR _CheckResult ; test if read succeeded + BCS _WriteBlockEnd + + LDY #$00 ; skip first 256 bytes if needed + LDA evenFlag + BEQ @1 +@2: + JSR _ReadByte ; read byte without checking if available + INY + BNE @2 +@1: + LDA (r4),Y ; write our 256 byte buffer + JSR _WriteByte + INY + BNE @1 +@4: + LDA $D082 ; read up rest of the buffer + AND #$20 + BNE @3 + JSR _ReadByte ; read byte without checking if available + BRA @4 +@3: + LDA #$80 + JSR _ExecCommand ; write sector + + ; read back written sector + ; here we use this not for checking but to ensure the + ; the next read will be alined, strange + ; TODO: double check why this fails on mega65 if reading + ; the next blick straigt after write command + LDA #$40 ; read command + JSR _ExecCommand ; execute FDC command + JSR _CheckResult ; Test wether read or write succeed? + + LDX #0 + +_WriteBlockEnd: + JSR ReadBlockDirBlock ;998b + + RTS ;998e + +__VerWriteBlock: ;998f + LDX #0 + bbrf 6, curType, VWrBlock3 + JMP DoCacheWrite +VWrBlock3: + RTS ;9886 + +__ChangeDiskDevice: + STA curDrive + STA curDevice + +__EnterTurbo: + ;lda curDrive ; 957B AD 89 84 ... + ;jsr SetDevice ; 957E 20 B0 C2 .. + ;ldx #$00 ; 9581 A2 00 .. + ;rts ; 9583 60 ` + +__NewDisk: +__PurgeTurbo: +__ExitTurbo: +GetDOSError: +__I9042: +__SetGEOSDisk: +GetDError: + LDA #0 + TAX + RTS + + +ClrCacheDat: + .word 0 ;9bb2 + +ClearCache: + bbsf 6, curType, DoClearCache ;9bb4 + RTS + +DoClearCache: + JSR E9C4A ;9bba + LoadW r0, ClrCacheDat ;9c0f + LDA #0 + STA r1L + STA r1H + STA r2H + LDA #2 + STA r2L + LDY curDrive + LDA driveData,y + STA r3L +DoClrCache1: + JSR StashRAM ;9bd9 + INC r1H + BNE DoClrCache1 +DoClrCache2: + LDX #8 ;9be0 +DoClrCache3: + LDA E9C63-1,x ;9be2 + STA r0L-1,x + DEX + BNE DoClrCache3 + RTS + +DoCacheVerify: + LDA r1L ;9beb + CMP #DIR_1581_TRACK + BNE E9BF9 + LDY #$93 ;9bf1 + JSR DoCacheDisk + AND #$20 + RTS +E9BF9: + LDX #0 ;9bf9 + LDA #$ff + RTS + +DoCacheRead: + LDA r1L ;9bfe + CMP #DIR_1581_TRACK + BNE GiveNoError + LDY #%10010001 ;9bfe + JSR DoCacheDisk + LDY #0 + LDA (r4),y + INY + ORA (r4),y + RTS +GiveNoError: + LDX #0 ;9c11 + RTS + +DoCacheWrite: + LDA r1L ;9c14 + CMP #DIR_1581_TRACK + BNE E9C1E + LDY #%10010000 + BNE DoCacheDisk +E9C1E: + LDX #0 ;9c1e + RTS +DoCacheDisk: + JSR E9C4A ;9c21 + TYA + PHA + LDY curDrive + LDA driveData,y + STA r3L + LDY #0 + STY r1L + STY r2L + INY + STY r2H + MoveW r4, r0 + PLA + TAY + JSR DoRAMOp + TAY + JSR DoClrCache2 + TYA + RTS + +E9C4A: + LDX #8 ;9c4a +E9C4C: + LDA r0L-1,x ;9c4c + STA E9C63-1,x + DEX + BNE E9C4C + RTS + +tmpclkreg: + .byte 0 ;9c55 +tmpPS: + .byte 0 ;9c56 +tmpgrirqen: + .byte 0 ;9c57 +tmpCPU_DATA: + .byte 0 ;9c58 +tmpmobenble: + .byte 0 ;9c59 + .byte 0 ;9c5a +errCount: + .byte 0 ;9c60 +tmpDriveType: + .byte 0 ;9c62 +E9C63: + .byte 0 ;9c63 +E9C64: + .byte 0 ;9c64 +borderFlag: + .byte 0 ;9c65 + +cname: + .byte "#" +cname_end: + diff --git a/inc/const.inc b/inc/const.inc index c426b286..250768ab 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -47,6 +47,14 @@ DRV_NULL = 0 DRV_1541 = 1 DRV_1571 = 2 DRV_1581 = 3 + +; for now MEGA65, specific drive types here +DRV_F011_0 = 4 +DRV_F011_1 = 5 +DRV_SD_81 = 6 +DRV_SD_71 = 7 +DRV_F011_V = 8 + DRV_NETWORK = 15 ; various disk @@ -442,3 +450,10 @@ HIGH_Y_MASK = %00011111 SC_FROM_END = %100000000000 SC_FROM_CENTER = %010000000000 SC_SCALE = %110000000000 + +; C65 constants (internal?) +;C65_VIC_INIT1 = $a5 +;C65_VIC_INIT2 = $96 +; we use VICIV mode so use VICIV contants +C65_VIC_INIT1 = $47 +C65_VIC_INIT2 = $53 diff --git a/kernal/files/files6c.s b/kernal/files/files6c.s index 9748d0a2..0a82d309 100644 --- a/kernal/files/files6c.s +++ b/kernal/files/files6c.s @@ -177,6 +177,8 @@ IsDeviceValid: bcc @1 cmp #12 bcs @1 + lda curType + beq @1 jsr ExitTurbo @1: PopB curDevice @2: cmp #8 diff --git a/kernal/hw/hw1b.s b/kernal/hw/hw1b.s index a24b0a3e..11fc672c 100644 --- a/kernal/hw/hw1b.s +++ b/kernal/hw/hw1b.s @@ -98,9 +98,9 @@ ASSERT_NOT_BELOW_IO ; 47, 53 = enable VIC IV ; a5, 96 = enable VIC III - lda #$47 + lda #C65_VIC_INIT1 sta $d02f - lda #$53 + lda #C65_VIC_INIT2 sta $d02f ; enable 800x600 mode @@ -175,9 +175,9 @@ ASSERT_NOT_BELOW_IO sta $d04f .endif .else - lda #$a5 + lda #C65_VIC_INIT1 sta $d02f - lda #$96 + lda #C65_VIC_INIT2 sta $d02f ; enable bitplanes diff --git a/kernal/irq/irq.s b/kernal/irq/irq.s index 170307b3..e8193058 100644 --- a/kernal/irq/irq.s +++ b/kernal/irq/irq.s @@ -160,8 +160,12 @@ _IRQHandler: pla tax lda tempIRQAcc -_NMIHandler: rti +_NMIHandler: + cld + sta tempIRQAcc + pla + jmp (BRKVector) .endif .ifdef use2MHz diff --git a/kernal/mainloop/mainloop1.s b/kernal/mainloop/mainloop1.s index 25eee06b..60c413d1 100644 --- a/kernal/mainloop/mainloop1.s +++ b/kernal/mainloop/mainloop1.s @@ -30,10 +30,10 @@ _MainLoop: ldx CPU_DATA cpx #$30 - bne @HOHO + bne @2 ldx #IO_IN stx CPU_DATA -@HOHO: +@2: .ifdef wheels_screensaver .import RunScreensaver bit saverStatus diff --git a/kernal/start/start64.s b/kernal/start/start64.s index fdce2c7f..088f05ed 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -129,6 +129,7 @@ ASSERT_NOT_BELOW_IO .endif ASSERT_NOT_BELOW_IO + jsr i_FillRam .word $0500 .word dirEntryBuf @@ -142,6 +143,9 @@ ASSERT_NOT_BELOW_IO bpl @6 ; jsr FirstInit + + LDA #0 + STA $D05D ; start with bank $6000-$8000 swapped out so we prevent debugger from beeing destroyed ldx #$00 @@ -150,8 +154,67 @@ ASSERT_NOT_BELOW_IO .ifdef debugger _DebugStart: - brk + brk + jsr FirstInit .endif + +.if 0 + ; run a raster line cycle counter + sei ; interrupts off + + ; 1 mhz + lda $d031 + and #%10111111 + sta $D031 + + lda #0 + ldx #0 +@aaa: + sta $4000, x + sta $4100, x + sta $4200, x + sta $4300, x + inx + bne @aaa + + +@eee: + ldx rasreg + bne @eee +@eee1: + ldx rasreg + beq @eee1 + + lda $D011 + bmi @eee + +@ccc2: + ldx rasreg + beq @bbb + +@ccc: + ; inc + inc $4000, x + bne @ccc1 + inc $4100, x + bne @ccc1 + inc $4200, x + bne @ccc1 + inc $4300, x +@ccc1: + ; wait for next line + cpx rasreg + beq @ccc + + ldx rasreg + jmp @ccc2 + +@bbb: + cli + + +.endif + jsr MouseInit lda #currentInterleave sta interleave @@ -160,18 +223,116 @@ _DebugStart: sta NUMDRV ldy $BA sty curDrive + lda #DRV_TYPE ; see config.inc + +.ifdef mega65 + ; determ proper drive type, + ; from MEGA65 BASIC 10.0 coming there are following options: + ; 1.) + ; preconditions: + ; curDrive is one of the BASIC mapped drives, directing us to + ; F011-0 or F011-1, we don't support booting from other drives and + ; could/shoud hard reset here? In gereral we assume that GEOS + ; holds an disk driver that is in some way compatible to the boot drive. + + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + + ; get MEGA65 DOS drive 0 device number + ; 10113/10114 clear device numbers of the f011 drive, we will + ; manage those independent of dos + lda #$10 + sta r0L + lda #$01 + sta r0H + lda #$01 + sta r1L + lda #$00 + sta r1H + + jsr loadZDriveOffset + ;LDZ #3 + EOM + lda (r0), Z + cmp curDrive + beq @detectDrive0 + + ; get MEGA65 DOS drive 1 device number + ;LDZ #4 + inz + EOM + lda ($02), Z + cmp curDrive + beq @detectDrive1 + + ; unclear how this has been booted + ; still could try to setup drive 0 as real or sd mount + +@detectDrive0: + ; is virtual enabled? + ldx #8 ; DRV_F011_V + lda $D659 + bit #1 + bne @detected + + ; check if real drive + ldx #DRV_F011_0 ; real internal floppy + lda $D6A1 + bit #1 + bne @detected + + ldx #DRV_SD_81 + ; setup d81 offset + bra @detected + +@detectDrive1: + ; check if real drive + ldx #DRV_F011_0 ; real internal floppy + lda $D6A1 + bit #4 + bne @detected + ldx #DRV_SD_81 + ; setup d81 offset + bra @detected + +@detected: + ; redirect DOS device numbers of ther internal drives + ; so GEOS only looks at real serial drives using the DOS + ;LDZ #3 + jsr loadZDriveOffset + lda #28 + EOM + sta (r0), Z + inz + lda #29 + EOM + sta (r0), Z + txa +.endif sta curType sta _driveType,y + + + + ; on MEGA65 we check if we are able to transform + ; from F011 mode to direct access SD mount + ; this is possible if the drive is not a real drive and not virtual + ;lda #8 ; DRV_F011_V, see config.inc + ;sta curType + ;sta _driveType,y + ; This is the original code the cbmfiles version ; has at $5000. OrigResetHandle: sei cld + .ifdef mega65 - ;lda #5|64 - lda #1|64 + lda #3|64 sta graphMode LoadW r5, 720 jsr InitScanLineTab @@ -232,13 +393,64 @@ OrigResetHandle: cpx #30 bne @7 LoadW r9, dirEntryBuf - LoadW EnterDeskTop+1, _ResetHandle + LoadW EnterDeskTop+1, OrigResetHandle LoadB r0L, 0 jsr LdApplic + +loadZDriveOffset: + + ; ok, different ROM versiokn have different locations of the + ; device numbers map for the internal/F011 drives + ; for 910110 ROM it is 010112/010113 + ; for 9110XY ROM it is 010113/010114 + + ; as a simple solution for now we detect the ROM and use + ; ROM < 10 to be 010112/010113, otherwise 010113/010114 + ; default is 2, so for old ROM or unrecognized situations + + PushW r0 + PushW r1 + + lda #$16 + sta r0L + lda #$00 + sta r0H + lda #$02 + sta r1L + lda #$00 + sta r1H + + ldz #0 + EOM + lda (r0), z + cmp 'V' + bne @1 + inz + EOM + lda (r0), z + cmp #'9' + bne @1 + + inz + inz + EOM + lda (r0), z + cmp #'1' + bne @1 + PopW r1 + PopW r0 + ldz #3 + rts +@1: + PopW r1 + PopW r0 + ldz #3 + rts + bootTr: - .byte DIR_TRACK + .byte DIR_1581_TRACK bootSec: - .byte 1 + .byte 3 bootTr2: .byte 0 bootSec2: diff --git a/loader/loader.s b/loader/loader.s index 37c712fc..f9108e89 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -48,7 +48,7 @@ next: .WORD 0 TYS ; just to be sure: stack at $100 SEE ; just to be sure: 8 bit stack EOM - +.if 0 ; 10113/10114 clear device numbers of the f011 drive, we will ; manage those independent of dos lda #$10 @@ -68,13 +68,13 @@ next: .WORD 0 INZ EOM sta ($02), Z - +.endif ; Just to be sure, enable newVic mode, to access eg VIC-3 register $30 ; We don't need Mega65 fast mode here at any price, let's do that ; later maybe, in c65/start.s - LDA #$A5 + LDA #C65_VIC_INIT1 STA $D02F - LDA #$96 + LDA #C65_VIC_INIT2 STA $D02F ; CPU port stuff LDA #$2F @@ -89,13 +89,24 @@ next: .WORD 0 STZ $D019 ; disable VIC interrupts STZ $D01A - lda #$80 + ;lda #$80 ; NTSC + lda #$00 ; PAL sta $d06f -; not working with xemu -; LDA #$00 -; sta $D710 + ; disable HDMI audio + lda #0 + sta $d61a + +; not working with xemu +; disable badline emulation + LDA #$04 + sta $D710 + lda $D05D + and #%10111111 + ;ora #%01000000 + sta $D05D + LDA $D054 ;40 mhz ORA #$40 STA $D054 diff --git a/topdesk/DeskInclude/SearchDisk.inc b/topdesk/DeskInclude/SearchDisk.inc index aeec9753..078773e9 100644 --- a/topdesk/DeskInclude/SearchDisk.inc +++ b/topdesk/DeskInclude/SearchDisk.inc @@ -148,10 +148,12 @@ MemSearchDisk: ldx #0 bne @d10 @d05: LoadB r1L,18 bne @d20 -@d10: cmp #3 - beq @d11 - cmp #4 - bne @d05 ; bei unbek. Laufwerk wird von 1541 ausgegangen +@d10: cmp #7 ; DRV_SD_71 + beq @d05 + ; DRV_F011_0 + ; DRV_F011_1 + ; DRV_SD_81 + ; bei unbek. Laufwerk wird von 1581 ausgegangen @d11: LoadB r1L,40 @d20: LoadW___ r4,$8000 diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index cd050efc..7806e301 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -48,10 +48,12 @@ DispMultiCount: txa jsr SetPattern jsr i_Rectangle .byte 2,12 - .word 222+DOUBLE_W,236+DOUBLE_W +; .word 222+DOUBLE_W,236+DOUBLE_W + .word 222,236 MoveB MultiCount,r0L LoadB r0H,0 - LoadW___ r11,223+DOUBLE_W +; LoadW___ r11,223+DOUBLE_W + LoadW___ r11,223 LoadB r1H,9 lda #%11000000 jsr PutDecimal @@ -560,8 +562,10 @@ GetEqualWindows: ; Ermittlung der Fensternummern, deren Pfadname genau mit dem ClxL = SC_FROM_END | 79 ClxR = SC_FROM_END | 0 .else -ClxL = 240 + DOUBLE_W -ClxR = 319 + DOUBLE_W +;ClxL = 240 + DOUBLE_W +;ClxR = 319 + DOUBLE_W +ClxL = 240 +ClxR = 319 .endif .else ClxL = 240 diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index 4de2aeb4..107b5cfa 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -664,7 +664,20 @@ SetNumDrives: ; Parameter - keine ; R}ckgabewert ; a - Anzahl der verf}gbaren Drives -GetMaxDrives: ldy numDrives +GetMaxDrives: +.ifdef mega65 + ldy #4 +@1: + dey + lda driveType, y + bne @2 + cpy #0 + bne @1 +@2: + iny + tya +.else + ldy numDrives cpy #2 bge @10 lda curDrive @@ -694,6 +707,7 @@ GetMaxDrives: ldy numDrives beq @30 iny bne @30 +.endif rts TestNumDrives: @@ -798,7 +812,8 @@ XErrZeile3: .byte "from TopDesk.",PLAINTEXT,0 XDAcc: jmp DA0 XAssembly: XAutoExec: -XAppl: lda curDrive +XAppl: + lda curDrive cmp #10 bcc XAppl2 lda AutoSwapFlag @@ -1140,13 +1155,20 @@ CLS: ldy #r15H-r0L jsr SetPattern lda c128Flag bpl @64 + lda graphMode + asl + bpl @notScalable + jsr i_Rectangle -; .byte 0,199 - .byte 0,0 -; .word 0,319 ;|DOUBLE_W|ADD1_W - .word 0, SC_FROM_END+0 + (((SC_FROM_END|0) >> 8) << 12) - + .byte 0,<(SC_FROM_END|0) + .word 0, (SC_FROM_END|0) + (((SC_FROM_END|0) >> 8) << 12) + rts +@notScalable: + jsr i_Rectangle + .byte 0,199 + .word 0,319|DOUBLE_W|ADD1_W rts + @64: jsr i_Rectangle .byte 0,199 .word 0,319 diff --git a/topdesk/Include/Symbol/Sym128.erg.inc b/topdesk/Include/Symbol/Sym128.erg.inc index 6628d020..997d066c 100644 --- a/topdesk/Include/Symbol/Sym128.erg.inc +++ b/topdesk/Include/Symbol/Sym128.erg.inc @@ -1,10 +1,10 @@ ; Systemvariablen f}r den C128 ; Version 13.07.89 -ADD1_W = $0000 +ADD1_W = $2000 DoBOp = $c2ec DOUBLE_B = $80 -DOUBLE_W = $0000 +DOUBLE_W = $8000 graphMode = $3f HideOnlyMouse = $c2f2 MoveBData = $c2e3 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index a2657d0d..fa1a06a6 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1592,7 +1592,8 @@ RedrawHead: .else .byte 0,15 .ifdef topdesk128 - .word 0+DOUBLE_W,319+DOUBLE_W+ADD1_W +; .word 0+DOUBLE_W,319+DOUBLE_W+ADD1_W + .word 0,319 .else .word 0,319 .endif @@ -1605,7 +1606,8 @@ RedrawHead: jsr i_Rectangle .byte 1,13 .ifdef topdesk128 - .word 221+DOUBLE_W,237+DOUBLE_W +; .word 221+DOUBLE_W,237+DOUBLE_W + .word 221,237 .else .word 221,237 .endif @@ -2584,13 +2586,29 @@ NormHandler: ; Behandlung der Messages Activate,Close,Restore @99: rts -PrintDriveNames: MoveB numDrives,a7L - LoadWr0 University +PrintDriveNames: +.ifdef mega65 + ; count drives to show, show up to the last drive + ; that has been assigned + ldx #4 +@nd0: + dex + lda driveType,x + bne @nd + cpx #0 + bne @nd0 +@nd: + inx + stx a7L +.else + MoveB numDrives,a7L +.endif + LoadW r0, University jsr LoadCharSet .ifdef topdesk128 - lda graphMode - bpl @40 - jsr UseSystemFont + lda graphMode + bpl @40 + jsr UseSystemFont @40: .endif dec a7L @@ -2613,7 +2631,8 @@ PrintDriveNames: MoveB numDrives,a7L bpl @loop jsr i_PutString .ifdef topdesk128 - .word 5 +DOUBLE_W +; .word 5 +DOUBLE_W + .word 5 .byte 198,0 .else .word 5 @@ -2631,6 +2650,33 @@ PutDrive: ; schreibt DriveName txa pha lda driveType,x + + ldy #<(@none) + ldx #>(@none) + cmp #0 ;DRV_SD_81 + beq @51 + ldy #<(@sd81) + ldx #>(@sd81) + cmp #6 ;DRV_SD_81 + beq @51 + ldy #<(@sd71) + ldx #>(@sd71) + cmp #7 ;DRV_SD_81 + beq @51 + ldy #<(@int) + ldx #>(@int) + cmp #4 ;DRV_F011_0 + beq @51 + ldy #<(@ext) + ldx #>(@ext) + cmp #5 ;DRV_F011_0 + beq @51 + ldy #<(@virt) + ldx #>(@virt) + cmp #8 ;DRV_F011_V + beq @51 + + and #%00000011 tay dey @@ -2650,6 +2696,7 @@ PutDrive: ; schreibt DriveName sta @nr sta @nr+1 LoadW___ r0, @dr +@52: SubVB 10,r11L ; nur low, da immer noch }ber 256 jmp @50 @40: LoadB @nr+1,':' @@ -2660,10 +2707,24 @@ PutDrive: ; schreibt DriveName adc #'A' sta (r0),y jmp NewPutString +@51: sty r0L + stx r0H + ldx #r11 + jsr NormalizeX + SubVW_ 7, r11 + bra @50 + @dr: .byte "x:RAM " @nr: .byte PLAINTEXT,PLAINTEXT,"15" @ty: .byte "41",0 +@sd81: .byte "x:SD D81",0 +@sd71: .byte "x:SD D41/D71",0 +@int: .byte "x:Internal ",0 +@virt: .byte "x:Virtual ",0 +@ext: .byte "x:Ext 1565 ",0 +@none: .byte "x: ??? ",0 + CheckKlick: ; Ermittlung, ob Knopf gehalten oder nicht LoadB dblClickCount,20 @10: lda dblClickCount diff --git a/topdesk/Main/DeskTop.sub2.s b/topdesk/Main/DeskTop.sub2.s index 3bbae1c7..6f0757fd 100644 --- a/topdesk/Main/DeskTop.sub2.s +++ b/topdesk/Main/DeskTop.sub2.s @@ -61,7 +61,8 @@ DispInfo: LoadW___ r0,@db @db: .byte $01 .byte 32,138 .ifdef topdesk128 - .word 54+DOUBLE_W,265+DOUBLE_W +; .word 54+DOUBLE_W,265+DOUBLE_W + .word 54,265 .else .word 54,265 .endif diff --git a/topdesk/Main/DeskTop.sub4.s b/topdesk/Main/DeskTop.sub4.s index f9087818..81c6e64b 100644 --- a/topdesk/Main/DeskTop.sub4.s +++ b/topdesk/Main/DeskTop.sub4.s @@ -75,8 +75,10 @@ Name = MultiFileTab + 145 FIB_OBEN = 40 FIB_UNTEN = 180 .ifdef topdesk128 -FIB_LINKS = 70+DOUBLE_W -FIB_RECHTS = 250+DOUBLE_W +;FIB_LINKS = 70+DOUBLE_W +;FIB_RECHTS = 250+DOUBLE_W +FIB_LINKS = 70 +FIB_RECHTS = 250 .else FIB_LINKS = 70 FIB_RECHTS = 250 diff --git a/topdesk/Main/DeskTop.sub6.s b/topdesk/Main/DeskTop.sub6.s index 1a782cd7..5b609904 100644 --- a/topdesk/Main/DeskTop.sub6.s +++ b/topdesk/Main/DeskTop.sub6.s @@ -189,7 +189,8 @@ __DispFiles: ; Darstellung von FILE__ANZ Fileintr{gen im Textwindow .ifdef topdesk128 @ssub: sta r11L - LoadB r11H, >DOUBLE_W +; LoadB r11H, >DOUBLE_W + LoadB r11H, >0 ldx #r11 jsr NormalizeX lda a3L From a22aabc814fccee0a248234c1f109d339d7aa22c Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 26 Jan 2020 16:43:27 +0100 Subject: [PATCH 066/125] Add skeleton for mount util. --- Makefile | 17 +++++++++++++++-- mount/main.s | 12 ++++++++++++ mount/mount.grc | 10 ++++++++++ mount/mountIcon.cfg | 7 +++++++ mount/mountIcon.s | 24 ++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 mount/main.s create mode 100644 mount/mount.grc create mode 100644 mount/mountIcon.cfg create mode 100644 mount/mountIcon.s diff --git a/Makefile b/Makefile index 190e9f83..cfca4bb2 100755 --- a/Makefile +++ b/Makefile @@ -347,7 +347,7 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg echo \*\*\* Created fresh $@.; \ fi; -$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt $(BUILD_DIR)/config.cvt +$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/config.cvt @if [ -e $(D81_TEMPLATE) ]; then \ cp $(D81_TEMPLATE) $@; \ echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ @@ -356,14 +356,16 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo delete \"65 desktop\"| $(C1541) $@ >/dev/null; \ echo delete \"65 configure\"| $(C1541) $@ >/dev/null; \ echo delete \"geopaint\"| $(C1541) $@ >/dev/null; \ - echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite GW128.CVT | $(C1541) $@ >/dev/null; \ echo geoswrite GPT128.CVT | $(C1541) $@ >/dev/null; \ @@ -401,6 +403,14 @@ $(BUILD_DIR)/configure/configure.o: $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/configure/configure.s -o $@ endif +$(BUILD_DIR)/mount/mount.o: + @mkdir -p `dirname $@` + $(AS) mount/mountIcon.s -o $(BUILD_DIR)/mount/mountIcon.o + $(LD) -C mount/mountIcon.cfg $(BUILD_DIR)/mount/mountIcon.o -o $(BUILD_DIR)/mount/mount.bf + $(GRC) -s $(BUILD_DIR)/mount/mount.s2 -o $(BUILD_DIR)/mount/mount.c mount/mount.grc + sed 's/192/1/g' $(BUILD_DIR)/mount/mount.s2 > $(BUILD_DIR)/mount/mount.s + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/mount/mount.s -o $@ + $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o @@ -425,6 +435,9 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/topdesk/Main/DeskTop.sub7.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub8.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o +$(BUILD_DIR)/mount.cvt: $(BUILD_DIR)/mount/mount.o $(BUILD_DIR)/mount/main.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ diff --git a/mount/main.s b/mount/main.s new file mode 100644 index 00000000..22a09e08 --- /dev/null +++ b/mount/main.s @@ -0,0 +1,12 @@ +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" + + +.export __STARTUP_RUN__ + +.segment "STARTUP" + +__STARTUP_RUN__: + jmp EnterDeskTop diff --git a/mount/mount.grc b/mount/mount.grc new file mode 100644 index 00000000..81540e45 --- /dev/null +++ b/mount/mount.grc @@ -0,0 +1,10 @@ +HEADER AUTO_EXEC "MEGA MOUNT" "MEGA Mount" "V1.0" { + author "Falk Rehwagen" + dostype SEQ + structure SEQ + info "Used to mount D81 or D41/D71 SD image files for mountable drives, save and restore at boot up." + date 25 01 20 13 19 + mode 80only + icon "build/mega65/mount/mount.bf" +} + diff --git a/mount/mountIcon.cfg b/mount/mountIcon.cfg new file mode 100644 index 00000000..0e3d5596 --- /dev/null +++ b/mount/mountIcon.cfg @@ -0,0 +1,7 @@ +MEMORY { + VARS: start = $1000, size = $0100; +} + +SEGMENTS { + ICON: load = VARS, type = ro; +} \ No newline at end of file diff --git a/mount/mountIcon.s b/mount/mountIcon.s new file mode 100644 index 00000000..f51dc18c --- /dev/null +++ b/mount/mountIcon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte %11111111, %11111111, %11111111 +.byte %10010000, %00000000, %01001001 +.byte %10111111, %11111111, %10001001 +.byte %10100000, %00000000, %10001001 +.byte %10101111, %11111100, %10010001 +.byte %10100001, %11110000, %10100001 +.byte %10100000, %00000000, %11000001 +.byte %10111111, %11111111, %10000001 +.byte %10000000, %00000000, %00000001 +.byte %10000000, %11111111, %11100001 +.byte %10001000, %11111111, %11110001 +.byte %10011100, %11111111, %11110001 +.byte %10111110, %11111111, %11111001 +.byte %10000000, %10011101, %10111001 +.byte %10000000, %10101010, %10111001 +.byte %10000000, %10101101, %10111001 +.byte %10000000, %10101010, %10111001 +.byte %10000000, %10011101, %10111001 +.byte %10000000, %11111111, %11111001 +.byte %10000000, %00000000, %00000001 +.byte %11111111, %11111111, %11111111 \ No newline at end of file From f854d3356cf9821fd4faed04ef097cacbaffdc6f Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Tue, 28 Jan 2020 20:16:26 +0100 Subject: [PATCH 067/125] Intermediate checkin mount tool. --- kernal/start/start64.s | 2 +- mount/main.s | 59 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 088f05ed..e8476d57 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -154,7 +154,7 @@ ASSERT_NOT_BELOW_IO .ifdef debugger _DebugStart: - brk + ;brk jsr FirstInit .endif diff --git a/mount/main.s b/mount/main.s index 22a09e08..0a1d5291 100644 --- a/mount/main.s +++ b/mount/main.s @@ -9,4 +9,61 @@ .segment "STARTUP" __STARTUP_RUN__: - jmp EnterDeskTop + + lda firstBoot + cmp #$FF + bne @1 + + ; show dialog to operate the mounts + LoadW r0, SelectDialog + jsr DoDlgBox +@1: + jmp EnterDeskTop + +SelectDialog: + .byte $81 ; standard dialog, light bachground + + .byte DBTXTSTR + .byte 10, 25 + .word Text1 + + .byte OK + .byte 16, 70 + + .byte DB_USR_ROUT + .word DrawDialog + + .byte NULL + +Text1: + .byte "Hello World!", NULL + + +DrawDialog: + lda #3 + jsr SetPattern + + LoadW r3, 50 + LoadW r4, 100 + LoadB r2L, 50 + LoadB r2H, 100 + jsr Rectangle + + jsr LoadImages + + jsr DrawImageList + + rts + +LoadImageList: + rts + +DrawImageList: + rts + + +ImageList: + .repeat 100 + .byte 0 + .endrep + \ No newline at end of file From c8b5d467519504dd44b9f41de2ea524daf01cbb5 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Mon, 24 Feb 2020 22:54:50 +0100 Subject: [PATCH 068/125] Add MEGA CLOCK auto exec. --- Makefile | 15 ++- clock/clock.grc | 8 ++ clock/clockIcon.cfg | 7 + clock/clockIcon.s | 24 ++++ clock/main.s | 282 +++++++++++++++++++++++++++++++++++++++++ kernal/start/start64.s | 2 +- loader/loader.s | 17 ++- mount/main.s | 107 +++++++++++++++- 8 files changed, 455 insertions(+), 7 deletions(-) create mode 100644 clock/clock.grc create mode 100644 clock/clockIcon.cfg create mode 100644 clock/clockIcon.s create mode 100644 clock/main.s diff --git a/Makefile b/Makefile index cfca4bb2..914222bb 100755 --- a/Makefile +++ b/Makefile @@ -347,7 +347,7 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg echo \*\*\* Created fresh $@.; \ fi; -$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/config.cvt +$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/clock.cvt $(BUILD_DIR)/config.cvt @if [ -e $(D81_TEMPLATE) ]; then \ cp $(D81_TEMPLATE) $@; \ echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ @@ -358,6 +358,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo delete \"geopaint\"| $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ @@ -366,6 +367,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite GW128.CVT | $(C1541) $@ >/dev/null; \ echo geoswrite GPT128.CVT | $(C1541) $@ >/dev/null; \ @@ -411,6 +413,14 @@ $(BUILD_DIR)/mount/mount.o: sed 's/192/1/g' $(BUILD_DIR)/mount/mount.s2 > $(BUILD_DIR)/mount/mount.s $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/mount/mount.s -o $@ +$(BUILD_DIR)/clock/clock.o: + @mkdir -p `dirname $@` + $(AS) clock/clockIcon.s -o $(BUILD_DIR)/clock/clockIcon.o + $(LD) -C clock/clockIcon.cfg $(BUILD_DIR)/clock/clockIcon.o -o $(BUILD_DIR)/clock/clock.bf + $(GRC) -s $(BUILD_DIR)/clock/clock.s2 -o $(BUILD_DIR)/clock/clock.c clock/clock.grc + sed 's/192/1/g' $(BUILD_DIR)/clock/clock.s2 > $(BUILD_DIR)/clock/clock.s + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/clock/clock.s -o $@ + $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o @@ -438,6 +448,9 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/mount.cvt: $(BUILD_DIR)/mount/mount.o $(BUILD_DIR)/mount/main.o $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o +$(BUILD_DIR)/clock.cvt: $(BUILD_DIR)/clock/clock.o $(BUILD_DIR)/clock/main.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ diff --git a/clock/clock.grc b/clock/clock.grc new file mode 100644 index 00000000..758a220f --- /dev/null +++ b/clock/clock.grc @@ -0,0 +1,8 @@ +HEADER AUTO_EXEC "MEGA CLOCK" "MEGA Clock" "V1.0" { + author "Falk Rehwagen" + info "Usboot time or set the RTC date and time." + date 25 01 20 13 19 + mode 80only + icon "build/mega65/clock/clock.bf" +} + diff --git a/clock/clockIcon.cfg b/clock/clockIcon.cfg new file mode 100644 index 00000000..dd0dc92a --- /dev/null +++ b/clock/clockIcon.cfg @@ -0,0 +1,7 @@ +MEMORY { + VARS: start = $1000, size = $0600; +} + +SEGMENTS { + ICON: load = VARS, type = ro; +} \ No newline at end of file diff --git a/clock/clockIcon.s b/clock/clockIcon.s new file mode 100644 index 00000000..f51dc18c --- /dev/null +++ b/clock/clockIcon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte %11111111, %11111111, %11111111 +.byte %10010000, %00000000, %01001001 +.byte %10111111, %11111111, %10001001 +.byte %10100000, %00000000, %10001001 +.byte %10101111, %11111100, %10010001 +.byte %10100001, %11110000, %10100001 +.byte %10100000, %00000000, %11000001 +.byte %10111111, %11111111, %10000001 +.byte %10000000, %00000000, %00000001 +.byte %10000000, %11111111, %11100001 +.byte %10001000, %11111111, %11110001 +.byte %10011100, %11111111, %11110001 +.byte %10111110, %11111111, %11111001 +.byte %10000000, %10011101, %10111001 +.byte %10000000, %10101010, %10111001 +.byte %10000000, %10101101, %10111001 +.byte %10000000, %10101010, %10111001 +.byte %10000000, %10011101, %10111001 +.byte %10000000, %11111111, %11111001 +.byte %10000000, %00000000, %00000001 +.byte %11111111, %11111111, %11111111 \ No newline at end of file diff --git a/clock/main.s b/clock/main.s new file mode 100644 index 00000000..7fbd5742 --- /dev/null +++ b/clock/main.s @@ -0,0 +1,282 @@ +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" + + +.export __STARTUP_RUN__ + +.segment "STARTUP" + +DirEntry: + .repeat 64+1+11+4+4+1 + .byte 0 + .endrep + +DateTimeString: + .byte PLAINTEXT +TagZehner: .byte "0" + .byte PLAINTEXT +TagEiner: .byte "0" + .byte PLAINTEXT + .byte "." + .byte PLAINTEXT +MonZehner: .byte "0" + .byte PLAINTEXT +MonEiner: .byte "0" + .byte PLAINTEXT + .byte "." + .byte PLAINTEXT +JahZehner: .byte "0" + .byte PLAINTEXT +JahEiner: .byte "0" + .byte PLAINTEXT + .byte " " + .byte PLAINTEXT +StdZehner: .byte "0" + .byte PLAINTEXT +StdEiner: .byte "0" + .byte PLAINTEXT + .byte ":" + .byte PLAINTEXT +MinZehner: .byte "0" + .byte PLAINTEXT +MinEiner: .byte "0" + .byte PLAINTEXT + .byte " " + .byte NULL + +__STARTUP_RUN__: + + lda firstBoot + cmp #$FF + bne @1 + + ; show dialog to operate the mounts + LoadW r0, SelectDialog + jsr DoDlgBox +@1: + jmp EnterDeskTop + +SelectDialog: + .byte $81 ; standard dialog, light bachground + + .byte DBTXTSTR + .byte 10, 25 + .word Text1 + + .byte OK + .byte 16, 70 + + .byte DB_USR_ROUT + .word DrawDialog + + .byte NULL + +Text1: + .byte "Hello World!", NULL + + +DrawDialog: + lda #3 + jsr SetPattern + + LoadW r3, 50 + LoadW r4, 100 + LoadB r2L, 50 + LoadB r2H, 100 + jsr Rectangle + + jsr LoadImageList + + jsr DrawImageList + + ;jsr OpenDir + ;jsr ReadDir + + jsr GetDateTimeString + + ;LoadW r0, DirEntry + LoadW r0, DateTimeString + LoadW r11, 70 + LoadB r1H, 100 + jsr PutString + rts + +LoadImageList: + rts + +DrawImageList: + rts + +GetDateTimeString: + ; load RTC base for mega65: ffd7110 + ;LoadW r0, $7110 + ;LoadW r1, $0DDF + jsr GetLongUnbounced + sta MySec + ;inc r0L + jsr GetLongUnbounced + sta MyMin + + ;inc r0L + jsr GetLongUnbounced + sta MyStd + + ;inc r0L + jsr GetLongUnbounced + sta MyTag + + + ;inc r0L + jsr GetLongUnbounced + sta MyMonat + + ;inc r0L + jsr GetLongUnbounced + sta MyJahr + + ldx MyTag + lda #TagZehner-TagZehner + jsr DivnSet + ldx MyMonat + lda #MonZehner-TagZehner + jsr DivnSet + ldx MyJahr + lda #JahZehner-TagZehner + jsr DivnSet + ldx MyStd + lda #StdZehner-TagZehner + jsr DivnSet + ldx MyMin + lda #MinZehner-TagZehner + jsr DivnSet + rts + +GetLongUnbounced: + lda #1 + rts + +DivnSet: pha + stx r0L +Div10: LoadB r0H,0 + ldx #r0L + LoadW___ r1,10 + ldy #r1L + jsr Ddiv + pla + tax + lda r0L + clc + adc #$30 + sta TagZehner,x + inx + inx + lda r8L + adc #$30 + sta TagZehner,x + rts + +MyJahr: .byte 0 +MyMonat: .byte 0 +MyTag: .byte 0 +MyStd: .byte 0 +MyMin: .byte 0 +MySec: .byte 0 +ImageList: + .repeat 100 + .byte 0 + .endrep + + OpenDir: + ;; Opendir takes no arguments and returns File descriptor in A + LDA #$12 + STA $D640 + NOP + LDX #$00 + RTS + + + ;; readdir takes the file descriptor returned by opendir as argument + ;; and gets a pointer to a MEGA65 DOS dirent structure. + ;; Again, the annoyance of the MEGA65 Hypervisor requiring a page aligned + ;; transfer area is a nuisance here. We will use $0400-$04FF, and then + ;; copy the result into a regular C dirent structure + ;; + ;; d_ino = first cluster of file + ;; d_off = offset of directory entry in cluster + ;; d_reclen = size of the dirent on disk (32 bytes) + ;; d_type = file/directory type + ;; d_name = name of file + ReadDir: + .if 0 + pha + + ;; First, clear out the dirent + ldx #0 + txa + @l1: sta @dirent,x + dex + bne @l1 + + ;; Third, call the hypervisor trap + ;; File descriptor gets passed in in X. + ;; Result gets written to transfer area we setup at $0400 + + + plx + .endif + tax + ldy #>DirEntry ; write dirent to DirEntry + + lda #$14 + STA $D640 + NOP + + bcs @readDirSuccess + + ;; Return end of directory + lda #$00 + ldx #$00 + RTS + + @readDirSuccess: + .if 0 + ;; Copy file name + ldx #$3f + @l2: lda $0400,x + sta _readdir_dirent+4+2+4+2,x + dex + bpl @l2 + ;; make sure it is null terminated + ldx $0400+64 + lda #$00 + sta _readdir_dirent+4+2+4+2,x + + ;; Inode = cluster from offset 64+1+12 = 77 + ldx #$03 + @l3: lda $0477,x + sta _readdir_dirent+0,x + dex + bpl @l3 + + ;; d_off stays zero as it is not meaningful here + + ;; d_reclen we preload with the length of the file (this saves calling stat() on the MEGA65) + ldx #3 + @l4: lda $0400+64+1+12+4,x + sta _readdir_dirent+4+2,x + dex + bpl @l4 + + ;; File type and attributes + ;; XXX - We should translate these to C style meanings + lda $0400+64+1+12+4+4 + sta _readdir_dirent+4+2+4 + + ;; Return address of dirent structure + lda #<_readdir_dirent + ldx #>_readdir_dirent + .endif + RTS + diff --git a/kernal/start/start64.s b/kernal/start/start64.s index e8476d57..088f05ed 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -154,7 +154,7 @@ ASSERT_NOT_BELOW_IO .ifdef debugger _DebugStart: - ;brk + brk jsr FirstInit .endif diff --git a/loader/loader.s b/loader/loader.s index f9108e89..bf2c637f 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -48,6 +48,7 @@ next: .WORD 0 TYS ; just to be sure: stack at $100 SEE ; just to be sure: 8 bit stack EOM + .if 0 ; 10113/10114 clear device numbers of the f011 drive, we will ; manage those independent of dos @@ -72,16 +73,24 @@ next: .WORD 0 ; Just to be sure, enable newVic mode, to access eg VIC-3 register $30 ; We don't need Mega65 fast mode here at any price, let's do that ; later maybe, in c65/start.s - LDA #C65_VIC_INIT1 - STA $D02F - LDA #C65_VIC_INIT2 - STA $D02F ; CPU port stuff LDA #$2F STA 0 LDA #$37 STA 1 + LDA #C65_VIC_INIT1 + STA $D02F + LDA #C65_VIC_INIT2 + STA $D02F + + LDA #C65_VIC_INIT1 + STA $D02F + LDA #C65_VIC_INIT2 + STA $D02F +@aaa: +; inc $d020 +; jmp @aaa ; Various VIC register stuffs STZ $D030 ; turn ROM mappings / etc OFF diff --git a/mount/main.s b/mount/main.s index 0a1d5291..c447d258 100644 --- a/mount/main.s +++ b/mount/main.s @@ -8,6 +8,11 @@ .segment "STARTUP" +DirEntry: + .repeat 64+1+11+4+4+1 + .byte 0 + .endrep + __STARTUP_RUN__: lda firstBoot @@ -49,10 +54,17 @@ DrawDialog: LoadB r2H, 100 jsr Rectangle - jsr LoadImages + jsr LoadImageList jsr DrawImageList + ;jsr OpenDir + ;jsr ReadDir + + ;LoadW r0, DirEntry + ;LoadW r11, 70 + ;LoadB r1H, 100 + ;jsr PutString rts LoadImageList: @@ -61,6 +73,99 @@ LoadImageList: DrawImageList: rts +OpenDir: + ;; Opendir takes no arguments and returns File descriptor in A + LDA #$12 + STA $D640 + NOP + LDX #$00 + RTS + + + ;; readdir takes the file descriptor returned by opendir as argument + ;; and gets a pointer to a MEGA65 DOS dirent structure. + ;; Again, the annoyance of the MEGA65 Hypervisor requiring a page aligned + ;; transfer area is a nuisance here. We will use $0400-$04FF, and then + ;; copy the result into a regular C dirent structure + ;; + ;; d_ino = first cluster of file + ;; d_off = offset of directory entry in cluster + ;; d_reclen = size of the dirent on disk (32 bytes) + ;; d_type = file/directory type + ;; d_name = name of file +ReadDir: +.if 0 + pha + + ;; First, clear out the dirent + ldx #0 + txa +@l1: sta @dirent,x + dex + bne @l1 + + ;; Third, call the hypervisor trap + ;; File descriptor gets passed in in X. + ;; Result gets written to transfer area we setup at $0400 + + + plx +.endif + tax + ldy #>DirEntry ; write dirent to DirEntry + + lda #$14 + STA $D640 + NOP + + bcs @readDirSuccess + + ;; Return end of directory + lda #$00 + ldx #$00 + RTS + +@readDirSuccess: +.if 0 + ;; Copy file name + ldx #$3f +@l2: lda $0400,x + sta _readdir_dirent+4+2+4+2,x + dex + bpl @l2 + ;; make sure it is null terminated + ldx $0400+64 + lda #$00 + sta _readdir_dirent+4+2+4+2,x + + ;; Inode = cluster from offset 64+1+12 = 77 + ldx #$03 +@l3: lda $0477,x + sta _readdir_dirent+0,x + dex + bpl @l3 + + ;; d_off stays zero as it is not meaningful here + + ;; d_reclen we preload with the length of the file (this saves calling stat() on the MEGA65) + ldx #3 +@l4: lda $0400+64+1+12+4,x + sta _readdir_dirent+4+2,x + dex + bpl @l4 + + ;; File type and attributes + ;; XXX - We should translate these to C style meanings + lda $0400+64+1+12+4+4 + sta _readdir_dirent+4+2+4 + + ;; Return address of dirent structure + lda #<_readdir_dirent + ldx #>_readdir_dirent +.endif + RTS + + ImageList: .repeat 100 From f15edba123723854fa02890b955ec5ab3a6bd484 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 7 Mar 2020 20:15:35 +0100 Subject: [PATCH 069/125] First fully functional version of RTC clock application added. --- clock/clock.grc | 11 +- clock/clockIcon.s | 34 +- clock/main.s | 785 ++++++++++++++++++++++++++++++++++++---------- 3 files changed, 642 insertions(+), 188 deletions(-) diff --git a/clock/clock.grc b/clock/clock.grc index 758a220f..ca655d2f 100644 --- a/clock/clock.grc +++ b/clock/clock.grc @@ -1,8 +1,13 @@ -HEADER AUTO_EXEC "MEGA CLOCK" "MEGA Clock" "V1.0" { +HEADER AUTO_EXEC "MEGA RTC" "MEGA RTC" "V1.0" { author "Falk Rehwagen" - info "Usboot time or set the RTC date and time." - date 25 01 20 13 19 + info "Boot time init or setup of the RTC date and time." + date 20 03 03 21 45 mode 80only icon "build/mega65/clock/clock.bf" + structure VLIR } +MEMORY { + overlaysize 0x1000 + overlaynums 0 +} \ No newline at end of file diff --git a/clock/clockIcon.s b/clock/clockIcon.s index f51dc18c..fccf46b1 100644 --- a/clock/clockIcon.s +++ b/clock/clockIcon.s @@ -2,23 +2,23 @@ .segment "ICON" .byte %11111111, %11111111, %11111111 -.byte %10010000, %00000000, %01001001 -.byte %10111111, %11111111, %10001001 -.byte %10100000, %00000000, %10001001 -.byte %10101111, %11111100, %10010001 -.byte %10100001, %11110000, %10100001 -.byte %10100000, %00000000, %11000001 -.byte %10111111, %11111111, %10000001 .byte %10000000, %00000000, %00000001 -.byte %10000000, %11111111, %11100001 -.byte %10001000, %11111111, %11110001 -.byte %10011100, %11111111, %11110001 -.byte %10111110, %11111111, %11111001 -.byte %10000000, %10011101, %10111001 -.byte %10000000, %10101010, %10111001 -.byte %10000000, %10101101, %10111001 -.byte %10000000, %10101010, %10111001 -.byte %10000000, %10011101, %10111001 -.byte %10000000, %11111111, %11111001 +.byte %10000000, %01111110, %00000001 +.byte %10000001, %10011001, %10000001 +.byte %10000011, %00000001, %01000001 +.byte %10000111, %10011000, %01100001 +.byte %10001000, %01011000, %00010001 +.byte %10001000, %00111000, %00010001 +.byte %10001100, %00011000, %00110001 +.byte %10001000, %00001000, %00010001 +.byte %10000110, %00000000, %01100001 +.byte %10000010, %10000001, %01000001 +.byte %10000001, %10011001, %10000001 +.byte %10000000, %01111110, %00000001 +.byte %10000000, %00000000, %00000001 +.byte %10000000, %00000000, %00000001 +.byte %10111111, %11110000, %11000001 +.byte %10001111, %11000011, %11110001 +.byte %10000011, %00001111, %11111101 .byte %10000000, %00000000, %00000001 .byte %11111111, %11111111, %11111111 \ No newline at end of file diff --git a/clock/main.s b/clock/main.s index 7fbd5742..97a2d276 100644 --- a/clock/main.s +++ b/clock/main.s @@ -8,11 +8,6 @@ .segment "STARTUP" -DirEntry: - .repeat 64+1+11+4+4+1 - .byte 0 - .endrep - DateTimeString: .byte PLAINTEXT TagZehner: .byte "0" @@ -42,100 +37,474 @@ StdEiner: .byte "0" MinZehner: .byte "0" .byte PLAINTEXT MinEiner: .byte "0" + .byte PLAINTEXT + .byte ":" + .byte PLAINTEXT +SecZehner: .byte "0" + .byte PLAINTEXT +SecEiner: .byte "0" .byte PLAINTEXT .byte " " .byte NULL __STARTUP_RUN__: + lda firstBoot + cmp #$FF + bne @1 + + ; show dialog to operate the mounts + LoadW r0, SelectDialog + jsr DoDlgBox - lda firstBoot - cmp #$FF - bne @1 + jmp EnterDeskTop - ; show dialog to operate the mounts - LoadW r0, SelectDialog - jsr DoDlgBox -@1: - jmp EnterDeskTop - -SelectDialog: - .byte $81 ; standard dialog, light bachground +@1: jsr GetRTC + bcs @2 ; branch if no valid GetRTC - .byte DBTXTSTR - .byte 10, 25 - .word Text1 - - .byte OK - .byte 16, 70 - - .byte DB_USR_ROUT - .word DrawDialog + jsr SetTime +@2: + jmp EnterDeskTop + - .byte NULL - -Text1: - .byte "Hello World!", NULL - - -DrawDialog: - lda #3 - jsr SetPattern - - LoadW r3, 50 - LoadW r4, 100 - LoadB r2L, 50 - LoadB r2H, 100 - jsr Rectangle - - jsr LoadImageList - - jsr DrawImageList - - ;jsr OpenDir - ;jsr ReadDir - - jsr GetDateTimeString - - ;LoadW r0, DirEntry - LoadW r0, DateTimeString - LoadW r11, 70 - LoadB r1H, 100 - jsr PutString - rts - -LoadImageList: - rts - -DrawImageList: - rts - -GetDateTimeString: - ; load RTC base for mega65: ffd7110 - ;LoadW r0, $7110 - ;LoadW r1, $0DDF +GetRTC: + ; check if clock is running by checking + ; if seconds are changing for 3s + LoadW r0, $7110 + LoadW r1, $0FFD + jsr GetLongUnbounced sta MySec - ;inc r0L + + lda #30 + sta dblClickCount +@1: + jsr GetLongUnbounced + + ldx dblClickCount + beq @2 + cmp MySec + beq @1 + + ; seconds changed, so read the rtc time now + inc r0L jsr GetLongUnbounced sta MyMin - ;inc r0L + inc r0L jsr GetLongUnbounced sta MyStd - ;inc r0L + and #$80 + beq @10 ; branch if 12h time + + lda MyStd + and #$3F + sta MyStd + bra @20 +@10: + lda MyStd + and #$20 + beq @30 + + ; pm + PushW r0 + PushW r1 + lda MyStd + and #$1F + jsr BcdToDec + + clc + adc #12 + jsr DezBCD + sta MyStd + + PopW r1 + PopW r0 + bra @20 + +@30: ; am + lda MyStd + and #$1F + sta MyStd +@20: + inc r0L jsr GetLongUnbounced sta MyTag - - ;inc r0L + inc r0L jsr GetLongUnbounced sta MyMonat - ;inc r0L + inc r0L jsr GetLongUnbounced sta MyJahr + + clc + rts +@2: + sec ; signal error + rts + +SetRTC: + LoadW r0, $7118 + LoadW r1, $0FFD + + jsr GetLongUnbounced + pha + lda #$41 + jsr SetLong + jsr Wait + + LoadW r0, $7110 + LoadW r1, $0FFD + + ; enable setting the RTC + + lda MySec ;s + jsr SetLong + jsr Wait + + lda MyMin ;m + inc r0L + jsr SetLong + jsr Wait + + inc r0L + + ;lda MyStd ;h + jsr GetLongUnbounced + and #$80 + beq @10 + + lda MyStd + ora #$80 + bra @30 +@10: + LoadB r2L, 0 + PushW r0 + PushW r1 + lda MyStd + jsr BcdToDec + cmp #12 + blt @31 + sec + sbc #12 + tax + LoadB r2L, $20 + txa +@31: + jsr DezBCD + tax + PopW r1 + PopW r0 + txa + ora r2L +@30: + jsr SetLong + jsr Wait + + lda MyTag ;d + inc r0L + jsr SetLong + jsr Wait + + lda MyMonat ;m + inc r0L + jsr SetLong + jsr Wait + + lda MyJahr ;y + inc r0L + jsr SetLong + jsr Wait + + lda #$02 ;wd + inc r0L + jsr SetLong + jsr Wait + + lda #$02 ;ids + inc r0L + jsr SetLong + jsr Wait + + pla + inc r0L + jsr SetLong + jsr Wait + + rts + +SetTime: + jsr RunClock + rts + +GetTime: + MoveW_ keyVector,Oldkey + LoadW keyVector,Mykey + ldx #0 + stx TabZeiger + LoadB TagZehner-1,REV_ON + jsr ShowClock +@20: rts + +Oldkey: .word 0 + + +; Mykey +Mykey: lda keyData + cmp Obergrenze + bgt @5 + cmp #$30 + blt @5 + pha + jsr SetPlain + pla + sta TagZehner,x + jmp @7 +@5: cmp #KEY_RIGHT + bne @10 + jsr SetPlain +@7: iny + cpy #12 + bne @15 + ldy #0 +@15: jmp SetRev +@10: cmp #KEY_DELETE + beq @11 + cmp #KEY_LEFT + bne @100 +@11: jsr SetPlain + dey + bpl @25 + ldy #9 +@25: jmp SetRev +@100: cmp #CR + bne @1000 + jsr SetPlain + jsr GetTimeString + jsr TestTime + beq @120 + tya + pha + lda #2 + jsr Beep + pla + tay + jmp SetRev +@120: jsr RunClock + jsr ShowClock + ;jsr MouseUp + ;ldx #1 + ;jsr UnblockProcess + MoveW_ Oldkey,keyVector + ;LoadB ModDepth,0 + jsr SetRTC + jsr RstrFrmDialogue +@1000: rts + + +SetPlain: + ldy TabZeiger + ldx RevTab,y + lda #PLAINTEXT + sta TagZehner-1,x + rts + +SetRev: + ldx RevTab,y + lda #REV_ON + sta TagZehner-1,x + sty TabZeiger + jsr SetTime + jsr DoneWithIO + jsr SetObUn + jmp ShowClock + +SetObUn: + ldy TabZeiger + lda ObTab,y + sta Obergrenze + rts + +ObTab: .byte $33,$39,$31,$39 + .byte $39,$39,$32,$39,$35,$39, $35,$39 + +; TestTime +; ]berpr}fung +; return +; a = 0 OK +; a = $ff false; y Wert f}r TabZeiger + +TestTime: + lda MyTag + jsr BcdToDec + cmp #0 + bne @10 + ldy #1 +@00: + lda #$ff + rts +@10: cmp #32 + blt @05 + ldy #0 + beq @00 + +@05: lda MyMonat + jsr BcdToDec + cmp #0 + bne @20 +@31: ldy #3 + bne @00 +@20: cmp #13 + blt @30 + ldy #2 + bne @00 +@30: cmp #2 ; Feb + bne @40 + lda MyTag + jsr BcdToDec + cmp #29 + beq @35 + bgt @31 + jmp @th +@35: lda MyJahr + jsr BcdToDec + ror ; /2 + bcc @32 +@33: ldy #1 + jmp @00 +@32: ror ; /4 + bcs @33 + jmp @th +@40: cmp #8 + bge @45 + ror + bcc @42 +@43: jmp @th ; ungerade +@42: lda MyTag + jsr BcdToDec + cmp #31 + bne @43 + ldy #1 + jmp @00 +@45: ror + bcs @42 +@th: clc + lda MyStd + jsr BcdToDec + cmp #24 + bge @th1 + lda #$00 + rts +@th1: ldy #6 + jmp @00 + +; Beep +; a - Anzahl Beep +Beep: sta @AnzBeep + lda #$0f + jsr InitForIO + sta $d418 + lda #$00 + sta $d405 + lda #$f7 + sta $d406 + lda #$11 + sta $d404 + lda #$32 + sta $d401 + lda #$00 + sta $d400 +@10: lda #$0f + sta $d418 + jsr @Wait + lda #$00 + sta $d418 + jsr @Wait + dec @AnzBeep + bne @10 + lda #$10 + sta $d404 + lda #$00 + sta $d418 + jsr DoneWithIO + rts +@Wait: + jsr DoneWithIO + ldx #3 + stx dblClickCount +@20: + ldx dblClickCount + bne @20 + jsr InitForIO + rts +@AnzBeep: .byte 2 + +TabZeiger: + .byte 0 +RevTab: + .byte 0,2,6,8,12,14 + .byte 19,21,25,27,31,33 + +Obergrenze: + .byte "3" + +SelectDialog: + .byte $81 ; standard dialog, light bachground + + .byte DBTXTSTR + .byte 10, 25 + .word Text1 + + .byte CANCEL + .byte 17, 70 + + .byte DB_USR_ROUT + .word DrawDialog + .byte NULL + +Text1: + .byte BOLDON, "Set RTC and system date/time:", NULL + + +DrawDialog: + jsr GetDateTimeString + jsr GetTime + +ShowClock: + LoadW r0, DateTimeString + LoadW r11, 80 + LoadB r1H, 85 + jsr PutString + rts + + +GetDateTimeString: + jsr GetRTC + bcc @2 + + ; init from GEOS time + lda day + jsr DezBCD + sta MyTag + lda month + jsr DezBCD + sta MyMonat + lda year + jsr DezBCD + sta MyJahr + lda hour + jsr DezBCD + sta MyStd + lda minutes + jsr DezBCD + sta MyMin + lda seconds + jsr DezBCD + sta MySec +@2: ldx MyTag lda #TagZehner-TagZehner jsr DivnSet @@ -151,19 +520,52 @@ GetDateTimeString: ldx MyMin lda #MinZehner-TagZehner jsr DivnSet + ldx MySec + lda #SecZehner-TagZehner + jsr DivnSet + rts -GetLongUnbounced: - lda #1 +Wait: + LoadW r2, $71FF + LoadW r3, $0FFD + +@10: + LDZ #0 + EOM + lda (r2), Z + bne @10 + rts +GetLongUnbounced: + LDZ #0 + EOM + lda (r0), Z + EOM + cmp (r0), Z + bne GetLongUnbounced + EOM + cmp (r0), Z + bne GetLongUnbounced + rts + +SetLong: + LDZ #0 + EOM + sta (r0), Z + RTS + DivnSet: pha - stx r0L -Div10: LoadB r0H,0 - ldx #r0L - LoadW___ r1,10 - ldy #r1L - jsr Ddiv + txa + lsr + lsr + lsr + lsr + sta r0L + txa + and #$0F + sta r8L pla tax lda r0L @@ -183,100 +585,147 @@ MyTag: .byte 0 MyStd: .byte 0 MyMin: .byte 0 MySec: .byte 0 -ImageList: - .repeat 100 - .byte 0 - .endrep - - OpenDir: - ;; Opendir takes no arguments and returns File descriptor in A - LDA #$12 - STA $D640 - NOP - LDX #$00 - RTS - - ;; readdir takes the file descriptor returned by opendir as argument - ;; and gets a pointer to a MEGA65 DOS dirent structure. - ;; Again, the annoyance of the MEGA65 Hypervisor requiring a page aligned - ;; transfer area is a nuisance here. We will use $0400-$04FF, and then - ;; copy the result into a regular C dirent structure - ;; - ;; d_ino = first cluster of file - ;; d_off = offset of directory entry in cluster - ;; d_reclen = size of the dirent on disk (32 bytes) - ;; d_type = file/directory type - ;; d_name = name of file - ReadDir: - .if 0 - pha + +DPA = $dc00 +ampm: .byte 0 + +GetTimeString: + lda TagZehner + ldx TagEiner + jsr ASCBCD + sta MyTag - ;; First, clear out the dirent - ldx #0 - txa - @l1: sta @dirent,x - dex - bne @l1 + lda MonZehner + ldx MonEiner + jsr ASCBCD + sta MyMonat + + lda JahZehner + ldx JahEiner + jsr ASCBCD + sta MyJahr + + lda StdZehner + ldx StdEiner + jsr ASCBCD + sta MyStd - ;; Third, call the hypervisor trap - ;; File descriptor gets passed in in X. - ;; Result gets written to transfer area we setup at $0400 + lda MinZehner + ldx MinEiner + jsr ASCBCD + sta MyMin + + lda SecZehner + ldx SecEiner + jsr ASCBCD + sta MySec + rts - plx - .endif - tax - ldy #>DirEntry ; write dirent to DirEntry +SetTime2: + jsr InitForIO + + lda MyTag + jsr BcdToDec + sta day + + lda MyMonat + jsr BcdToDec + sta month - lda #$14 - STA $D640 - NOP + lda MyJahr + jsr BcdToDec + sta year + + LoadB ampm,0 + lda MyStd + jsr BcdToDec + + cmp #24 ; accept 24 to be 0 o'clock + bne @ci + lda #0 +@ci: sta hour - bcs @readDirSuccess + cmp #12 + blt @am + pha + LoadB ampm,$80 + pla + sec + sbc #12 + +@am: jsr DezBCD + clc + adc ampm + sta DPA+$0b - ;; Return end of directory - lda #$00 - ldx #$00 - RTS + lda MyMin + jsr BcdToDec + sta minutes + jsr DezBCD + sta DPA+$0a + + lda MySec + jsr BcdToDec + sta seconds + jsr DezBCD + sta DPA+$09 + + rts + +RunClock: + jsr SetTime2 + lda #$00 + sta DPA+$08 + jsr DoneWithIO + rts +;ASCBCD +; a High +; x Low +; Return a - @readDirSuccess: - .if 0 - ;; Copy file name - ldx #$3f - @l2: lda $0400,x - sta _readdir_dirent+4+2+4+2,x - dex - bpl @l2 - ;; make sure it is null terminated - ldx $0400+64 - lda #$00 - sta _readdir_dirent+4+2+4+2,x - - ;; Inode = cluster from offset 64+1+12 = 77 - ldx #$03 - @l3: lda $0477,x - sta _readdir_dirent+0,x - dex - bpl @l3 - - ;; d_off stays zero as it is not meaningful here - - ;; d_reclen we preload with the length of the file (this saves calling stat() on the MEGA65) - ldx #3 - @l4: lda $0400+64+1+12+4,x - sta _readdir_dirent+4+2,x - dex - bpl @l4 - - ;; File type and attributes - ;; XXX - We should translate these to C style meanings - lda $0400+64+1+12+4+4 - sta _readdir_dirent+4+2+4 - - ;; Return address of dirent structure - lda #<_readdir_dirent - ldx #>_readdir_dirent - .endif - RTS +ASCBCD: + asl + asl + asl + asl + sta r0L + txa + and #$0f + ora r0L + rts + +DezBCD: + sta r0L + LoadB r0H,0 + ldx #r0L + LoadW r1,10 + ldy #r1L + jsr Ddiv + lda r0L + asl + asl + asl + asl + clc + adc r8L + rts + +BcdToDec: + tax + and #$0F + sta r0L + txa + and #$F0 + lsr + ; by 8 plus by 2 + sta r0H + lsr + lsr + clc + adc r0H + clc + adc r0L + rts \ No newline at end of file From a3dfbc6d385df377a42557428a28fc68fb24b032 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 4 Apr 2020 12:33:47 +0200 Subject: [PATCH 070/125] Added high resolution support for the mse1351 input driver. --- input/mse1531.s | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/input/mse1531.s b/input/mse1531.s index 3a337408..1b748f0d 100644 --- a/input/mse1531.s +++ b/input/mse1531.s @@ -106,14 +106,24 @@ UM_6: UM_7: sec eor #$ff + pha adc mouseYPos sta mouseYPos - php - CmpBI mouseYPos, 199 - bcc UM_8 - LoadB mouseYPos, 199 + pla + bpl UM_8a + lda #$FF + bra UM_8 +UM_8a: + lda #0 UM_8: - plp + adc r3H + sta r3H +; php +; CmpBI mouseYPos, 199 +; bcc UM_8 +; LoadB mouseYPos, 199 +;UM_8: +; plp txa eor #$ff adc #0 From c7e23c1a0b9657d9911a8988afcddbb965a9a04c Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 25 Sep 2020 17:59:12 +0200 Subject: [PATCH 071/125] Intermediate source code version that fits the deliverd alpha preview release for the MEGA65 DevKit SD card images. --- MEGA65.md | 13 + MINISWAT.md | 5 + Makefile | 503 +++++++++++++++++++- clock/clock.grc | 7 +- configure/configure65.grc | 2 +- configure/r0.s | 319 +++++++++++-- configure/r1.s | 350 +++++++++++--- drv/drv1571ram.s | 25 +- drv/drv1581ram.s | 48 +- drv/drvf011.s | 564 +++++++++++++++++++++-- drv/drvf0110.s | 5 - folder/application.s | 61 +++ folder/autostart.s | 61 +++ folder/coding.s | 61 +++ folder/desk_accessory.s | 61 +++ folder/document.s | 61 +++ folder/folder.cfg | 8 + folder/font.s | 61 +++ folder/input_driver.s | 61 +++ folder/misc.s | 61 +++ folder/other_data.s | 61 +++ folder/printer_driver.s | 61 +++ folder/utilities.s | 61 +++ inc/diskdrv.inc | 6 + input/joydrv.cfg | 2 +- input/joydrv.grc | 9 + input/joydrv.s | 6 + input/joydrv0.cfg | 10 + input/joydrvIcon.cfg | 7 + input/joydrvIcon.s | 24 + input/joydrv_cvt.cfg | 11 + input/{mse1531.cfg => mse1351.cfg} | 2 +- input/mse1351.grc | 9 + input/{mse1531.s => mse1351.s} | 7 +- input/mse1351Icon.cfg | 7 + input/mse1351Icon.s | 24 + input/mse1351_cvt.cfg | 11 + kernal/c65/map.s | 13 +- kernal/debug/main.s | 220 +++++---- kernal/files/compat.s | 9 + kernal/files/files6c.s | 1 + kernal/graph/inlinefunc.s | 7 +- kernal/graph/mode.s | 14 +- kernal/graph/rect.s | 12 +- kernal/graph/scanline.s | 9 +- kernal/kernal_mega65.cfg | 1 + kernal/load/deskacc.s | 12 +- kernal/mainloop/mainloop2.s | 4 +- kernal/memory/memory2.s | 9 +- kernal/panic/panic.s | 4 +- kernal/reu/reu.s | 119 +++-- kernal/serial/serial1.s | 2 + kernal/sprites/sprites.s | 9 +- kernal/start/start64.s | 79 +++- loader/loader.s | 14 +- mount/IconA.map | 1 + mount/IconB.map | 1 + mount/IconC.map | 1 + mount/IconD.map | 1 + mount/main.s | 711 +++++++++++++++++++++++++++-- mount/mount.grc | 2 +- mse1351_cvt.cfg | 11 + space/main.s | 70 +++ space/space.grc | 10 + space/spaceIcon.cfg | 7 + space/spaceIcon.s | 24 + topdesk/DeskInclude/SearchDisk.inc | 3 +- topdesk/Include/SubDir.src.inc | 15 +- topdesk/Main/DeskTop.main.s | 87 +++- topdesk/Main/DeskTop.sub7.s | 36 +- topdesk/Main/DeskWindows.akt.inc | 6 +- 71 files changed, 3751 insertions(+), 428 deletions(-) create mode 100644 MEGA65.md create mode 100644 MINISWAT.md create mode 100644 folder/application.s create mode 100644 folder/autostart.s create mode 100644 folder/coding.s create mode 100644 folder/desk_accessory.s create mode 100644 folder/document.s create mode 100644 folder/folder.cfg create mode 100644 folder/font.s create mode 100644 folder/input_driver.s create mode 100644 folder/misc.s create mode 100644 folder/other_data.s create mode 100644 folder/printer_driver.s create mode 100644 folder/utilities.s create mode 100644 input/joydrv.grc create mode 100644 input/joydrv0.cfg create mode 100644 input/joydrvIcon.cfg create mode 100644 input/joydrvIcon.s create mode 100644 input/joydrv_cvt.cfg rename input/{mse1531.cfg => mse1351.cfg} (66%) create mode 100644 input/mse1351.grc rename input/{mse1531.s => mse1351.s} (95%) create mode 100644 input/mse1351Icon.cfg create mode 100644 input/mse1351Icon.s create mode 100644 input/mse1351_cvt.cfg create mode 100644 mount/IconA.map create mode 100644 mount/IconB.map create mode 100644 mount/IconC.map create mode 100644 mount/IconD.map create mode 100644 mse1351_cvt.cfg create mode 100644 space/main.s create mode 100644 space/space.grc create mode 100644 space/spaceIcon.cfg create mode 100644 space/spaceIcon.s diff --git a/MEGA65.md b/MEGA65.md new file mode 100644 index 00000000..9e59d3af --- /dev/null +++ b/MEGA65.md @@ -0,0 +1,13 @@ +The memory mapping of the GEOS implementation for MEGA65 is as following: + +bank 0: +bank 1: + - $0000-$2000 DOS vars + - $2000-$FFFF Background video bitmap +bank 2: C65 ROM bank 0 +bank 3: C65 ROM bank 1 +bank 4: + - $0000-$DFFF Foreground video bitmap + - $E000-$FFFF color RAM +bank 5: GEOS bank 0 + - $0000-$1FFF maps to $6000-$7FFF in bank 0 \ No newline at end of file diff --git a/MINISWAT.md b/MINISWAT.md new file mode 100644 index 00000000..a965db88 --- /dev/null +++ b/MINISWAT.md @@ -0,0 +1,5 @@ +MINISWAT is a built in debugger to speed up GEOS development for MEGA65. + +Is it initially loaded in the memory area $6000-$8000 of physical bank 0. On +panic this is mapped in and processed via the debuggers implemention. Some kind +of continue command will map the area back. \ No newline at end of file diff --git a/Makefile b/Makefile index 914222bb..6dd88a7c 100755 --- a/Makefile +++ b/Makefile @@ -2,8 +2,9 @@ VARIANT ?= mega65 DRIVE ?= drvf011 #INPUT ?= megaphn -#INPUT ?= mse1531 +#INPUT ?= mse1351 INPUT ?= joydrv +#INPUT ?= amigamse AS = ca65 LD = ld65 @@ -182,6 +183,7 @@ ifeq ($(VARIANT), mega65) kernal/c65/map.s \ kernal/c65/iojmp.s \ kernal/128k/swapdiskdriver.s \ + kernal/files/compat.s \ kernal/memory/backram.s endif @@ -258,7 +260,7 @@ DRIVER_SOURCES= \ input/megaphn.bin \ input/amigamse.bin \ input/lightpen.bin \ - input/mse1531.bin \ + input/mse1351.bin \ input/koalapad.bin \ input/pcanalog.bin @@ -304,7 +306,7 @@ ALL_BINS= \ $(BUILD_DIR)/input/megaphn.bin \ $(BUILD_DIR)/input/amigamse.bin \ $(BUILD_DIR)/input/lightpen.bin \ - $(BUILD_DIR)/input/mse1531.bin \ + $(BUILD_DIR)/input/mse1351.bin \ $(BUILD_DIR)/input/koalapad.bin \ $(BUILD_DIR)/input/pcanalog.bin @@ -347,7 +349,230 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg echo \*\*\* Created fresh $@.; \ fi; -$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/clock.cvt $(BUILD_DIR)/config.cvt +prmgr128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/PRMGR128.CVT + +pdmgr128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/PDMGR128.CVT + +calc128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/CALC128.CVT + +spell128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/SPELL128.CVT + +spelldata.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/DICT.CVT + +merge128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/GM128.CVT + +alarm128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/ALARM128.CVT + +california.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/CALIF.CVT + +cory.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/CORY.CVT + +dwinelle.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/DWIN.CVT + +roma.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/ROMA.CVT + +university.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/UNIV.CVT + +commfont.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/COMMFONT.CVT + +lwroma.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/LWROMA.CVT + +lwcal.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/LWCAL.CVT + +lwgreek.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/LWGREEK.CVT + +lwbarrows.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/LWBARR.CVT + +notepad.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/NOTE128.CVT + +photo_mgr.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/PHMGR128.CVT + +text_mgr.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TXMGR128.CVT + +gw128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/GW128.CVT + +gpt128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/GPT128.CVT + +paint_drivers.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/PNTDRVRS.CVT + +geolaser.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/GEOLASER.CVT + +text_grabber128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TG128.CVT + +tgfs4128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TGFS4128.CVT + +tgpc2128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TGPC2128.CVT + +tgww128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TGWW128.CVT + +tgg1128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TGG1128.CVT + +tgg2128.cvt: + curl --output $@ http://cbmfiles.com/geos/geosfiles/TGG2128.CVT + +%.CVT: + curl --output $@ http://cbmfiles.com/geos/geosfiles/$@ + +ifdef XCV +1526.CVT +ASC.CVT +BCM120.CVT +CI8510.CVT +CI8510A.CVT +CI8510DS.CVT +CI8510QS.CVT +CIRED.CVT +COMMCOMP.CVT +EPFX80.CVT +EPFX80DS.CVT +EPFX80QS.CVT +EPJX80.CVT +EPLQ1500.CVT +EPLX80.CVT +EPMX80.CVT +EPRED.CVT +GEM10X.CVT +GEMDS.CVT +GEMQS.CVT +IBM51P.CVT +IBM51PDS.CVT +IBM51PQS.CVT +IMW.CVT +IMWDS.CVT +IMWQS.CVT +IMW2.CVT +IMW2DS.CVT +IMW2QS.CVT +LJPAR.CVT +LJSER.CVT +LW21.CVT +MPS801.CVT +MPS803.CVT +MPS1000.CVT +MPS1200.CVT +MPS1200DS.CVT +MPS1200QS.CVT +OK120.CVT +OK120NLQ.CVT +OKML92.CVT +OK10.CVT +OK20.CVT +OLPR2300.CVT +RITECP.CVT +SCRIBE.CVT +SNB15.CVT +SNL10COM.CVT +SNX10.CVT +SNX10DS.CVT +SNX10QS.CVT +SNX10C.CVT +NX1000R.CVT +SSG10.CVT +TOSHP321.CVT +endif + +$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt \ + $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/clock.cvt $(BUILD_DIR)/config.cvt \ + $(BUILD_DIR)/joydrv.cvt $(BUILD_DIR)/mse1351.cvt \ + prmgr128.cvt pdmgr128.cvt alarm128.cvt calc128.cvt \ + spell128.cvt merge128.cvt spelldata.cvt gw128.cvt gpt128.cvt \ + $(BUILD_DIR)/printer_driver.cvt $(BUILD_DIR)/document.cvt \ + $(BUILD_DIR)/font.cvt $(BUILD_DIR)/other_data.cvt \ + $(BUILD_DIR)/misc.cvt \ + $(BUILD_DIR)/coding.cvt \ + $(BUILD_DIR)/input_driver.cvt $(BUILD_DIR)/utilities.cvt \ + $(BUILD_DIR)/application.cvt $(BUILD_DIR)/autostart.cvt $(BUILD_DIR)/desk_accessory.cvt \ + california.cvt cory.cvt dwinelle.cvt roma.cvt university.cvt \ + commfont.cvt lwroma.cvt lwcal.cvt lwgreek.cvt lwbarrows.cvt \ + notepad.cvt photo_mgr.cvt text_mgr.cvt \ + geolaser.cvt paint_drivers.cvt \ + text_grabber128.cvt tgfs4128.cvt tgpc2128.cvt tgww128.cvt \ + tgg1128.cvt tgg2128.cvt \ + 1526.CVT \ + ASC.CVT \ + BCM120.CVT \ + CI8510.CVT \ + CI8510A.CVT \ + CI8510DS.CVT \ + CI8510QS.CVT \ + CIRED.CVT \ + COMMCOMP.CVT \ + EPFX80.CVT \ + EPFX80DS.CVT \ + EPFX80QS.CVT \ + EPJX80.CVT \ + EPLQ1500.CVT \ + EPLX80.CVT \ + EPMX80.CVT \ + EPRED.CVT \ + GEM10X.CVT \ + GEMDS.CVT \ + GEMQS.CVT \ + IBM51P.CVT \ + IBM51PDS.CVT \ + IBM51PQS.CVT \ + IMW.CVT \ + IMWDS.CVT \ + IMWQS.CVT \ + IMW2.CVT \ + IMW2DS.CVT \ + IMW2QS.CVT \ + LJPAR.CVT \ + LJSER.CVT \ + LW21.CVT \ + MPS801.CVT \ + MPS803.CVT \ + MPS1000.CVT \ + MPS1200.CVT \ + MP1200DS.CVT \ + MP1200QS.CVT \ + OK120.CVT \ + OK120NLQ.CVT \ + OKML92.CVT \ + OK10.CVT \ + OK20.CVT \ + OLPR2300.CVT \ + RITECP.CVT \ + SCRIBE.CVT \ + SNB15.CVT \ + SNL10COM.CVT \ + SNX10.CVT \ + SNX10DS.CVT \ + SNX10QS.CVT \ + NX1000R.CVT \ + SNX10C.CVT \ + SSG10.CVT \ + TOSHP321.CVT \ + $(BUILD_DIR)/geospace.cvt @if [ -e $(D81_TEMPLATE) ]; then \ cp $(D81_TEMPLATE) $@; \ echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ @@ -360,17 +585,203 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/mse1351.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ - echo format geos,00 d81 $@ | $(C1541) >/dev/null; \ + echo format mega65\\ geos,00 d81 $@ | $(C1541) >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/mse1351.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/autostart.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/geospace.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite GW128.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite GPT128.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite prmgr128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite pdmgr128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/input_driver.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/document.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/desk_accessory.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/application.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/printer_driver.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/utilities.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/font.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/other_data.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/coding.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/misc.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite gw128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite gpt128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite photo_mgr.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite text_mgr.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite alarm128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite calc128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite notepad.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite spell128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite spelldata.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite merge128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite california.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite cory.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite dwinelle.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite roma.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite university.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite commfont.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwroma.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwcal.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwgreek.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwbarrows.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite paint_drivers.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite geolaser.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite text_grabber128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgfs4128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgpc2128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgww128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgg1128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgg2128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite COMMCOMP.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite 1526.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite ASC.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite BCM120.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510A.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CIRED.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPFX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPFX80DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPFX80QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPJX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPLQ1500.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPLX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPMX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPRED.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GEM10X.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GEMDS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GEMQS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IBM51P.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IBM51PDS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IBM51PQS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMWDS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMWQS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW2.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW2DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW2QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite LJPAR.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite LJSER.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite LW21.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS801.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS803.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS1000.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS1200.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MP1200DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MP1200QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK120.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK120NLQ.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OKML92.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK10.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK20.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OLPR2300.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite RITECP.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SCRIBE.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNB15.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNL10COM.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10C.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite NX1000R.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SSG10.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite TOSHP321.CVT | $(C1541) $@ >/dev/null; \ + echo geosfolder "Startup" "MEGA\\ MOUNT"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Startup" "MEGA\\ RTC"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Input\\ Drivers" "COMM\\ 1351"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Input\\ Drivers" "JOYSTICK"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOWRITE\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOPAINT"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOSPELL\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOMERGE"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Utilities" "GEOLASER"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Utilities" "PAINT\\ DRIVERS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Utilities" "TEXT\\ GRABBER\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "alarm\\ clock"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "calculator"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "photo\\ manager"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "text\\ manager"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "note\\ pad"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "GeoDictionary"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "FleetSystem\\ 4"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "PaperClip\\ II"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "WordWriter\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "C128\\ Generic\\ I"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "C128\\ Generic\\ II"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "California"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Cory"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Dwinelle"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Roma"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "University"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Commodore"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Roma"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Cal"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Greek"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Barrows"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "1526"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ASCII\\ Only"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "BlueChip\\ M120"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510A"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510\\ D.S."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510\\ Q.S."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ RED."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Comm.\\ Compat."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ JX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ LQ-1500"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ LX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ MX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ RED."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Gemini\\ 10x"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Gemini\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Gemini\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriter"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriterDS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriterQS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriter\\ II"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImWrtr\\ II\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImWrtr\\ II\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "LaserJet\\ PAR."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "LaserJet\\ SER."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "LaserWriter\\ 2.1"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-801"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-803"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-1000"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS\\ 1200"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-1200\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS\\ 1200\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Oki\\ 120"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Oki\\ 120\\ NLQ"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Oki\\ ML-92/93"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Okimate\\ 10"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Okimate\\ 20"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Olivetti\\ PR2300"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Riteman\\ C+"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Scribe"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NB-15"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NL-10(com)"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10C"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "NX-1000\\ Rainbow"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ SG-10/15"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Toshiba\\ P321"| $(C1541) $@ >/dev/null; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; @@ -413,6 +824,14 @@ $(BUILD_DIR)/mount/mount.o: sed 's/192/1/g' $(BUILD_DIR)/mount/mount.s2 > $(BUILD_DIR)/mount/mount.s $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/mount/mount.s -o $@ +$(BUILD_DIR)/space/space.o: + @mkdir -p `dirname $@` + $(AS) space/spaceIcon.s -o $(BUILD_DIR)/space/spaceIcon.o + $(LD) -C space/spaceIcon.cfg $(BUILD_DIR)/space/spaceIcon.o -o $(BUILD_DIR)/space/space.bf + $(GRC) -s $(BUILD_DIR)/space/space.s2 -o $(BUILD_DIR)/space/space.c space/space.grc + sed 's/192/1/g' $(BUILD_DIR)/space/space.s2 > $(BUILD_DIR)/space/space.s + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/space/space.s -o $@ + $(BUILD_DIR)/clock/clock.o: @mkdir -p `dirname $@` $(AS) clock/clockIcon.s -o $(BUILD_DIR)/clock/clockIcon.o @@ -421,6 +840,30 @@ $(BUILD_DIR)/clock/clock.o: sed 's/192/1/g' $(BUILD_DIR)/clock/clock.s2 > $(BUILD_DIR)/clock/clock.s $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/clock/clock.s -o $@ +$(BUILD_DIR)/input/joydrvHdr.o: + @mkdir -p `dirname $@` + $(AS) input/joydrvIcon.s -o $(BUILD_DIR)/input/joydrvIcon.o + $(LD) -C input/joydrvIcon.cfg $(BUILD_DIR)/input/joydrvIcon.o -o $(BUILD_DIR)/input/joydrv.bf + $(GRC) -s $(BUILD_DIR)/input/joydrv.s2 -o $(BUILD_DIR)/input/joydrv.c input/joydrv.grc + sed 's/192/1/g' $(BUILD_DIR)/input/joydrv.s2 > $(BUILD_DIR)/input/joydrv.s3 + sed 's/131, 6/131, 10/g' $(BUILD_DIR)/input/joydrv.s3 > $(BUILD_DIR)/input/joydrv.s4 + sed 's/.byte 6/.byte 10/g' $(BUILD_DIR)/input/joydrv.s4 > $(BUILD_DIR)/input/joydrv.s5 + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/input/joydrv.s5 -o $@ + +$(BUILD_DIR)/input/mse1351Hdr.o: + @mkdir -p `dirname $@` + $(AS) input/mse1351Icon.s -o $(BUILD_DIR)/input/mse1351Icon.o + $(LD) -C input/mse1351Icon.cfg $(BUILD_DIR)/input/mse1351Icon.o -o $(BUILD_DIR)/input/mse1351.bf + $(GRC) -s $(BUILD_DIR)/input/mse1351.s2 -o $(BUILD_DIR)/input/mse1351.c input/mse1351.grc + sed 's/192/1/g' $(BUILD_DIR)/input/mse1351.s2 > $(BUILD_DIR)/input/mse1351.s3 + sed 's/131, 6/131, 10/g' $(BUILD_DIR)/input/mse1351.s3 > $(BUILD_DIR)/input/mse1351.s4 + sed 's/.byte 6/.byte 10/g' $(BUILD_DIR)/input/mse1351.s4 > $(BUILD_DIR)/input/mse1351.s5 + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/input/mse1351.s5 -o $@ + +$(BUILD_DIR)/folder/input_driver.o: + @mkdir -p `dirname $@` + $(AS) folder/input_driver.s -o $(BUILD_DIR)/folder/input_driver.o + $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o @@ -448,9 +891,51 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/mount.cvt: $(BUILD_DIR)/mount/mount.o $(BUILD_DIR)/mount/main.o $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o +$(BUILD_DIR)/geospace.cvt: $(BUILD_DIR)/space/space.o $(BUILD_DIR)/space/main.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o + $(BUILD_DIR)/clock.cvt: $(BUILD_DIR)/clock/clock.o $(BUILD_DIR)/clock/main.o $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o +$(BUILD_DIR)/input_driver.cvt: $(BUILD_DIR)/folder/input_driver.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/input_driver.o -m $(BUILD_DIR)/input_driver.map + +$(BUILD_DIR)/application.cvt: $(BUILD_DIR)/folder/application.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/application.o -m $(BUILD_DIR)/application.map + +$(BUILD_DIR)/autostart.cvt: $(BUILD_DIR)/folder/autostart.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/autostart.o -m $(BUILD_DIR)/autostart.map + +$(BUILD_DIR)/desk_accessory.cvt: $(BUILD_DIR)/folder/desk_accessory.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/desk_accessory.o -m $(BUILD_DIR)/desk_accessory.map + +$(BUILD_DIR)/utilities.cvt: $(BUILD_DIR)/folder/utilities.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/utilities.o -m $(BUILD_DIR)/utilities.map + +$(BUILD_DIR)/document.cvt: $(BUILD_DIR)/folder/document.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/document.o -m $(BUILD_DIR)/document.map + +$(BUILD_DIR)/printer_driver.cvt: $(BUILD_DIR)/folder/printer_driver.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/printer_driver.o -m $(BUILD_DIR)/printer_driver.map + +$(BUILD_DIR)/font.cvt: $(BUILD_DIR)/folder/font.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/font.o -m $(BUILD_DIR)/font.map + +$(BUILD_DIR)/other_data.cvt: $(BUILD_DIR)/folder/other_data.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/other_data.o -m $(BUILD_DIR)/other_data.map + +$(BUILD_DIR)/misc.cvt: $(BUILD_DIR)/folder/misc.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/misc.o -m $(BUILD_DIR)/misc.map + +$(BUILD_DIR)/coding.cvt: $(BUILD_DIR)/folder/coding.o + $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/coding.o -m $(BUILD_DIR)/coding.map + +$(BUILD_DIR)/joydrv.cvt: $(BUILD_DIR)/input/joydrvHdr.o $(BUILD_DIR)/input/joydrv.o + $(LD) -C input/joydrv_cvt.cfg -o $@ $(BUILD_DIR)/input/joydrvHdr.o -m $(BUILD_DIR)/joydrv.map $(BUILD_DIR)/input/joydrv.o + +$(BUILD_DIR)/mse1351.cvt: $(BUILD_DIR)/input/mse1351Hdr.o $(BUILD_DIR)/input/mse1351.o + $(LD) -C input/mse1351_cvt.cfg -o $@ $(BUILD_DIR)/input/mse1351Hdr.o -m $(BUILD_DIR)/mse1351.map $(BUILD_DIR)/input/mse1351.o + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ @@ -538,8 +1023,8 @@ $(BUILD_DIR)/input/megaphn.bin: $(BUILD_DIR)/input/megaphn.o input/megaphn.cfg $ $(BUILD_DIR)/input/lightpen.bin: $(BUILD_DIR)/input/lightpen.o input/lightpen.cfg $(DEPS) $(LD) -C input/lightpen.cfg $(BUILD_DIR)/input/lightpen.o -o $@ -$(BUILD_DIR)/input/mse1531.bin: $(BUILD_DIR)/input/mse1531.o input/mse1531.cfg $(DEPS) - $(LD) -C input/mse1531.cfg $(BUILD_DIR)/input/mse1531.o -o $@ +$(BUILD_DIR)/input/mse1351.bin: $(BUILD_DIR)/input/mse1351.o input/mse1351.cfg $(DEPS) + $(LD) -C input/mse1351.cfg $(BUILD_DIR)/input/mse1351.o -o $@ $(BUILD_DIR)/input/koalapad.bin: $(BUILD_DIR)/input/koalapad.o input/koalapad.cfg $(DEPS) $(LD) -C input/koalapad.cfg $(BUILD_DIR)/input/koalapad.o -o $@ diff --git a/clock/clock.grc b/clock/clock.grc index ca655d2f..7b1671ce 100644 --- a/clock/clock.grc +++ b/clock/clock.grc @@ -1,13 +1,10 @@ HEADER AUTO_EXEC "MEGA RTC" "MEGA RTC" "V1.0" { author "Falk Rehwagen" + dostype USR + structure SEQ info "Boot time init or setup of the RTC date and time." date 20 03 03 21 45 mode 80only icon "build/mega65/clock/clock.bf" - structure VLIR } -MEMORY { - overlaysize 0x1000 - overlaynums 0 -} \ No newline at end of file diff --git a/configure/configure65.grc b/configure/configure65.grc index 450599c4..c1b15cae 100644 --- a/configure/configure65.grc +++ b/configure/configure65.grc @@ -9,6 +9,6 @@ HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V6.0" { } MEMORY { - overlaysize 0x1000 + overlaysize 0x107F overlaynums 0,1,2,3,4,5,6,7 } diff --git a/configure/r0.s b/configure/r0.s index ec96c1ee..1a597b6a 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -47,10 +47,14 @@ L6216 = $6216; .export InitShadowed1581 .export InitRAM1571 .export InitRAM1581 +.export InitRAM .export InitF011 +.export InitF011_1 .export InitSD81 .export InitSD71 .export InitSD +.export InitVirtual +.export InitFloppy ;.export L043E ; = $043E; fix! ;.export L0616 ; = $0616; fix! @@ -71,6 +75,7 @@ L6216 = $6216; .import V2106 .import V2107 .import V2108 +.import V2108a .import V2109 .import V210A .import V2150 @@ -152,7 +157,7 @@ L043E: lda V2104 ; 043E AD 04 21 cmp #$03 ; 045E C9 03 .. bne L0470 ; 0460 D0 0E .. L0462: - ; 2 different dreives here not support + ; 2 different drives here not supported ; make us a 1 drive system jsr L0739 ; 0462 20 39 07 9. jsr PurgeTurbo ; 0465 20 35 C2 5. @@ -169,7 +174,7 @@ L0470: ;brk ; 0475 00 . ;bvc L0478 ; 0476 50 00 P. ;.byte $04 ; 0478 04 . -L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. +L0479: jmp EnterDeskTop ; 0479 4C 2C C2 L,. ; ---------------------------------------------------------------------------- .ifndef config128 L047C: bit c128Flag ; 047C 2C 13 C0 ,.. @@ -313,7 +318,7 @@ L0563: and #$A0 ; 0563 29 A0 lda V2105 ; 056B AD 05 21 ..! cmp #$02 ; 056E C9 02 .. bcs L057B ; 0570 B0 09 .. - + ; restore/detect drives? jsr L0E64 ; 0572 20 64 0E d. @@ -389,7 +394,15 @@ L05E7: lda V2108 ; 05E7 AD 08 21 jsr InitDrive ; 05EE 20 3E 07 >. lda V2108 ; 05F1 AD 08 21 ..! jsr L0769 ; 05F4 20 69 07 i. -L05F7: rts ; 05F7 60 +L05F7: + lda V2108a ; 05E7 AD 08 21 ..! + beq L05F7b ; 05EA F0 0B .. + lda #$0B ; 05EC A9 0A .. + jsr InitDrive ; 05EE 20 3E 07 >. + lda V2108a ; 05F1 AD 08 21 ..! + jsr L0769 ; 05F4 20 69 07 i. +L05F7b: + rts ; 05F7 60 ; ---------------------------------------------------------------------------- L05F8: lda ramExpSize ; 05F8 AD C3 88 ... beq L0615 ; 05FB F0 18 .. @@ -437,6 +450,9 @@ L064A: lda V2106 ; 064A AD 06 21 lda V2108 ; 065A AD 08 21 ..! jsr L0672 ; 065D 20 72 06 r. bne L0671 ; 0660 D0 0F .. + lda V2108a ; 065A AD 08 21 ..! + jsr L0672 ; 065D 20 72 06 r. + bne L0671 ; 0660 D0 0F .. ldx #$00 ; 0662 A2 00 .. lda L06AC ; 0664 AD AC 06 ... beq L0671 ; 0667 F0 08 .. @@ -475,7 +491,7 @@ L0672: ldx #$00 ; 0672 A2 00 tya ; 0698 98 . clc ; 0699 18 . adc #$02 ; 069A 69 02 i. - jsr PointRecord ; 069C 20 80 C2 .. + jsr PointRecord ; 069C 20 80 C2 .. lda #$0D ; 069F A9 0D .. sta r2H ; 06A1 85 07 .. lda #$80 ; 06A3 A9 80 .. @@ -486,29 +502,97 @@ L06AA: txa ; 06AA 8A SetupDefaulDrives: + jsr SetupVirtual jsr SetupInternalFloppy jsr SetupSDMountD81 jsr SetupSDMountD71 rts -SetupInternalFloppy: +; potentially, bootet from drive 1 there might +; still be a virtual drive +SetupVirtual: + lda $D68A + bit #4 + beq @1 ; branch if drive 0 is non-virtual ldx #0 @3: + lda V2106, x + cmp #DRV_F011_V + beq @1 + inx + cpx #4 + bne @3 + + ; no virtual drive found + ldx #0 +@4: lda V2106, x beq @2 + inx + cpx #4 + bne @4 + bra @1 + + ; setup virtual +@2: + lda #DRV_F011_V + sta V2106, x + +@1: ; there is already a virtual drive + rts + +SetupInternalFloppy: + ldx #0 +@3: + lda V2106, x cmp #DRV_F011_0 beq @1 inx - cpx #3 + cpx #4 bne @3 + + ; no real floppy yet + ldx #0 +@4: + lda V2106, x + beq @2 + inx + cpx #4 + bne @4 bra @1 -@2: + + ; setup floppy +@2: lda #DRV_F011_0 sta V2106, x @1: rts SetupSDMountD81: + ldx #0 +@3: + lda V2106, x + cmp #DRV_SD_81 + beq @1 + inx + cpx #4 + bne @3 + +; no real floppy yet + ldx #0 +@4: + lda V2106, x + beq @2 + inx + cpx #4 + bne @4 + bra @1 + +; setup floppy +@2: + lda #DRV_SD_81 + sta V2106, x +@1: rts SetupSDMountD71: @@ -552,14 +636,32 @@ L06B2: lda #$01 ; 06B2 A9 01 ldx V2106 ; 06D0 AE 06 21 ..! jsr L06EB ; 06D3 20 EB 06 .. sta V2106 ; 06D6 8D 06 21 ..! + + ; if ram drive, config drive c lda ramExpSize ; 06D9 AD C3 88 ... beq L06E7 ; 06DC F0 09 .. - lda L0408 ; 06DE AD 08 04 ... + + lda L0408 ; 06DE AD 08 04 ... ldx V2108 ; 06E1 AE 08 21 ..! jsr L06EB ; 06E4 20 EB 06 .. L06E7: sta V2108 ; 06E7 8D 08 21 ..! + + ; if ram drive, config drive d + lda ramExpSize ; 06D9 AD C3 88 ... + beq L06E7b ; 06DC F0 09 .. + + lda L0408+1 ; 06DE AD 08 04 ... + ldx V2108a ; 06E1 AE 08 21 ..! + jsr L06EB ; 06E4 20 EB 06 .. +L06E7b: sta V2108a ; 06E7 8D 08 21 ..! + rts ; 06EA 60 ` ; ---------------------------------------------------------------------------- +; init save drive options +; x = detected drive type +; a = saved drive type +; ret a = resulting drive type + L06EB: stx r2L ; 06EB 86 06 .. sta r2H ; 06ED 85 07 .. jsr L09AD ; 06EF 20 AD 09 .. @@ -568,18 +670,28 @@ L06EB: stx r2L ; 06EB 86 06 cmp ramExpSize ; 06F5 CD C3 88 ... bcc L0704 ; 06F8 90 0A .. beq L0704 ; 06FA F0 08 .. - lda r2H ; 06FC A5 07 .. + + ; no ram left, return pure resulting drive type + lda r2H ; 06FC A5 07 .. and #$3F ; 06FE 29 3F )? sta r2H ; 0700 85 07 .. lda r0L ; 0702 A5 02 .. -L0704: sta r0H ; 0704 85 03 .. +L0704: + ; remember next free bank + sta r0H ; 0704 85 03 .. lda r2H ; 0706 A5 07 .. bpl L0711 ; 0708 10 07 .. - lda r0H ; 070A A5 03 .. + + ; init ram drive + lda r0H ; 070A A5 03 .. sta r0L ; 070C 85 02 .. - lda r2H ; 070E A5 07 .. + + ; return resulting drive type + lda r2H ; 070E A5 07 .. rts ; 0710 60 ` ; ---------------------------------------------------------------------------- +; init ram backed drive +; if detected 1571 but save 1541, force to 1541 L0711: and #$0F ; 0711 29 0F ). cmp #$01 ; 0713 C9 01 .. bne L0721 ; 0715 D0 0A .. @@ -591,7 +703,9 @@ L0711: and #$0F ; 0711 29 0F L0721: lda r2H ; 0721 A5 07 .. and #$40 ; 0723 29 40 )@ beq L0736 ; 0725 F0 0F .. - lda r2H ; 0727 A5 07 .. + + ; ram shadow drive + lda r2H ; 0727 A5 07 .. and #$0F ; 0729 29 0F ). cmp r2L ; 072B C5 06 .. bne L0736 ; 072D D0 07 .. @@ -657,8 +771,11 @@ L0786: cmp #$03 ; 0786 C9 03 bne @3 jmp InitSD71 @3: cmp #DRV_F011_0 - bne L078D + bne @4 jmp InitF011 +@4: cmp #DRV_F011_V + bne L078D + jmp InitVirtual ; ---------------------------------------------------------------------------- L078D: cmp #$41 ; 078D C9 41 .A bne L0797 ; 078F D0 06 .. @@ -736,6 +853,17 @@ InitF011: rts ; ---------------------------------------------------------------------------- +InitF011_1: + lda V212C ; 07EF AD 2C 21 .,! + cmp #$05 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + + lda #$05 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + jsr InitNewDrive ; 07FB 4C D7 08 L.. + + rts +; ---------------------------------------------------------------------------- InitSD81: lda V212C ; 07EF AD 2C 21 .,! cmp #$06 ; 07F2 C9 03 .. @@ -744,6 +872,14 @@ InitSD81: sta V212F ; 07F8 8D 2F 21 ./! jmp InitNewDrive ; 07FB 4C D7 08 L.. ; ---------------------------------------------------------------------------- +InitVirtual: + lda V212C ; 07EF AD 2C 21 .,! + cmp #$08 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$08 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + jmp InitNewDrive ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- InitSD: lda V212C ; 07EF AD 2C 21 .,! cmp #DRV_SD_81 @@ -755,6 +891,17 @@ InitSD: sta V212F ; 07F8 8D 2F 21 ./! jmp InitNewDrive ; 07FB 4C D7 08 L.. ; ---------------------------------------------------------------------------- +InitFloppy: + lda V212C ; 07EF AD 2C 21 .,! + cmp #DRV_F011_0 + beq L07FE + cmp #DRV_F011_1 + beq L07FE + + lda #DRV_F011_0 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + jmp InitNewDrive ; 07FB 4C D7 08 L.. +; ---------------------------------------------------------------------------- InitSD71: lda V212C ; 07EF AD 2C 21 .,! cmp #$07 ; 07F2 C9 03 .. @@ -833,18 +980,21 @@ L0873: lda V212C ; 0873 AD 2C 21 sta $03FE,y ; 0895 99 FE 03 ... lda V212B ; 0898 AD 2B 21 .+! jsr InitDrive ; 089B 20 3E 07 >. - jsr L0A8A ; 089E 20 8A 0A .. + + jsr L0A8A ; 089E 20 8A 0A .. dec L180C ; 08A1 CE 0C 18 ... L08A4: rts ; 08A4 60 ` ; ---------------------------------------------------------------------------- +InitRAM: InitRAM1581: L08A5: lda V212C ; 08A5 AD 2C 21 .,! cmp #$83 ; 08A8 C9 83 .. beq L08D6 ; 08AA F0 2A .* lda #$83 ; 08AC A9 83 .. sta V212F ; 08AE 8D 2F 21 ./! - jsr InstallDriver ; 08B1 20 C8 09 .. + jsr InstallDriver ; 08B1 20 C8 09 .. inc NUMDRV ; 08B4 EE 8D 84 ... + lda #$83 ; 08B7 A9 83 .. jsr L0911 ; 08B9 20 11 09 .. ldy V212B ; 08BC AC 2B 21 .+! @@ -877,7 +1027,6 @@ L08F6: jsr SetupDrive ; 08F6 20 05 1E .. lda V212B ; 08F9 AD 2B 21 .+! jsr InitDrive ; 08FC 20 3E 07 >. -inc $d020 L08FF: dec L180C ; 08FF CE 0C 18 ... ldy V212B ; 0902 AC 2B 21 .+! lda $8486,y ; 0905 B9 86 84 ... @@ -971,6 +1120,7 @@ L09A4: inc r0L ; 09A4 E6 02 bcc L098A ; 09AA 90 DE .. rts ; 09AC 60 ` ; ---------------------------------------------------------------------------- +; get RAM block required for RAM backed drive type L09AD: sta r0H ; 09AD 85 03 .. and #$C0 ; 09AF 29 C0 ). beq L09C2 ; 09B1 F0 0F .. @@ -1023,6 +1173,8 @@ L0A0B: ldy $848F ; 0A0B AC 8F 84 beq L0A18 ; 0A0E F0 08 .. lda #$09 ; 0A10 A9 09 .. jsr L0A3D + + ldy $848F jsr StashRAM ; stash driver c driver @@ -1042,6 +1194,7 @@ L0A18_D: L0A25: ldy V212F ; 0A25 AC 2F 21 ./! + lda V212B ; 0A28 AD 2B 21 .+! jsr L0A3D ; 0A2B 20 3D 0A =. jsr StashRAM ; 0A2E 20 C8 C2 .. @@ -1051,6 +1204,10 @@ L0A25: sta r1L ; 0A37 85 04 .. jsr MoveData ; 0A39 20 7E C1 ~. + ldy V212F ; 0A25 AC 2F 21 ./! + cpy #$82 + bne @10 +@10: rts ; 0A3C 60 ` ; ---------------------------------------------------------------------------- L0A3D: pha ; 0A3D 48 H @@ -1087,10 +1244,9 @@ L0A64: .byte 0, $80 ; 0A64 80 brk ; 0A67 00 . .byte $80 ; 0A68 80 . -L0A69: .byte $2f, $3C ; 0A69 3C < - lsr ; 0A6A 4A J - .byte $57 ; 0A6B 57 W - adc a3L ; 0A6C 65 72 er +L0A69: .byte $65, $3C ; 0A69 3C < + .byte $4a ; 0A6A 4A J + .byte $57, $2f, $72 L0A66: brk ; 0A6E 00 . @@ -1139,7 +1295,8 @@ L0A8A: ldy V212B ; 0A8A AC 2B 21 bcc L0A99 ; 0A94 90 03 .. jmp L0C8E ; 0A96 4C 8E 0C L.. ; ---------------------------------------------------------------------------- -L0A99: ldy #$00 ; 0A99 A0 00 .. +L0A99: + ldy #$00 ; 0A99 A0 00 .. tya ; 0A9B 98 . L0A9C: sta curDirHead,y ; 0A9C 99 00 82 ... iny ; 0A9F C8 . @@ -1180,7 +1337,9 @@ L0AE7: dey ; 0AE7 88 sta dir2Head,y ; 0AEB 99 00 89 ... tya ; 0AEE 98 . bne L0AE7 ; 0AEF D0 F6 .. -L0AF1: jsr PutDirHead ; 0AF1 20 4A C2 J. +L0AF1: + jsr PutDirHead ; 0AF1 20 4A C2 J. + jsr L0B1B ; 0AF4 20 1B 0B .. lda #$FF ; 0AF7 A9 FF .. sta $8001 ; 0AF9 8D 01 80 ... @@ -1538,9 +1697,6 @@ L0F15: jsr InitForIO ; 0F15 20 5C C2 LoadW r0, L0F6E jsr L0F74 ; 0F20 20 74 0F t. beq L0F29 ; 0F23 F0 04 .. - ;@22: - ; inc $d020 - ; bra @22 jsr DoneWithIO ; 0F25 20 5F C2 _. rts ; 0F28 60 ` ; ---------------------------------------------------------------------------- @@ -1611,11 +1767,112 @@ L0FAF: dey ; 0FAF 88 rts ; 0FB2 60 ` ; ---------------------------------------------------------------------------- .ifdef mega65 + +FAST_FLAGS = $60 ;$70 +CACHE_BIT = $80 + +HRBustCache: + PushW r0 + PushW r1 + + LoadW r0, $FFF2 + LoadW r1, $0BFF + + lda #(FAST_FLAGS & ($ff - CACHE_BIT)) + ldz #0 + eom + sta (r0), z + + lda #(FAST_FLAGS | CACHE_BIT) + ldz #0 + eom + sta (r0), z + + PopW r1 + PopW r0 + + rts L0FB3: - ; if we are a real mega65 we are able to use some of the ROM - ; mapped banks for GEOS REU - LoadB ramExpSize, 1 - rts + ; if we are a real mega65 we are able to use some of the ROM + ; mapped banks for GEOS REU + ; + ; but starting mega65r2 PCB actual expansion RAM (HyperRAM) + ; may be available at $800000, lets check + ; if it is there and how much, supporting up to 16MB for now + LoadW r0, $0000 + LoadW r1, $0800 + LoadW r2, $0000 + LoadW r3, $0810 + + ldx #0 +@2: + lda #$BD + ldz #0 + eom + sta (r0), z + eom + lda (r0), z + cmp #$BD + beq @1 + inx + bne @2 + bra @noREU + +@1: + jsr HRBustCache + + ldz #0 + eom + lda (r0), z + cmp #$BD + bne @3 + + jsr HRBustCache + + lda #$55 + ldz #0 + eom + sta (r2), z + eom + lda (r2), z + cmp #$55 + bne @3 + + jsr HRBustCache + + lda #$AA + ldz #0 + eom + sta (r2), z + eom + lda (r2), z + cmp #$AA + bne @3 + + jsr HRBustCache + + ldz #0 + eom + lda (r0), z + cmp #$BD + bne @3 + + ; next bank + lda r3L + clc + adc #$10 + beq @4 ; last bank, can't count for it + sta r3L + bra @1 +@4: +@3: + ldx r3L + stx ramExpSize + rts +@noREU: + LoadB ramExpSize, 1 + rts + .else L0FB3: jsr InitForIO ; 0FB3 20 5C C2 \. lda #$00 ; 0FB6 A9 00 .. diff --git a/configure/r1.s b/configure/r1.s index 3f485f52..9cf587d3 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -19,9 +19,10 @@ ;*=$13b1 ;!zone r1 ; ---------------------------------------------------------------------------- - +.ifndef mega65 vdcreg = $d600 vdcdata = $d601 +.endif ; fix! ;L043E = $043E; fix! @@ -53,10 +54,14 @@ vdcdata = $d601 .import InitShadowed1581 .import InitRAM1571 .import InitRAM1581 +.import InitRAM .import InitF011 +.import InitF011_1 .import InitSD81 .import InitSD71 .import InitSD +.import InitVirtual +.import InitFloppy .export V20D9 .export V2102 @@ -66,6 +71,7 @@ vdcdata = $d601 .export V2106 .export V2107 .export V2108 +.export V2108a .export V2109 .export V210A .export V212B @@ -380,7 +386,7 @@ L147C: jmp EnterDeskTop ; 147C 4C 2C C2 ; we are geso64/geos128 as config requires L147F: lda #$80 ; 147F A9 80 .. sta dispBufferOn ; 1481 85 2F ./ - lda curDrive ; 1483 AD 89 84 ... + lda curDrive ; 1483 AD 89 84 ... sta V2104 ; 1486 8D 04 21 ..! tay ; 1489 A8 . lda $8486,y ; 148A B9 86 84 ... @@ -416,7 +422,7 @@ L14A6: lda driveType,y ; 14A6 B9 8E 84 .byte RECTANGLETO .ifdef config128 .ifdef mega65 - .word SC_FROM_END+0 + (((SC_FROM_END|0) >> 8) << 12) + .word SC_FROM_END+0 + (((SC_FROM_END|0) >> 8) << 12) .else .word 319 + CFG_DOUBLE_W + CFG_ADD1_W .endif @@ -428,7 +434,29 @@ L14A6: lda driveType,y ; 14A6 B9 8E 84 .else .byte 199 .endif - .byte NULL + .byte NULL + +.ifdef mega65 +.if 0 + jsr i_GraphicsString + .byte NEWPATTERN + .byte $00 + + .byte MOVEPENTO + .word 0 + (((SC_FROM_END|40) >> 8) << 12) + .byte (SC_FROM_END|40) & $FF + + .byte RECTANGLETO + .word 40 + (((SC_FROM_END|00) >> 8) << 12) + .byte (SC_FROM_END|0) & $FF + + .byte FRAME_RECTO + .word 0 + (((SC_FROM_END|40) >> 8) << 12) + .byte (SC_FROM_END|40) & $FF + + .byte NULL +.endif +.endif .ifdef config128 ; setup resolution specific coordinates @@ -496,7 +524,7 @@ L1518: lda #$01 ; 1518 A9 01 beq L153E ; 1530 F0 0C .. lda #$81 ; 1532 A9 81 .. jsr L0672 ; 1534 20 72 06 r. - lda #$83 ; 1537 A9 83 .. + lda #$83 ; 1537 A9 83 .. jsr L0672 ; 1539 20 72 06 r. bne L1541 ; 153C D0 03 .. L153E: jsr CloseRecordFile ; 153E 20 77 C2 w. @@ -592,7 +620,6 @@ L15FF: lda V212E ; 15FF AD 2E 21 lda (r15L),y ; 160B B1 20 . sta V212B ; 160D 8D 2B 21 .+! jsr InitDrive ; 1610 20 3E 07 >. - inc $d020 ldy V212B ; 1613 AC 2B 21 .+! lda $8486,y ; 1616 B9 86 84 ... sta V212C ; 1619 8D 2C 21 .,! @@ -766,7 +793,6 @@ L17EA: sta L180C ; 17EC 8D 0C 18 ... ;jsr L1837 ; 17EF 20 37 18 7. jsr L180D ; 17F2 20 0D 18 .. - inc $d020 jsr L181B ; 17F5 20 1B 18 .. lda ramExpSize ; 17F8 AD C3 88 ... beq L1800 ; 17FB F0 03 .. @@ -867,7 +893,54 @@ SomeTextDlg: .byte 0 MenuShowInfo: jsr DoPreviousMenu ; 18E9 20 90 C1 .. - ldx #>InfoDlg ; 18EC A2 18 .. + + ; init REU size + lda #0 + sta r0H + lda ramExpSize + asl + rol r0H + asl + rol r0H + asl + rol r0H + asl + rol r0H + asl + rol r0H + asl + rol r0H + sta r0L + + LoadW r1, 10 + ldx #4 +@1: + txa + pha + ldx #r0 + ldy #r1 + jsr Ddiv + pla + tax + lda r8L + clc + adc #'0' + sta REUSize,x + dex + bmi @2 + + CmpWI r0, 0 + bne @1 +@2a: + cpx #$FF + beq @3 + lda #BOLDON + sta REUSize,x + dex + bra @2a +@2: +@3: + ldx #>InfoDlg ; 18EC A2 18 .. lda #OptNoDrive @@ -1307,6 +1406,8 @@ L1BB2: .byte >OptSD71 .byte >OptF011_V .byte >OptSD + .byte >OptFloppy + .byte >OptRAM ; no drive @@ -1408,9 +1509,9 @@ F011Label: OptF011_1: .byte $05 .word F011_1Label - .word InitF011 + .word InitF011_1 F011_1Label: - .byte "1565" ; 1BCE 31 35 34 31 1541 + .byte "External 1565" ; 1BCE 31 35 34 31 1541 .byte $00 ; 1BD2 00 . ; SD81 @@ -1435,9 +1536,9 @@ SD71Label: OptF011_V: .byte $08 .word F011_VLabel - .word InitF011 + .word InitVirtual F011_VLabel: - .byte "1" ; 1BCE 31 35 34 31 1541 + .byte "Virtual" ; 1BCE 31 35 34 31 1541 .byte $00 ; 1BD2 00 . ; SD @@ -1449,6 +1550,24 @@ SDLabel: .byte "SD Mount" ; 1BCE 31 35 34 31 1541 .byte $00 ; 1BD2 00 . +; SD +OptFloppy: + .byte $09 + .word FloppyLabel + .word InitFloppy +FloppyLabel: + .byte "3.5", 34, " Floppy" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + +; RAM drive (1581) +OptRAM: + .byte $83 ; 1C2A 00 83 .. + .word RAMDriveLabel + .word InitRAM +RAMDriveLabel: + .byte "RAM Drive" ; 1C30 52 41 4D 20 31 35 38 31 RAM 1581 + .byte 0 ; 1C38 00 . + L1C39: ldy V212C ; 1C39 AC 2C 21 .,! beq L1C40 ; 1C3C F0 02 .. ldy #$01 ; 1C3E A0 01 .. @@ -1485,8 +1604,8 @@ L1C6C: ldy #$00 ; 1C6C A0 00 L1C6F: lda V212C ; 1C6F AD 2C 21 .,! cmp #$81 ; 1C72 C9 81 .. beq L1C82 ; 1C74 F0 0C .. - cmp #$00 ; 1C76 C9 00 .. - bne L1C85 ; 1C78 D0 0B .. + bit V212C + bpl L1C85 lda #$81 ; 1C7A A9 81 .. jsr L0911 ; 1C7C 20 11 09 .. txa ; 1C7F 8A . @@ -1511,14 +1630,41 @@ L1C96: ldy #$00 ; 1C96 A0 00 ; ---------------------------------------------------------------------------- CheckF011_1: lda V212C ; 1C88 AD 2C 21 .,! - cmp #$05 - beq ShowF011_1 - - cmp #0 + cmp #$05 ; 1C8B C9 02 .. + beq ShowF011_1 ; 1C8D F0 04 .. + + + ; check if Floppy is already selected + ldy #0 +@1: + lda driveType,y + cmp #DRV_F011_1 + beq L1C96 + iny + cpy #4 + bne @1 + + ; no drive with this type + lda V212C + beq @2 + cmp #DRV_F011_0 bne L1C96 -ShowF011_1: - ldy #11 - rts + bra ShowF011_1 +@2: + ldy #0 +@3: + lda driveType,y + cmp #DRV_F011_0 + beq ShowF011_1 + iny + cpy #4 + bne @3 + bra L1C96 + + ; no floppy yet at all +ShowF011_1: ; 1C93 A0 05 .. + ldy #11 + rts ; 1C95 60 ` CheckSD: lda V212C ; 1C88 AD 2C 21 .,! @@ -1532,11 +1678,37 @@ ShowSD: ldy #15 rts +CheckFloppy: + lda V212C ; 1C88 AD 2C 21 .,! + cmp #DRV_F011_0 + beq L1C96 + cmp #DRV_F011_1 + beq L1C96 + cmp #0 + bne L1C96 + + ; show floppy if non of the floppies is in Selection + ldy #0 +@1: + lda driveType,y + cmp #DRV_F011_0 + beq L1C96 + cmp #DRV_F011_1 + beq L1C96 + iny + cpy #4 + bne @1 + + ldy #16 + rts + CheckSD81: lda V212C ; 1C88 AD 2C 21 .,! cmp #DRV_SD_71 beq ShowSD81 cmp #DRV_SD_81 + beq ShowSD81 + cmp #DRV_F011_V bne L1C96 ShowSD81: ldy #12 @@ -1546,17 +1718,48 @@ CheckSD71: lda V212C ; 1C88 AD 2C 21 cmp #DRV_SD_81 beq ShowSD71 cmp #DRV_SD_71 - bne L1C96 + beq ShowSD71 + cmp #DRV_F011_V + bne L1C96b ShowSD71: ldy #13 rts +L1C96b: ldy #$00 ; 1C96 A0 00 .. + rts ; 1C98 60 ` + +CheckVirtual: + lda V212C + cmp #DRV_SD_81 + beq ShowVirtualMaybe + cmp #DRV_SD_71 + beq ShowVirtualMaybe + cmp #DRV_F011_V + beq ShowVirtual + bne NoVirtual + + ; check if Floppy is already selected +ShowVirtualMaybe: + ldy #0 +@1: + lda driveType,y + cmp #DRV_F011_V + beq NoVirtual + iny + cpy #4 + bne @1 +ShowVirtual: + ldy #14 + rts + +NoVirtual: + ldy #$00 + rts + CheckF011: lda V212C ; 1C88 AD 2C 21 .,! cmp #$04 ; 1C8B C9 02 .. beq ShowF011 ; 1C8D F0 04 .. - cmp #$00 ; 1C8F C9 00 .. - bne NoF011 ; 1C91 D0 03 .. ; check if Floppy is already selected ldy #0 @@ -1567,6 +1770,23 @@ CheckF011: iny cpy #4 bne @1 + + lda V212C + beq @2 + cmp #DRV_F011_1 + bne NoF011 + jmp ShowF011 +@2: + ldy #0 +@3: + lda driveType,y + cmp #DRV_F011_1 + beq ShowF011 + iny + cpy #4 + bne @3 + bra NoF011 + ShowF011: ; 1C93 A0 05 .. ldy #10 rts ; 1C95 60 ` @@ -1624,8 +1844,8 @@ L1CC0: ldy #$00 ; 1CC0 A0 00 L1CC3: lda V212C ; 1CC3 AD 2C 21 .,! cmp #$82 ; 1CC6 C9 82 .. beq L1CD6 ; 1CC8 F0 0C .. - cmp #$00 ; 1CCA C9 00 .. - bne L1CD9 ; 1CCC D0 0B .. + bit V212C + bpl L1CD9 lda #$82 ; 1CCE A9 82 .. jsr L0911 ; 1CD0 20 11 09 .. txa ; 1CD3 8A . @@ -1639,8 +1859,8 @@ L1CD9: ldy #$00 ; 1CD9 A0 00 L1CDC: lda V212C ; 1CDC AD 2C 21 .,! cmp #$83 ; 1CDF C9 83 .. beq L1CEF ; 1CE1 F0 0C .. - cmp #$00 ; 1CE3 C9 00 .. - bne L1CF2 ; 1CE5 D0 0B .. + bit V212C + bpl L1CF2 lda #$83 ; 1CE7 A9 83 .. jsr L0911 ; 1CE9 20 11 09 .. txa ; 1CEC 8A . @@ -1650,6 +1870,20 @@ L1CEF: ldy #$09 ; 1CEF A0 09 ; ---------------------------------------------------------------------------- L1CF2: ldy #$00 ; 1CF2 A0 00 .. rts ; 1CF4 60 ` + +CheckRAM: + lda V212C ; 1CDC AD 2C 21 .,! + bmi NoCheckRAM + bne NoCheckRAM + + ; offer it if RAM for a drive is available + +ShowCheckRAM: ldy #17 ; 1CEF A0 09 .. + rts ; 1CF1 60 ` +; ---------------------------------------------------------------------------- +NoCheckRAM: ldy #$00 ; 1CF2 A0 00 .. + rts ; 1CF4 60 ` + ; ---------------------------------------------------------------------------- InitNoDrive: lda V212C ; 1CF5 AD 2C 21 .,! @@ -1657,6 +1891,16 @@ InitNoDrive: jsr PurgeTurbo ; 1CFA 20 35 C2 5. lda V212C ; 1CFD AD 2C 21 .,! bmi L1D1B ; 1D00 30 19 0. + cmp #DRV_F011_0 + beq L1D1B + cmp #DRV_F011_1 + beq L1D1B + cmp #DRV_F011_V + beq L1D1B + cmp #DRV_SD_71 + beq L1D1B + cmp #DRV_SD_81 + beq L1D1B lda V212B ; 1D02 AD 2B 21 .+! clc ; 1D05 18 . adc #$39 ; 1D06 69 39 i9 @@ -1671,9 +1915,7 @@ L1D08: sta L1D9A ; 1D08 8D 9A 1D jsr L1D28 ; 1D18 20 28 1D (. L1D1B: lda V212B ; 1D1B AD 2B 21 .+! jsr L1DF2 ; 1D1E 20 F2 1D .. -inc $d020 jsr CheckAllDrives ; 1D21 20 B0 1D .. -inc $d020 dec L180C ; 1D24 CE 0C 18 ... L1D27: rts ; 1D27 60 ` ; ---------------------------------------------------------------------------- @@ -1707,7 +1949,6 @@ L1D5B: dec L1D5F ; 1D5B CE 5F 1D L1D5F: brk ; 1D5F 00 . L1D60: brk ; 1D60 00 . ; ---------------------------------------------------------------------------- - L1D61: .byte $18 ; 1D61 18 . .byte "If you are able to, please" ; 1D62 49 66 20 79 6F 75 20 61 If you a ; 1D6A 72 65 20 61 62 6C 65 20 re able @@ -1730,7 +1971,7 @@ UnplugDlg: .byte DBTXTSTR .byte 12, 48 .word L1D7D - .byte OK + .byte OK .byte 1, $48 .byte CANCEL .byte $11, $48 @@ -1796,7 +2037,6 @@ SetupDriveAB: lda #$00 ; 1E14 A9 00 lda V212F ; 1E1C AD 2F 21 ./! sta $8486,y ; 1E1F 99 86 84 ... inc $848D - lda V212B jsr InitAndCheckDrive bne L1E48 ; 1E2B D0 1B .. @@ -1820,7 +2060,7 @@ L1E48: bne L1EB0 ; 1E48 D0 66 L1E4A: sty L1E04 ; 1E4A 8C 04 1E ... jsr L0739 ; 1E4D 20 39 07 9. lda L1E04 ; 1E50 AD 04 1E ... - jsr L1FC5 ; 1E53 20 C5 1F .. + jsr Init ; 1E53 20 C5 1F .. jsr PurgeTurbo ; 1E56 20 35 C2 5. L1E59: ldx #>PluginDlg ; 1E59 A2 1F .. lda #PluginDlg ; 1E59 A2 1F lda V212F ; 1E79 AD 2F 21 ./! sta $8486,y ; 1E7C 99 86 84 ... lda V212B ; 1E7F AD 2B 21 .+! - jsr L1FC5 ; 1E82 20 C5 1F .. + jsr Init ; 1E82 20 C5 1F .. lda V212B ; 1E85 AD 2B 21 .+! sta curDevice ; 1E88 85 BA .. sta curDrive ; 1E8A 8D 89 84 ... @@ -1861,7 +2101,7 @@ L1E98: lda L1E04 ; 1E98 AD 04 1E bvc L1EB0 ; 1EA6 50 08 P. L1EA8: lda V212B ; 1EA8 AD 2B 21 .+! eor #$01 ; 1EAB 49 01 I. - jsr L1FC5 ; 1EAD 20 C5 1F .. + jsr Init ; 1EAD 20 C5 1F .. L1EB0: jsr CheckAllDrives ; 1EB0 20 B0 1D .. rts ; 1EB3 60 ` ; ---------------------------------------------------------------------------- @@ -1885,7 +2125,7 @@ L1EDD: sty L1E04 ; 1EDD 8C 04 1E lda #$08 ; 1EE0 A9 08 .. jsr InitDrive ; 1EE2 20 3E 07 >. lda L1E04 ; 1EE5 AD 04 1E ... - jsr L1FC5 ; 1EE8 20 C5 1F .. + jsr Init ; 1EE8 20 C5 1F .. jsr PurgeTurbo ; 1EEB 20 35 C2 5. L1EEE: ldx #>PluginDlg2 ; 1EEE A2 1F .. lda #PluginDlg2 ; 1EEE A2 1F lda V212F ; 1F0B AD 2F 21 ./! sta $8486,y ; 1F0E 99 86 84 ... lda V212B ; 1F11 AD 2B 21 .+! - jsr L1FC5 ; 1F14 20 C5 1F .. + jsr Init ; 1F14 20 C5 1F .. lda V212B ; 1F17 AD 2B 21 .+! sta curDevice ; 1F1A 85 BA .. sta curDrive ; 1F1C 8D 89 84 ... @@ -1920,7 +2160,7 @@ L1F29: lda L1E04 ; 1F29 AD 04 1E clv ; 1F36 B8 . bvc L1F3E ; 1F37 50 05 P. L1F39: lda #$08 ; 1F39 A9 08 .. - jsr L1FC5 ; 1F3B 20 C5 1F .. + jsr Init ; 1F3B 20 C5 1F .. L1F3E: jsr CheckAllDrives ; 1F3E 20 B0 1D .. rts ; 1F41 60 ` ; ---------------------------------------------------------------------------- @@ -1981,7 +2221,9 @@ PluginDlg2: .byte $48 .byte 0 ; 1FB2 00 . -L1FC5: bit sysRAMFlg ; 1FC5 2C C4 88 ,.. +Init: + brk + bit sysRAMFlg ; 1FC5 2C C4 88 ,.. bvc L1FEE ; 1FC8 50 24 P$ pha ; 1FCA 48 H tay ; 1FCB A8 . @@ -2000,7 +2242,9 @@ L1FC5: bit sysRAMFlg ; 1FC5 2C C4 88 lda #$00 ; 1FE6 A9 00 .. L1FE8: sta r3L ; 1FE8 85 08 .. jsr StashRAM ; 1FEA 20 C8 C2 .. - pla ; 1FED 68 h + + brk + pla ; 1FED 68 h L1FEE: sta r0L ; 1FEE 85 02 .. lda curDrive ; 1FF0 AD 89 84 ... pha ; 1FF3 48 H @@ -2242,6 +2486,7 @@ L20D1: php ; 20D1 08 .endif .ifdef config128 +.ifndef mega65 ; ---------------------------------------------------------------------------- L217B: ldy #$00 ; 217B A0 00 .. lda (r1L),y ; 217D B1 04 .. @@ -2251,7 +2496,7 @@ L217B: ldy #$00 ; 217B A0 00 ; ---------------------------------------------------------------------------- L2186: jmp L22BD ; 2186 4C BD 22 L." - +.endif ; ---------------------------------------------------------------------------- L2189: lda r1H ; 2189 A5 05 .. sta r7H ; 218B 85 11 .. @@ -2393,6 +2638,7 @@ L225C: lda L236C,x ; 225C BD 6C 23 tax ; 2269 AA . rts ; 226A 60 ` +.ifndef mega65 ; ---------------------------------------------------------------------------- L226B: bit graphMode ; 226B 24 3F $? bmi L2274 ; 226D 30 05 0. @@ -2515,6 +2761,7 @@ L233B: brk ; 233B 00 L233C: lda vdcdata ; 233C AD 01 D6 ... rts ; 233F 60 ` +.endif ; ---------------------------------------------------------------------------- L2340: bit graphMode ; 2340 24 3F $? bmi L2350 ; 2342 30 0C 0. @@ -2564,7 +2811,8 @@ V2105 = V2104 + 1 ;+ 35 + 1 V2106 = V2105 + 1 V2107 = V2106 + 1 V2108 = V2107 + 1 -V2109 = V2108 + 1 +V2108a = V2108 + 1 +V2109 = V2108a + 1 V210A = V2109 + 1 V212A = V210A + 1 + 30 + 1 V212B = V212A + 1 diff --git a/drv/drv1571ram.s b/drv/drv1571ram.s index 8328f8e6..44d2a26d 100644 --- a/drv/drv1571ram.s +++ b/drv/drv1571ram.s @@ -841,7 +841,7 @@ __InitForIO: pla ; 9538 68 h sta L96F1 ; 9539 8D F1 96 ... sei ; 953C 78 x -.ifndef config128 +.if (!.defined(config128)) || (.defined(mega65)) lda CPU_DATA ; 953D A5 01 .. sta L96F3 ; 953F 8D F3 96 ... lda #$36 ; 9542 A9 36 .6 @@ -851,6 +851,10 @@ __InitForIO: sta L96F2 ; 9549 8D F2 96 ... lda clkreg ; 954C AD 30 D0 .0. sta L96F0 ; 954F 8D F0 96 ... + lda $d031 ; 9504 AD 30 D0 .0. + sta saveD031 ; 9507 8D EF 9B + and #%10111111 + sta $D031 ldy #$00 ; 9552 A0 00 .. sty clkreg ; 9554 8C 30 D0 .0. sty grirqen ; 9557 8C 1A D0 ... @@ -859,7 +863,7 @@ __InitForIO: sta $DC0D ; 955F 8D 0D DC ... sta $DD0D ; 9562 8D 0D DD ... LoadW $0314, Interrupt -.ifdef config128 +.if .defined(config128) && (!.defined(mega65)) LoadW $0318, Interrupt .else LoadW $0318, InterruptNMI @@ -887,7 +891,7 @@ L959A: lda rasreg ; 959A AD 12 D0 ; ---------------------------------------------------------------------------- Interrupt: -.ifdef config128 +.if .defined(config128) && (!.defined(mega65)) pla sta $ff00 .endif @@ -911,7 +915,15 @@ __DoneWithIO: lda $DD0D ; 95BF AD 0D DD ... lda L96F2 ; 95C2 AD F2 96 ... sta grirqen ; 95C5 8D 1A D0 ... -.ifndef config128 + + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + lda saveD031 + sta $D031 + +.if (!.defined(config128)) || (.defined(mega65)) lda L96F3 ; 95C8 AD F3 96 ... sta CPU_DATA ; 95CB 85 01 .. .endif @@ -922,8 +934,9 @@ __DoneWithIO: ; ---------------------------------------------------------------------------- __EnterTurbo: + lda curDrive ; 95D3 AD 89 84 ... - jsr SetDevice ; 95D6 20 B0 C2 .. + ;jsr SetDevice ; 95D6 20 B0 C2 .. ldx #$00 ; 95D9 A2 00 .. rts ; 95DB 60 ` @@ -1137,3 +1150,5 @@ L96FC: brk ; 96FC 00 brk ; 96FE 00 . L96FF: brk ; 96FF 00 . ; .byte $F2 ; 9700 F2 . +saveD031: + .byte 0 \ No newline at end of file diff --git a/drv/drv1581ram.s b/drv/drv1581ram.s index d5726ae6..ff7cd0ff 100644 --- a/drv/drv1581ram.s +++ b/drv/drv1581ram.s @@ -783,7 +783,7 @@ __InitForIO: pla ; 94E0 68 h sta L966A ; 94E1 8D 6A 96 .j. sei ; 94E4 78 x -.ifndef config128 +.if (!.defined(config128)) || (.defined(mega65)) lda CPU_DATA ; 94E5 A5 01 .. sta L966C ; 94E7 8D 6C 96 .l. lda #$36 ; 94EA A9 36 .6 @@ -793,6 +793,10 @@ __InitForIO: sta L966B ; 94F1 8D 6B 96 .k. lda clkreg ; 94F4 AD 30 D0 .0. sta L9669 ; 94F7 8D 69 96 .i. + lda $d031 ; 9504 AD 30 D0 .0. + sta saveD031 ; 9507 8D EF 9B + and #%10111111 + sta $D031 ldy #$00 ; 94FA A0 00 .. sty clkreg ; 94FC 8C 30 D0 .0. sty grirqen ; 94FF 8C 1A D0 ... @@ -801,7 +805,7 @@ __InitForIO: sta $DC0D ; 9507 8D 0D DC ... sta $DD0D ; 950A 8D 0D DD ... LoadW $0314, Interrupt -.ifdef config128 +.if .defined(config128) && (!.defined(mega65)) LoadW $0318, Interrupt .else LoadW $0318, InterruptNMI @@ -829,7 +833,7 @@ L9542: lda rasreg ; 9542 AD 12 D0 ; ---------------------------------------------------------------------------- Interrupt: -.ifdef config128 +.if .defined(config128) && (!.defined(mega65)) pla sta $ff00 .endif @@ -853,9 +857,21 @@ __DoneWithIO: lda $DD0D ; 9567 AD 0D DD ... lda L966B ; 956A AD 6B 96 .k. sta grirqen ; 956D 8D 1A D0 ... -.ifndef config128 - lda L966C ; 9570 AD 6C 96 .l. - sta CPU_DATA ; 9573 85 01 .. + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + lda saveD031 + sta $D031 + +.if (!.defined(config128)) || (.defined(mega65)) + LDA L966C + cmp #RAM_64K + bne @2 + lda #IO_IN +@2: + STA CPU_DATA + .endif lda L966A ; 9575 AD 6A 96 .j. pha ; 9578 48 H @@ -978,7 +994,13 @@ L95E3: lda r0H ; 95E3 A5 03 lda r1H ; 961E A5 05 .. ldy curDrive ; 9620 AC 89 84 ... adc driveData,y ; 9623 79 BF 88 y.. - sta r3L ; 9626 85 08 .. + + bne @2 +@3: + inc $d020 + bra @3 +@2: + sta r3L ; 9626 85 08 .. lda r1L ; 9628 A5 04 .. sta r1H ; 962A 85 05 .. pla ; 962C 68 h @@ -1000,9 +1022,14 @@ L95E3: lda r0H ; 95E3 A5 03 lda r4L ; 9646 A5 0A .. sta r0L ; 9648 85 02 .. pla ; 964A 68 h - tay ; 964B A8 . + pha + tay ; 964B A8 . jsr DoRAMOp ; 964C 20 D4 C2 .. - tax ; 964F AA . + pla + tay ; 964B A8 . + jsr DoRAMOp ; 964C 20 D4 C2 .. + + tax ; 964F AA . pla ; 9650 68 h sta r3L ; 9651 85 08 .. pla ; 9653 68 h @@ -1044,6 +1071,9 @@ L9679: brk ; 9679 00 brk ; 967C 00 . brk ; 967D 00 . brk ; 967E 00 . +saveD031: + .byte 0 + .byte "RAM 1581 driver Copyright (C) 1"; 967F 52 41 4D 20 31 35 38 31 RAM 1581 ; 9687 20 64 72 69 76 65 72 20 driver ; 968F 43 6F 70 79 72 69 67 68 Copyrigh diff --git a/drv/drvf011.s b/drv/drvf011.s index a571d8fe..a92f4948 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -22,6 +22,12 @@ DriveAddy = $0300 +USE_BLOCK_DMA = 1 + +STATE_INIT = 0 +STATE_FAILED = 1 +STATE_SUCCESS = 2 + dir3Head = $9c80 _InitForIO: .word __InitForIO ;9000 @@ -62,6 +68,15 @@ ReadLink: JMP _ReadLink ;904b E904E: .byte $03 ;904e + .byte 0 ; filler, wheels version + +SetImageFile: ; $9050 + JMP _SetImageFile +SetImageCluster: ; $9053 + JMP _SetImageCluster +GetImageFile: ; $9056 + JMP _GetImageFile + ; ============================================================================== evenFlag: .byte 0 @@ -146,7 +161,6 @@ CheckParams: JSR DoCacheVerify BEQ CheckParams_2 CheckParams_1: - LDA #0 ;90dc STA errCount LDX #INV_TRACK @@ -627,9 +641,15 @@ __InitForIO: ;95c6 STA tmpPS SEI + LDA $D030 LDA CPU_DATA STA tmpCPU_DATA LoadB CPU_DATA, KRNL_IO_IN + + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f LDA grirqen STA tmpgrirqen @@ -671,18 +691,66 @@ __InitForIO: ;95c6 INY STY cia2base+4 - ; set real floppy or SD mounted disk image + LoadB imageMounted, STATE_INIT +.if 0 + ; set or reset floppy bit for drive 1 if needed lda $D6A1 - and #$FE - ldy curType cpy #DRV_F011_0 bne @1 - ora #1 -@1: + ora #4 ; set drive 1 real floppy sta $D6A1 + +@1: + + ; mount sd if needed + cpy #DRV_SD_81 + bne @1b + jsr HyperSave + lda control_store + ora #$01 + sta $D080 + sta control_store + + + ; do mount now, drive 1 + ;; Copy file name + ldy #0 +@2: + lda TestImageName,y + sta $0100,y + iny + cmp #0 + bne @2 + ;; Call dos_setname() + ldy #>$0100 + ldx #<$0100 + lda #$2E ; dos_setname Hypervisor trap + STA $D640 ; Do hypervisor trap + NOP ; Wasted instruction slot required following hyper trap instruction + + ;; XXX Check for error (carry would be clear) + + lda #$46 ; dos_d81attach1 + STA $D640 ; Do hypervisor trap + NOP ; Wasted instruction slot required following hyper trap instruction +.if 0 + ;lda #$44 ; dos_d81write_en + ;STA $D640 ; Do hypervisor trap + ;NOP ; Wasted instruction slot required following hyper trap instruction +.endif + lda $d68b + ora #$20 + sta $d68b + + jsr HyperRestore +@3: + ;bra @3 +.endif +@1b: RTS + D_IRQHandler: .if .defined(config128) &(!.defined(mega65)) pla @@ -699,8 +767,11 @@ D_NMIHandler: __DoneWithIO: SEI ldy curType + cpy #DRV_F011_1 + beq @1a cpy #DRV_F011_0 bne @1 +@1a: ;jsr _WaitReady lda control_store and #%10011111 @@ -740,6 +811,228 @@ __DoneWithIO: PLP RTS +_EnsureImageMounted: + lda imageMounted + beq @1d +@1e: + cmp #STATE_SUCCESS + bne @err + clc + rts +@err: + ldx #NO_SYNC + sec + rts +@1d: + ; after update + ; virtual is assumed to be drive 0 + ; sd or (internal) floppy is used on drive 1 + + ; init state + ; set or reset floppy bit for drive 1 if needed + ldy curType + cpy #DRV_F011_V + bne @2 + + ; basically this type means drive 0 is virtual + lda $D689 + ;ora #%00010000 + and #%01111111 + sta $D689 + + + lda #0 + sta mountDrive + LoadB imageMounted, STATE_SUCCESS + jmp @1b +@2: + lda $D6A1 + cpy #DRV_F011_0 + bne @2a + ora #4 ; set drive 1 real floppy + sta $D6A1 + + ; but force internal drive to be mapped + ; -- @IO:GS $D689.4 - F011 swap drive 0 / 1 + lda $D689 + ora #%00100000 + and #%01111111 + sta $D689 + + lda #1 + sta mountDrive + LoadB imageMounted, STATE_SUCCESS + bra @1c + +@2a: + lda $D6A1 + cpy #DRV_F011_1 + bne @3 + ora #4 ; set drive 1 real floppy + sta $D6A1 + + ; but force internal drive to be mapped + ; -- @IO:GS $D689.4 - F011 swap drive 0 / 1 + lda $D689 + and #%01011111 + sta $D689 + + lda #1 + sta mountDrive + LoadB imageMounted, STATE_SUCCESS + bra @1c + +@3: + ; mount sd if needed + cpy #DRV_SD_81 + bne @1e + + ; basically this type means drive 0 is virtual + lda $D689 + ;ora #%00010000 + and #%01111111 + sta $D689 + + lda currentImageCluster + and currentImageCluster+1 + and currentImageCluster+2 + and currentImageCluster+3 + cmp #$FF + bne @4a + jmp @4 +@4a: + ; check drive 0, for non virtual real mount + lda $D68A + and #4 + bne @5 + lda $D6A1 + and #1 + bne @5 ; floppy active, can't be mounted + + lda $D68B + and #1 + beq @5 + + lda currentImageCluster + cmp $D68C + bne @5 + lda currentImageCluster+1 + cmp $D68C+1 + bne @5 + lda currentImageCluster+2 + cmp $D68C+2 + bne @5 + lda currentImageCluster+3 + cmp $D68C+3 + bne @5 + + ; is mounted already + lda #0 + sta mountDrive + LoadB imageMounted, STATE_SUCCESS +@1c: + jmp @1b + +@5: + ; check drive 1 + lda $D68A + and #8 ; we assume that this does not happen + bne @4 + lda $D6A1 + and #4 + bne @4 ; floppy active, can't be mounted + + lda $D68B + and #8 + beq @4 + + lda currentImageCluster + cmp $D690 + bne @4 + lda currentImageCluster+1 + cmp $D690+1 + bne @4 + lda currentImageCluster+2 + cmp $D690+2 + bne @4 + lda currentImageCluster+3 + cmp $D690+3 + bne @4 + + ; is mounted already + lda #1 + sta mountDrive + LoadB imageMounted, STATE_SUCCESS + jmp @1b + +@4: + lda currentImageName + bne @4b + LoadB imageMounted, STATE_FAILED + ldx #NO_SYNC + sec + rts + +@4b: + jsr HyperSave + + ; do mount now, drive 1 + ;; Copy file name + ldy #0 +@6: + lda currentImageName,y + sta $0100,y + iny + cmp #0 + bne @6 + + ;; Call dos_setname() + ldy #>$0100 + ldx #<$0100 + lda #$2E ; dos_setname Hypervisor trap + STA $D640 ; Do hypervisor trap + NOP ; Wasted instruction slot required following hyper trap instruction + + + ;; XXX Check for error (carry would be clear) + lda #$46 ; dos_d81attach1 + STA $D640 ; Do hypervisor trap + NOP ; Wasted instruction slot required following hyper trap instruction + bcs @ok +@HOHO: + inc $D020 + bra @HOHO +@ok: + lda $d68b + ora #$20 + sta $d68b + + ; remember cluster + lda $D690 + sta currentImageCluster + lda $D690+1 + sta currentImageCluster+1 + lda $D690+2 + sta currentImageCluster+2 + lda $D690+3 + sta currentImageCluster+3 + + jsr HyperRestore + + lda #1 + sta mountDrive + LoadB imageMounted, STATE_SUCCESS +@1b: + + lda control_store + and #$FE + ora mountDrive + sta $D080 + sta control_store +@1: + clc + rts + _ReadLink: ;98cf __ReadBlock: ;98e4 @@ -749,44 +1042,96 @@ __ReadBlock: ;98e4 @1: bbrf 6, curType, _ReadBlockCont1 JSR DoCacheRead - BNE _ReadBlockEnd + BEQ @1b + jmp _ReadBlockEnd +@1b: _ReadBlockCont1: ; Read sector from disk JSR _SetOperation ; set - BCS @1 + BCC @1c +@1d: + jmp _ReadBlockEnd +@1c: jsr _WaitReady lda #$01 sta $D081 jsr _WaitReady - LDA #$46 + LDA #$40 STA $D081 +.if 1 + ldy #$28 + ldx #0 +@aa: + DEX + bne @aa + dey + bne @aa +.endif +.if USE_BLOCK_DMA + jsr _WaitReady +.endif @3: LDA $D082 AND #$10 BNE @2 - inc $d021 +.ifndef USE_BLOCK_DMA LDA $D083 BPL @3 +.endif bra @1a @2: + sec + jmp _ReadBlockEnd @1: brk @1a: + lda curDrive + cmp #DRV_F011_0 + bne @2a +@2a: + +.ifdef USE_BLOCK_DMA + MoveW r4, dmalist_to +.endif + LDY #$00 ;; read over 256 bytes if needed LDA evenFlag BEQ @4 + +.ifdef USE_BLOCK_DMA + ; get second half + LoadB dmalist_from+1, $61 + bra @do_dma +.else @5: JSR _ReadByteSlow INY BNE @5 +.endif @4: +.ifdef USE_BLOCK_DMA + ; get first half + LoadB dmalist_from+1, $60 +@do_dma: + lda #>dmalist + ldy #($8300) + .byte >($8300+DISK_DRV_LGH) + .byte >($8300+DISK_DRV_LGH*2) + .byte >($8300+DISK_DRV_LGH*3) + +_SaveDriver: + ; save driver with the current properties + lda sysRAMFlg + bit #64 + beq @1 ; branch if driver is not stored in RAM + + LoadW r0, DISK_BASE + ldx curDrive + lda driverRAMStartLow-8,x + sta r1L + lda driverRAMStartHigh-8,x + sta r1H + LoadW r2, DISK_DRV_LGH + LoadB r3L, 0 + jsr StashRAM +@1: + rts + +currentImageCluster: + .word $FFFF ; illegal cluster number + ; for disc image + .word $FFFF +currentImageName: + .byte "GEOS.D81", NULL + .repeat 64 + .byte 0 + .endrep +mountDrive: + .byte 0 +HyperBuffer: + .repeat 256 + .byte 0 + .endrep + tmpclkreg: .byte 0 ;9c55 tmpPS: diff --git a/drv/drvf0110.s b/drv/drvf0110.s index 53db7810..55a59a40 100644 --- a/drv/drvf0110.s +++ b/drv/drvf0110.s @@ -782,7 +782,6 @@ _ReadBlockCont1: LDA $D082 AND #$10 BNE @2 - inc $d021 LDA $D083 BPL @3 bra @1a @@ -849,7 +848,6 @@ _ReadByteSlow: _ReadByte: @1: - inc $d021 LDA $D082 AND #$20 BNE @1 @@ -951,7 +949,6 @@ _InitControl: lsr $D082 ; stata bcs @2 jsr _ExecCommand - inc $D020 bra @3 @2: jsr _SettleHead @@ -990,7 +987,6 @@ _FindTrack: ldy #$10 ; stin @4: sty $D081 - inc $d020 bra @5 @1: tya @@ -1045,7 +1041,6 @@ _ExecCommand: STA $D081 _WaitReady: @1: - inc $D020 BIT $D082 BMI @1 RTS diff --git a/folder/application.s b/folder/application.s new file mode 100644 index 00000000..ade37992 --- /dev/null +++ b/folder/application.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Applications" + .res (16 - 12), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 3 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/autostart.s b/folder/autostart.s new file mode 100644 index 00000000..bfab87ec --- /dev/null +++ b/folder/autostart.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Startup" + .res (16 - 7), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 4 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/coding.s b/folder/coding.s new file mode 100644 index 00000000..214c18b5 --- /dev/null +++ b/folder/coding.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Coding" + .res (16 - 6), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 12 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/desk_accessory.s b/folder/desk_accessory.s new file mode 100644 index 00000000..60970378 --- /dev/null +++ b/folder/desk_accessory.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Desk Accessories" + .res (16 - 16), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 5 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/document.s b/folder/document.s new file mode 100644 index 00000000..cd40e43b --- /dev/null +++ b/folder/document.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Documents" + .res (16 - 9), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 8 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/folder.cfg b/folder/folder.cfg new file mode 100644 index 00000000..d22ad219 --- /dev/null +++ b/folder/folder.cfg @@ -0,0 +1,8 @@ +MEMORY { + CVT: file = %O, start = $0, size = $40000; +} + +SEGMENTS { + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; +} diff --git a/folder/font.s b/folder/font.s new file mode 100644 index 00000000..f8ff8d1e --- /dev/null +++ b/folder/font.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Fonts" + .res (16 - 5), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 6 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/input_driver.s b/folder/input_driver.s new file mode 100644 index 00000000..97365083 --- /dev/null +++ b/folder/input_driver.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Input Drivers" + .res (16 - 13), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 2 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/misc.s b/folder/misc.s new file mode 100644 index 00000000..55e6446d --- /dev/null +++ b/folder/misc.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Misc" + .res (16 - 4), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 11 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/other_data.s b/folder/other_data.s new file mode 100644 index 00000000..c6afb694 --- /dev/null +++ b/folder/other_data.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Other Data" + .res (16 - 10), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 9 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/printer_driver.s b/folder/printer_driver.s new file mode 100644 index 00000000..0c0227a4 --- /dev/null +++ b/folder/printer_driver.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Printer Drivers" + .res (16 - 15), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 10 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/folder/utilities.s b/folder/utilities.s new file mode 100644 index 00000000..9ee22c10 --- /dev/null +++ b/folder/utilities.s @@ -0,0 +1,61 @@ + .segment "DIRENTRY" + + .byte $83 + .word 0 + .byte "Utilities" + .res (16 - 9), $a0 + .word 0 + .byte 0 + .byte 11 + .byte 20, 3, 3, 21, 45 + + .word 0 + .byte "PRG formatted GEOS file V1.0" + + + .segment "FILEINFO" + + ;.import __VLIR0_START__, __STARTUP_RUN__ + + .byte 3, 21, 63 | $80 + + .byte $00, $01, $FE ;%10000000, %00000000, %00000001 + .byte $00, $02, $01 ;%10000000, %00000000, %00000001 + .byte $3F, $FE, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $40, $00, $01 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FD ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $03 ;%10000000, %00000000, %00000001 + .byte $80, $00, $02 ;%10000000, %00000000, %00000001 + .byte $7F, $FF, $FC ;%10000000, %00000000, %00000001 + + .byte $83, 11, 0 + ;.word __VLIR0_START__, __VLIR0_START__ - 1, __STARTUP_RUN__ + .word 0, 0, 0 + + .byte "Directory" + .res (12 - 9), $20 + .byte "V1.0" + .byte 0, 0, 0 + .byte 0 + + .byte "blueway.Softworks" + .byte 0 + .res (20 - 18) + + .byte 7 ; folder number + .res (43 - 1) + + .byte 0 ; Comment text \ No newline at end of file diff --git a/inc/diskdrv.inc b/inc/diskdrv.inc index 96980395..b8ac57c9 100644 --- a/inc/diskdrv.inc +++ b/inc/diskdrv.inc @@ -39,6 +39,12 @@ CheckErrors = $9045 AllocateBlock = $9048 ReadLink = $904b +; G6 extension (SD81/SD71 driver) +SetImageFile = $9050 +SetImageCluster = $9053 +GetImageFile = $9056 + + ; Wheels only ddriveType = $904e driverVersion = $904f diff --git a/input/joydrv.cfg b/input/joydrv.cfg index f3c291b4..b6e45085 100644 --- a/input/joydrv.cfg +++ b/input/joydrv.cfg @@ -1,5 +1,5 @@ MEMORY { - MOUSE_BASE: start = $FE80, size = $0180, file = %O; + MOUSE_BASE: start = $FE80, size = $0180, file = %O; } SEGMENTS { diff --git a/input/joydrv.grc b/input/joydrv.grc new file mode 100644 index 00000000..c11d7558 --- /dev/null +++ b/input/joydrv.grc @@ -0,0 +1,9 @@ +HEADER APPLICATION "JOYSTICK" "Input Drvr" "V6.0" { + author "Berkeley Softworks" + dostype USR + structure SEQ + info "This is the default input driver, for joysticks & 1350 Mouse." + date 20 03 03 21 45 + icon "build/mega65/input/joydrv.bf" +} + diff --git a/input/joydrv.s b/input/joydrv.s index 7a0248cd..9b2166e8 100644 --- a/input/joydrv.s +++ b/input/joydrv.s @@ -9,7 +9,13 @@ .include "jumptab.inc" .include "c64.inc" +.export __VLIR0_START__ +.export __STARTUP_RUN__ + + .segment "joydrv" +__STARTUP_RUN__: +__VLIR0_START__: MouseInit: jmp _MouseInit diff --git a/input/joydrv0.cfg b/input/joydrv0.cfg new file mode 100644 index 00000000..742cdd59 --- /dev/null +++ b/input/joydrv0.cfg @@ -0,0 +1,10 @@ +MEMORY { + CVT: file = %O, start = $0, size = $40000; + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + joydrv: load = MOUSE_BASE, type = ro; +} diff --git a/input/joydrvIcon.cfg b/input/joydrvIcon.cfg new file mode 100644 index 00000000..dd0dc92a --- /dev/null +++ b/input/joydrvIcon.cfg @@ -0,0 +1,7 @@ +MEMORY { + VARS: start = $1000, size = $0600; +} + +SEGMENTS { + ICON: load = VARS, type = ro; +} \ No newline at end of file diff --git a/input/joydrvIcon.s b/input/joydrvIcon.s new file mode 100644 index 00000000..b9719ae3 --- /dev/null +++ b/input/joydrvIcon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte $FF, $FF, $FF ;%11111111, %11111111, %11111111 +.byte $80, $00, $01 ;%10000000, %00000000, %00000001 +.byte $80, $00, $01 ;%10000000, %01111110, %00000001 +.byte $80, $00, $01 ;%10000001, %10011001, %10000001 +.byte $80, $00, $01 ;%10000011, %00000001, %01000001 +.byte $80, $38, $03 ;%10000111, %10011000, %01100001 +.byte $80, $38, $07 ;%10001000, %01011000, %00010001 +.byte $80, $38, $1D ;%10001000, %00111000, %00010001 +.byte $80, $38, $31 ;%10001100, %00011000, %00110001 +.byte $80, $38, $61 ;%10001000, %00001000, %00010001 +.byte $83, $FF, $F9 ;%10000110, %00000000, %01100001 +.byte $84, $38, $19 ;%10000010, %10000001, %01000001 +.byte $89, $38, $29 ;%10000001, %10011001, %10000001 +.byte $90, $00, $49 ;%10000000, %01111110, %00000001 +.byte $BF, $FF, $89 ;%10000000, %00000000, %00000001 +.byte $A0, $00, $91 ;%10000000, %00000000, %00000001 +.byte $A0, $00, $A1 ;%10111111, %11110000, %11000001 +.byte $A0, $00, $C1 ;%10001111, %11000011, %11110001 +.byte $BF, $FF, $81 ;%10000011, %00001111, %11111101 +.byte $80, $00, $01 ;%10000000, %00000000, %00000001 +.byte $FF, $FF, $FF ;%11111111, %11111111, %11111111 \ No newline at end of file diff --git a/input/joydrv_cvt.cfg b/input/joydrv_cvt.cfg new file mode 100644 index 00000000..f51b8f4d --- /dev/null +++ b/input/joydrv_cvt.cfg @@ -0,0 +1,11 @@ +MEMORY { + CVT: file = %O, start = $0, size = $40000; + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + + joydrv: run = MOUSE_BASE, type = ro, load = CVT, align_load = $FE, define = yes; +} diff --git a/input/mse1531.cfg b/input/mse1351.cfg similarity index 66% rename from input/mse1531.cfg rename to input/mse1351.cfg index 60433c7b..b88b5149 100644 --- a/input/mse1531.cfg +++ b/input/mse1351.cfg @@ -3,5 +3,5 @@ MEMORY { } SEGMENTS { - mse1531: load = MOUSE_BASE, type = ro; + mse1351: load = MOUSE_BASE, type = ro; } diff --git a/input/mse1351.grc b/input/mse1351.grc new file mode 100644 index 00000000..b3be9de1 --- /dev/null +++ b/input/mse1351.grc @@ -0,0 +1,9 @@ +HEADER APPLICATION "COMM 1351" "Input Drvr" "V6.0" { + author "David Durran" + dostype USR + structure SEQ + info "Input driver for the Commodore 1351 proportional mouse." + date 20 03 03 21 47 + icon "build/mega65/input/mse1351.bf" +} + diff --git a/input/mse1531.s b/input/mse1351.s similarity index 95% rename from input/mse1531.s rename to input/mse1351.s index 1b748f0d..b5532d9e 100644 --- a/input/mse1531.s +++ b/input/mse1351.s @@ -8,7 +8,12 @@ .include "geosmac.inc" .include "c64.inc" -.segment "mse1531" +.export __VLIR0_START__ +.export __STARTUP_RUN__ + +.segment "mse1351" +__STARTUP_RUN__: +__VLIR0_START__: MouseInit: jmp _MouseInit diff --git a/input/mse1351Icon.cfg b/input/mse1351Icon.cfg new file mode 100644 index 00000000..dd0dc92a --- /dev/null +++ b/input/mse1351Icon.cfg @@ -0,0 +1,7 @@ +MEMORY { + VARS: start = $1000, size = $0600; +} + +SEGMENTS { + ICON: load = VARS, type = ro; +} \ No newline at end of file diff --git a/input/mse1351Icon.s b/input/mse1351Icon.s new file mode 100644 index 00000000..c8f55e01 --- /dev/null +++ b/input/mse1351Icon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte $FF, $FF, $FF ;%11111111, %11111111, %11111111 +.byte $80, $00, $01 ;%10000000, %00000000, %00000001 +.byte $C0, $CF, $F1 ;%10000000, %01111110, %00000001 +.byte $A3, $30, $09 ;%10000001, %10011001, %10000001 +.byte $9C, $01, $85 ;%10000011, %00000001, %01000001 +.byte $80, $62, $45 ;%10000111, %10011000, %01100001 +.byte $80, $9C, $25 ;%10001000, %01011000, %00010001 +.byte $81, $6C, $25 ;%10001000, %00111000, %00010001 +.byte $82, $E4, $19 ;%10001100, %00011000, %00110001 +.byte $84, $DA, $01 ;%10001000, %00001000, %00010001 +.byte $88, $3A, $01 ;%10000110, %00000000, %01100001 +.byte $90, $36, $01 ;%10000010, %10000001, %01000001 +.byte $A0, $0C, $F9 ;%10000001, %10011001, %10000001 +.byte $A0, $18, $85 ;%10000000, %01111110, %00000001 +.byte $B0, $30, $85 ;%10000000, %00000000, %00000001 +.byte $98, $60, $F9 ;%10000000, %00000000, %00000001 +.byte $8C, $C0, $81 ;%10111111, %11110000, %11000001 +.byte $87, $80, $81 ;%10001111, %11000011, %11110001 +.byte $83, $00, $81 ;%10000011, %00001111, %11111101 +.byte $80, $00, $01 ;%10000000, %00000000, %00000001 +.byte $FF, $FF, $FF ;%11111111, %11111111, %11111111 \ No newline at end of file diff --git a/input/mse1351_cvt.cfg b/input/mse1351_cvt.cfg new file mode 100644 index 00000000..00464bbc --- /dev/null +++ b/input/mse1351_cvt.cfg @@ -0,0 +1,11 @@ +MEMORY { + CVT: file = %O, start = $0, size = $40000; + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + + mse1351: run = MOUSE_BASE, type = ro, load = CVT, align_load = $FE, define = yes; +} diff --git a/kernal/c65/map.s b/kernal/c65/map.s index d6cd72ba..aeec5f7c 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -20,6 +20,7 @@ .global _MapLow .global _MapHigh +.global _MNLP_DeskAcc .import UNK_4 .import UNK_5 @@ -33,7 +34,7 @@ .else .import LdFile .endif - +.import _MNLP .import _FollowChain .import _FindFTypes @@ -205,19 +206,20 @@ ApplyMapping: _map_FollowChain: jsr MapUnderlay jsr _FollowChain +__unmap2: jmp UnmapUnderlay _map_FindFTypes: jsr MapUnderlay jsr _FindFTypes - jmp UnmapUnderlay + bra __unmap2 _map_FindFile: jsr MapUnderlay jsr _FindFile - jmp UnmapUnderlay + bra __unmap2 _map_SetDevice: jsr MapUnderlay jsr _SetDevice - jmp UnmapUnderlay + bra __unmap2 _map_GetFHdrInfo: jsr MapUnderlay jsr _GetFHdrInfo @@ -226,6 +228,9 @@ _map_LdDeskAcc: jsr MapUnderlay jsr _LdDeskAcc jmp UnmapUnderlay +_MNLP_DeskAcc: + jsr UnmapUnderlay + jmp _MNLP _map_RstrAppl: jsr MapUnderlay jsr _RstrAppl diff --git a/kernal/debug/main.s b/kernal/debug/main.s index b405dcb0..95f4fccd 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -190,7 +190,7 @@ DebugMain: rts -welcome: .byte "SuperDebugger V6.0",13,"(C) 2019 blueway.Softworks", 13, 13, 0 +welcome: .byte "SuperDebugger V6.0",13,"(C) 2019-20 blueway.Softworks", 13, 13, 0 ClearConsole: ldx #0 @@ -529,28 +529,28 @@ UpdateCursor: ProcessTrace: - LoadW r0, trace - jsr PutString + LoadW r0, trace + jsr PutString - jsr ResetSingleStep + jsr ResetSingleStep - ; calc next break address - ; move PC to r1 - ldy stackPointer - lda $107+STACK_OFFSET, y - sta r0H - lda $106+STACK_OFFSET, y - sta r0L + ; calc next break address + ; move PC to r1 + ldy stackPointer + lda $107+STACK_OFFSET, y + sta r0H + lda $106+STACK_OFFSET, y + sta r0L - ldy #0 - ;lda (r0), y ; get opcode at PC + ldy #0 + ;lda (r0), y ; get opcode at PC jsr GetByte ; special opcode handling for single step cmp #$4C ; JMP bne @1 - ldy #1 +@4: lda (r0), y ; get jmp address low tax iny @@ -561,6 +561,20 @@ ProcessTrace: bra @2 @1: + cmp #$6C ; JMP ($xyza) + bne @3 + ldy #1 + jsr GetByte + tax + ldy #2 + jsr GetByte + + sta r0H + stx r0L + ldy #0 + bra @4 + +@3: jsr DebugOpcode_GetLen clc @@ -1611,43 +1625,8 @@ DebugOpcode_Print: @8: cmp #BREL bne @9 - lda #'$' - jsr PutChar - - PushW r0 - - - ldy #1 - ;lda (r0), Y - jsr GetByte - pha - - clc - adc r0L - sta r0L - lda r0H - adc #0 - sta r0H - - lda r0L - clc - adc #2 - sta r0L - lda r0H - adc #0 - sta r0H - - pla - bpl @8a - dec r0H -@8a: - lda r0H - jsr PrintByteHex - lda r0L - jsr PrintByteHex - - PopW r0 - + + jsr DebugOpcode_PrintBREL bra @done @9: @@ -1680,6 +1659,12 @@ DebugOpcode_Print: jsr PutChar bra @done @10: + cmp #IND + bne @11 + jsr DebugOpcode_PrintIND + bra @done +@11: + @done: lda #13 jsr PutChar @@ -1694,28 +1679,85 @@ DebugOpcode_Print: adc #0 sta r0H rts + +DebugOpcode_PrintIND: + lda #'(' + jsr PutChar + lda #'$' + jsr PutChar + + ldy #2 + jsr GetByte + jsr PrintByteHex + + ldy #1 + jsr GetByte + jsr PrintByteHex + + lda #')' + jsr PutChar + rts +DebugOpcode_PrintBREL: + + lda #'$' + jsr PutChar + + PushW r0 + + + ldy #1 + ;lda (r0), Y + jsr GetByte + pha + + clc + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + lda r0L + clc + adc #2 + sta r0L + lda r0H + adc #0 + sta r0H + + pla + bpl @8a + dec r0H + @8a: + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + + PopW r0 + rts + GetByte: - PushW r0 - clc - tya - adc r0L - sta r0L - lda r0H - adc #0 - sta r0H + PushW r0 + clc + tya + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H - CmpWI r0, r0 - bne @a1 - lda saveR0 - jmp @3 + CmpWI r0, r0 + bne @a1 + lda saveR0 + jmp @3 @a1: - CmpWI r0, r0+1 - bne @a2 - lda saveR0+1 - jmp @3 + CmpWI r0, r0+1 + bne @a2 + lda saveR0+1 + jmp @3 @a2: - CmpWI r0, r1 bne @a3_ lda saveR1 @@ -1726,7 +1768,6 @@ GetByte: lda saveR1+1 jmp @3 @a4: - CmpWI r0, r2 bne @a5 lda saveR2 @@ -1737,7 +1778,6 @@ GetByte: lda saveR2+1 jmp @3 @a6: - CmpWI r0, r3 bne @a7 lda saveR3 @@ -1748,32 +1788,30 @@ GetByte: lda saveR3+1 jmp @3 @a8: - - - ldy #0 + ldy #0 @2: - lda breakList, y - ora breakList+1,y - beq @1 + lda breakList, y + ora breakList+1,y + beq @1 - lda breakList+1, y - cmp r0H - bne @1 - lda breakList, y - cmp r0L - bne @1 + lda breakList+1, y + cmp r0H + bne @1 + lda breakList, y + cmp r0L + bne @1 - tya - lsr - tay - lda breakOpList, Y - jmp @3 + tya + lsr + tay + lda breakOpList, Y + jmp @3 @1: - iny - iny - cpy #16 - bne @2 + iny + iny + cpy #16 + bne @2 CmpWI consoleBufAddr, $800 bne @a3 diff --git a/kernal/files/compat.s b/kernal/files/compat.s index 390610e7..e470a3a4 100644 --- a/kernal/files/compat.s +++ b/kernal/files/compat.s @@ -15,6 +15,15 @@ .segment "compat" CheckAppCompat: + ; if we are in extended mode + ; but app is not INCOMPATIBLE + bit graphMode + bvc @4 + lda fileHeader+O_128_FLAGS + lsr + bcc @1 + bra @3 +@4: bbsf 7, graphMode, @2 ; 80 col bit fileHeader+O_128_FLAGS bpl @3 ; ok diff --git a/kernal/files/files6c.s b/kernal/files/files6c.s index 0a82d309..15d530cc 100644 --- a/kernal/files/files6c.s +++ b/kernal/files/files6c.s @@ -206,6 +206,7 @@ IsDeviceValid: sta SetDevTab + 3 jsr PrepForFetch jsr FetchRAM + ;jsr FetchRAM jsr PrepForFetch @3: ldx #NULL rts diff --git a/kernal/graph/inlinefunc.s b/kernal/graph/inlinefunc.s index 2398a18a..c7bea376 100644 --- a/kernal/graph/inlinefunc.s +++ b/kernal/graph/inlinefunc.s @@ -18,6 +18,7 @@ .import _FrameRectangle .import _GraphicsString .import _BitmapUp +.import DoInlineReturn7 .global _i_Rectangle .global _i_RecoverRectangle @@ -43,12 +44,12 @@ _i_Rectangle: jsr _Rectangle .endif .ifdef wheels_size -.global DoInlineReturn7 -DoInlineReturn7: -.endif + jmp DoInlineReturn7 +.else php lda #7 jmp DoInlineReturn +.endif .segment "graph2d" diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 8db13152..86d240a6 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -314,23 +314,23 @@ vmiNextLine: vmiMaxX: .word 319, 639, 639, 719 vmiMaxY: - .word 199, 199, 399, 575 + .word 199, 199, 399, 568 vmiCardsX: .word 40, 80, 80, 90 vmiFullCardsX: .byte 40, 80, 80, 90 vmiFullCardsY: - .byte 25, 25, 50, 72 + .byte 25, 25, 50, 71 vmiSpriteXPosOff: - .byte 25, 60, 60, 26 + .byte 24, 79, 79, 38 vmiSpriteYPosOff: - .byte 50, 50, 104, 1 + .byte 50, 50, 104, 17 vmiD011: .byte %00111011, $3B, $3B, $3b vmiD016: .byte $09, $09, $09, $09 vmiSideBorder: - .word 79 | $8000, 59 | $8000, 59 | $8000, 26 | $8000 + .word 78 | $8000, 80 | $8000, 80 | $8000, 39 | $8000 vmiD031: .byte $40, $C0, $C8, $C8 vmiSpriteH640_OR: @@ -354,9 +354,9 @@ vmiBitmapRAMBank: ;104 ;504 vmiTopBorder: - .word 104, 104, 104, 1 + .word 104, 104, 104, 17 vmiBottomBorder: - .word 504, 504, 504, 577 + .word 504, 504, 504, 586 .endif .ifdef mega65 diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index 55c4415d..e5870fcb 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -89,6 +89,7 @@ _Rectangle: @3: ;PopB r5H +rectEnd: PopW r4 PopW r3 PopW r2 @@ -214,10 +215,11 @@ _FrameRectangle: sta r9H jsr _NormRect + ;PushB r5H + PushW r2 PushW r3 - PushB r4H - ;PushB r5H + PushW r4 ldy r2L sty r11L @@ -236,8 +238,4 @@ _FrameRectangle: lda r9H jsr _VerticalLine ;PopW r3 - - PopB r4H - PopW r3 - PopW r2 - rts + jmp rectEnd diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 44f8be19..6602d42a 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -53,9 +53,12 @@ _EndScanLine: ldx #$00 lda #$70 jsr _MapHigh - ldx #$00 - lda #$80 - jsr _MapLow + ;ldx #$00 + ;lda #$80 + + ldx #$00 + lda #$00 + jsr _MapLow pla tax @1: diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index bc2c9a09..2203f754 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -51,6 +51,7 @@ SEGMENTS { init4: load = UNDERLAY, type = ro; graph2nu: load = UNDERLAY, type = ro; backram_under: load = UNDERLAY, type = ro; + compat: load = UNDERLAY, type = ro; # kernal header: $c000 diff --git a/kernal/load/deskacc.s b/kernal/load/deskacc.s index 88fbf528..cd5ae41c 100644 --- a/kernal/load/deskacc.s +++ b/kernal/load/deskacc.s @@ -12,6 +12,7 @@ .import Dialog_2 .import _MNLP +.import _MNLP_DeskAcc .import DeskAccSP .import DeskAccPC .import InitGEOEnv @@ -23,6 +24,10 @@ .import ReadFile .import GetFHdrInfo +.ifdef mega65 +.import CheckAppCompat +.endif + .ifndef bsw128 .import FastDelFile .import GetFile @@ -117,6 +122,10 @@ tmp3: .byte 0 MoveB r10L, A885D jsr GetFHdrInfo bnex LDAcc1 +.ifdef mega65 + jsr CheckAppCompat + bne LDAcc1 +.endif .ifdef useRamExp ; swap to other bank PushW r1 @@ -154,10 +163,11 @@ tmp3: .byte 0 stx DeskAccSP ldx fileHeader+O_GHST_VEC+1 lda fileHeader+O_GHST_VEC - jmp _MNLP + jmp _MNLP_DeskAcc PopW r1 LDAcc1: rts + .endif _RstrAppl: diff --git a/kernal/mainloop/mainloop2.s b/kernal/mainloop/mainloop2.s index 4c170520..b4f4ac78 100644 --- a/kernal/mainloop/mainloop2.s +++ b/kernal/mainloop/mainloop2.s @@ -27,9 +27,11 @@ _MainLoop2: ; map $50000-$52000 to $06000 ; x = bank, a=offset + ldx #$00 + lda #$00 ;ldx #$02 ;lda #$50 - ;jsr _MapLow + jsr _MapLow jmp _MainLoop .endif diff --git a/kernal/memory/memory2.s b/kernal/memory/memory2.s index 9e32a1f3..6fd1c335 100644 --- a/kernal/memory/memory2.s +++ b/kernal/memory/memory2.s @@ -77,13 +77,12 @@ _i_MoveData: sta r2H jsr _MoveData .ifdef wheels_size -.import DoInlineReturn7 - jmp DoInlineReturn7 -.else +.global DoInlineReturn7 +DoInlineReturn7: +.endif php lda #7 jmp DoInlineReturn -.endif GetMDataDatas: .ifdef wheels_size @@ -266,7 +265,7 @@ _CmpFString: beqx @1 dex bne @1 -.ifdef wheels +.ifdef wheels_size txa .else lda #0 diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index 54c3f240..40a66338 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -120,8 +120,8 @@ _Panic: lda lowMapBnk pha - lda #$00 - tax + lda #$80 + ldx #0 jsr _MapLow ; unmap to $6000 diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index 69806950..5fffe7a9 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -21,49 +21,97 @@ .ifdef mega65 +REU_BASE_BANK = $00 + _StashRAM: - START_IO_X + lda #0 + sta opFromBankLow + sta opFromBankHigh+1 + + ;LDA #$A5 ; C65: VIC-III enable sequence ;STA $D02F ;LDA #$96 ;STA $D02F ; C65: VIC-III enabled + jsr _GetBankParams + sty opToBankLow + sta opToBankHigh+1 + + lda r0L + sta opFromAddr + lda r0H + ;ldx r1L + ldy r1H + + +_RamOp: + sta opFromAddr+1 + stx opToAddr + sty opToAddr+1 MoveW r2, opLength - MoveW r0, opFromAddr - lda r1L - sta opToAddr - lda r1H - sta opToAddr+1 - - lda #>opddmalist - ldy #opddmalist + ldy #opddmalist_fetch - ldy #debuggerlist + ldy #$0400 ; write dirent to DirEntry + + lda #$14 + STA $D640 + NOP +.endif .if 0 ; run a raster line cycle counter sei ; interrupts off @@ -233,7 +256,7 @@ _DebugStart: ; preconditions: ; curDrive is one of the BASIC mapped drives, directing us to ; F011-0 or F011-1, we don't support booting from other drives and - ; could/shoud hard reset here? In gereral we assume that GEOS + ; could/should hard reset here? In general we assume that GEOS ; holds an disk driver that is in some way compatible to the boot drive. lda #C65_VIC_INIT1 @@ -273,9 +296,9 @@ _DebugStart: @detectDrive0: ; is virtual enabled? - ldx #8 ; DRV_F011_V - lda $D659 - bit #1 + ldx #DRV_F011_V + lda $D68A + bit #4 bne @detected ; check if real drive @@ -289,6 +312,9 @@ _DebugStart: bra @detected @detectDrive1: + ; potentially now drive 1 may be virtual, + ; but because monitor-load does not support this + ; at the moment, we assume this will not be the case ; check if real drive ldx #DRV_F011_0 ; real internal floppy lda $D6A1 @@ -315,8 +341,12 @@ _DebugStart: sta curType sta _driveType,y + cmp #DRV_SD_81 + bne @detectDone + LoadW r0, imageFileName + jsr SetImageFile - +@detectDone: ; on MEGA65 we check if we are able to transform ; from F011 mode to direct access SD mount ; this is possible if the drive is not a real drive and not virtual @@ -335,23 +365,26 @@ OrigResetHandle: lda #3|64 sta graphMode LoadW r5, 720 + jsr MapUnderlay jsr InitScanLineTab .endif ldx #$ff -.ifdef mega65 - jsr MapUnderlay -.endif jsr _DoFirstInitIO .ifdef mega65 jsr UnmapUnderlay .endif jsr InitGEOEnv + jsr SetNewMode + jsr ClrScr .ifdef usePlus60K jsr DetectPlus60K .endif .if .defined(useRamCart64) || .defined(useRamCart128) jsr DetectRamCart .endif +_DebugStart: + ;brk + jsr GetDirHead MoveB bootSec, r1H MoveB bootTr, r1L @@ -399,7 +432,7 @@ OrigResetHandle: loadZDriveOffset: - ; ok, different ROM versiokn have different locations of the + ; ok, different ROM version have different locations of the ; device numbers map for the internal/F011 drives ; for 910110 ROM it is 010112/010113 ; for 9110XY ROM it is 010113/010114 @@ -447,6 +480,24 @@ loadZDriveOffset: ldz #3 rts +.ifdef debugger +debuggerlist: + ; enchanced dma mode header + .byte $0a + .byte $80, $00 + .byte $81, $00 + .byte 0 + .byte 0 ; swap + .word $2000 ; $6000-$8000 + .word $6000 + .byte 0 ; bank 0 + .word $6000 + .byte 1 ; bank 1 + .word 0 ; unsued mod +.endif + +imageFileName: + .byte "GEOS.D81", NULL bootTr: .byte DIR_1581_TRACK bootSec: diff --git a/loader/loader.s b/loader/loader.s index bf2c637f..8a87695a 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -116,12 +116,14 @@ next: .WORD 0 ;ora #%01000000 sta $D05D - LDA $D054 ;40 mhz - ORA #$40 - STA $D054 - lda #$40 - sta $d031 - + LDA $D054 ;40 mhz + ORA #$40 + STA $D054 + lda #$40 + sta $d031 + + lda #5 + sta $D61B ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour ; information for bitmap mode. diff --git a/mount/IconA.map b/mount/IconA.map new file mode 100644 index 00000000..06454733 --- /dev/null +++ b/mount/IconA.map @@ -0,0 +1 @@ + ÿþ€€ƒ‡ƒ‡ƒŒÃŒÃØc˜c˜c€€ÿÿÿ \ No newline at end of file diff --git a/mount/IconB.map b/mount/IconB.map new file mode 100644 index 00000000..c0678588 --- /dev/null +++ b/mount/IconB.map @@ -0,0 +1 @@ + ÿþ€€ÃŒcŒcŒcÃŒcŒcŒcÀ€ÿÿÿ \ No newline at end of file diff --git a/mount/IconC.map b/mount/IconC.map new file mode 100644 index 00000000..a3493730 --- /dev/null +++ b/mount/IconC.map @@ -0,0 +1 @@ + ÿþ€€‡ÃŒc˜˜˜˜˜Œc‡Ã€€ÿÿÿ \ No newline at end of file diff --git a/mount/IconD.map b/mount/IconD.map new file mode 100644 index 00000000..a40ef076 --- /dev/null +++ b/mount/IconD.map @@ -0,0 +1 @@ + ÿþ€€ÃŒcŒcŒcŒcŒcŒcŒcÀ€ÿÿÿ± \ No newline at end of file diff --git a/mount/main.s b/mount/main.s index c447d258..4a9d478e 100644 --- a/mount/main.s +++ b/mount/main.s @@ -2,12 +2,21 @@ .include "geossym.inc" .include "geossym2.inc" .include "geosmac.inc" +.include "diskdrv.inc" .export __STARTUP_RUN__ .segment "STARTUP" + ; memory layout + ; 0400-2000 code + ; 2000-5000 file list (192*64) + +ICON_X = 2 +ICON_Y = 16 + + DirEntry: .repeat 64+1+11+4+4+1 .byte 0 @@ -17,62 +26,512 @@ __STARTUP_RUN__: lda firstBoot cmp #$FF - bne @1 + beq @1b + + jmp @1 +@1b: + ; init for mountable drives + jsr InitMountableDrives + + lda dialogDrive + bne @2 + + ; no mountable drive found + LoadW r0, NoDriveDialog + jsr DoDlgBox + + jmp @1 +@2b: + jsr InitDriveButtons +@2: + lda dialogDrive + clc + adc #'A'-8 + sta driveLetter + lda curDrive + pha + + lda dialogDrive + jsr SetDevice + + jsr GetImageFile + + ldx #r0 + ldy #r1 + LoadW r1, imageName + jsr CopyString + + pla + jsr SetDevice + ; show dialog to operate the mounts LoadW r0, SelectDialog jsr DoDlgBox + + lda r0L + cmp #OK + bne @1 + + ; mount new image for selected drive + lda curDrive + pha + + lda dialogDrive + jsr SetDevice + + ; mount selected image + lda selectedEntry + sta r13L + + jsr GetEntryString + + jsr SetImageFile + + pla + jsr SetDevice + bra @end @1: + cmp #'A' + beq @2b +@end: jmp EnterDeskTop + -SelectDialog: +serialText: + .byte "$XXXX", NULL +NoDriveDialog: .byte $81 ; standard dialog, light bachground - .byte DBTXTSTR - .byte 10, 25 - .word Text1 + .byte OK + .byte 17, 42 + + .byte DBTXTSTR, 10,10 + .word serialText + .byte NULL + +SelectDialog: + .byte $81 ; standard dialog, light bachground + .byte OK - .byte 16, 70 + .byte 17, 42 + ;.byte DBUSRICON,17,42 + ;.word mountButton + + ;.byte YES + ;.byte 17, 59 + + .byte CANCEL + .byte 17, 76 + + .byte DBTXTSTR, 17*8-5,11 + .word driveText + + .byte DBTXTSTR, 17*8-5,21 + .word imageName + + ;.byte DBUSRICON,26,26 + ;.word @icon4 .byte DB_USR_ROUT .word DrawDialog + .byte DBOPVEC + .word DialogMouse + + ; up to 3 drive change icons, this + ; changes the mountable drives +driveButton1: + .byte DBUSRICON,17,25 + .word driveAButton + +driveButton2: + .byte DBUSRICON,19,25 + .word driveBButton + +driveButton3: + .byte DBUSRICON,21,25 + .word driveCButton +endButton: .byte NULL + +driveButtons: + .word driveAButton, driveBButton, driveCButton, driveDButton -Text1: - .byte "Hello World!", NULL +mountButton: + .word mountIcon,0 + .byte 2, 16 + .word mountButton+8 + LoadB sysDBData, OK + jmp RstrFrmDialogue + +mountIcon: + .byte %11111111, %11111111 + .byte %10000000, %00000000 + .byte %10000000, %01111110 + .byte %10000001, %10011001 + .byte %10000011, %00000001 + .byte %10000111, %10011000 + .byte %10001000, %01011000 + .byte %10001000, %00111000 + .byte %10001100, %00011000 + .byte %10001000, %00001000 + .byte %10000110, %00000000 + .byte %10000010, %10000001 + .byte %10000001, %10011001 + .byte %10000000, %01111110 + .byte %10000000, %00000000 + .byte %10000000, %00000000 +driveAButton: .word IconA,0 + .byte ICON_X,ICON_Y + .word driveAButton+8 + ;LoadB @dr,'A' + LoadB dialogDrive, 8 + LoadB sysDBData, 'A' + jmp RstrFrmDialogue +driveBButton: .word IconB,0 + .byte ICON_X,ICON_Y + .word driveBButton+8 + ;LoadB @dr,'B' + LoadB dialogDrive, 9 + LoadB sysDBData, 'A' + jmp RstrFrmDialogue +driveCButton: .word IconC,0 + .byte ICON_X,ICON_Y + .word driveCButton+8 + ;LoadB @dr,'C' + LoadB sysDBData, 'A' + LoadB dialogDrive, 10 + jmp RstrFrmDialogue +driveDButton: .word IconD,0 + .byte ICON_X,ICON_Y + .word driveDButton+8 + ;LoadB @dr,'D' + LoadB sysDBData, 'A' + LoadB dialogDrive, 11 + jmp RstrFrmDialogue -DrawDialog: - lda #3 - jsr SetPattern +driveText: + .byte BOLDON, "Drive " +driveLetter: + .byte "A:", PLAINTEXT, NULL +imageName: + .byte "IMAGE.D81sdfsdfsdfsdfsdfsdf " + .byte "IMAGE.D81sdfsdfsdfsdfsdfsdf ", NULL + +DialogMouse: + lda mouseData + bpl @0 + rts +@0: + LoadW r3, 68 + LoadB r2L, 36 + + clc + lda r2L + adc #88 + sta r2H + MoveW r3, r4 + AddVW 124, r4 + + jsr IsMseInRegion + cmp #$FF + beq @1a + jmp @1 +@1a: + PushW r2 + PushW r3 + PushW r4 - LoadW r3, 50 - LoadW r4, 100 - LoadB r2L, 50 - LoadB r2H, 100 - jsr Rectangle + lda r2L + clc + adc #73 + sta r2L + + ; check up + AddVW 73, r3 + SubVW 16, r4 + + jsr IsMseInRegion + cmp #$FF + bne @3 + + lda topIndex + beq @3a + dec topIndex + LoadW r3, 68 + LoadB r2L, 36 + jsr DrawSelectionBox +@3a: + PopW r4 + PopW r3 + PopW r2 + rts + + ; check down +@3: + AddVW 16, r3 + AddVW 16, r4 + jsr IsMseInRegion + cmp #$FF + bne @4 + + lda topIndex + clc + adc #6 + cmp entryCount + bcs @4a + inc topIndex + LoadW r3, 68 + LoadB r2L, 36 + jsr DrawSelectionBox +@4a: + PopW r4 + PopW r3 + PopW r2 + rts +@4: + PopW r4 + PopW r3 + PopW r2 + + LoadB r13L, 0 + LoadB r5L, 6 + + MoveW r3, r4 + AddVW 122, r4 + clc + lda r2L + adc #11 + sta r2H + +@loop: + jsr IsMseInRegion + cmp #$FF + bne @2 + + ; clicked in line + lda r13L + clc + adc topIndex + sta selectedEntry + LoadW r3, 68 + LoadB r2L, 36 + jsr DrawSelectionBox + rts +@2: + clc + lda r2L + adc #12 + sta r2L + clc + lda r2H + adc #12 + sta r2H + + inc r13L + dec r5L + bne @loop + +@1: + rts - jsr LoadImageList +DrawDialog: + + ;jsr TestSomething + + jsr OpenDir - jsr DrawImageList + sta fileDesc + LoadB entryCount, 0 + LoadW r1, $2000 + LoadW r2, $1F00 +@next: + lda fileDesc + jsr ReadDir + bcc @ok + jmp @end + lda entryCount + brk - ;jsr OpenDir - ;jsr ReadDir + lda fileDesc + jsr ReadDir + bcs @end +@ok: + AddVW 64, r1 + AddVW 4, r2 - ;LoadW r0, DirEntry - ;LoadW r11, 70 - ;LoadB r1H, 100 - ;jsr PutString + inc entryCount + lda entryCount + cmp #192 + bne @next +@end: + + LoadW r3, 68 + LoadB r2L, 36 + LoadB selectedEntry, 0 + jsr DrawSelectionBox + + ldx fileDesc + jsr CloseDir + + rts + +GetEntryString: + MoveB r13L, r0L + LoadB r0H, 0 + asl r0L + rol r0H + asl r0L + rol r0H + asl r0L + rol r0H + asl r0L + rol r0H + asl r0L + rol r0H + asl r0L + rol r0H + AddVW $2000, r0 rts -LoadImageList: +testName: + .byte "Testname", NULL + +DrawSelectionBox: + clc + lda r2L + adc #88 + sta r2H + MoveW r3, r4 + AddVW 124, r4 + lda #$FF + jsr FrameRectangle + + PushW r2 + PushW r3 + PushW r4 + + lda r2L + clc + adc #73 + sta r11L + lda #%11111111 + jsr HorizontalLine + + lda r11L + sta r3L + clc + adc #15 + sta r3H + + SubVW 16, r4 + lda #%11111111 + jsr VerticalLine + + SubVW 16, r4 + lda #%11111111 + jsr VerticalLine + + PopW r4 + PopW r3 + PopW r2 + + inc r2L + IncW r3 + + MoveW r3, r4 + AddVW 122, r4 + clc + lda r2L + adc #11 + sta r2H + + MoveB topIndex, r13L + lda #6 + cmp entryCount + bcc @1 + lda entryCount +@1: + sta r5L + beq @2 + +@loop: + PushB r5L + jsr OutputLine + PopB r5L + + clc + lda r2L + adc #12 + sta r2L + clc + lda r2H + adc #12 + sta r2H + + inc r13L + dec r5L + bne @loop +@2: rts -DrawImageList: +OutputLine: + PushB currentMode + ldy #0 + lda currentMode + ora #SET_BOLD + ldx r13L + cpx selectedEntry + bne @1 + ora #SET_REVERSE + ldy #1 +@1: + sta currentMode + tya + jsr SetPattern + jsr Rectangle + PushB r13L + PushW r2 + PushW r3 + PushW r4 + + MoveW r3, r11 + AddVW 1, r11 + lda r2L + clc + adc #8 + sta r1H + jsr GetEntryString + + jsr PutString + PopW r4 + PopW r3 + PopW r2 + PopB r13L + PopB currentMode rts +fileDesc: + .byte 0 +entryCount: + .byte 0 +topIndex: + .byte 0 +loopCount: + .byte 0 +selectedEntry: + .byte 0 + +CloseDir: + LDA #$16 + STA $D640 + NOP + + rts + OpenDir: ;; Opendir takes no arguments and returns File descriptor in A LDA #$12 @@ -93,14 +552,22 @@ OpenDir: ;; d_reclen = size of the dirent on disk (32 bytes) ;; d_type = file/directory type ;; d_name = name of file + + ; input: + ; A - file descritpr + ; r1 - pointer to 64 byte buffer for name + ; r2 - pointer to 4 byte for cluster + ; return: + ; A + ; X + ; CARRY: clear = success, set = error ReadDir: -.if 0 pha ;; First, clear out the dirent - ldx #0 - txa -@l1: sta @dirent,x + ldx #64+1+11+4+4 + lda #0 +@l1: sta DirEntry,x dex bne @l1 @@ -110,8 +577,7 @@ ReadDir: plx -.endif - tax + ;tax ldy #>DirEntry ; write dirent to DirEntry lda #$14 @@ -123,21 +589,29 @@ ReadDir: ;; Return end of directory lda #$00 ldx #$00 + sec RTS @readDirSuccess: -.if 0 ;; Copy file name - ldx #$3f -@l2: lda $0400,x - sta _readdir_dirent+4+2+4+2,x - dex - bpl @l2 - ;; make sure it is null terminated - ldx $0400+64 + ldy #0 +@l2: lda DirEntry,y + sta (r1),y + beq @eofile + iny + cpy #63 + bne @l2 lda #$00 - sta _readdir_dirent+4+2+4+2,x + sta (r1),y +@eofile: + + ldy #3 +@l3: lda $0477,y + sta (r2),y + dey + bpl @l3 +.if 0 ;; Inode = cluster from offset 64+1+12 = 77 ldx #$03 @l3: lda $0477,x @@ -163,12 +637,157 @@ ReadDir: lda #<_readdir_dirent ldx #>_readdir_dirent .endif - RTS + clc + RTS + +InitMountableDrives: + ; check if current drive is mountable + ldx curDrive + jsr IsMountableDrive + bcc @1 + stx dialogDrive + bra @2 +@1: + ; no current drive, choose mountable + ldx #8 +@4: + jsr IsMountableDrive + bcc @3 + stx dialogDrive + bra @2 +@3: + inx + cpx #12 + bne @4 +@2: +InitDriveButtons: + ; setup drive change buttons + LoadW r10, driveButton1 + ldx #8 +@7: + cpx dialogDrive + beq @5 + jsr IsMountableDrive + + bcc @5 + + ; add drive + AddVW 3,r10 + txa + sec + sbc #8 + asl + tay + txa + pha + tya + tax + ldy #0 + lda driveButtons,x + sta (r10),y + lda driveButtons+1,x + iny + sta (r10),y + pla + tax + + AddVW 2, r10 + CmpWI r10, endButton + beq @6 +@5: + inx + cpx #12 + bne @7 + +@6: lda #NULL + ldz #0 + sta (r10), z + + rts + +; X = drive no 8,9,10,11 +; result: c set if mountable +; destroy A reg +IsMountableDrive: + lda driveType-8,x + cmp #DRV_SD_81 + beq @yes + cmp #DRV_SD_71 + beq @yes + clc + rts +@yes: + sec + rts + +dialogDrive: + .byte 0 + +emptyString: + .byte " ", NULL +TestSomething: + lda #9 + jsr SetDevice + jsr OpenDisk + + ; enumerate over all sectors + LoadB r15L,1 + LoadB r15H,0 + LoadW r4, $5000 + +@1: + PushW r15 + PushW r4 + + ; write track to screen + + LoadW r11, 100 + LoadB r1H, 100 + MoveB r15L, r0L + LoadB r0H, 0 + lda #0 + jsr PutDecimal + LoadW r0, emptyString + jsr PutString + + ; write sector to screen + LoadW r11, 100 + LoadB r1H, 120 + MoveB r15H, r0L + LoadB r0H, 0 + lda #0 + jsr PutDecimal + LoadW r0, emptyString + jsr PutString + PopW r4 + PopW r15 + MoveW r15, r1 + PushW r15 + jsr GetBlock + PopW r15 + inc r15L + lda r15L + cmp #81 + bne @1 + LoadB r15L, 1 + inc r15H + lda r15H + cmp #40 + beq @2 + jmp @1 +@2: + inc $d020 + bra @2 + rts -ImageList: - .repeat 100 - .byte 0 - .endrep +IconA: + .incbin "mount/IconA.map" +IconB: + .incbin "mount/IconB.map" +IconC: + .incbin "mount/IconC.map" +IconD: + .incbin "mount/IconD.map" \ No newline at end of file diff --git a/mount/mount.grc b/mount/mount.grc index 81540e45..6984c1f0 100644 --- a/mount/mount.grc +++ b/mount/mount.grc @@ -1,6 +1,6 @@ HEADER AUTO_EXEC "MEGA MOUNT" "MEGA Mount" "V1.0" { author "Falk Rehwagen" - dostype SEQ + dostype USR structure SEQ info "Used to mount D81 or D41/D71 SD image files for mountable drives, save and restore at boot up." date 25 01 20 13 19 diff --git a/mse1351_cvt.cfg b/mse1351_cvt.cfg new file mode 100644 index 00000000..f51b8f4d --- /dev/null +++ b/mse1351_cvt.cfg @@ -0,0 +1,11 @@ +MEMORY { + CVT: file = %O, start = $0, size = $40000; + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + + joydrv: run = MOUSE_BASE, type = ro, load = CVT, align_load = $FE, define = yes; +} diff --git a/space/main.s b/space/main.s new file mode 100644 index 00000000..01eea423 --- /dev/null +++ b/space/main.s @@ -0,0 +1,70 @@ +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" +.include "diskdrv.inc" + + +.export __STARTUP_RUN__ + +.segment "STARTUP" + +__STARTUP_RUN__: + LoadW r0, WelcomeDialog + jsr DoDlgBox + + jmp EnterDeskTop + + +WelcomeDialog: + .byte $81 ; standard dialog, light bachground + + .byte OK + .byte 17, 74 + + .byte DBTXTSTR, 10,11 + .word welcomeText + + .byte DBTXTSTR, 10,21 + .word geosVersionText + + .byte DBTXTSTR, 10,33 + .word versionDetails + + .byte DBTXTSTR, 10,43 + .word coreInfo + + .byte DBTXTSTR, 10,55 + .word warranties + + .byte DBTXTSTR, 10,65 + .word warranties2 + + .byte DBTXTSTR, 10,80 + .word geoSpaceInfo + + .byte DBTXTSTR, 10,89 + .word bluewayswInfo + + .byte NULL + + + +welcomeText: + .byte BOLDON, OUTLINEON, "Welcome!", PLAINTEXT, NULL +geosVersionText: + .byte BOLDON, "GEOS V6.0 for the MEGA65", PLAINTEXT, NULL +versionDetails: + .byte "(09/21/20, alpha preview)", NULL +coreInfo: + .byte "MEGA65 dev core: @192/56 3990bec", NULL +warranties: + .byte "Work in progress...", NULL +warranties2: + .byte BOLDON, "Use with care, no warranties!", PLAINTEXT, NULL +geoSpaceInfo: + .byte "establishing GeoSpace:", NULL +bluewayswInfo: + .byte BOLDON, "www.bluewaysw.de", NULL + + diff --git a/space/space.grc b/space/space.grc new file mode 100644 index 00000000..280b3186 --- /dev/null +++ b/space/space.grc @@ -0,0 +1,10 @@ +HEADER APPLICATION "GEOSPACE" "GeoSpace" "V1.0" { + author "Falk Rehwagen" + dostype USR + structure SEQ + info "Service hub for the user and developer community of GEOS." + date 21 09 20 07 01 + mode 80only + icon "build/mega65/space/space.bf" +} + diff --git a/space/spaceIcon.cfg b/space/spaceIcon.cfg new file mode 100644 index 00000000..0e3d5596 --- /dev/null +++ b/space/spaceIcon.cfg @@ -0,0 +1,7 @@ +MEMORY { + VARS: start = $1000, size = $0100; +} + +SEGMENTS { + ICON: load = VARS, type = ro; +} \ No newline at end of file diff --git a/space/spaceIcon.s b/space/spaceIcon.s new file mode 100644 index 00000000..17c185e1 --- /dev/null +++ b/space/spaceIcon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte %00000000, %11111111, %00000000 +.byte %00000011, %11111111, %11000000 +.byte %00001111, %00000000, %11110000 +.byte %00011100, %00000000, %00111000 +.byte %00111000, %01111110, %00011100 +.byte %01110001, %11111111, %10001110 +.byte %01100011, %10000001, %11000110 +.byte %11100011, %10000001, %11000111 +.byte %11000011, %10000001, %11000011 +.byte %11000000, %00000111, %10000011 +.byte %11000000, %00011111, %00000011 +.byte %11000000, %00111100, %00000011 +.byte %11000000, %00111100, %00000011 +.byte %11100000, %00000000, %00000111 +.byte %01100000, %00111100, %00000110 +.byte %01110000, %00111100, %00001110 +.byte %00111000, %00000000, %00011100 +.byte %00011100, %00000000, %00111000 +.byte %00001111, %00000000, %11110000 +.byte %00000011, %11111111, %11000000 +.byte %00000000, %11111111, %00000000 diff --git a/topdesk/DeskInclude/SearchDisk.inc b/topdesk/DeskInclude/SearchDisk.inc index 078773e9..6dd489c5 100644 --- a/topdesk/DeskInclude/SearchDisk.inc +++ b/topdesk/DeskInclude/SearchDisk.inc @@ -146,7 +146,8 @@ MemSearchDisk: ldx #0 beq @d05 cmp #1 bne @d10 -@d05: LoadB r1L,18 +@d05: + LoadB r1L,18 bne @d20 @d10: cmp #7 ; DRV_SD_71 beq @d05 diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index 107b5cfa..f56a29f9 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -61,8 +61,16 @@ FindDirFiles: .ifdef topdesk13 MoveW_ @r3,r3 .endif +lda curType +cmp #$82 +bne @HOHO +@HOHO2: + ;brk +@HOHO: + LoadB r14L,0 jsr DiskInitTurboIO + txa bne @100 ; DoneWithIO beq :20 @20: jsr @200 @@ -835,15 +843,20 @@ XSubDir: MoveW_ r15,r6 bne XError1 ldx #SUB_DIR rts - +.ifdef mega65 +XInput64: jmp XPrinter +XInput128: jmp XDispErr +.else XInput64: lda c128Flag bpl XPrinter jmp XDispErr XInput128: lda c128Flag bmi XPrinter jmp XDispErr +.endif XPrinter: jmp InstallDriver + XDocument: lda curDrive cmp #10 bcc Xw diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index fa1a06a6..278080f5 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -153,7 +153,6 @@ __ClearMultiFile: __STARTUP_RUN__: - Start: .ifdef topdesk128 jsr SetMyNewMode @@ -198,7 +197,7 @@ Start: @01: sta MyName,y iny bne @loop -@02: +@02: jmp StartUp .ifdef topdesk13 @@ -401,7 +400,8 @@ JmpSub: pha jmp (r0) @10: pla rts -StartUp: lda #7 +StartUp: + lda #7 jsr GetModule MoveW_ ModStart+3*3+1,r1 SubVW_ 2,r1 @@ -957,7 +957,9 @@ OpenDa: pha pla @26: jsr NewSetDevice - jmp OpenNext + jsr OpenNext + + rts @27: pla rts @@ -1776,7 +1778,7 @@ DA_Call: ; Nummer des Men}punktes in a tax dex ; minus 1 .ifdef topdesk128 - dex + dex ; minus "switch" .endif stx a0L jsr GotoFirstMenu @@ -1798,11 +1800,13 @@ DA_Call: ; Nummer des Men}punktes in a LoadW___ r6,Name LoadB r0L,0 jsr StashMain -DA_Call2: jsr GetFile ; DA laden und ausf}hren -DAReturn: txa +DA_Call2: + jsr GetFile ; DA laden und ausf}hren +DAReturn: + txa pha .ifdef topdesk128 - jsr SetMyNewMode + jsr SetMyNewMode .else lda c128Flag bpl @04 @@ -1998,6 +2002,7 @@ OpenNext: ldx activeWindow ; eventuell selektierte Files txa pha jsr GetDiskName + txa beq @0xx pla @@ -2010,9 +2015,12 @@ OpenNext: ldx activeWindow ; eventuell selektierte Files pla ldx #$80 jmp FehlerAusgabe -@0x1: pla +@0x1: + + pla pha jsr GetDiskInfo + pla pha tax @@ -2024,6 +2032,7 @@ OpenNext: ldx activeWindow ; eventuell selektierte Files sta xOffsH,x jsr GetSubDirXList jsr ClearList + pla tax @@ -2032,6 +2041,7 @@ OpenNextNr: lda #0 txa pha jsr ReLoad2 + txa beq @0xx pla @@ -2141,10 +2151,15 @@ ReLoad: ; NeuEinladen der Files / Icons LoadB r11H,0 ; OffSet auf 0 setzen lda #30 .byte $2c -@10: lda #18 +@10: + + + lda #18 sta r13L ; Anzahl der Bytes pro Eintrag stx r13H ; davon x }berlesen + jsr FindDirFiles + txa beq @15 pla @@ -2630,6 +2645,11 @@ PrintDriveNames: dec a7L bpl @loop jsr i_PutString +.ifdef scalable_coords + WordCX 5, SC_FROM_END | 6 + ByteCY 5, SC_FROM_END | 6 + .byte NULL +.else .ifdef topdesk128 ; .word 5 +DOUBLE_W .word 5 @@ -2637,6 +2657,7 @@ PrintDriveNames: .else .word 5 .byte 196,0 +.endif .endif LoadW___ r0,PrntFileName jsr NewPutString @@ -2690,15 +2711,26 @@ PutDrive: ; schreibt DriveName dey bne @30 @20: LoadB @ty,'8' -@30: lda driveType,x +@30: pla + tax + pha + + lda driveType,x bpl @40 lda #PLAINTEXT sta @nr sta @nr+1 LoadW___ r0, @dr @52: - SubVB 10,r11L ; nur low, da immer noch }ber 256 + AddVW 10,r11L ; nur low, da immer noch }ber 256 jmp @50 +@51: sty r0L + stx r0H + ldx #r11 + jsr NormalizeX + SubVW_ 7, r11 + bra @50 + @40: LoadB @nr+1,':' LoadW___ r0, @nr @50: pla @@ -2707,12 +2739,6 @@ PutDrive: ; schreibt DriveName adc #'A' sta (r0),y jmp NewPutString -@51: sty r0L - stx r0H - ldx #r11 - jsr NormalizeX - SubVW_ 7, r11 - bra @50 @dr: .byte "x:RAM " @nr: .byte PLAINTEXT,PLAINTEXT,"15" @@ -2722,7 +2748,7 @@ PutDrive: ; schreibt DriveName @sd71: .byte "x:SD D41/D71",0 @int: .byte "x:Internal ",0 @virt: .byte "x:Virtual ",0 -@ext: .byte "x:Ext 1565 ",0 +@ext: .byte "x:Ext 1565",0 @none: .byte "x: ??? ",0 CheckKlick: ; Ermittlung, ob Knopf gehalten oder nicht @@ -3230,11 +3256,13 @@ File_Selected: ; Auswertung einer File-Selection jsr DoneWithIO rts -OpenFile: jsr ClearMultiFile2 +OpenFile: + PushB graphMode + jsr ClearMultiFile2 jsr MaxTextWin @04: jsr GetAktlDisk bcc @05 - rts + jmp @100 @05: LoadB a7L,0 jsr CheckKlick bcs @d10 @@ -3250,7 +3278,9 @@ OpenFile: jsr ClearMultiFile2 beq @10b jmp @15 @10b: lda a7L - beq @w10 + bne @w10b + jmp @w10 +@w10b: lda r10L sta OpenNextNr+1 jsr GetNext ; freie WindowNummer holen @@ -3293,12 +3323,15 @@ OpenFile: jsr ClearMultiFile2 ldx @new jsr OpenNextNr @w08: LoadB OpenNextNr+1,0 +@100: + PopB graphMode + jsr SetNewMode rts @w09: ldx activeWindow jsr GetSubDirXList jsr UpperDir LoadB OpenNextNr+1,0 - rts + bra @100 @new: .byte 0 @w10: ldx activeWindow lda r10L @@ -3314,7 +3347,13 @@ OpenFile: jsr ClearMultiFile2 jsr FehlerAusgabe @e10: ; rts @10: -@14: rts +@14: + PopB graphMode + jsr SetNewMode + jsr SetColor + jsr RedrawHead + jsr RedrawAll + rts @15: cmp #14 ; INCOMPATIBLE bne @16b jsr StashMain diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 8c66c7ca..72e37071 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -154,9 +154,12 @@ InstallDriver: lda firstBoot jsr StashDrivers jsr InitMouse @rts: rts -@Prnt8: lda c128Flag +@Test: .byte "Comm. Compat.",NULL +@Prnt8: + lda c128Flag bpl @Prnt8a jsr DA1 +.ifndef mega65 LoadW___ r0,$7900 LoadW___ r1,$d9c0 LoadW___ r2,$640 @@ -169,11 +172,22 @@ InstallDriver: lda firstBoot LoadW___ r2,$100 jsr MoveBData PopW r15 -@Prnt8a: MoveW_ r15,@Prnt2 - jsr i_MoveData -@Prnt2: .word 0 -@Prnt3: .word PrntFileName - .word 16 +.endif +@Prnt8a: + ;MoveW_ r15,@Prnt2 + ;LoadW @Prnt2, @Test + ;jsr i_MoveData +;@Prnt2: .word 0 +;@Prnt3: .word PrntFileName +; .word 16 + ldy #0 +@copyLoop: + lda (r15),y +@Prnt3 = *+1 + sta $FFFF, y + iny + cpy #16 + bne @copyLoop lda firstBoot bpl @Prnt8b jsr RedrawAll @@ -208,7 +222,9 @@ DA1: MoveW_ r15,r6 sta r10L jmp GetFile -StashDrivers: lda sysRAMFlg +StashDrivers: + rts + lda sysRAMFlg and #%00100000 bne @10 @05: rts @@ -256,7 +272,7 @@ StartUp: lda sysRAMFlg ; REU-MoveData ausschalten and #$7f sta sysRAMFlg -@norm: +@norm: .ifndef topdesk128 lda c128Flag bpl @010 @@ -333,10 +349,14 @@ StartUp: lda inputDevName bne @30 jsr GetPrefs2 +.ifdef mega65 + lda #10 ; Input 64 +.else lda #10 ; Input 64 ldx c128Flag bpl @20 lda #15 ; Input 128 +.endif @20: sta r7L LoadB r7H,1 LoadB Name,0 diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index b99a25f1..0f88eb51 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -270,7 +270,6 @@ DrawWindow2: ; Par: a4-a6: Window-Rechteck plp bcc @n10 - inc $d020 lda #0 sta cutDebug rts @@ -2732,6 +2731,9 @@ NewPutString: .ifdef topdesk128 ldx #r11 jsr NormalizeX + ldx #r11 + ldy #r1H + jsr NormalizeY .endif ldy #00 lda (r0),y @@ -2888,7 +2890,7 @@ StringLen: ;t "InvFrame" .include "topdesk/WinInclude/InvFrame.inc" -;SpeedFrame ; Parameter : r2-r4 Start r5-r7 Ende r8 Min Breite r9L Min H|he r9H Temp. +;SpeedFrame; Parameter : r2-r4 Start r5-r7 Ende r8 Min Breite r9L Min H|he r9H Temp. ; Des: a,x,y,r0-r12 ;t "SpeedFrame" .include "topdesk/WinInclude/SpeedFrame.inc" From fbb95e0a0f804d69d6547756a769fe7695634e17 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 26 Sep 2020 14:14:02 +0200 Subject: [PATCH 072/125] Fix issue when installing drivers with TopDesk, also fix graph mode handling for all branches in OpenFile. --- kernal/debug/main.s | 4 ++-- topdesk/Include/SubDir.src.inc | 3 ++- topdesk/Main/DeskTop.main.s | 12 ++++++++---- topdesk/Main/DeskTop.sub7.s | 7 ++++--- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/kernal/debug/main.s b/kernal/debug/main.s index 95f4fccd..939548c4 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -1848,9 +1848,9 @@ GetByte: sbc #$00 sta r0L lda r0H - sbc #$40 + sbc #$00 sta r0H - lda #1 + lda #0 sta r1L lda #0 sta r1H diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index f56a29f9..b94f32cb 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -854,7 +854,8 @@ XInput128: lda c128Flag bmi XPrinter jmp XDispErr .endif -XPrinter: jmp InstallDriver +XPrinter: + jmp InstallDriver XDocument: lda curDrive diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 278080f5..9dbdfb5e 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -3395,21 +3395,25 @@ OpenFile: lda #$80 bra @16f -@16: cpx #15 +@16: + cpx #15 bne @17 jsr SetNumDrives jsr MaxTextWin LoadWr0 @db - jmp NewDoDlgBox + jsr NewDoDlgBox + bra @200 @17: cpx #16 bne @18 jsr SetNumDrives jsr MaxTextWin LoadWr0 @db2 - jmp NewDoDlgBox + jsr NewDoDlgBox + bra @200 @18: ; bei x=18 ist auf RAM A und B kein DeskTop gewesen! jsr SetNumDrives - rts +@200: + jmp @100 @db: .byte $81 .byte $0b,$10,$10 .word @t1 diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 72e37071..4cdc290d 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -117,7 +117,8 @@ DiskName = Name + 19 jmp DeskFormat jmp StartUp jmp InstallDriver -InstallDriver: lda firstBoot +InstallDriver: + lda firstBoot bpl @10 jsr GetAktlDisk tax @@ -153,8 +154,8 @@ InstallDriver: lda firstBoot jsr @Prnt8a jsr StashDrivers jsr InitMouse + ldx #0 @rts: rts -@Test: .byte "Comm. Compat.",NULL @Prnt8: lda c128Flag bpl @Prnt8a @@ -221,7 +222,7 @@ DA1: MoveW_ r15,r6 sta r0L sta r10L jmp GetFile - + StashDrivers: rts lda sysRAMFlg From 6f67ed9424de804f6351ba9c7e7cb57732ec1701 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 26 Sep 2020 15:11:31 +0200 Subject: [PATCH 073/125] Brought back original implementation of driver name copy. --- topdesk/Main/DeskTop.sub7.s | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 4cdc290d..685403b5 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -175,20 +175,11 @@ InstallDriver: PopW r15 .endif @Prnt8a: - ;MoveW_ r15,@Prnt2 - ;LoadW @Prnt2, @Test - ;jsr i_MoveData -;@Prnt2: .word 0 -;@Prnt3: .word PrntFileName -; .word 16 - ldy #0 -@copyLoop: - lda (r15),y -@Prnt3 = *+1 - sta $FFFF, y - iny - cpy #16 - bne @copyLoop + MoveW_ r15,@Prnt2 + jsr i_MoveData +@Prnt2: .word 0 +@Prnt3: .word PrntFileName + .word 16 lda firstBoot bpl @Prnt8b jsr RedrawAll From 8bb604d83129a62b9bda0b16421ec1cd3118bb77 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 29 Nov 2020 19:00:19 +0100 Subject: [PATCH 074/125] Reimplemented resolution scalability and using it for dialogs and TopDesk specifics. --- .gitignore | 2 + Makefile | 18 +-- clock/main.s | 132 +++++++-------- inc/const.inc | 2 +- kernal/c65/map.s | 16 +- kernal/conio/conio4.s | 3 + kernal/debug/main.s | 155 +++++++++++++++++- kernal/dlgbox/dlgbox1c.s | 44 +++-- kernal/dlgbox/dlgbox1d.s | 59 ++++++- kernal/files/files6c.s | 1 - kernal/graph/bitmapup.s | 16 ++ kernal/graph/line.s | 139 +++++++++++----- kernal/graph/mode.s | 47 +++++- kernal/graph/normalize.s | 179 +++++++++++++-------- kernal/graph/rect.s | 57 ++++--- kernal/graph/scanline.s | 12 +- kernal/icon/icon2.s | 19 ++- kernal/init/init2.s | 12 +- kernal/jumptab/jumptab.s | 3 +- kernal/kernal_mega65.cfg | 16 +- kernal/load/load1a.s | 4 + kernal/memory/backram.s | 1 + kernal/mouse/mouse1.s | 5 + kernal/reu/reu.s | 22 +-- kernal/sprites/sprites.s | 33 ++-- kernal/start/start64.s | 2 +- loader/loader.s | 5 +- mount/main.s | 259 ++++++++++++++++++------------ topdesk/DeskInclude/EditText.inc | 93 ++++++++--- topdesk/Include/DeskMain2.inc | 24 +-- topdesk/Include/Symbol/TopSym.inc | 2 +- topdesk/Main/DeskTop.main.s | 27 +++- topdesk/Main/DeskTop.sub2.s | 17 +- topdesk/Main/DeskTop.sub4.s | 58 +++++-- topdesk/Main/DeskTop.sub7.s | 2 +- topdesk/Main/DeskWindows.akt.inc | 37 ++++- 36 files changed, 1078 insertions(+), 445 deletions(-) diff --git a/.gitignore b/.gitignore index cd4b31c3..6a498325 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ GEOS64.D64 desktop.cvt build +*.CVT +*.cvt diff --git a/Makefile b/Makefile index 6dd88a7c..ed76305b 100755 --- a/Makefile +++ b/Makefile @@ -184,7 +184,7 @@ ifeq ($(VARIANT), mega65) kernal/c65/iojmp.s \ kernal/128k/swapdiskdriver.s \ kernal/files/compat.s \ - kernal/memory/backram.s + kernal/memory/backram.s endif # code that is in C128 back bank @@ -498,7 +498,7 @@ SNX10C.CVT NX1000R.CVT SSG10.CVT TOSHP321.CVT -endif +endif $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt \ $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/clock.cvt $(BUILD_DIR)/config.cvt \ @@ -585,8 +585,8 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mse1351.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ @@ -595,8 +595,8 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mse1351.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/autostart.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/geospace.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ @@ -889,13 +889,13 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o $(BUILD_DIR)/mount.cvt: $(BUILD_DIR)/mount/mount.o $(BUILD_DIR)/mount/main.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o $(BUILD_DIR)/geospace.cvt: $(BUILD_DIR)/space/space.o $(BUILD_DIR)/space/main.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o $(BUILD_DIR)/clock.cvt: $(BUILD_DIR)/clock/clock.o $(BUILD_DIR)/clock/main.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o $(BUILD_DIR)/input_driver.cvt: $(BUILD_DIR)/folder/input_driver.o $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/input_driver.o -m $(BUILD_DIR)/input_driver.map @@ -931,10 +931,10 @@ $(BUILD_DIR)/coding.cvt: $(BUILD_DIR)/folder/coding.o $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/coding.o -m $(BUILD_DIR)/coding.map $(BUILD_DIR)/joydrv.cvt: $(BUILD_DIR)/input/joydrvHdr.o $(BUILD_DIR)/input/joydrv.o - $(LD) -C input/joydrv_cvt.cfg -o $@ $(BUILD_DIR)/input/joydrvHdr.o -m $(BUILD_DIR)/joydrv.map $(BUILD_DIR)/input/joydrv.o + $(LD) -C input/joydrv_cvt.cfg -o $@ $(BUILD_DIR)/input/joydrvHdr.o -m $(BUILD_DIR)/joydrv.map $(BUILD_DIR)/input/joydrv.o $(BUILD_DIR)/mse1351.cvt: $(BUILD_DIR)/input/mse1351Hdr.o $(BUILD_DIR)/input/mse1351.o - $(LD) -C input/mse1351_cvt.cfg -o $@ $(BUILD_DIR)/input/mse1351Hdr.o -m $(BUILD_DIR)/mse1351.map $(BUILD_DIR)/input/mse1351.o + $(LD) -C input/mse1351_cvt.cfg -o $@ $(BUILD_DIR)/input/mse1351Hdr.o -m $(BUILD_DIR)/mse1351.map $(BUILD_DIR)/input/mse1351.o ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg diff --git a/clock/main.s b/clock/main.s index 97a2d276..98bca3d8 100644 --- a/clock/main.s +++ b/clock/main.s @@ -51,12 +51,12 @@ __STARTUP_RUN__: lda firstBoot cmp #$FF bne @1 - + ; show dialog to operate the mounts LoadW r0, SelectDialog jsr DoDlgBox - jmp EnterDeskTop + jmp EnterDeskTop @1: jsr GetRTC bcs @2 ; branch if no valid GetRTC @@ -64,19 +64,19 @@ __STARTUP_RUN__: jsr SetTime @2: jmp EnterDeskTop - + GetRTC: ; check if clock is running by checking ; if seconds are changing for 3s LoadW r0, $7110 LoadW r1, $0FFD - + jsr GetLongUnbounced sta MySec lda #30 - sta dblClickCount + sta dblClickCount @1: jsr GetLongUnbounced @@ -89,14 +89,14 @@ GetRTC: inc r0L jsr GetLongUnbounced sta MyMin - + inc r0L jsr GetLongUnbounced sta MyStd - + and #$80 beq @10 ; branch if 12h time - + lda MyStd and #$3F sta MyStd @@ -112,7 +112,7 @@ GetRTC: lda MyStd and #$1F jsr BcdToDec - + clc adc #12 jsr DezBCD @@ -130,15 +130,15 @@ GetRTC: inc r0L jsr GetLongUnbounced sta MyTag - + inc r0L jsr GetLongUnbounced sta MyMonat - + inc r0L jsr GetLongUnbounced sta MyJahr - + clc rts @2: @@ -148,7 +148,7 @@ GetRTC: SetRTC: LoadW r0, $7118 LoadW r1, $0FFD - + jsr GetLongUnbounced pha lda #$41 @@ -157,9 +157,9 @@ SetRTC: LoadW r0, $7110 LoadW r1, $0FFD - + ; enable setting the RTC - + lda MySec ;s jsr SetLong jsr Wait @@ -168,18 +168,18 @@ SetRTC: inc r0L jsr SetLong jsr Wait - + inc r0L ;lda MyStd ;h jsr GetLongUnbounced and #$80 beq @10 - + lda MyStd ora #$80 bra @30 -@10: +@10: LoadB r2L, 0 PushW r0 PushW r1 @@ -232,9 +232,9 @@ SetRTC: inc r0L jsr SetLong jsr Wait - + rts - + SetTime: jsr RunClock rts @@ -291,7 +291,7 @@ Mykey: lda keyData jsr Beep pla tay - jmp SetRev + jmp SetRev @120: jsr RunClock jsr ShowClock ;jsr MouseUp @@ -302,7 +302,7 @@ Mykey: lda keyData jsr SetRTC jsr RstrFrmDialogue @1000: rts - + SetPlain: ldy TabZeiger @@ -320,22 +320,22 @@ SetRev: jsr DoneWithIO jsr SetObUn jmp ShowClock - + SetObUn: ldy TabZeiger lda ObTab,y sta Obergrenze rts - + ObTab: .byte $33,$39,$31,$39 - .byte $39,$39,$32,$39,$35,$39, $35,$39 + .byte $39,$39,$32,$39,$35,$39, $35,$39 ; TestTime ; ]berpr}fung ; return ; a = 0 OK ; a = $ff false; y Wert f}r TabZeiger - + TestTime: lda MyTag jsr BcdToDec @@ -349,7 +349,7 @@ TestTime: blt @05 ldy #0 beq @00 - + @05: lda MyMonat jsr BcdToDec cmp #0 @@ -449,14 +449,14 @@ RevTab: Obergrenze: .byte "3" - + SelectDialog: .byte $81 ; standard dialog, light bachground .byte DBTXTSTR .byte 10, 25 .word Text1 - + .byte CANCEL .byte 17, 70 @@ -464,27 +464,33 @@ SelectDialog: .word DrawDialog .byte NULL - + Text1: .byte BOLDON, "Set RTC and system date/time:", NULL - - + +EntryX: + WordCX %101100000000 | ((-96+24) & $FF), %101100000000 | ((-48+50) & $FF) +EntryY: + ByteCY %101100000000 | ((-96+24) & $FF), %101100000000 | ((-48+50) & $FF) + + DrawDialog: jsr GetDateTimeString jsr GetTime - + ShowClock: LoadW r0, DateTimeString - LoadW r11, 80 - LoadB r1H, 85 + + MoveW EntryX, r11 + MoveB EntryY, r1H jsr PutString rts - - + + GetDateTimeString: jsr GetRTC bcc @2 - + ; init from GEOS time lda day jsr DezBCD @@ -529,13 +535,13 @@ GetDateTimeString: Wait: LoadW r2, $71FF LoadW r3, $0FFD - + @10: LDZ #0 EOM lda (r2), Z bne @10 - + rts GetLongUnbounced: @@ -549,13 +555,13 @@ GetLongUnbounced: cmp (r0), Z bne GetLongUnbounced rts - + SetLong: LDZ #0 EOM sta (r0), Z RTS - + DivnSet: pha txa lsr @@ -578,13 +584,13 @@ DivnSet: pha adc #$30 sta TagZehner,x rts - + MyJahr: .byte 0 MyMonat: .byte 0 MyTag: .byte 0 MyStd: .byte 0 MyMin: .byte 0 -MySec: .byte 0 +MySec: .byte 0 DPA = $dc00 @@ -595,17 +601,17 @@ GetTimeString: ldx TagEiner jsr ASCBCD sta MyTag - + lda MonZehner ldx MonEiner jsr ASCBCD sta MyMonat - + lda JahZehner ldx JahEiner jsr ASCBCD sta MyJahr - + lda StdZehner ldx StdEiner jsr ASCBCD @@ -615,7 +621,7 @@ GetTimeString: ldx MinEiner jsr ASCBCD sta MyMin - + lda SecZehner ldx SecEiner jsr ASCBCD @@ -625,11 +631,11 @@ GetTimeString: SetTime2: jsr InitForIO - + lda MyTag jsr BcdToDec sta day - + lda MyMonat jsr BcdToDec sta month @@ -637,49 +643,49 @@ SetTime2: lda MyJahr jsr BcdToDec sta year - + LoadB ampm,0 lda MyStd jsr BcdToDec - + cmp #24 ; accept 24 to be 0 o'clock bne @ci lda #0 @ci: sta hour cmp #12 - blt @am + blt @am pha LoadB ampm,$80 pla sec sbc #12 - + @am: jsr DezBCD clc adc ampm sta DPA+$0b lda MyMin - jsr BcdToDec + jsr BcdToDec sta minutes jsr DezBCD sta DPA+$0a - + lda MySec - jsr BcdToDec + jsr BcdToDec sta seconds jsr DezBCD sta DPA+$09 - + rts - + RunClock: jsr SetTime2 lda #$00 sta DPA+$08 jsr DoneWithIO - rts + rts ;ASCBCD ; a High ; x Low @@ -695,7 +701,7 @@ ASCBCD: and #$0f ora r0L rts - + DezBCD: sta r0L LoadB r0H,0 @@ -711,7 +717,7 @@ DezBCD: clc adc r8L rts - + BcdToDec: tax and #$0F @@ -728,4 +734,4 @@ BcdToDec: clc adc r0L - rts \ No newline at end of file + rts diff --git a/inc/const.inc b/inc/const.inc index 250768ab..ff499ca9 100644 --- a/inc/const.inc +++ b/inc/const.inc @@ -447,7 +447,7 @@ GR_80 = $80 ; graphMode ; high resolution HIGH_Y_MASK = %00011111 -SC_FROM_END = %100000000000 +SC_FROM_END = %111100000000 SC_FROM_CENTER = %010000000000 SC_SCALE = %110000000000 diff --git a/kernal/c65/map.s b/kernal/c65/map.s index aeec5f7c..88a806ff 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -67,6 +67,7 @@ .import _SetNewMode .import _GetRealSize .import _EndScanLine +.import _IsMseInRegion .global _map_FollowChain .global _map_FindFTypes @@ -98,6 +99,7 @@ .global _map__CRC .global _map_SetNewMode .global _map_GetRealSize +.global _map_IsMseInRegion .global MapUnderlay .global UnmapUnderlay @@ -203,6 +205,10 @@ ApplyMapping: +_map_IsMseInRegion: + jsr MapUnderlay + jsr _IsMseInRegion + bra __unmap2 _map_FollowChain: jsr MapUnderlay jsr _FollowChain @@ -365,14 +371,7 @@ MapUnderlay: jmp @3 @2: inc countHighMap - pla - taz - pla - tay - pla - tax - pla - rts + bra mapEnd UnmapUnderlay: pha @@ -398,6 +397,7 @@ UnmapUnderlay: jmp @3 @2: +mapEnd: pla taz pla diff --git a/kernal/conio/conio4.s b/kernal/conio/conio4.s index 9193670a..087935d6 100644 --- a/kernal/conio/conio4.s +++ b/kernal/conio/conio4.s @@ -20,6 +20,7 @@ .import _InitTextPrompt .import NormalizeX +.import NormalizeY .ifdef bsw128 .import PromptOn @@ -41,6 +42,8 @@ _GetString: .if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX + ldy #r1H + jsr NormalizeY .endif MoveW r0, string MoveB r1L, stringMargCtrl diff --git a/kernal/debug/main.s b/kernal/debug/main.s index 939548c4..8c80b789 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -22,6 +22,8 @@ STACK_OFFSET = 4 +TRACE_MODE = 0 +SSTEP_MODE = $80 consoleCols: .byte 80 @@ -93,9 +95,12 @@ saveD058: .byte 0 saveD05E: .byte 0 - +traceMode: + .byte TRACE_MODE u_cl: .word 0 +u_cl_h: + .byte 0 breakList: .word 0, 0, _DebugStart, 0, 0, 0, 0, 0, 0, 0 @@ -129,6 +134,8 @@ DebugMain: sbc #0 sta $107+STACK_OFFSET,y sta u_cl+1 + lda #0 + sta u_cl_h PushB CPU_DATA LoadB CPU_DATA, IO_IN @@ -527,11 +534,19 @@ UpdateCursor: @1: rts -ProcessTrace: +ProcessSingleStep: + LoadB traceMode, SSTEP_MODE + LoadW r0, singleStep + jsr PutString + bra traceNow + +ProcessTrace: + LoadB traceMode, TRACE_MODE LoadW r0, trace jsr PutString +traceNow: jsr ResetSingleStep ; calc next break address @@ -546,9 +561,30 @@ ProcessTrace: ;lda (r0), y ; get opcode at PC jsr GetByte + ; special opcode BRK + cmp #0 + bne @4b + + IncW r0 + ldy stackPointer + lda r0H + sta $107+STACK_OFFSET, y + lda r0L + sta $106+STACK_OFFSET, y + + ldy #0 + ;lda (r0), y ; get opcode at PC + jsr GetByte + ; special opcode handling for single step +@4b: bit traceMode + bpl @4e + cmp #$20 + beq @4f +@4e: cmp #$4C ; JMP bne @1 +@4f: ldy #1 @4: lda (r0), y ; get jmp address low @@ -575,6 +611,45 @@ ProcessTrace: bra @4 @3: + cmp #$90 ; BCC + bne @3b + + ldy stackPointer + lda $105+STACK_OFFSET, y + and #1 + bne @3b +@3c: + ; follow branch + ldy #1 + jsr GetByte ; branch offset + + ldx #0 + sta r0L + bit r0L + bpl @3d + ldx #$FF +@3d: + stx r0H + + ldy stackPointer + lda $106+STACK_OFFSET, y + clc + adc r0L + sta r0L + lda $107+STACK_OFFSET, y + adc r0H + sta r0H + + AddVW 2, r0 + bra @2 + + lda r0L + sta $106+STACK_OFFSET, y + lda r0H + sta $107+STACK_OFFSET, y + clc + rts +@3b: jsr DebugOpcode_GetLen clc @@ -701,8 +776,12 @@ ProcessPrompt: LoadW r0, promptBuf LoadW r1, setbCommand jsr StrBeginsWith - bne @1 + beq @4d + + ; assume single step 's' + jmp ProcessSingleStep +@4d: clc tya adc r0L @@ -757,9 +836,10 @@ ProcessPrompt: jsr EvalAddrExpr bcs @6c MoveW r1, u_cl - + MoveB r2L, u_cl_h @6c: MoveW u_cl, r0 + MoveB u_cl_h, r2L ldx #0 @6b: @@ -773,6 +853,7 @@ ProcessPrompt: bne @6b MoveW r0, u_cl + MoveB r2L, u_cl_h clc rts @@ -838,11 +919,15 @@ ProcessDump: jsr EvalAddrExpr bcs @6c MoveW r1, u_cl + MoveB r2L, u_cl_h @6c: MoveW u_cl, r0 + MoveB u_cl_h, r2L lda #'$' jsr PutChar + lda r2L + jsr PrintByteHex lda r0H jsr PrintByteHex lda r0L @@ -856,7 +941,8 @@ ProcessDump: pha tay ;lda (r0), y - jsr GetByte + LoadB r2L, $05 + jsr GetByteLong jsr PrintByteHex lda #' ' jsr PutChar @@ -870,7 +956,7 @@ ProcessDump: jsr PutChar MoveW r0, u_cl - + MoveB r2L, u_cl_h clc rts @@ -1226,6 +1312,7 @@ EvalAddrExpr: EvalHexWord: LoadW r1, 0 + LoadB r2L, 0 @2: lda (r0), y beq @5 @@ -1242,12 +1329,16 @@ EvalHexWord: tax asl r1L rol r1H + rol r2L asl r1L rol r1H + rol r2L asl r1L rol r1H + rol r2L asl r1L rol r1H + rol r2L txa ora r1L sta r1L @@ -1357,7 +1448,10 @@ UpdatePCBreakpoint: rts trace: - .byte "Trace!", 13, 0 + .byte "Trace!", 13, 0 + +singleStep: + .byte "Single Step!", 13, 0 syntaxError: .byte "Syntax Error!", 13, 0 @@ -1739,7 +1833,11 @@ DebugOpcode_PrintBREL: rts GetByte: + LoadB r2L, 0 + +GetByteLong: PushW r0 + PushB r2L clc tya adc r0L @@ -1747,7 +1845,40 @@ GetByte: lda r0H adc #0 sta r0H + lda r2L + adc #0 + sta r2L + + beq @zeroBank + + PushW r0 + PushW r1 + + lda r0L + sec + sbc #$00 + sta r0L + lda r0H + sbc #$00 + sta r0H + lda r2L + sta r1L + lda #0 + sta r1H + + LDZ #0 + EOM + lda (r0L), Z + tay + + PopW r1 + PopW r0 + tya + + jmp @3 + +@zeroBank: CmpWI r0, r0 bne @a1 lda saveR0 @@ -1839,7 +1970,7 @@ GetByte: CmpWI r0, $8000 beq @b5 bcs @b5 - +@b7: PushW r0 PushW r1 @@ -1867,10 +1998,18 @@ GetByte: bra @3 @b5: + CmpWI r0, $D000 + bcc @b6 + CmpWI r0, $E000 + beq @b6 + bcs @b6 + jmp @b7 +@b6: ldy #0 lda (r0), Y @3: tay + PopB r2L PopW r0 tya rts diff --git a/kernal/dlgbox/dlgbox1c.s b/kernal/dlgbox/dlgbox1c.s index bfabac9c..5cb8da20 100644 --- a/kernal/dlgbox/dlgbox1c.s +++ b/kernal/dlgbox/dlgbox1c.s @@ -29,6 +29,9 @@ .global Dialog_2 .global _RstrFrmDialogue +.import MapUnderlay +.import UnmapUnderlay + .segment "dlgbox1c" DlgBoxPrep: @@ -42,19 +45,26 @@ Dialog_2: clc DlgBoxPrep2: START_IO + php + jsr MapUnderlay + plp LoadW r4, dlgBoxRamBuf bcc @1 jsr DialogSave LoadB mobenble, 1 bne @2 @1: jsr DialogRestore -@2: END_IO +@2: + jsr UnmapUnderlay + END_IO rts .else START_IO_128 START_IO LoadW r4, dlgBoxRamBuf + jsr MapUnderlay jsr DialogSave + jsr UnmapUnderlay LoadB mobenble, 1 END_IO_128 END_IO @@ -125,9 +135,9 @@ DrwDlgSpd1: sec jsr CalcDialogCoords .if .defined(bsw128) || .defined(mega65) - lda r3H - and #$80 - sta L8871 + ;lda r3H + ;and #$80 + ;sta L8871 .endif jsr Rectangle .endif @@ -188,11 +198,21 @@ CalcDialogCoords: PushW DBoxDesc ldy #0 lda (DBoxDesc),y - bpl @2 + bpl @2c LoadW DBoxDesc, DBDefinedPos-1 + ldy graphMode bbrf 6, graphMode, @2 LoadW DBoxDesc, DBDefinedPosScalable-1 -@2: ldx #0 +@2c: + ldy graphMode + cpy #$41 + bne @2b + ldy #$80 + bra @2 +@2b: + ldy #0 +@2: sty L8871 + ldx #0 ldy #1 @3: lda (DBoxDesc),y clc @@ -209,7 +229,7 @@ CalcDialogCoords: iny inx lda (DBoxDesc),y - bcc @5 + ;bcc @5 adc #0 @5: sta r2L,x iny @@ -231,10 +251,10 @@ MSB = 0 .word MSB | DEF_DB_RIGHT DBDefinedPosScalable: - .byte DEF_DB_TOP - .byte DEF_DB_BOT - .word DEF_DB_LEFT - .word DEF_DB_RIGHT + ByteCY %101100000000 | ((-96) & $FF), %101100000000 | ((-48) & $FF) + ByteCY %101100000000 | ((95) & $FF), %101100000000 | ((47) & $FF) + WordCX %101100000000 | ((-96) & $FF), %101100000000 | ((-48) & $FF) + WordCX %101100000000 | ((95) & $FF), %101100000000 | ((47) & $FF) _RstrFrmDialogue: jsr Dialog_2 @@ -250,7 +270,9 @@ Dialog_2: START_IO_128 START_IO LoadW r4, dlgBoxRamBuf + jsr MapUnderlay jsr DialogRestore + jsr UnmapUnderlay END_IO_128 END_IO rts diff --git a/kernal/dlgbox/dlgbox1d.s b/kernal/dlgbox/dlgbox1d.s index b3bad9ee..d5f852b1 100644 --- a/kernal/dlgbox/dlgbox1d.s +++ b/kernal/dlgbox/dlgbox1d.s @@ -18,6 +18,8 @@ .import TimersTab .import menuOptNumber .import L8871 +.import _NormalizeX +.import _NormalizeY .global DBIconsHelp2 .global DialogRestore @@ -25,7 +27,7 @@ .global DBDoIcons .global DBDoUSRICON -.segment "dlgbox1d" +.segment "dlgbox1d_ul" DialogSave: ldx #0 @@ -136,6 +138,8 @@ DialogCopyTab: .word NULL .endif +.segment "dlgbox1d" + ; handler for commands 1-6 DBDoIcons: .ifdef wheels_button_shortcuts ; install keyVector for all button types @@ -188,20 +192,64 @@ DBDoUSRICON: DBIconsHelp1: clc jsr CalcDialogCoords - lsr r3H + ldx #r3 + jsr _NormalizeX + ;ldx #r3 + ldy #r2L + jsr _NormalizeY + lda r3H + lsr + ror r3L + lsr + ror r3L + lsr + ror r3L + lsr + ldx graphMode + cpx #$41 + bne @10 + lsr ror r3L - lsr r3L - lsr r3L +@10: + tax + ldy r1L lda (DBoxDesc),y +.if .defined(bsw128) || .defined(mega65) + bit L8871 + bpl @2 + ;asl + pha + lda r3L + and #$FE + sta r3L + pla +@2: +.endif clc adc r3L sta r3L + iny lda (DBoxDesc),y clc adc r2L sta r2L + txa + adc #0 + beq @1 + + ; overflow, by 8 + lsr + ror r2L + lsr + ror r2L + lsr + ror r2L + lda r3L + ora #$80 + sta r3L +@1: iny sty r1L rts @@ -221,7 +269,7 @@ DBIconsHelp2: bne @2 lda r3L .if .defined(bsw128) || .defined(mega65) - ora L8871 + ;ora L8871 .endif @2: cpy #3 bne @3 @@ -232,4 +280,3 @@ DBIconsHelp2: cpy #8 bne @1 @4: rts - diff --git a/kernal/files/files6c.s b/kernal/files/files6c.s index 15d530cc..0a82d309 100644 --- a/kernal/files/files6c.s +++ b/kernal/files/files6c.s @@ -206,7 +206,6 @@ IsDeviceValid: sta SetDevTab + 3 jsr PrepForFetch jsr FetchRAM - ;jsr FetchRAM jsr PrepForFetch @3: ldx #NULL rts diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index f21d669c..9c6f00a7 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -103,6 +103,10 @@ BitmapUpHelp: jsr _GetScanLine MoveB r2L, r3H .if .defined(bsw128) || .defined(mega65) + ldx graphMode + cpx #$41 + beq @X + lda r3H bpl @Y bbsf 7, graphMode, @X and #$7F @@ -123,6 +127,8 @@ BitmapUpHelp: ldy #3 ; by 8 lda r1L bbrf 6, graphMode, @42 + + ; handle extended graph mode here bit r1L bpl @41 bvc @41 @@ -132,12 +138,18 @@ BitmapUpHelp: adc scrFullCardsX @41: and #$7f + ldy graphMode + cpy #$41 + beq @43b + ldy #3 bra @43 @42: + ; classic graph mode handling lda r1L @43: bpl @4 ; not DOUBLE_B bbrf 7, graphMode, @4 +@43b: ldy #4 ; by 16, if DOBULE_B on C80 @4: and #$7F @@ -219,8 +231,12 @@ BitmapUpHelp: BitmapDecode: .if .defined(bsw128) || .defined(mega65) ;jmp BitmapDecodeX + ldx graphMode + cpx #$41 ; alway double the bitmap in $41 mode for now + beq @10 bbrf 7, graphMode, BitmapDecodeX bbrf 7, r2L, BitmapDecodeX +@10: bbrf 0, L888D, @1 lda L888E inc L888D diff --git a/kernal/graph/line.s b/kernal/graph/line.s index e7729107..34089c1e 100644 --- a/kernal/graph/line.s +++ b/kernal/graph/line.s @@ -821,56 +821,119 @@ Read80Help: ; r3L top of line (0-199) ; r3H bottom of line (0-199) ; r4 x position of line (0-319) +; If in expanded mode, top 4 bits of r4 hold the +; 4 MSB to expand r3H. If those 4 bits are != 0 +; then we expect r5L to hold the top 4 MSB ro expand +; r3L. ; Return: draw the line ; Destroyed: a, x, y, r4 - r8, r11 ;--------------------------------------------------------------- _VerticalLine: - sta r8L + sta r8L + PushB r9H .if .defined(bsw128) || .defined(mega65) .ifdef bsw128 - jsr _TempHideMouse -.endif - ldx #r4 - jsr _NormalizeX + jsr _TempHideMouse +.endif + ldx #r4 + jsr _NormalizeX + LoadB r9H, 0 + bbrf 6, graphMode, @10 + lda r4H + and #$F0 + beq @10 + lda r5L + and #$F0 + sta r9H +@10: + ldx #r9 + ldy #r3L + jsr _NormalizeY + ldx #r4 + ldy #r3H + jsr _NormalizeY + .endif .ifdef bsw128 - bbsf 7, graphMode, VLin80 + bbsf 7, graphMode, VLin80 .endif - PushB r4L - and #%00000111 + ;PushB r4L + lda r4L + and #%00000111 tax - lda BitMaskPow2Rev,x - sta r7H - lda r4L - and #%11111000 - sta r4L - ldy #0 - ldx r3L -@1: stx r7L - jsr _GetScanLine - AddW r4, r5 - AddW r4, r6 - lda r7L - and #%00000111 + lda BitMaskPow2Rev,x + sta r7H + lda r4L + and #%11111000 + sta r4L + ldx r3L +@1: stx r7L + ;PushB r9H + PushB r3H + stx r11L + lda r9H + sta r3H + jsr _GetScanLine_HR + PopB r3H + ;PopB r9H + + lda r5L + clc + adc r4L + sta r5L + lda r4H + and #$0F + tay + adc r5H + sta r5H + lda r6L + clc + adc r4L + sta r6L + tya + adc r6H + sta r6H + + ldy #0 + lda r7L + and #%00000111 tax - lda BitMaskPow2Rev,x - and r8L - bne @2 - lda r7H - eor #$FF - and (r6),Y - bra @3 -@2: lda r7H - ora (r6),Y -@3: sta (r6),Y - sta (r5),Y - ldx r7L + lda BitMaskPow2Rev,x + and r8L + bne @2 + lda r7H + eor #$FF + and (r6),Y + bra @3 +@2: lda r7H + ora (r6),Y +@3: sta (r6),Y + sta (r5),Y + + ; next line + ldx r7L inx - cpx r3H - beq @1 - bcc @1 - PopB r4L - jmp _EndScanLine + bne @4 + + ; advance high level bits + lda r9H + clc + adc #16 + sta r9H +@4: + lda r4H + and #$F0 + cmp r9H + beq @4b + bcs @1 ; branch if r9H is smaller than r4H +@4b: + cpx r3H + beq @1 + bcc @1 +@5: + ;PopB r4L + PopB r9H + jmp _EndScanLine .ifdef bsw128 VLin80: diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 86d240a6..ab8b10e8 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -44,6 +44,10 @@ .import screenNextLine .import PrvCharWidth +.import i_MoveData +.import ColTab +.import RowTab + .global SetRightMargin _SetNewMode: jsr SetNewMode0 @@ -279,6 +283,16 @@ InitVideoMode: lda vmiBottomBorder+1, y sta $D04B + lda screenCols, y + sta @colSrc + lda screenCols+1, y + sta @colSrc+1 + + lda screenRows, y + sta @rowSrc + lda screenRows+1, y + sta @rowSrc+1 + LDA #0 STA $D05D ; reset hot registers, ; so that other reg acces doesn't reset @@ -298,6 +312,18 @@ InitVideoMode: sta r5H jsr InitScanLineTab + jsr i_MoveData +@colSrc: + .word 0 + .word ColTab + .word 16 + + jsr i_MoveData +@rowSrc: + .word 0 + .word RowTab + .word 16 + rts ; @@ -318,7 +344,7 @@ vmiMaxY: vmiCardsX: .word 40, 80, 80, 90 vmiFullCardsX: - .byte 40, 80, 80, 90 + .byte 40, 40, 80, 90 vmiFullCardsY: .byte 25, 25, 50, 71 vmiSpriteXPosOff: @@ -357,6 +383,25 @@ vmiTopBorder: .word 104, 104, 104, 17 vmiBottomBorder: .word 504, 504, 504, 586 +screenCols: + .word Col320, Col640, Col640, Col720 +screenRows: + .word Row200, Row200, Row400, Row569 + +Col720: + .word 90, 180, 270, 360, 450, 540, 630, 719 +Col640: + .word 80, 160, 240, 320, 400, 480, 560, 639 +Col320: + .word 40, 80, 120, 160, 200, 240, 280, 319 +Row200: + .word 25, 50, 75, 100, 125, 150, 175, 199 +Row400: + .word 50, 100, 150, 200, 250, 300, 350, 399 +Row569: + .word 71, 142, 213, 284, 355, 426, 497, 568 + + .endif .ifdef mega65 diff --git a/kernal/graph/normalize.s b/kernal/graph/normalize.s index c5979e6b..dd387a94 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -16,107 +16,154 @@ .global _NormalizeY .endif +.global ColTab +.global RowTab + ;.import screenMaxX ;.import screenMaxY .segment "graph5" +.ifdef mega65 + +ColTab: + .word 80, 160, 240, 320, 400, 480, 560, 639 +RowTab: + .word 50, 100, 150, 200, 250, 300, 350, 399 + +.endif + .ifdef mega65 _NormalizeY: - bbsf 6, graphMode, @10 - jmp _NormalizeX + bbsf 6, graphMode, @10 + jmp _NormalizeX @10: - lda zpage+1,x - and #%11000000 - cmp #%10000000 - bne @4 - lda zpage,x - pha + lda zpage+1,x + bpl @4 - lda zpage+1,x - lsr + lda zpage+1,x + pha + and #$0F + sta zpage+1,x + pla lsr lsr lsr - and #$03 - sta zpage,x - - lda zpage+1,x - and #$0F - sta zpage+1,x - - lda screenMaxY - sec - sbc zpage,y - sta zpage,y - lda screenMaxY+1 - sbc zpage,x + and #$0E + phx + tax + + lda zpage,y + php + lda #0 + plp + bpl @positive + dec +@positive: + pha + lda RowTab,x + clc + adc zpage,y + sta zpage, y + + pla + adc RowTab+1,x asl asl asl asl - and #$30 - ora zpage+1,x - sta zpage+1,x - - pla - sta zpage,x + ;and #$F0 + plx + ora zpage+1,x + sta zpage+1,x + @4: rts .endif _NormalizeX: - bbrf 6, graphMode, @10 - lda zpage+1,x - and #%00001100 - cmp #%00001000 + bbrf 6, graphMode, @10 + + ; extended mode, scalable coordinates + lda zpage+1,x + and #%00001000 + cmp #%00001000 ; from end? bne @5 - lda zpage+1,x + + tya pha - and #$03 - sta zpage+1,x - lda screenMaxX - sec - sbc zpage, x - sta zpage, x - lda screenMaxX+1 - sbc zpage+1,x - sta zpage+1,x + ; scale from end + lda zpage+1,x + pha + + and #%00000111 + asl + tay + + lda #0 + bit zpage,x + bpl @positiv + dec +@positiv: + pha + lda graphMode + cmp #$41 + bne @noScale + + lda zpage, x + asl + bra @noScale2 +@noScale: + lda zpage, x +@noScale2: + clc + adc ColTab, y + sta zpage, x + pla - and #$F0 - ora zpage+1,x - sta zpage+1,x - rts -@5: - lda zpage+1,x - and #$F3 - sta zpage+1,x - rts + adc ColTab+1, y + and #$0F + sta zpage+1,x + + pla + and #$F0 + ora zpage+1,x + sta zpage+1,x + + pla + tay + ;rts + + ; scale from 0 origin +@5: rts + + ; C128 compatible mode @10: - lda zpage+1,x - bpl @2 + lda zpage+1,x + bpl @2 rol - bmi @4 + bmi @4 ror - bbrf 7, graphMode, @1 - add #$60 - rol zpage,x + bbrf 7, graphMode, @1 + add #$60 + rol zpage,x rol -@1: and #%00011111 - sta zpage+1,x +@1: and #%00011111 + sta zpage+1,x rts + @2: rol - bpl @4 + bpl @4 ror - bbrf 7, graphMode, @3 + bbrf 7, graphMode, @3 sec - adc #$A0 - rol zpage,x + adc #$A0 + rol zpage,x rol -@3: ora #$E0 - sta zpage+1,x +@3: ora #$E0 + sta zpage+1,x @4: rts diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index e5870fcb..a6b88b0d 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -212,30 +212,49 @@ _NormRect: ; Destroyed: a, x, y, r5 - r9, r11 ;--------------------------------------------------------------- _FrameRectangle: - sta r9H + sta r9H - jsr _NormRect + jsr _NormRect ;PushB r5H PushW r2 PushW r3 PushW r4 - ldy r2L - sty r11L - lda r9H - jsr _HorizontalLine - MoveB r2H, r11L - lda r9H - jsr _HorizontalLine - ;PushW r3 - PushW r4 - MoveW r3, r4 - MoveW r2, r3 - lda r9H - jsr _VerticalLine - PopW r4 - lda r9H - jsr _VerticalLine - ;PopW r3 + ldy r2L + sty r11L + lda r9H + jsr _HorizontalLine + MoveB r2H, r11L + lda r3H + pha + and #$0F + sta r3H + lda r4H + and #$F0 + ora r3H + sta r3H + lda r9H + jsr _HorizontalLine + PopB r3H + PushB r3H + PushW r4 + lda r4H + and #$F0 + sta r4H + lda r3H + and #$0F + ora r4H + sta r4H + MoveB r3L, r4L + MoveB r3H, r5L + MoveW r2, r3 + lda r9H + jsr _VerticalLine + PopW r4 + pla + sta r5L + lda r9H + jsr _VerticalLine + ;PopW r3 jmp rectEnd diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 6602d42a..ad934f9d 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -78,22 +78,22 @@ _EndScanLine: _GetScanLine_HR: lda r11L pha - lda r3H + lda r3H lsr lsr lsr lsr - ldx #5 + ldx #5 @21: - asl r11L + asl r11L rol dex - bne @21 + bne @21 tay pla sta r11L - and #$07 - ora #$f8 + and #$07 + ora #$f8 tax ;--------------------------------------------------------------- diff --git a/kernal/icon/icon2.s b/kernal/icon/icon2.s index 621bace0..f70540cd 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -253,7 +253,7 @@ CalcIconCoords: dey lda (IconDescVec),y .if .defined(bsw128) || .defined(mega65) - jsr LFCCC + jsr LFCCC_ .endif sta r3L iny @@ -287,6 +287,12 @@ CalcIconCoords: .if .defined(bsw128) || .defined(mega65) LFCCC: pha + lda graphMode + cmp #$41 + beq LFCCC_2a + pla +LFCCC2: + pha and #DOUBLE_B bpl @1 pla @@ -297,6 +303,10 @@ LFCCC: pha @3: rts @1: pla rts +LFCCC_2a: + pla + asl + rts .endif .if .defined(bsw128) || .defined(mega65) @@ -313,12 +323,13 @@ LFCCC_: ; x negative case clc adc scrFullCardsX - rts +@3: + bra LFCCC @2: pla and #%01111111 - rts + bra @3 @1: pla - rts + bra @3 .endif diff --git a/kernal/init/init2.s b/kernal/init/init2.s index c0e775a5..81319891 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -25,6 +25,16 @@ .global _FirstInit +.import MapUnderlay +.import UnmapUnderlay + +.segment "init2b" + +_FirstInit: + jsr MapUnderlay + jsr _FirstInit2 + jmp UnmapUnderlay + .segment "init2" ;--------------------------------------------------------------- @@ -35,7 +45,7 @@ ; Pass: nothing ; Destroyed: a, y, r0 - r2l ;--------------------------------------------------------------- -_FirstInit: +_FirstInit2: sei cld .ifdef mega65 diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 4be1088b..71c1d539 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -203,6 +203,7 @@ .import _map__CRC .import _map_SetNewMode .import _map_GetRealSize +.import _map_IsMseInRegion .else .import _InsertRecord .import _NextRecord @@ -899,7 +900,7 @@ SetDevice: jmp _SetDevice .endif IsMseInRegion: - jmp __IsMseInRegion + jmp _map_IsMseInRegion ReadByte: .ifdef mega65 jmp _map_ReadByte diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index 2203f754..be182c7d 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -52,6 +52,9 @@ SEGMENTS { graph2nu: load = UNDERLAY, type = ro; backram_under: load = UNDERLAY, type = ro; compat: load = UNDERLAY, type = ro; + dlgbox1d_ul: load = UNDERLAY, type = ro; + init2: load = UNDERLAY, type = ro; + mouse1: load = UNDERLAY, type = ro; # kernal header: $c000 @@ -86,9 +89,8 @@ SEGMENTS { init1: load = KERNAL, type = ro; hw1a: load = KERNAL, type = ro; #hw1b: load = KERNAL, type = ro; - graph1: load = KERNAL, type = ro; hw2: load = KERNAL, type = ro; - init2: load = KERNAL, type = ro; + init2b: load = KERNAL, type = ro; memory1a: load = KERNAL, type = ro; memory1b: load = KERNAL, type = ro; #misc: load = KERNAL, type = ro; @@ -106,17 +108,15 @@ SEGMENTS { math1c1: load = KERNAL, type = ro; math1c2: load = KERNAL, type = ro; memory2: load = KERNAL, type = ro; - mouse1: load = KERNAL, type = ro; panic1: load = KERNAL, type = ro; math1d: load = KERNAL, type = ro; #panic2: load = KERNAL, type = ro; #panic3: load = KERNAL, type = ro; - backram: load = KERNAL, type = ro; - serial2: load = KERNAL, type = ro; memory3: load = KERNAL, type = ro; load3: load = KERNAL, type = ro; graph3c: load = KERNAL, type = ro; iojmp: load = KERNAL, type = ro; + mouse2: load = KERNAL, type = ro; mouseptr: load = KERNAL, type = ro; #dlgbox2: load = KERNAL, type = ro; graph2a: load = KERNAL, type = ro; @@ -139,6 +139,9 @@ SEGMENTS { fonts4: load = KERNAL, type = ro; fonts4a: load = KERNAL, type = ro; fonts4b: load = KERNAL, type = ro; + graph1: load = KERNAL, type = ro; + serial2: load = KERNAL, type = ro; + backram: load = KERNAL, type = ro; graph2n: load = KERNAL, type = ro; graph2l2: load = KERNAL, type = ro; inline: load = KERNAL, type = ro; @@ -159,12 +162,11 @@ SEGMENTS { conio6: load = KERNAL, type = ro; graph4: load = KERNAL, type = ro; graph5: load = KERNAL, type = ro; - mouse2: load = KERNAL, type = ro; + mouse3: load = KERNAL, type = ro; menu1: load = KERNAL, type = ro; menu2: load = KERNAL, type = ro; menu3: load = KERNAL, type = ro; icon1: load = KERNAL, type = ro; - mouse3: load = KERNAL, type = ro; icon2: load = KERNAL, type = ro; dlgbox1a: load = KERNAL, type = ro; dlgbox1b: load = KERNAL, type = ro; diff --git a/kernal/load/load1a.s b/kernal/load/load1a.s index bade0d9c..9becda38 100644 --- a/kernal/load/load1a.s +++ b/kernal/load/load1a.s @@ -20,6 +20,7 @@ .import _InitMachine .import ClrScr .import _UseSystemFont +.import _MapLow .import MainLoop .import CallRoutine @@ -65,6 +66,9 @@ _EnterDeskTop: ; stx graphMode @1: jsr ClrScr + ldx #$00 + lda #$00 + jsr _MapLow .ifdef useRamExp MoveW DeskTopStart, r0 MoveB DeskTopLgh, r2H diff --git a/kernal/memory/backram.s b/kernal/memory/backram.s index 7aded267..1283bcb6 100644 --- a/kernal/memory/backram.s +++ b/kernal/memory/backram.s @@ -105,6 +105,7 @@ _map_DoBOp: ;--------------------------------------------------------------- _DoBOp: .ifdef mega65 +brk cpy #0 beq @1 brk diff --git a/kernal/mouse/mouse1.s b/kernal/mouse/mouse1.s index cec6ac08..178fea48 100644 --- a/kernal/mouse/mouse1.s +++ b/kernal/mouse/mouse1.s @@ -11,6 +11,7 @@ .include "c64.inc" .import NormalizeX +.import NormalizeY .global _IsMseInRegion .global UncompactXY @@ -23,8 +24,12 @@ _IsMseInRegion: .if .defined(bsw128) || .defined(mega65) ldx #r3 jsr NormalizeX + ldy #r2L + jsr NormalizeY ldx #r4 jsr NormalizeX + ldy #r2H + jsr NormalizeY .endif PushW r0 diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index 5fffe7a9..553b81da 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -37,7 +37,7 @@ _StashRAM: jsr _GetBankParams sty opToBankLow sta opToBankHigh+1 - + lda r0L sta opFromAddr lda r0H @@ -71,21 +71,21 @@ _GetBankParams: ;ldy #5 ;lda #0 ;bne @1 - + lda r3L - tax - and #$0F - ;lda #5 + tax + ;and #$0F + lda #5 ; force to bank 5 of main RAM tay txa - lsr lsr lsr lsr - - ora #$80 - ;lda #0 + lsr + + ;ora #$80 + lda #0 ; force to bank 5 of main RAM @1: ldx r1L rts @@ -110,8 +110,8 @@ _FetchRAM: ldy r0H bra _RamOp - - + + _VerifyRAM: _SwapRAM: @3: rts diff --git a/kernal/sprites/sprites.s b/kernal/sprites/sprites.s index 204086e6..97c0c111 100644 --- a/kernal/sprites/sprites.s +++ b/kernal/sprites/sprites.s @@ -16,6 +16,7 @@ .import scr_mobx .import NormalizeX +.import NormalizeY .import UncompactXY @@ -67,14 +68,14 @@ SprTabH: ; Destroyed: a, x, y, r6 ;--------------------------------------------------------------- _PosSprite: - PushB r5H +; PushB r5H - lda r4H - jsr UncompactXY - sta r4H - sty r5H +; lda r4H +; jsr UncompactXY +; sta r4H +; sty r5H -; jsr _HR_PosSprite +;; jsr _HR_PosSprite _HR_PosSprite: @@ -82,6 +83,8 @@ _HR_PosSprite: .if .defined(bsw128) || .defined(mega65) ldx #r4 jsr NormalizeX + ldy #r5L + jsr NormalizeY .endif START_IO @@ -94,7 +97,13 @@ _HR_PosSprite: ;sta r6L sta mob0ypos,Y - lda r5H + ;lda r5H + php + lda r4H + jsr UncompactXY + sta r4H + plp + tya ldy $D077 ldx #1 jsr @2__ @@ -127,15 +136,15 @@ _HR_PosSprite: ;@X: ; AddVW VIC_X_POS_OFF, r6 ;.else -lda r3L -rol -tay + lda r3L + rol + tay lda r4L clc adc spriteXPosOff ;sta r6L sta mob0xpos,Y - lda r4H + lda r4H ;.endif ldy msbxpos @@ -149,7 +158,7 @@ tay sta $d05f END_IO - PopB r5H +; PopB r5H rts @2__: adc #0 diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 96ac6310..cf68396e 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -383,7 +383,7 @@ OrigResetHandle: jsr DetectRamCart .endif _DebugStart: - ;brk + brk jsr GetDirHead MoveB bootSec, r1H diff --git a/loader/loader.s b/loader/loader.s index 8a87695a..5b39d822 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -105,7 +105,7 @@ next: .WORD 0 ; disable HDMI audio lda #0 sta $d61a - + ; not working with xemu ; disable badline emulation @@ -115,13 +115,14 @@ next: .WORD 0 and #%10111111 ;ora #%01000000 sta $D05D - + LDA $D054 ;40 mhz ORA #$40 STA $D054 lda #$40 sta $d031 + ; force 1351 emulation lda #5 sta $D61B diff --git a/mount/main.s b/mount/main.s index 4a9d478e..ea0ca2a8 100644 --- a/mount/main.s +++ b/mount/main.s @@ -32,7 +32,7 @@ __STARTUP_RUN__: @1b: ; init for mountable drives jsr InitMountableDrives - + lda dialogDrive bne @2 @@ -51,35 +51,35 @@ __STARTUP_RUN__: lda curDrive pha - + lda dialogDrive jsr SetDevice - + jsr GetImageFile ldx #r0 ldy #r1 LoadW r1, imageName jsr CopyString - + pla jsr SetDevice - + ; show dialog to operate the mounts LoadW r0, SelectDialog jsr DoDlgBox - + lda r0L cmp #OK bne @1 - + ; mount new image for selected drive lda curDrive pha - + lda dialogDrive jsr SetDevice - + ; mount selected image lda selectedEntry sta r13L @@ -87,7 +87,7 @@ __STARTUP_RUN__: jsr GetEntryString jsr SetImageFile - + pla jsr SetDevice bra @end @@ -97,8 +97,8 @@ __STARTUP_RUN__: @end: jmp EnterDeskTop - -serialText: + +serialText: .byte "$XXXX", NULL NoDriveDialog: .byte $81 ; standard dialog, light bachground @@ -108,7 +108,7 @@ NoDriveDialog: .byte DBTXTSTR, 10,10 .word serialText - + .byte NULL SelectDialog: @@ -118,7 +118,7 @@ SelectDialog: .byte 17, 42 ;.byte DBUSRICON,17,42 ;.word mountButton - + ;.byte YES ;.byte 17, 59 @@ -133,7 +133,7 @@ SelectDialog: ;.byte DBUSRICON,26,26 ;.word @icon4 - + .byte DB_USR_ROUT .word DrawDialog @@ -158,7 +158,7 @@ endButton: driveButtons: .word driveAButton, driveBButton, driveCButton, driveDButton - + mountButton: .word mountIcon,0 .byte 2, 16 @@ -183,7 +183,7 @@ mountIcon: .byte %10000000, %01111110 .byte %10000000, %00000000 .byte %10000000, %00000000 - + driveAButton: .word IconA,0 .byte ICON_X,ICON_Y .word driveAButton+8 @@ -211,8 +211,8 @@ driveDButton: .word IconD,0 ;LoadB @dr,'D' LoadB sysDBData, 'A' LoadB dialogDrive, 11 - jmp RstrFrmDialogue - + jmp RstrFrmDialogue + driveText: .byte BOLDON, "Drive " driveLetter: @@ -221,21 +221,37 @@ imageName: .byte "IMAGE.D81sdfsdfsdfsdfsdfsdf " .byte "IMAGE.D81sdfsdfsdfsdfsdfsdf ", NULL +SelectionX: + WordCX %101100000000 | ((-96+5) & $FF), %101100000000 | ((-48+3) & $FF) +SelectionY: + ByteCY %101100000000 | ((-96+5) & $FF), %101100000000 | ((-48+3) & $FF) + DialogMouse: lda mouseData bpl @0 rts @0: - LoadW r3, 68 - LoadB r2L, 36 + MoveW SelectionX, r3 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY + + MoveW r3, r4 + AddVW 124, r4 clc lda r2L adc #88 sta r2H - MoveW r3, r4 - AddVW 124, r4 - + bcc @10 + clc + lda r4H + adc #16 + sta r4H +@10: jsr IsMseInRegion cmp #$FF beq @1a @@ -244,7 +260,7 @@ DialogMouse: PushW r2 PushW r3 PushW r4 - + lda r2L clc adc #73 @@ -253,23 +269,29 @@ DialogMouse: ; check up AddVW 73, r3 SubVW 16, r4 - + jsr IsMseInRegion cmp #$FF bne @3 - + lda topIndex beq @3a dec topIndex - LoadW r3, 68 - LoadB r2L, 36 + + MoveW SelectionX, r3 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY jsr DrawSelectionBox @3a: PopW r4 PopW r3 PopW r2 rts - + ; check down @3: AddVW 16, r3 @@ -284,8 +306,13 @@ DialogMouse: cmp entryCount bcs @4a inc topIndex - LoadW r3, 68 - LoadB r2L, 36 + + MoveW SelectionX, r3 + MoveB SelectionY, r2L + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY jsr DrawSelectionBox @4a: PopW r4 @@ -317,11 +344,17 @@ DialogMouse: clc adc topIndex sta selectedEntry - LoadW r3, 68 - LoadB r2L, 36 + + MoveW SelectionX, r3 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY jsr DrawSelectionBox rts -@2: +@2: clc lda r2L adc #12 @@ -330,20 +363,20 @@ DialogMouse: lda r2H adc #12 sta r2H - + inc r13L dec r5L bne @loop - + @1: rts - + DrawDialog: ;jsr TestSomething jsr OpenDir - + sta fileDesc LoadB entryCount, 0 LoadW r1, $2000 @@ -354,29 +387,34 @@ DrawDialog: bcc @ok jmp @end lda entryCount - brk - + brk + lda fileDesc jsr ReadDir bcs @end @ok: - AddVW 64, r1 + AddVW 64, r1 AddVW 4, r2 - + inc entryCount lda entryCount cmp #192 bne @next @end: - LoadW r3, 68 - LoadB r2L, 36 LoadB selectedEntry, 0 + MoveW SelectionX, r3 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY jsr DrawSelectionBox ldx fileDesc jsr CloseDir - + rts GetEntryString: @@ -394,62 +432,77 @@ GetEntryString: rol r0H asl r0L rol r0H - AddVW $2000, r0 + AddVW $2000, r0 rts - + testName: .byte "Testname", NULL - + DrawSelectionBox: + MoveW r3, r4 + AddVW 124, r4 + clc lda r2L adc #88 sta r2H - MoveW r3, r4 - AddVW 124, r4 + bcc @10 + clc + lda r4H + adc #16 + sta r4H +@10: + lda #$FF jsr FrameRectangle - PushW r2 PushW r3 PushW r4 - + lda r2L clc adc #73 sta r11L + bcc @20 + + lda r3H + clc + adc #16 + sta r3H +@20: lda #%11111111 jsr HorizontalLine - lda r11L sta r3L - clc + lda r11L + clc adc #15 sta r3H - + SubVW 16, r4 lda #%11111111 jsr VerticalLine SubVW 16, r4 - lda #%11111111 + lda #%11111111 jsr VerticalLine PopW r4 PopW r3 PopW r2 - + +.if 0 inc r2L IncW r3 - + MoveW r3, r4 AddVW 122, r4 clc lda r2L adc #11 sta r2H - - MoveB topIndex, r13L + + MoveB topIndex, r13L lda #6 cmp entryCount bcc @1 @@ -457,12 +510,12 @@ DrawSelectionBox: @1: sta r5L beq @2 - + @loop: PushB r5L jsr OutputLine PopB r5L - + clc lda r2L adc #12 @@ -471,13 +524,14 @@ DrawSelectionBox: lda r2H adc #12 sta r2H - + inc r13L dec r5L bne @loop +.endif @2: rts - + OutputLine: PushB currentMode ldy #0 @@ -497,7 +551,7 @@ OutputLine: PushW r2 PushW r3 PushW r4 - + MoveW r3, r11 AddVW 1, r11 lda r2L @@ -505,7 +559,7 @@ OutputLine: adc #8 sta r1H jsr GetEntryString - + jsr PutString PopW r4 PopW r3 @@ -513,7 +567,7 @@ OutputLine: PopB r13L PopB currentMode rts - + fileDesc: .byte 0 entryCount: @@ -531,7 +585,7 @@ CloseDir: NOP rts - + OpenDir: ;; Opendir takes no arguments and returns File descriptor in A LDA #$12 @@ -539,7 +593,7 @@ OpenDir: NOP LDX #$00 RTS - + ;; readdir takes the file descriptor returned by opendir as argument ;; and gets a pointer to a MEGA65 DOS dirent structure. @@ -552,7 +606,7 @@ OpenDir: ;; d_reclen = size of the dirent on disk (32 bytes) ;; d_type = file/directory type ;; d_name = name of file - + ; input: ; A - file descritpr ; r1 - pointer to 64 byte buffer for name @@ -560,14 +614,14 @@ OpenDir: ; return: ; A ; X - ; CARRY: clear = success, set = error + ; CARRY: clear = success, set = error ReadDir: pha - + ;; First, clear out the dirent ldx #64+1+11+4+4 lda #0 -@l1: sta DirEntry,x +@l1: sta DirEntry,x dex bne @l1 @@ -578,7 +632,7 @@ ReadDir: plx ;tax - ldy #>DirEntry ; write dirent to DirEntry + ldy #>DirEntry ; write dirent to DirEntry lda #$14 STA $D640 @@ -609,7 +663,7 @@ ReadDir: @l3: lda $0477,y sta (r2),y dey - bpl @l3 + bpl @l3 .if 0 ;; Inode = cluster from offset 64+1+12 = 77 @@ -620,7 +674,7 @@ ReadDir: bpl @l3 ;; d_off stays zero as it is not meaningful here - + ;; d_reclen we preload with the length of the file (this saves calling stat() on the MEGA65) ldx #3 @l4: lda $0400+64+1+12+4,x @@ -638,8 +692,8 @@ ReadDir: ldx #>_readdir_dirent .endif clc - RTS - + RTS + InitMountableDrives: ; check if current drive is mountable ldx curDrive @@ -654,12 +708,12 @@ InitMountableDrives: jsr IsMountableDrive bcc @3 stx dialogDrive - bra @2 + bra @2 @3: inx cpx #12 bne @4 -@2: +@2: InitDriveButtons: ; setup drive change buttons LoadW r10, driveButton1 @@ -668,9 +722,9 @@ InitDriveButtons: cpx dialogDrive beq @5 jsr IsMountableDrive - + bcc @5 - + ; add drive AddVW 3,r10 txa @@ -684,27 +738,27 @@ InitDriveButtons: tax ldy #0 lda driveButtons,x - sta (r10),y + sta (r10),y lda driveButtons+1,x iny sta (r10),y - pla + pla tax - + AddVW 2, r10 CmpWI r10, endButton beq @6 @5: - inx + inx cpx #12 bne @7 - + @6: lda #NULL ldz #0 - sta (r10), z - - rts - + sta (r10), z + + rts + ; X = drive no 8,9,10,11 ; result: c set if mountable ; destroy A reg @@ -719,28 +773,28 @@ IsMountableDrive: @yes: sec rts - + dialogDrive: .byte 0 - + emptyString: .byte " ", NULL TestSomething: lda #9 jsr SetDevice jsr OpenDisk - + ; enumerate over all sectors LoadB r15L,1 LoadB r15H,0 LoadW r4, $5000 - + @1: PushW r15 PushW r4 - - ; write track to screen - + + ; write track to screen + LoadW r11, 100 LoadB r1H, 100 MoveB r15L, r0L @@ -749,7 +803,7 @@ TestSomething: jsr PutDecimal LoadW r0, emptyString jsr PutString - + ; write sector to screen LoadW r11, 100 LoadB r1H, 120 @@ -766,7 +820,7 @@ TestSomething: PushW r15 jsr GetBlock PopW r15 - + inc r15L lda r15L cmp #81 @@ -781,7 +835,7 @@ TestSomething: inc $d020 bra @2 rts - + IconA: .incbin "mount/IconA.map" IconB: @@ -790,4 +844,3 @@ IconC: .incbin "mount/IconC.map" IconD: .incbin "mount/IconD.map" - \ No newline at end of file diff --git a/topdesk/DeskInclude/EditText.inc b/topdesk/DeskInclude/EditText.inc index 6e37054a..1c26c734 100644 --- a/topdesk/DeskInclude/EditText.inc +++ b/topdesk/DeskInclude/EditText.inc @@ -24,14 +24,21 @@ EditText: ; Text-Editierung @codeok: dey bpl @testcodeloop .ifdef topdesk128 - ;LoadW___ r3, $8000+80 - ;ldx #r3 - ;jsr NormalizeX - ;MoveW_ r3, PositionXL - ;LoadW___ r3, $8000 + 80 + 160 - ;ldx #r3 - ;jsr NormalizeX - ;MoveW_ r3, PositionXR + MoveW_ PositionXL, r3 + ldx #r3 + jsr NormalizeX + MoveW_ r3, PositionXL_norm + lda PositionXL_norm+1 + and #$0F + sta PositionXL_norm+1 + MoveW_ PositionXR, r3 + + ldx #r3 + jsr NormalizeX + MoveW_ r3, PositionXR_norm + lda PositionXR_norm+1 + and #$0F + sta PositionXR_norm+1 .endif ldy #5 @@ -150,6 +157,7 @@ MouseRoutine: lda mouseData bpl @15 jsr IsMseInRegion beq @05 + inc $D020 MoveW_ mouseXPos,r11 MoveB mouseYPos,r1H SetTextPtr: jsr TextPosition @@ -203,7 +211,10 @@ NewDisplay: clc adc #3 @drin: sta r1H - MoveW_ PositionXL,r11 + MoveW_ PositionXL_norm,r11 + lda r11H + and #$0F + sta r11H ldy ActualCharPointer ldx Pointer,y @30: cpx ActualCharacter @@ -217,10 +228,14 @@ NewDisplay: inc r11H @35: inx bne @30 -@40: CmpW r11,PositionXR +@40: CmpW r11,PositionXR_norm bcc @50 - MoveW_ PositionXR,r11 -@50: MoveW_ r11,stringX + MoveW_ PositionXR_norm, r11 +@50: lda PositionXR+1 + and #$F0 + ora r11H + sta r11H + MoveW_ r11,stringX MoveB r1H,stringY jmp PromptOn @@ -231,7 +246,7 @@ RethinkText: sty r2L sty Pointer @loop2: LoadB r2H,0 - MoveW_ PositionXL,r0 + MoveW_ PositionXL_norm,r0 ldy r2L ldx Pointer,y dex @@ -250,7 +265,7 @@ RethinkText: sta r0L bcc @10 inc r0H -@10: CmpW r0,PositionXR ;Rechter Rand erreicht +@10: CmpW r0,PositionXR_norm ;Rechter Rand erreicht bcc @loop lda r2H ;Space vorhanden beq @20 @@ -282,12 +297,36 @@ TextPosition: ; Par: r11,r1H: gew}nschte Textposition ; Ret: ActualCharacter: Zeichenposition ; Des: a,x,y,r0-r3 - MoveW_ PositionXL,r0 - MoveW_ r11,r2 + MoveW PositionXL, r2 + MoveB PositionYO, r3H + ldx #r2 + ldy #r3H + jsr NormalizeY + + MoveB PositionXL,r0L + lda PositionXL+1 + and #$0F + sta r0H + + ldx #r0 + jsr NormalizeX + + MoveB r11,r2L + lda r11H + and #$0F + sta r11H + sta r2H + + ldx #r2 + jsr NormalizeX + SubW r0,r2 + + lda r1H sec - sbc PositionYO + sbc r3H + ldy #0 @10: sec sbc #10 @@ -295,6 +334,8 @@ TextPosition: iny bne @10 @20: sty r3H + + ; y is the line number ldx Pointer,y cpx TextLength bcs @ende @@ -433,10 +474,20 @@ DeleteChar: bcc @10 rts ;Position der EingabeBox : -PositionYO: .byte 136 -PositionYU: .byte 136+39 -PositionXL: .word 80 -PositionXR: .word 80+160 + +;PositionYO: .byte 136 +;PositionYU: .byte 136+39 +;PositionXL: .word 80 +;PositionXR: .word 80+160 +PositionYO: ByteCY %101100000000 | (-80 & $FF), %101100000000 | (36 & $FF) +PositionYU: ByteCY %101100000000 | (80 & $FF), %101100000000 | ((36+39) & $FF) +PositionXL: WordCX %101100000000 | (-80 & $FF), %101100000000 | (36 & $FF) +PositionXR: WordCX %101100000000 | (80 & $FF), %101100000000 | ((36+39) & $FF) + +PositionXL_norm: .word 0 +PositionXR_norm: .word 0 + + MaxTextLength = 96 TextLength: .byte 0 ; Offset des Abschlu~byte Null des Textes diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index 7806e301..a75e4948 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -47,13 +47,18 @@ DispMultiCount: txa lda #0 jsr SetPattern jsr i_Rectangle - .byte 2,12 +; .byte 2,12 ; .word 222+DOUBLE_W,236+DOUBLE_W - .word 222,236 +; .word 222,236 + ByteCY %110100000000 | (-18 & $FF), 2 + ByteCY %110100000000 | (-4 & $FF), 12 + WordCX %110100000000 | (-18 & $FF), 2 + WordCX %110100000000 | (-4 & $FF), 12 + MoveB MultiCount,r0L LoadB r0H,0 ; LoadW___ r11,223+DOUBLE_W - LoadW___ r11,223 + LoadW___ r11,%110100000000 | (-17 & $FF) LoadB r1H,9 lda #%11000000 jsr PutDecimal @@ -154,8 +159,8 @@ GetPos: adc #21 sta r2H,x rts -@xL: .byte <(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)) -@xH: .byte (>(SC_FROM_END|(4*8))) +@xL: .byte <(SC_FROM_END|((-4*8)& $FF)),<(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)),<(SC_FROM_END|(4*8)) +@xH: .byte (>(SC_FROM_END|((-4*8)& $FF))) .byte (>(SC_FROM_END|(4*8))) .byte (>(SC_FROM_END|(4*8))) .byte (>(SC_FROM_END|(4*8))) @@ -559,7 +564,7 @@ GetEqualWindows: ; Ermittlung der Fensternummern, deren Pfadname genau mit dem .ifdef topdesk128 .ifdef scalable_coords -ClxL = SC_FROM_END | 79 +ClxL = SC_FROM_END | ((-79) & %0000000011111111) ClxR = SC_FROM_END | 0 .else ;ClxL = 240 + DOUBLE_W @@ -632,9 +637,10 @@ ShowClock: lda #MinZehner-TagZehner jsr DivnSet @Ausg: - LoadW___ rightMargin,ClxR+1 + LoadW___ rightMargin, SC_FROM_END | -1 + ;ClxR-1 jsr i_PutString - .word ClxL-DateX + .word ClxL+DateX .byte ClyO+DateY .byte PLAINTEXT TagZehner: .byte "0" @@ -655,7 +661,7 @@ JahEiner: .byte "0" .byte PLAINTEXT .byte " " .byte GOTOXY - .word ClxL-TimeX + .word ClxL+TimeX .byte ClyO+TimeY .byte PLAINTEXT StdZehner: .byte "0" diff --git a/topdesk/Include/Symbol/TopSym.inc b/topdesk/Include/Symbol/TopSym.inc index c9f6d89a..460682d1 100644 --- a/topdesk/Include/Symbol/TopSym.inc +++ b/topdesk/Include/Symbol/TopSym.inc @@ -396,7 +396,7 @@ version = $c00f windowBottom = $34 windowTop = $33 -SC_FROM_END = %100000000000 +SC_FROM_END = %111100000000 SC_FROM_CENTER = %010000000000 SC_SCALE = %110000000000 diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 9dbdfb5e..443b2304 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -401,6 +401,8 @@ JmpSub: pha @10: pla rts StartUp: + ;brk + nop lda #7 jsr GetModule MoveW_ ModStart+3*3+1,r1 @@ -1606,11 +1608,18 @@ RedrawHead: lda #0 jsr SetPattern jsr i_Rectangle - .byte 1,13 .ifdef topdesk128 ; .word 221+DOUBLE_W,237+DOUBLE_W - .word 221,237 + ;.byte 1,13 + ;.word 221,237 + + ByteCY %110100000000| (-19 & $FF), 1 + ByteCY %110100000000| (-3 & $FF), 13 + WordCX %110100000000| (-19 & $FF), 1 + WordCX %110100000000| (-3 & $FF), 13 + .else + .byte 1,13 .word 221,237 .endif lda #$ff @@ -2093,8 +2102,8 @@ GetStartPos: ldx #00 jsr NormalizeX rts -@xL: .byte <(SC_FROM_END|(4*8)),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) -@xH: .byte >(SC_FROM_END|(4*8)),>(STARTB_X*8),>(STARTC_X*8),>(STARTD_X*8) +@xL: .byte <(SC_FROM_END|0xE0),<(STARTB_X*8),<(STARTC_X*8),<(STARTD_X*8) +@xH: .byte >(SC_FROM_END|((-4*8)&0x00FF)),>(STARTB_X*8),>(STARTC_X*8),>(STARTD_X*8) @y: .byte 100,STARTB_Y,STARTC_Y,STARTD_Y .endif @@ -2622,7 +2631,9 @@ PrintDriveNames: jsr LoadCharSet .ifdef topdesk128 lda graphMode - bpl @40 + cmp #$41 ; TODO we should not assume that the $41 is + ; the squashed mode + bne @40 jsr UseSystemFont @40: .endif @@ -2633,7 +2644,7 @@ PrintDriveNames: .ifdef topdesk128 .ifdef scalable_coords - LoadW___ r11,(SC_FROM_END | 32) + LoadW___ r11,(SC_FROM_END | (-32 & $FF)) ;LoadW___ r11,272+16 .else LoadW___ r11,272+16+DOUBLE_W @@ -2646,8 +2657,8 @@ PrintDriveNames: bpl @loop jsr i_PutString .ifdef scalable_coords - WordCX 5, SC_FROM_END | 6 - ByteCY 5, SC_FROM_END | 6 + WordCX 5, SC_FROM_END | (-6 & $FF) + ByteCY 5, SC_FROM_END | (-6 & $FF) .byte NULL .else .ifdef topdesk128 diff --git a/topdesk/Main/DeskTop.sub2.s b/topdesk/Main/DeskTop.sub2.s index 6f0757fd..c1dfbd83 100644 --- a/topdesk/Main/DeskTop.sub2.s +++ b/topdesk/Main/DeskTop.sub2.s @@ -59,11 +59,20 @@ Name2 = DiskName + 19 DispInfo: LoadW___ r0,@db jmp NewDoDlgBox @db: .byte $01 - .byte 32,138 .ifdef topdesk128 ; .word 54+DOUBLE_W,265+DOUBLE_W - .word 54,265 +; .word 54,265 + ;ByteCY 54, 32 + ;ByteCY 265, 138 + ;WordCX 54, 32 + ;WordCX 265, 138 + ByteCY %101100000000 | ((-(13*8)) & $FF), %101100000000 | ((-8*8) & $FF) + ByteCY %101100000000 | (((13*8)-1) & $FF), %101100000000 | (((5*8)-1) & $FF) + WordCX %101100000000 | ((-(13*8)) & $FF), %101100000000 | ((-(8*8)) & $FF) + WordCX %101100000000 | (((13*8)-1) & $FF), %101100000000 | (((5*8)-1) & $FF) + .else + .byte 32,138 .word 54,265 .endif .byte $0b,$10,$10 @@ -80,14 +89,14 @@ DispInfo: LoadW___ r0,@db .word @t7 .byte $0e,NULL .ifdef lang_de -@t1: .byte BOLDON,"TopDesk",PLAINTEXT," Version 1.2",0 +@t1: .byte BOLDON,"TopDesk",PLAINTEXT," Version 6.0",0 @t2: .byte "geschrieben von",BOLDON,0 @t3: .byte "Walter Knupe",0 @t4: .byte "H.J. Ciprina",0 @t5: .byte "Volker Goehrke",PLAINTEXT,0 @t7: .byte "(C) 1991 by GEOS-USER-CLUB, GbR",0 .else -@t1: .byte BOLDON,"TopDesk",PLAINTEXT," Version 1.2",0 +@t1: .byte BOLDON,"TopDesk",PLAINTEXT," Version 6.0",0 @t2: .byte "written by",BOLDON,0 @t3: .byte "Walter Knupe",0 @t4: .byte "H.J. Ciprina",0 diff --git a/topdesk/Main/DeskTop.sub4.s b/topdesk/Main/DeskTop.sub4.s index 81c6e64b..dcfcaa71 100644 --- a/topdesk/Main/DeskTop.sub4.s +++ b/topdesk/Main/DeskTop.sub4.s @@ -136,6 +136,11 @@ DispThisInfo: ; File-Info des Files Name darstellen @10: LoadW___ r0,Name jsr StringLen lsr r1L + lda graphMode + cmp #$41 + bne @2 + lsr r1L +@2: lda #(FIB_RECHTS-FIB_LINKS)/2-10 sec sbc r1L @@ -188,8 +193,10 @@ DispThisInfo: ; File-Info des Files Name darstellen .endif @tn: .byte 0 @db: .byte $01 - .byte FIB_OBEN,FIB_UNTEN - .word FIB_LINKS,FIB_RECHTS + ByteCY %101100000000 | ((-(160-FIB_LINKS)) & $FF), %101100000000 | ((-(100-FIB_OBEN)) & $FF) + ByteCY %101100000000 | (((FIB_RECHTS-160)) & $FF), %101100000000 | (((FIB_UNTEN-100)) & $FF) + WordCX %101100000000 | ((-(160-FIB_LINKS)) & $FF), %101100000000 | ((-(100-FIB_OBEN)) & $FF) + WordCX %101100000000 | (((FIB_RECHTS-160)) & $FF), %101100000000 | (((FIB_UNTEN-100)) & $FF) DbText 50,10,@boldtext @titelpos: DbText 70,12,Name DbText 10,30,@t1 @@ -234,9 +241,10 @@ DispThisInfo: ; File-Info des Files Name darstellen @t6: .byte "Write protect",BOLDON,0 @t7: .byte "Structure:",0 .endif -@PutSize: MoveW_ $8400+28,r0 - LoadW___ r11,FIB_LINKS+55 - LoadB r1H,FIB_OBEN+80 +@PutSize: + MoveW_ $8400+28,r0 + LoadW___ r11,(%101100000000 | (((-(160-FIB_LINKS-55)) & $FF))) | (((%101100000000 | (-(100-FIB_OBEN-80)) & $FF) << 4) & $f000) + LoadB r1H,((%101100000000 | (-(100-FIB_OBEN-80)) & $FF)) & $ff lda KBytesFlag cmp #'*' beq @ps10 @@ -268,8 +276,9 @@ DispThisInfo: ; File-Info des Files Name darstellen @Blocks: .byte " blocks",0 @KBytes: .byte " KByte(s)",0 .endif -@PutDate: LoadW___ r11,FIB_LINKS+55 - LoadB r1H,FIB_OBEN+70 +@PutDate: + LoadW___ r11,(%101100000000 | (((-(160-FIB_LINKS-55)) & $FF))) | (((%101100000000 | (-(100-FIB_OBEN-70)) & $FF) << 4) & $f000) + LoadB r1H,((%101100000000 | (-(100-FIB_OBEN-70)) & $FF)) & $ff ldy #0 sty a4L @pd05: lda @tab1,y @@ -300,16 +309,29 @@ DispThisInfo: ; File-Info des Files Name darstellen @tab2: .byte ".","."," ",":",0 @tab3: .byte 0,0,1,0,1 @Layout: jsr i_FrameRectangle - .byte FIB_OBEN+2,FIB_UNTEN-2 - .word FIB_LINKS+2,FIB_RECHTS-2 + ;.byte FIB_OBEN+2,FIB_UNTEN-2 + ;.word FIB_LINKS+2,FIB_RECHTS-2 + ByteCY %101100000000 | ((-(160-FIB_LINKS-2)) & $FF), %101100000000 | ((-(100-FIB_OBEN-2)) & $FF) + ByteCY %101100000000 | (((FIB_RECHTS-160-2)) & $FF), %101100000000 | (((FIB_UNTEN-100-2)) & $FF) + WordCX %101100000000 | ((-(160-FIB_LINKS-2)) & $FF), %101100000000 | ((-(100-FIB_OBEN-2)) & $FF) + WordCX %101100000000 | (((FIB_RECHTS-160-2)) & $FF), %101100000000 | (((FIB_UNTEN-100-2)) & $FF) .byte %11111111 jsr i_FrameRectangle - .byte FIB_OBEN+4,FIB_OBEN+16 - .word FIB_LINKS+2,FIB_RECHTS-2 + ;.byte FIB_OBEN+4,FIB_OBEN+16 + ;.word FIB_LINKS+2,FIB_RECHTS-2 + ByteCY %101100000000 | ((-(160-FIB_LINKS-2)) & $FF), %101100000000 | ((-(100-FIB_OBEN-4)) & $FF) + ByteCY %101100000000 | (((FIB_RECHTS-160-2)) & $FF), %101100000000 | ((-(100-FIB_OBEN-16)) & $FF) + WordCX %101100000000 | ((-(160-FIB_LINKS-2)) & $FF), %101100000000 | ((-(100-FIB_OBEN-4)) & $FF) + WordCX %101100000000 | (((FIB_RECHTS-160-2)) & $FF), %101100000000 | ((-(100-FIB_OBEN-16)) & $FF) .byte %11111111 jsr i_FrameRectangle - .byte FIB_OBEN+85,FIB_OBEN+92 - .word FIB_LINKS+50,FIB_LINKS+57 + ;.byte FIB_OBEN+85,FIB_OBEN+92 + ;.word FIB_LINKS+50,FIB_LINKS+57 + ByteCY %101100000000 | ((-(160-FIB_LINKS-50)) & $FF), %101100000000 | ((-(100-FIB_OBEN-85)) & $FF) + ByteCY %101100000000 | ((-(160-FIB_LINKS-57)) & $FF), %101100000000 | ((-(100-FIB_OBEN-92)) & $FF) + WordCX %101100000000 | ((-(160-FIB_LINKS-50)) & $FF), %101100000000 | ((-(100-FIB_OBEN-85)) & $FF) + WordCX %101100000000 | ((-(160-FIB_LINKS-57)) & $FF), %101100000000 | ((-(100-FIB_OBEN-92)) & $FF) + .byte %11111111 lda $8400 and #$40 @@ -319,10 +341,12 @@ DispThisInfo: ; File-Info des Files Name darstellen @Check: lda mouseData bne @c05 rts -@c05: LoadB r2L,FIB_OBEN+85 - LoadB r2H,FIB_OBEN+92 - LoadW___ r3,FIB_LINKS+50 - LoadW___ r4,FIB_LINKS+57 +@c05: + LoadW___ r3,(%101100000000 | (((-(160-FIB_LINKS-50)) & $FF))) | (((%101100000000 | (-(100-FIB_OBEN-85)) & $FF) << 4) & $f000) + LoadW___ r4,(%101100000000 | (((-(160-FIB_LINKS-57)) & $FF))) | (((%101100000000 | (-(100-FIB_OBEN-92)) & $FF) << 4) & $f000) + LoadB r2L,((%101100000000 | (-(100-FIB_OBEN-85)) & $FF)) & $ff + LoadB r2H,((%101100000000 | (-(100-FIB_OBEN-92)) & $FF)) & $ff + jsr IsMseInRegion beq @c10 LoadB AlternateFlag,$ff diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 685403b5..9296f936 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -519,7 +519,7 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher .endif @icontab: .word @icon1,@icon2,@icon3,@icon4 @icon1: .word IconA,0 - .byte ICON_X,ICON_Y + .byte 128|ICON_X,ICON_Y .word @icon1+8 LoadB @dr,'A' LoadB $851d,$12 diff --git a/topdesk/Main/DeskWindows.akt.inc b/topdesk/Main/DeskWindows.akt.inc index 0f88eb51..2c18f566 100644 --- a/topdesk/Main/DeskWindows.akt.inc +++ b/topdesk/Main/DeskWindows.akt.inc @@ -1930,6 +1930,10 @@ DrawMap: ; entpackte Bitmap auf Bit-Grenzen mit Clipping darstellen LoadB @off80, 0 lda graphMode bmi @n80 + cmp #$41 ; TODO we should not map this mode to double + ; icon with, this should be some mode property we + ; should decide on + beq @n80 lda r13L and #$7f sta MapBreite @@ -2650,6 +2654,12 @@ BackgroundRectangle: ; Wiederherstellung des Hintergrundes im Rechteck r2-r4 @21: LoadB r10H,0 ; xk:=xk*8 + lda graphMode + cmp #$41 ; TODO, don't use the mode id to guess double icon widt + bne @12 + asl r10L + rol r10H +@12: asl r10L rol r10H asl r10L @@ -2816,12 +2826,29 @@ Recover: lda c128Flag jsr NormalizeX ldx #r4 jsr NormalizeX -@10: AddVB 8,r2H - AddVW__ 8,r4 +@10: ldy #8 + tya + clc + adc r2H + sta r2H + tya + clc + adc r4L + sta r4L + lda #0 + adc r4H + sta r4H .ifdef topdesk128 - lda graphMode - bpl @z40 - AddVW__ 8, r4 + lda graphMode + cmp #$41 + bne @z40 + tya + clc + adc r4L + sta r4L + lda #0 + adc r4H + sta r4H @z40: .endif ldy #5 From c31a83bce0e6a37d5c2a72a8de190cfd9eb4e119 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 6 Dec 2020 18:30:39 +0100 Subject: [PATCH 075/125] Don't force the 1351 emulation mode for mouse anymore, trust the detection. Looks like the keyboard issue connected to this doesn't appear anymore. --- loader/loader.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/loader/loader.s b/loader/loader.s index 5b39d822..d3b780d8 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -123,8 +123,8 @@ next: .WORD 0 sta $d031 ; force 1351 emulation - lda #5 - sta $D61B + ;lda #5 + ;sta $D61B ; Set screen ram that has 100x60 cells x 2 bytes per cell = 12,000 bytes of colour ; information for bitmap mode. From a38f39660f61f6ba49b0f3fe50143f88f4bc024e Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 6 Dec 2020 18:32:55 +0100 Subject: [PATCH 076/125] Remove debug break for BackRAM operation. --- kernal/memory/backram.s | 1 - 1 file changed, 1 deletion(-) diff --git a/kernal/memory/backram.s b/kernal/memory/backram.s index 1283bcb6..7aded267 100644 --- a/kernal/memory/backram.s +++ b/kernal/memory/backram.s @@ -105,7 +105,6 @@ _map_DoBOp: ;--------------------------------------------------------------- _DoBOp: .ifdef mega65 -brk cpy #0 beq @1 brk From 8eae411ee0caa2b844de98d535009fd0cfc8fd53 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 6 Dec 2020 18:40:16 +0100 Subject: [PATCH 077/125] Fix dialog button positioning and sizing for 640x200 128er scaling mode. --- kernal/dlgbox/dlgbox1c.s | 12 +++++++++--- kernal/dlgbox/dlgbox1d.s | 10 ++++++++-- kernal/dlgbox/dlgbox1h.s | 9 ++++++++- kernal/dlgbox/dlgbox1j.s | 26 ++++++++++++++++++++++---- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/kernal/dlgbox/dlgbox1c.s b/kernal/dlgbox/dlgbox1c.s index 5cb8da20..7bf4efcb 100644 --- a/kernal/dlgbox/dlgbox1c.s +++ b/kernal/dlgbox/dlgbox1c.s @@ -135,9 +135,13 @@ DrwDlgSpd1: sec jsr CalcDialogCoords .if .defined(bsw128) || .defined(mega65) - ;lda r3H - ;and #$80 - ;sta L8871 + bbsf 6, graphMode, @2 + ; this is set inside CaldDialogCoords for advanced modules + ; override here + lda r3H + and #$80 + sta L8871 +@2: .endif jsr Rectangle .endif @@ -205,8 +209,10 @@ CalcDialogCoords: LoadW DBoxDesc, DBDefinedPosScalable-1 @2c: ldy graphMode + bmi @2d cpy #$41 bne @2b +@2d: ldy #$80 bra @2 @2b: diff --git a/kernal/dlgbox/dlgbox1d.s b/kernal/dlgbox/dlgbox1d.s index d5f852b1..04e82ab2 100644 --- a/kernal/dlgbox/dlgbox1d.s +++ b/kernal/dlgbox/dlgbox1d.s @@ -170,6 +170,8 @@ DBDoIcons: ldy #4 lda (r5),y and #$FF + ; apply x coordinate duplication of the dialog + ; or mode to the icon width ora L8871 sta (r5),y .endif @@ -216,9 +218,10 @@ DBIconsHelp1: ldy r1L lda (DBoxDesc),y .if .defined(bsw128) || .defined(mega65) + bbsf 6, graphMode, @2 bit L8871 bpl @2 - ;asl + asl pha lda r3L and #$FE @@ -269,7 +272,10 @@ DBIconsHelp2: bne @2 lda r3L .if .defined(bsw128) || .defined(mega65) - ;ora L8871 + bit L8871 + bpl @2b + asl r3L +@2b: .endif @2: cpy #3 bne @3 diff --git a/kernal/dlgbox/dlgbox1h.s b/kernal/dlgbox/dlgbox1h.s index 0f1d9a0e..2ea9e048 100644 --- a/kernal/dlgbox/dlgbox1h.s +++ b/kernal/dlgbox/dlgbox1h.s @@ -171,7 +171,13 @@ DBDoGETFILES: .ifdef wheels_dlgbox_features ; ??? addv 4 .else + bit graphMode + bpl @2b + addv 14 ; by 2 for the 640x200 resolution + bra @2c +@2b: addv 7 +@2c: .endif pha lda r2H @@ -287,8 +293,9 @@ DBGFArrowX: .byte 8, 8 .elseif .defined(bsw128) .byte DOUBLE_B | 3, 12 +.elseif .defined(mega65) + .byte DOUBLE_B | 3, 12 .else .byte 3, 12 .endif .word DBGFDoArrow - diff --git a/kernal/dlgbox/dlgbox1j.s b/kernal/dlgbox/dlgbox1j.s index 90ade21a..b06e1e39 100644 --- a/kernal/dlgbox/dlgbox1j.s +++ b/kernal/dlgbox/dlgbox1j.s @@ -31,6 +31,9 @@ .import Ddiv .import IsMseInRegion +.import _NormalizeX +.import _NormalizeY + .ifdef wheels .import DoKeyboardShortcut .import FetchRAM @@ -197,15 +200,23 @@ SetupRAMOpCall: asl asl rol r0H + bit graphMode + bpl @1b + addv 24 + bra @1c +@1b: addv 12 +@1c: sta r0L bcc @1 inc r0H @1: .if .defined(bsw128) || .defined(mega65) - lda r0H - ora L8871 - sta r0H + ; this is not used anymore, general position has been + ; normalized/resolved upfront + ;lda r0H + ;ora L8871 + ;sta r0H ldx #r0 jsr NormalizeX .endif @@ -374,6 +385,7 @@ DBGFilesHelp6: DBGFilesHelp7: clc jsr CalcDialogCoords + AddB DBGFOffsLeft, r3L bcc @1 inc r3H @@ -385,6 +397,13 @@ DBGFilesHelp7: AddB DBGFOffsTop, r2L adc #$58 sta r2H + + ldx #r3 + jsr _NormalizeX + ;ldx #r3 + ldy #r2L + jsr _NormalizeY + rts DBGFilesHelp8: @@ -426,4 +445,3 @@ IncR3: inc r3L inc r3H @1: rts .endif - From 857964313c0bb13b60e26d9517847251b6274657 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 24 Apr 2021 08:19:53 +0200 Subject: [PATCH 078/125] Rework for better GEOPAINT 128 compatibility. --- Makefile | 2 +- kernal/c65/iojmp.s | 135 ++++++++++++-------- kernal/c65/map.s | 56 +++++---- kernal/debug/main.s | 4 +- kernal/graph/bitmapup.s | 19 +-- kernal/graph/mode.s | 7 ++ kernal/graph/rect.s | 9 +- kernal/graph/scanline.s | 260 +++++++++++++++++++++++++++++++++------ kernal/init/init2.s | 6 + kernal/jumptab/jumptab.s | 12 +- kernal/kernal_mega65.cfg | 19 +-- kernal/mouse/mouse2.s | 93 ++++++++++++-- kernal/reu/reu.s | 83 ++++++++++++- kernal/start/start64.s | 29 +++++ 14 files changed, 573 insertions(+), 161 deletions(-) diff --git a/Makefile b/Makefile index ed76305b..9e75addc 100755 --- a/Makefile +++ b/Makefile @@ -590,7 +590,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ echo \*\*\* Created $@ based on $(D81_TEMPLATE).; \ else \ - echo format mega65\\ geos,00 d81 $@ | $(C1541) >/dev/null; \ + echo format \"mega65 geos,00\" d81 $@ | $(C1541) >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ diff --git a/kernal/c65/iojmp.s b/kernal/c65/iojmp.s index 2b95616e..afc61678 100644 --- a/kernal/c65/iojmp.s +++ b/kernal/c65/iojmp.s @@ -18,8 +18,11 @@ .global __io_ImprintRectangle .global __io_FrameRectangle .global __io_GraphicsString -.global __io_SetPattern +.global __io_DrawLine +.global __io_DrawPoint +.global __io_TestPoint +.global __io_SetPattern .import _HorizontalLine .import _InvertLine .import _RecoverLine @@ -33,6 +36,9 @@ .import _SetPattern .import _GetScanLine .import _GetRealSize +.import _DrawLine +.import _DrawPoint +.import _TestPoint .segment "iojmp" @@ -41,76 +47,99 @@ ; BSWFont80 00D894 RLA ; InitRamTab 00DC39 RLA +__io_loadRAM: + LoadB CPU_DATA, RAM_64K + rts + __io_HorizontalLine: - tax - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - txa - jsr _HorizontalLine -__io_ret: - PopB CPU_DATA - rts + tax + PushB CPU_DATA + ;LoadB CPU_DATA, RAM_64K + jsr __io_loadRAM + txa + jsr _HorizontalLine + bra __io_ret __io_InvertLine: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _InvertLine - jmp __io_ret + PushB CPU_DATA + ;LoadB CPU_DATA, RAM_64K + jsr __io_loadRAM + jsr _InvertLine + bra __io_ret __io_RecoverLine: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _RecoverLine - jmp __io_ret + ldx #7 + bra callRoutineTab __io_VerticalLine: - tax - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - txa - jsr _VerticalLine - jmp __io_ret + tax + PushB CPU_DATA + ;LoadB CPU_DATA, RAM_64K + jsr __io_loadRAM + txa + jsr _VerticalLine +__io_ret: + PopB CPU_DATA + rts __io_Rectangle: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _Rectangle - jmp __io_ret + ldx #7 + bra callRoutineTab __io_InvertRectangle: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _InvertRectangle - jmp __io_ret + ldx #6 + bra callRoutineTab __io_RecoverRectangle: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _RecoverRectangle - jmp __io_ret + ldx #5 + bra callRoutineTab __io_ImprintRectangle: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _ImprintRectangle - jmp __io_ret + ldx #4 + bra callRoutineTab __io_FrameRectangle: - tax - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - txa - jsr _FrameRectangle - jmp __io_ret + tax + PushB CPU_DATA + ;LoadB CPU_DATA, RAM_64K + jsr __io_loadRAM + txa + jsr _FrameRectangle + bra __io_ret __io_GraphicsString: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _GraphicsString - jmp __io_ret + ldx #3 + bra callRoutineTab __io_SetPattern: - PushB CPU_DATA - LoadB CPU_DATA, RAM_64K - jsr _SetPattern - jmp __io_ret + PushB CPU_DATA + ;LoadB CPU_DATA, RAM_64K + jsr __io_loadRAM + jsr _SetPattern + bra __io_ret + +__io_DrawLine: + ldx #0 + bra callRoutineTab +__io_DrawPoint: + ldx #1 + bra callRoutineTab +__io_TestPoint: + ldx #2 +callRoutineTab: + PushB CPU_DATA + ;LoadB CPU_DATA, RAM_64K + jsr __io_loadRAM + PushW returnAddress + lda RoutineTabL, x + sta returnAddress + lda RoutineTabH, x + sta returnAddress+1 + jsr (returnAddress) + PopW returnAddress + bra __io_ret + +RoutineTabL: + .byte <_DrawLine, <_DrawPoint, <_TestPoint, <_GraphicsString, <_ImprintRectangle, <_RecoverRectangle, <_InvertRectangle, <_Rectangle, <_RecoverLine +RoutineTabH: + .byte >_DrawLine, >_DrawPoint, >_TestPoint, >_GraphicsString, >_ImprintRectangle, >_RecoverRectangle, >_InvertRectangle, >_Rectangle, >_RecoverLine diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 88a806ff..9f942f9d 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -68,6 +68,8 @@ .import _GetRealSize .import _EndScanLine .import _IsMseInRegion +.import _ProcessMouseInt +.import _SetMsePic .global _map_FollowChain .global _map_FindFTypes @@ -100,6 +102,7 @@ .global _map_SetNewMode .global _map_GetRealSize .global _map_IsMseInRegion +.global _map_SetMsePic .global MapUnderlay .global UnmapUnderlay @@ -123,7 +126,7 @@ _MapHigh: beq @done @not_done: - cmp #0 + cmp #$80 beq @0 pha lda countHighMap @@ -140,7 +143,7 @@ _MapHigh: sta $8895 jsr ApplyMapping @done: - rts + rts ;--------------------------------------------------------------- @@ -167,7 +170,7 @@ _MapLow: jsr ApplyMapping @done: - rts + rts ApplyMapping: @@ -198,17 +201,15 @@ ApplyMapping: tax pla - map - eom + map + eom rts - - _map_IsMseInRegion: - jsr MapUnderlay - jsr _IsMseInRegion - bra __unmap2 + jsr MapUnderlay + jsr _IsMseInRegion + bra __unmap2 _map_FollowChain: jsr MapUnderlay jsr _FollowChain @@ -242,15 +243,14 @@ _map_RstrAppl: jsr _RstrAppl jmp UnmapUnderlay _map_LdApplic: - - jsr UNK_5 - jsr LdFile - bnex @1 - bbsf 0, A885E, @1 - jsr UNK_4 - MoveW_ fileHeader+O_GHST_VEC, r7 - jmp StartAppl -@1: rts + jsr UNK_5 + jsr LdFile + bnex @1 + bbsf 0, A885E, @1 + jsr UNK_4 + MoveW_ fileHeader+O_GHST_VEC, r7 + jmp StartAppl +@1: rts ;jsr MapUnderlay ;jsr _LdApplic ;jmp UnmapUnderlay @@ -344,8 +344,11 @@ _map_GetRealSize: jsr MapUnderlay jsr _GetRealSize bra __unmap - - +_map_SetMsePic: + jsr MapUnderlay + jsr _SetMsePic + bra __unmap + MapUnderlay: pha txa @@ -360,15 +363,16 @@ MapUnderlay: sta lastHighMap lda highMapBnk sta lastHighMapBnk - lda #0 + lda #$80 ldx #0 jsr _MapHigh jmp @2 @1: lda highMap - cmp #0 + cmp #$80 beq @2 @3: - jmp @3 + brk + ;jmp @3 @2: inc countHighMap bra mapEnd @@ -386,12 +390,12 @@ UnmapUnderlay: lda lastHighMap ldx lastHighMapBnk jsr _MapHigh - lda #0 + lda #$80 sta lastHighMap jmp @2 @1: lda highMap - cmp #0 + cmp #$80 beq @2 @3: jmp @3 diff --git a/kernal/debug/main.s b/kernal/debug/main.s index 8c80b789..0b79b7ab 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -922,10 +922,10 @@ ProcessDump: MoveB r2L, u_cl_h @6c: MoveW u_cl, r0 - MoveB u_cl_h, r2L lda #'$' jsr PutChar + MoveB u_cl_h, r2L lda r2L jsr PrintByteHex lda r0H @@ -934,6 +934,7 @@ ProcessDump: jsr PrintByteHex lda #' ' jsr PutChar + MoveB u_cl_h, r2L ldx #0 @6b: @@ -941,7 +942,6 @@ ProcessDump: pha tay ;lda (r0), y - LoadB r2L, $05 jsr GetByteLong jsr PrintByteHex lda #' ' diff --git a/kernal/graph/bitmapup.s b/kernal/graph/bitmapup.s index 9c6f00a7..b751e30c 100644 --- a/kernal/graph/bitmapup.s +++ b/kernal/graph/bitmapup.s @@ -327,19 +327,22 @@ BitmapDecode2: ora #1 sta config .endif - ;lda r0H - ;cmp #$a0 - ;bcc @11 + lda r0H + cmp #$a0 ; get image from UNDERLAY - PushW r1 - LoadW r1, 0 + ldx r1H + ldy r1L LDZ #0 + lda #1 + bcs @11 + tza +@11: sta r1L + stz r1H EOM lda (r0L), Z - taz - PopW r1 - tza + sty r1L + stx r1H ;ldy #0 ;lda (r0),y diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index ab8b10e8..2aa66bf7 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -33,6 +33,7 @@ .import VIC_IniTbl .import VIC_IniTbl_end .import SetVICRegs +.import _MapLow .endif ;.import screenMaxX @@ -47,6 +48,8 @@ .import i_MoveData .import ColTab .import RowTab +.import UnmapUnderlay +.import MapUnderlay .global SetRightMargin _SetNewMode: @@ -114,6 +117,8 @@ SetNewMode0: @14: lda #0 + tax + jsr _MapLow jsr InitVideoMode END_IO rts @@ -157,10 +162,12 @@ SetRightMargin: InitVideoMode: pha + jsr MapUnderlay LoadW r0, VIC_IniTbl .assert * - VIC_IniTbl_end - VIC_IniTbl < 256, error, "VIC_IniTbl must be < 256 bytes" ldy #<(VIC_IniTbl_end - VIC_IniTbl) jsr SetVICRegs + jsr UnmapUnderlay pla tax diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index a6b88b0d..753264c0 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -23,6 +23,7 @@ .global _RecoverRectangle .global _ImprintRectangle .global _FrameRectangle +.global _EndScanLine .segment "graph2c" @@ -92,6 +93,7 @@ _Rectangle: rectEnd: PopW r4 PopW r3 +rectEnd2: PopW r2 rts @@ -145,8 +147,7 @@ _InvertRectangle: ;PopB r5H PopB r4H PopB r3H - PopW r2 - rts + bra rectEnd2 .segment "graph2e" @@ -167,7 +168,7 @@ _RecoverRectangle: inc r11L cmp r2H bne @1 - rts + jmp _EndScanLine .segment "graph2g" @@ -188,7 +189,7 @@ _ImprintRectangle: inc r11L cmp r2H bne @1 - rts + jmp _EndScanLine .segment "graph2i1" diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index ad934f9d..4215dbd0 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -37,27 +37,33 @@ BACK_SCR_BASE65 = $9000 ; mode, should map $A000-$C000 to second background buffer ; area. +_col80MemLayout: + .byte 0 ; $FF means 80 cols are mapped + ; and active + _GetScanLineExt: bit graphMode bpl _GetScanLine ; if 80 col compat mode jsr MapUnderlay + jsr Ensure80ColMemLayout jsr GSC80 jsr UnmapUnderlay txa + _EndScanLine: bit graphMode bpl @1 pha - ldx #$00 - lda #$70 + lda #$00 + tax jsr _MapHigh ;ldx #$00 ;lda #$80 - ldx #$00 lda #$00 + tax jsr _MapLow pla tax @@ -113,6 +119,15 @@ _GetScanLine: .ifdef mega65 PushB CPU_DATA LoadB CPU_DATA, RAM_64K + + lda _col80MemLayout + beq @memLayoutDone + + jsr MapUnderlay + jsr SwitchToStandardMemLayout + jsr UnmapUnderlay + +@memLayoutDone: .endif .ifdef bsw128 bbrf 7, graphMode, @X @@ -125,22 +140,24 @@ _GetScanLine: pha .endif .ifdef mega65 - and #%11111000 + ;and #%11111000 cmp #%11111000 - bne @_1 + bcc @_1 ; branch if not high res ; we are in high res mode - txa + ;txa and #%00000111 - sta r6H + sta r6H ; card inline offset tya + ; card line in A now bra @_2 @_1: - txa + ; we are in standard (non-hig-res mode) + ;txa .endif and #%00000111 - sta r6H + sta r6H ; card inline offset .ifdef wheels_size_and_speed txa .else @@ -149,17 +166,21 @@ _GetScanLine: lsr lsr lsr + + ; card line in A now .ifdef mega65 @_2: + ; A is card line + ; r6H card inline offset .endif .ifdef mega65 ;bit grapeMode ;bne @X ; branch if not mode 0 ;bbrf 7, graphMode, @X - ;ora #$20 + ;ora #$20 @X: .endif - tax ; scan line in x now + tax ; scan line in cards in x now lda LineTabL,x ora r6H @@ -169,6 +190,13 @@ _GetScanLine: sta r5H sta r6H + tya + pha + tza + pha + + ; screen buffer offset in r5H/r6H now + bbrf 7, dispBufferOn, @2 ; ST_WR_FORE @@ -188,18 +216,18 @@ _GetScanLine: .ifdef mega65 ; map foregroud and translate ptrs - tya - pha - tza - pha + ;tya + ;pha + ;tza + ;pha ; a/x lower, y/z highter lda r5H ldx graphMode - bne @X1 + bne @X1 ; use buffer offset directly in col40 mode and #%11100000 @X1: - add #$60 + add #$60 ; add the base address bcc @Y2 clc ror @@ -241,10 +269,10 @@ _GetScanLine: .ifdef mega65 ; map foregroud and translate ptrs - tya - pha - tza - pha + ;tya + ;pha + ;tza + ;pha ; a/x lower, y/z highter lda r5H @@ -252,19 +280,19 @@ _GetScanLine: bne @X2___ and #%11100000 @X2___: - add #$c0 - bcc @Y2__ + add #$60 + bcs @Y2__ sec - ror - ldx #0 + ror ; div page by 2 for map offset + ldx #0 ; map bank offset bra @Y1__ @Y2__: clc - ror - ldx #0 + ror ; div page by 2 for map offset + ldx #1 ; map bank offset @Y1__: - ldz #0 + ldz #1 ; bra gslend2 ; jsr _MapLow @@ -294,10 +322,10 @@ _GetScanLine: @1: .ifdef mega65 ; map foregroud and translate ptrs - tya - pha - tza - pha + ;tya + ;pha + ;tza + ;pha ; a/x lower, y/z highter lda r5H @@ -324,8 +352,8 @@ _GetScanLine: ;sub #$40 ;lsr pla - add #$c0 - bcc @Y2___ + add #$60 + bcs @Y2___ sec ror ldx #0 @@ -334,14 +362,15 @@ _GetScanLine: @Y2___: clc ror - ldx #0 + ldx #1 @Y1___: ldz #$40 gslend2: stz r6H ldy graphMode bne @Z1 - lda #$80 + ldx #0 + lda #0 ; of $c0 -> background fix map $12000 @Z1: jsr _MapLow @@ -351,11 +380,11 @@ gslend2: beq @X2_ and #%00000001 @X2_: - add #$60 - add r6H - sta r5H + add #$60 ; add back buffer base + add r6H ; add offset between front and back buffer + sta r5H ; - sub r6H + sub r6H ; sub offset between front and back buffer gslend: sta r6H @@ -378,6 +407,157 @@ gslend: .if .defined(bsw128) || .defined(mega65) .segment "graph2nu" +Ensure80ColMemLayout: + lda _col80MemLayout + bne @1 + jsr SwitchTo80ColMemLayout +@1: + rts + +SwitchToStandardMemLayout: + pha + txa + pha + tya + pha + tza + pha + PushW r0 + PushW r1 + PushW r2 + PushW r3 + + LoadW r0, $6000 + LoadW r1, $0000 + + LoadW r2, $C000 + LoadW r3, $0001 + + ;inc $D020 + + ldy #0 +@1: + cpy #100 + bne @3 + LoadW r0, $A040 +@3: + ldx #0 +@2: + LDZ #0 + EOM + lda (r0), Z + EOM + sta (r2), Z + + IncW r0 + AddVW 8, r2 + + inx + cpx #80 + bne @2 + + iny + tya + and #7 + beq @4 + + SubVW 639, r2 + bra @5 +@4: + SubVW 7, r2 +@5: + cpy #200 + bne @1 + + PopW r3 + PopW r2 + PopW r1 + PopW r0 + + LoadB _col80MemLayout, 0 + + pla + taz + pla + tay + pla + tax + pla + + rts + +SwitchTo80ColMemLayout: + pha + txa + pha + tya + pha + tza + pha + PushW r0 + PushW r1 + PushW r2 + PushW r3 + + LoadW r0, $6000 + LoadW r1, $0000 + + LoadW r2, $C000 + LoadW r3, $0001 + + ;inc $D020 + + ldy #0 +@1: + cpy #100 + bne @3 + LoadW r0, $A040 +@3: + ldx #0 +@2: + LDZ #0 + EOM + lda (r2), Z + EOM + sta (r0), Z + + IncW r0 + AddVW 8, r2 + + inx + cpx #80 + bne @2 + + iny + tya + and #7 + beq @4 + + SubVW 639, r2 + bra @5 +@4: + SubVW 7, r2 +@5: + cpy #200 + bne @1 + + PopW r3 + PopW r2 + PopW r1 + PopW r0 + + LoadB _col80MemLayout, $FF + + pla + taz + pla + tay + pla + tax + pla + + rts + GSC80: txa pha diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 81319891..745f9a9c 100644 --- a/kernal/init/init2.s +++ b/kernal/init/init2.s @@ -91,6 +91,12 @@ _FirstInit2: LoadB mob0clr, BLUE sta mob1clr LoadB extclr, BLACK + sta mob2clr + sta mob3clr + sta mob4clr + sta mob5clr + sta mob6clr + sta mob7clr LoadB bakclr0, BLACK ;XXX workaround a ; bug in the current MEGA65 ; bitstream showing parts of diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 71c1d539..f994090a 100644 --- a/kernal/jumptab/jumptab.s +++ b/kernal/jumptab/jumptab.s @@ -204,6 +204,7 @@ .import _map_SetNewMode .import _map_GetRealSize .import _map_IsMseInRegion +.import _map_SetMsePic .else .import _InsertRecord .import _NextRecord @@ -432,6 +433,9 @@ .import __io_FrameRectangle .import __io_GraphicsString .import __io_SetPattern +.import __io_DrawLine +.import __io_DrawPoint +.import __io_TestPoint .endif .ifdef wheels @@ -518,9 +522,9 @@ RecoverRectangle: jmp _RecoverRectangle .endif DrawLine: - jmp _DrawLine + jmp __io_DrawLine DrawPoint: - jmp _DrawPoint + jmp __io_DrawPoint GraphicsString: .ifdef mega65 jmp __io_GraphicsString @@ -532,7 +536,7 @@ SetPattern: GetScanLine: jmp _GetScanLineExt TestPoint: - jmp _TestPoint + jmp __io_TestPoint BitmapUp: jmp _BitmapUp PutChar: @@ -1009,7 +1013,7 @@ ColorRectangle: TempHideMouse: UNIMPLEMENTED_NO_ACTION SetMsePic: - UNIMPLEMENTED_NO_ACTION + jmp _map_SetMsePic SetNewMode: .import _SetNewMode jmp _map_SetNewMode diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index be182c7d..db8ad99a 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -55,7 +55,10 @@ SEGMENTS { dlgbox1d_ul: load = UNDERLAY, type = ro; init2: load = UNDERLAY, type = ro; mouse1: load = UNDERLAY, type = ro; - + hw3: load = UNDERLAY, type = ro; + hw1a: load = UNDERLAY, type = ro; + mouseptr: load = UNDERLAY, type = ro; + mouse2int: load = UNDERLAY, type = ro; # kernal header: $c000 header: load = KERNALHDR, type = ro; @@ -87,14 +90,14 @@ SEGMENTS { load1c: load = KERNAL, type = ro; load1d: load = KERNAL, type = ro; init1: load = KERNAL, type = ro; - hw1a: load = KERNAL, type = ro; + #hw1a: load = KERNAL, type = ro; #hw1b: load = KERNAL, type = ro; hw2: load = KERNAL, type = ro; init2b: load = KERNAL, type = ro; memory1a: load = KERNAL, type = ro; memory1b: load = KERNAL, type = ro; #misc: load = KERNAL, type = ro; - hw3: load = KERNAL, type = ro; + #hw3: load = KERNAL, type = ro; load2: load = KERNAL, type = ro; process1: load = KERNAL, type = ro; process2: load = KERNAL, type = ro; @@ -109,7 +112,6 @@ SEGMENTS { math1c2: load = KERNAL, type = ro; memory2: load = KERNAL, type = ro; panic1: load = KERNAL, type = ro; - math1d: load = KERNAL, type = ro; #panic2: load = KERNAL, type = ro; #panic3: load = KERNAL, type = ro; memory3: load = KERNAL, type = ro; @@ -117,7 +119,7 @@ SEGMENTS { graph3c: load = KERNAL, type = ro; iojmp: load = KERNAL, type = ro; mouse2: load = KERNAL, type = ro; - mouseptr: load = KERNAL, type = ro; + #mouseptr: load = KERNAL, type = ro; #dlgbox2: load = KERNAL, type = ro; graph2a: load = KERNAL, type = ro; graph2c: load = KERNAL, type = ro; @@ -131,7 +133,8 @@ SEGMENTS { graph2o: load = KERNAL, type = ro; bswfont: load = KERNAL, type = ro; bswfont80: load = KERNAL, type = ro; - patterns: load = KERNAL, type = ro; + graph4: load = KERNAL, type = ro; + #patterns: load = KERNAL, type = ro; #dlgbox1k: load = KERNAL, type = ro; #init4: load = KERNAL, type = ro; fonts2: load = KERNAL, type = ro; @@ -160,7 +163,9 @@ SEGMENTS { conio4: load = KERNAL, type = ro; conio5: load = KERNAL, type = ro; conio6: load = KERNAL, type = ro; - graph4: load = KERNAL, type = ro; + #graph4: load = KERNAL, type = ro; + patterns: load = KERNAL, type = ro; + math1d: load = KERNAL, type = ro; graph5: load = KERNAL, type = ro; mouse3: load = KERNAL, type = ro; menu1: load = KERNAL, type = ro; diff --git a/kernal/mouse/mouse2.s b/kernal/mouse/mouse2.s index c1365cf6..5e65f69f 100644 --- a/kernal/mouse/mouse2.s +++ b/kernal/mouse/mouse2.s @@ -32,6 +32,8 @@ .endif .ifdef mega65 .import UncompactXY +.import i_FillRam +.import i_MoveData .endif .global _MouseOff @@ -39,13 +41,84 @@ .global ProcessMouse .global _ClearMouseMode .global _MouseUp +.global _ProcessMouseInt +.global _SetMsePic .ifdef wheels .global ResetMseRegion .endif +.segment "mouse2int" +_SetMsePic: + lda r0L + ora r0H + sta VDCMouseSet + + AddVW 16, r0 + ldy #0 ; input offset + ldx #0 ; output offset +@1: + lda (r0), y + sta VDCPointer, x + inx + iny + lda (r0), y + sta VDCPointer, x + inx + iny + lda #0 + sta VDCPointer, x + inx + cpx #24 + bne @1 + rts + .segment "mouse2" +_ProcessMouseInt: +.if .defined(bsw128) + bbsf 7, graphMode, @X +.endif +.if .defined(mega65) + lda VDCMouseSet + beq @X3 + bbsf 7, graphMode, @X2 +@X3b: +.endif + MoveW msePicPtr, r4 +@X3c: + jsr DrawSprite +.if .defined(mega65) + bra @X1 +@X3: + bbrf 7, graphMode, @X3b + LoadW r4, mousePicData + bra @X3c +@X2: + jsr i_FillRam + .word 63 + .word spr0pic + .byte 0 + jsr i_MoveData + .word VDCPointer + .word spr0pic + .word 24 +@X1: +.endif + +@X: MoveW mouseXPos, r4 + MoveB mouseYPos, r5L + jsr PosSprite +.ifndef bsw128 + jmp EnablSprite +.else + rts +.endif + + +VDCMouseSet: + .byte 0 + _StartMouseMode: bcc @1 lda r11L @@ -122,18 +195,8 @@ ProcessMouse: jsr @1 LoadB r3L, 0 -.ifdef bsw128 - bbsf 7, graphMode, @X -.endif - MoveW msePicPtr, r4 - jsr DrawSprite -@X: MoveW mouseXPos, r4 - MoveB mouseYPos, r5L - jsr PosSprite -.ifndef bsw128 - jsr EnablSprite -.endif - rts + + jmp _ProcessMouseInt @1: ; compact mouse position lda mouseXPos+1 @@ -306,3 +369,9 @@ DoMouseFault: bbsf 6, menuOptNumber, @3 @2: jsr _DoPreviousMenu @3: rts + +VDCPointer: + .byte $f0 + .repeat 23 + .byte 0 + .endrep \ No newline at end of file diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index 553b81da..331b41e0 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -22,7 +22,81 @@ .ifdef mega65 REU_BASE_BANK = $00 +.if 0 + +_DoRAMOp: + cpy #%10010000 + beq _StashRAM +_FetchRAM: + ldy #0 +@1: + lda r2, y + pha + iny + cpy #12 + bne @1 + + MoveW r0, r6 + LoadW r7, $0000 + + MoveW r1, r4 + LoadW r5, $0005 + + bra _ExecRamOp +_StashRAM: + ldy #0 +@1: + lda r2, y + pha + iny + cpy #12 + bne @1 + + MoveW r0, r4 + lda #0 + sta r5L + sta r5H + sta r7H + ;LoadW r5, $0000 + + MoveW r1, r6 + ;LoadW r7, $0080 + LoadB r7L, $05 + + +_ExecRamOp: +@2: + LDZ #0 + EOM + lda (r4), Z + EOM + sta (r6), Z + + IncW r4 + IncW r6 + dec r2L + lda r2L + cmp #$ff + bne @10 + dec r2H +@10: ora r2H + bne @2 + + ldy #12 +@1: + pla + sta r2-1, y + dey + bne @1 + +_VerifyRAM: +_SwapRAM: +@3: + ldx #0 + rts + +.else _StashRAM: lda #0 sta opFromBankLow @@ -75,8 +149,8 @@ _GetBankParams: lda r3L tax - ;and #$0F - lda #5 ; force to bank 5 of main RAM + and #$0F + ;lda #5 ; force to bank 5 of main RAM tay txa lsr @@ -84,8 +158,8 @@ _GetBankParams: lsr lsr - ;ora #$80 - lda #0 ; force to bank 5 of main RAM + ora #$80 + ;lda #0 ; force to bank 5 of main RAM @1: ldx r1L rts @@ -136,6 +210,7 @@ opToAddr: opToBankLow: .byte 5 ; bank 1 .word 0 ; unsued mod +.endif .else diff --git a/kernal/start/start64.s b/kernal/start/start64.s index cf68396e..b16d8de1 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -93,6 +93,21 @@ ASSERT_NOT_BELOW_IO LoadW NMI_VECTOR, _NMIHandler LoadW IRQ_VECTOR, _IRQHandler + ; move underlayr from $0A000 to $1A000 + lda #>underlaylist + ldy # Date: Fri, 28 May 2021 23:16:03 +0200 Subject: [PATCH 079/125] Added 128 DESKTOP Reworked scan line resolution to be more compatible with GEOPAINT 128 Disable DMA for MoveData because GEOPAINT has issues, when MoveData is used to move loaded data to foreground screen area (which is mapped) Shifted around segments to ensure math is below $D000 and between $D000 and $E000 is able to run below IO area Enhanced the debugger to properly follow branch command when single stepping. In general improved fallback to RAM back 0 to support application var area in 40/80 col mode. --- Makefile | 14 ++++- kernal/c65/map.s | 2 +- kernal/debug/main.s | 63 +++++++++++++++++--- kernal/graph/scanline.s | 124 +++++++++++++++++++++------------------ kernal/kernal_mega65.cfg | 12 +++- kernal/memory/memory2.s | 4 +- 6 files changed, 145 insertions(+), 74 deletions(-) diff --git a/Makefile b/Makefile index 9e75addc..1c3efdf1 100755 --- a/Makefile +++ b/Makefile @@ -438,7 +438,10 @@ tgg1128.cvt: tgg2128.cvt: curl --output $@ http://cbmfiles.com/geos/geosfiles/TGG2128.CVT - +dt128.cvt: + curl --output $(BUILD_DIR)/G1281581.ZIP http://cbmfiles.com/geos/geosfiles/G1281581.ZIP + unzip $(BUILD_DIR)/G1281581.ZIP + echo geosread \"128 DESKTOP\" dt128.cvt | $(C1541) GEOS128.D81 >/dev/null; %.CVT: curl --output $@ http://cbmfiles.com/geos/geosfiles/$@ @@ -498,6 +501,7 @@ SNX10C.CVT NX1000R.CVT SSG10.CVT TOSHP321.CVT +dt128.cvt endif $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt \ @@ -572,7 +576,8 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd SNX10C.CVT \ SSG10.CVT \ TOSHP321.CVT \ - $(BUILD_DIR)/geospace.cvt + $(BUILD_DIR)/geospace.cvt \ + dt128.cvt @if [ -e $(D81_TEMPLATE) ]; then \ cp $(D81_TEMPLATE) $@; \ echo delete geos $(GEOS_OUT) configure geoboot | $(C1541) $@ >/dev/null; \ @@ -612,6 +617,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/other_data.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/coding.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/misc.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite dt128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gw128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite photo_mgr.cvt | $(C1541) $@ >/dev/null; \ @@ -786,6 +792,8 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo \*\*\* Created fresh $@.; \ fi; +# echo rename \"65 desktop\" \"65 topdesk\" | $(C1541) $@ >/dev/null; +# echo rename \"128 desktop\" \"65 desktop\" | $(C1541) $@ >/dev/null; ifeq ($(VARIANT), mega65) @@ -835,7 +843,7 @@ $(BUILD_DIR)/space/space.o: $(BUILD_DIR)/clock/clock.o: @mkdir -p `dirname $@` $(AS) clock/clockIcon.s -o $(BUILD_DIR)/clock/clockIcon.o - $(LD) -C clock/clockIcon.cfg $(BUILD_DIR)/clock/clockIcon.o -o $(BUILD_DIR)/clock/clock.bf + $(LD) -C clock/clockIcon.cfg $(BUILD_DIR)/clock/clockIcon.o -m $(BUILD_DIR)/clock.map -o $(BUILD_DIR)/clock/clock.bf $(GRC) -s $(BUILD_DIR)/clock/clock.s2 -o $(BUILD_DIR)/clock/clock.c clock/clock.grc sed 's/192/1/g' $(BUILD_DIR)/clock/clock.s2 > $(BUILD_DIR)/clock/clock.s $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/clock/clock.s -o $@ diff --git a/kernal/c65/map.s b/kernal/c65/map.s index 9f942f9d..e3912abc 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -390,7 +390,7 @@ UnmapUnderlay: lda lastHighMap ldx lastHighMapBnk jsr _MapHigh - lda #$80 + lda #$00 sta lastHighMap jmp @2 @1: diff --git a/kernal/debug/main.s b/kernal/debug/main.s index 0b79b7ab..a6cadea0 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -594,7 +594,7 @@ traceNow: sta r0H stx r0L - bra @2 + jmp @2 @1: cmp #$6C ; JMP ($xyza) @@ -612,12 +612,14 @@ traceNow: @3: cmp #$90 ; BCC - bne @3b + bne @4a ldy stackPointer lda $105+STACK_OFFSET, y and #1 - bne @3b + beq @3c + lda #$90 + jmp @3b @3c: ; follow branch ldy #1 @@ -643,12 +645,55 @@ traceNow: AddVW 2, r0 bra @2 - lda r0L - sta $106+STACK_OFFSET, y - lda r0H - sta $107+STACK_OFFSET, y - clc - rts + ;lda r0L + ;sta $106+STACK_OFFSET, y + ;lda r0H + ;sta $107+STACK_OFFSET, y + ;clc + ;rts +@4a: + cmp #$10 ; BPL + bne @4c + + ldy stackPointer + lda $105+STACK_OFFSET, y + and #$80 + beq @3c ; it is positiv, branch off + lda #$10 + bne @3b +@4c: + cmp #$F0 ; BEQ + bne @4d + ldy stackPointer + lda $105+STACK_OFFSET, y + and #$02 + bne @3c ; it is zero/equal, branch off + lda #$F0 + bra @3b +@4d: + cmp #$D0 ; BNE + bne @4g + ldy stackPointer + lda $105+STACK_OFFSET, y + and #$02 + beq @3c ; it is zero/equal, branch off + lda #$D0 + bra @3b + +@4g: + cmp #$60 ; RTS + bne @3b + + ; return + ldy stackPointer + lda $108+STACK_OFFSET, y + sta r0L + lda $109+STACK_OFFSET, y + sta r0H + + AddVW 3, r0 + bra @2 + @3b: jsr DebugOpcode_GetLen diff --git a/kernal/graph/scanline.s b/kernal/graph/scanline.s index 4215dbd0..da6cd11c 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -44,14 +44,14 @@ _col80MemLayout: _GetScanLineExt: bit graphMode bpl _GetScanLine - + ; if 80 col compat mode jsr MapUnderlay jsr Ensure80ColMemLayout jsr GSC80 jsr UnmapUnderlay - txa - + txa + _EndScanLine: bit graphMode bpl @1 @@ -61,7 +61,7 @@ _EndScanLine: jsr _MapHigh ;ldx #$00 ;lda #$80 - + lda #$00 tax jsr _MapLow @@ -69,7 +69,7 @@ _EndScanLine: tax @1: rts - + ;--------------------------------------------------------------- ; GetScanLine_HR ; @@ -166,7 +166,7 @@ _GetScanLine: lsr lsr lsr - + ; card line in A now .ifdef mega65 @_2: @@ -195,6 +195,37 @@ _GetScanLine: tza pha + lda graphMode + bne @slow + + lda #$B0 ; of $c0 -> background fix map $12000 + ldx #1 + jsr _MapHigh + + lda #0 ; of $c0 -> background fix map $12000 + tax + jsr _MapLow + + ldx #$60 ; r6 off + ldy #$a0 ; r5 off + bbsf 6, dispBufferOn, @2_A ; ST_WR_BACK + ldx #$a0 ; non-back +@2_A: + bbsf 7, dispBufferOn, @2_B ; ST_WR_FORE + ldy #$60 ; non-fore +@2_B: + tya + clc + adc r5H + sta r5H + txa + clc + adc r6H + bra gslend + + +@slow: + ; screen buffer offset in r5H/r6H now bbrf 7, dispBufferOn, @2 ; ST_WR_FORE @@ -223,30 +254,23 @@ _GetScanLine: ; a/x lower, y/z highter lda r5H - ldx graphMode - bne @X1 ; use buffer offset directly in col40 mode - and #%11100000 -@X1: + ldx #2 add #$60 ; add the base address bcc @Y2 clc - ror - ldx #2 + ;ror bra @Y1 @Y2: + dex ;ldx #1 sec - ror - ldx #1 + ;ror @Y1: + ror jsr _MapHigh lda r5H - and #%00011111 - ldx graphMode - beq @X2 and #%00000001 -@X2: add #$a0 sta r5H bra gslend @@ -275,24 +299,22 @@ _GetScanLine: ;pha ; a/x lower, y/z highter + LDX #0 lda r5H - ldx graphMode - bne @X2___ - and #%11100000 -@X2___: add #$60 bcs @Y2__ sec - ror ; div page by 2 for map offset - ldx #0 ; map bank offset + ;ror ; div page by 2 for map offset + ;ldx #0 ; map bank offset bra @Y1__ @Y2__: clc - ror ; div page by 2 for map offset - ldx #1 ; map bank offset + ;ror ; div page by 2 for map offset + inx ;ldx #1 ; map bank offset @Y1__: - ldz #1 ; + ror + ldz #0 ; bra gslend2 ; jsr _MapLow @@ -329,24 +351,22 @@ _GetScanLine: ; a/x lower, y/z highter lda r5H - ldx graphMode - bne @X1_ - and #%11100000 -@X1_: pha + ldx #1 add #$60 bcc @Y2_ clc - ror - ldx #2 + ;ror + inx ;ldx #2 bra @Y1_ @Y2_: sec - ror - ldx #1 + ;ror + ;ldx #1 @Y1_: + ror jsr _MapHigh ;sub #$40 @@ -355,37 +375,29 @@ _GetScanLine: add #$60 bcs @Y2___ sec - ror + ;ror ldx #0 bra @Y1___ @Y2___: clc - ror + ;ror ldx #1 @Y1___: + ror ldz #$40 gslend2: stz r6H - ldy graphMode - bne @Z1 - ldx #0 - lda #0 ; of $c0 -> background fix map $12000 -@Z1: jsr _MapLow lda r5H - and #%00011111 - ldx graphMode - beq @X2_ and #%00000001 -@X2_: add #$60 ; add back buffer base add r6H ; add offset between front and back buffer sta r5H ; sub r6H ; sub offset between front and back buffer -gslend: +gslend: sta r6H pla @@ -413,7 +425,7 @@ Ensure80ColMemLayout: jsr SwitchTo80ColMemLayout @1: rts - + SwitchToStandardMemLayout: pha txa @@ -434,7 +446,7 @@ SwitchToStandardMemLayout: LoadW r3, $0001 ;inc $D020 - + ldy #0 @1: cpy #100 @@ -448,15 +460,15 @@ SwitchToStandardMemLayout: lda (r0), Z EOM sta (r2), Z - + IncW r0 AddVW 8, r2 - inx + inx cpx #80 bne @2 - iny + iny tya and #7 beq @4 @@ -468,12 +480,12 @@ SwitchToStandardMemLayout: @5: cpy #200 bne @1 - + PopW r3 PopW r2 PopW r1 PopW r0 - + LoadB _col80MemLayout, 0 pla @@ -524,11 +536,11 @@ SwitchTo80ColMemLayout: IncW r0 AddVW 8, r2 - inx + inx cpx #80 bne @2 - iny + iny tya and #7 beq @4 diff --git a/kernal/kernal_mega65.cfg b/kernal/kernal_mega65.cfg index db8ad99a..ee9d2b7b 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -89,11 +89,11 @@ SEGMENTS { swapdiskdriver: load = KERNAL, type = ro; load1c: load = KERNAL, type = ro; load1d: load = KERNAL, type = ro; - init1: load = KERNAL, type = ro; + #init1: load = KERNAL, type = ro; #hw1a: load = KERNAL, type = ro; #hw1b: load = KERNAL, type = ro; - hw2: load = KERNAL, type = ro; - init2b: load = KERNAL, type = ro; + #hw2: load = KERNAL, type = ro; + #init2b: load = KERNAL, type = ro; memory1a: load = KERNAL, type = ro; memory1b: load = KERNAL, type = ro; #misc: load = KERNAL, type = ro; @@ -105,6 +105,7 @@ SEGMENTS { process3aa: load = KERNAL, type = ro; process3b: load = KERNAL, type = ro; process3c: load = KERNAL, type = ro; + #graph1: load = KERNAL, type = ro; math1a1: load = KERNAL, type = ro; math1a2: load = KERNAL, type = ro; math1b: load = KERNAL, type = ro; @@ -143,6 +144,11 @@ SEGMENTS { fonts4a: load = KERNAL, type = ro; fonts4b: load = KERNAL, type = ro; graph1: load = KERNAL, type = ro; + init2b: load = KERNAL, type = ro; + hw2: load = KERNAL, type = ro; + init1: load = KERNAL, type = ro; + #math1b: load = KERNAL, type = ro; + #graph1: load = KERNAL, type = ro; serial2: load = KERNAL, type = ro; backram: load = KERNAL, type = ro; graph2n: load = KERNAL, type = ro; diff --git a/kernal/memory/memory2.s b/kernal/memory/memory2.s index 6fd1c335..cb7d0272 100644 --- a/kernal/memory/memory2.s +++ b/kernal/memory/memory2.s @@ -134,7 +134,8 @@ _MoveData: PushB r3L .ifdef REUPresent lda sysRAMFlg - bpl @1 + bra @1 + ;bpl @1 .ifdef bsw128 lda r2H cmp #>$3800 @@ -271,4 +272,3 @@ _CmpFString: lda #0 .endif @3: rts - From c01095a9ab59fa88d856c3d6dfd1ccece39af8d2 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 9 Jul 2021 15:58:10 +0200 Subject: [PATCH 080/125] Cleanup DA handling. Now properly return to extended graph mode and clears the screen when mode switching was required. --- topdesk/Include/SubDir.src.inc | 14 ++++++---- topdesk/Main/DeskTop.main.s | 51 +++++++++++++++++++--------------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index b94f32cb..afb581e8 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -1088,11 +1088,13 @@ DA0: lda FileClassNr cmp #05 bne @20 - lda c128Flag - bpl @19 - lda graphMode - bpl @19 - jsr CLS + ; this feels wrong, should not just by default clear the + ; screen when running 80 col mode + ;lda c128Flag + ;bpl @19 + ;lda graphMode + ;bpl @19 + ;jsr CLS @19: jmp DA_Call2 @20: jsr TestTopDesk bcc @td10 @@ -1110,7 +1112,7 @@ TestGraphMode: LoadW___ r9,$8400 jsr GetFHdrInfo lda $8160 - cmp #$80 + cmp #$80 ; c64 only? bne @05 ldx #15 rts diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 443b2304..66b4f4b6 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1814,6 +1814,8 @@ DA_Call2: DAReturn: txa pha + MoveB oldGraphMode, graphMode + jsr SetNewMode .ifdef topdesk128 jsr SetMyNewMode .else @@ -3232,8 +3234,9 @@ File_Selected: ; Auswertung einer File-Selection ldy #63 sta (r4),y .endif - jsr InitForIO - jsr DoneWithIO + ; unclear why this call is here? + ;jsr InitForIO + ;jsr DoneWithIO LoadB ghostFile,1 jsr InitForIO .ifdef topdesk128 @@ -3242,27 +3245,25 @@ File_Selected: ; Auswertung einer File-Selection MoveB $d027,$d028 ; Farbe des Ghost-Sprites von Mauszeiger .endif .ifdef topdesk128 - lda graphMode - bmi @q80 + lda graphMode + bmi @q80 @q40: - lda $d01d - and #%11111011 - sta $d01d - jmp @qend + lda $d01d + and #%11111011 + bra @qend @q80: .ifdef mega65 - lda $d01d - and #%11111011 - sta $d01d + lda $d01d + and #%11111011 .else - lda SchmalFlag - cmp #'*' - beq @q40 - lda $d01d - ora #%100 - sta $d01d + lda SchmalFlag + cmp #'*' + beq @q40 + lda $d01d + ora #%100 .endif @qend: + sta $d01d .endif jsr DoneWithIO rts @@ -3372,23 +3373,27 @@ OpenFile: bcs @18 lda graphMode eor #$80 +@04b: sta graphMode jsr SetNewMode + + ; clear screen (for legacy modes) + lda #2 + jsr SetPattern + jsr i_Rectangle + .byte 0,199 + .word 0,319|DOUBLE_W|ADD1_W jmp @04 @16b: cmp #19 ; force col40 bne @16c lda #0 - sta graphMode - jsr SetNewMode - jmp @04 + bra @04b @16c: cmp #20 ; force col80 bne @16d lda #$80 - sta graphMode - jsr SetNewMode - jmp @04 + bra @04b @16d: cpx #21 ; force col40 or col80 (one of the compatibility modes) From df5956d5d1ac24dd3b5b597971e4723358124401 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 9 Jul 2021 20:50:45 +0200 Subject: [PATCH 081/125] Enabled desk accessory loading using of back ram instead of swap file. Fixed graph mode operation for compatibility modes in TopDesk. --- kernal/load/deskacc.s | 56 +++++++++++++++++++++++++++------- topdesk/Include/SubDir.src.inc | 4 +-- topdesk/Main/DeskTop.main.s | 33 +++++++++++--------- 3 files changed, 66 insertions(+), 27 deletions(-) diff --git a/kernal/load/deskacc.s b/kernal/load/deskacc.s index cd5ae41c..83fda00b 100644 --- a/kernal/load/deskacc.s +++ b/kernal/load/deskacc.s @@ -9,6 +9,7 @@ .include "config.inc" .include "kernal.inc" .include "c64.inc" +.include "jumptab.inc" .import Dialog_2 .import _MNLP @@ -19,19 +20,10 @@ .import DlgBoxPrep .import GetStartHAddr -.import MoveBData -.import UseSystemFont -.import ReadFile -.import GetFHdrInfo - .ifdef mega65 .import CheckAppCompat .endif -.ifndef bsw128 -.import FastDelFile -.import GetFile -.endif .import A885D .ifdef wheels @@ -126,6 +118,12 @@ tmp3: .byte 0 jsr CheckAppCompat bne LDAcc1 .endif +.ifdef mega65 + PushW r1 + jsr SaveSwapFile + PopW r1 + bnex LDAcc1 +.else .ifdef useRamExp ; swap to other bank PushW r1 @@ -147,6 +145,7 @@ tmp3: .byte 0 jsr SaveSwapFile PopW r1 bnex LDAcc1 +.endif .endif jsr GetStartHAddr lda #$ff @@ -193,7 +192,7 @@ _RstrAppl: PushW DeskAccPC rts .else -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ; restore from back RAM ldy #0 sty r3L @@ -255,7 +254,7 @@ SwapFileName: .segment "deskacc3" -.if (!.defined(wheels)) && (!.defined(useRamExp)) && (!.defined(bsw128)) +.if (!.defined(wheels)) && (!.defined(useRamExp)) && (!.defined(bsw128)) && (!.defined(mega65)) SaveSwapFile: LoadB fileHeader+O_GHGEOS_TYPE, TEMPORARY LoadW fileHeader, SwapFileName @@ -263,6 +262,41 @@ SaveSwapFile: LoadB r10L, NULL ;.assert * = _SaveFile, error, "Code must run into _SaveFile" +.elseif .def(mega65) +;.import MoveBData +SaveSwapFile: + lda fileHeader+O_GHST_ADDR + sta r0L + sta dAccStart + lda fileHeader+O_GHST_ADDR+1 + sta r0H + sta dAccStart+1 + ldx #$0B + lda fileHeader+O_GHEND_ADDR + sec + sbc r0L + sta r2L + sta dAccLength + lda fileHeader+O_GHEND_ADDR+1 + sbc r0H + sta r2H + sta dAccLength+1 + cmp #$60 ; maximum DACC size to swap into RAM + bcs @1 + ldy #$00 + sty r3H + sty r1L + iny + sty r3L + lda #$20 ; DACC space start highbyte + sta r1H + jsr MoveBData + ldx #0 +@1: rts + +dAccStart: .word 0 +dAccLength: .word 0 + .elseif .def(bsw128) .import MoveBData SaveSwapFile: diff --git a/topdesk/Include/SubDir.src.inc b/topdesk/Include/SubDir.src.inc index afb581e8..60abca68 100644 --- a/topdesk/Include/SubDir.src.inc +++ b/topdesk/Include/SubDir.src.inc @@ -1116,7 +1116,7 @@ TestGraphMode: bne @05 ldx #15 rts -@05: cmp #$40 +@05: cmp #$40 ; 40 or 80 col, not extended beq @10 ; lda $d505 ; bmi @05a ; 40/80-Zeichentaste gedr}ckt? @@ -1133,7 +1133,7 @@ TestGraphMode: rts @06a: ldx #INCOMPATIBLE rts -@07: cmp #$c0 +@07: cmp #$c0 ; 80 col only bne @10 ; force col80 lda graphMode diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 66b4f4b6..dfb09f2b 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -3370,7 +3370,9 @@ OpenFile: bne @16b jsr StashMain jsr TestTopDesk - bcs @18 + bcc @18b + jmp @18 +@18b: lda graphMode eor #$80 @04b: @@ -3387,30 +3389,33 @@ OpenFile: @16b: cmp #19 ; force col40 bne @16c +@16b2: lda #0 - bra @04b - + ldx graphMode + cpx #$40 + bne @04b +@04b2: + sta graphMode + jsr SetNewMode + jmp @04 + @16c: cmp #20 ; force col80 bne @16d +@16c2: lda #$80 - bra @04b - + ldx graphMode + cpx #$41 + bne @04b + bra @04b2 @16d: cpx #21 ; force col40 or col80 (one of the compatibility modes) bne @16 lda graphMode cmp #$40 - bne @16e - lda #$00 -@16f: - sta graphMode - jsr SetNewMode - jmp @04 + beq @16b2 @16e: - lda #$80 - bra @16f - + bra @16c2 @16: cpx #15 bne @17 From d29b2e5150305435126d0b0056b9b077cf093881 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 10 Jul 2021 16:30:26 +0200 Subject: [PATCH 082/125] Fixed menu and dialog recovery for configure app. --- configure/r1.s | 72 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/configure/r1.s b/configure/r1.s index 9cf587d3..e9998441 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -2339,7 +2339,10 @@ L2060: lda #$FF ; 2060 A9 FF L2062: sta r4H ; 2062 85 0B .. jsr L20BA ; 2064 20 BA 20 . .endif -L2067: ldx r2H ; 2067 A6 07 .. + LoadB r6H, %11111000 +L2067: ldy r2H ; 2067 A6 07 .. + ldx r6H + PushB r6H jsr GetScanLine ; 2069 20 3C C1 <. lda r2L ; 206C A5 06 .. asl ; 206E 0A . @@ -2369,7 +2372,13 @@ L208D: clc ; 208D 18 L2094: tay ; 2094 A8 . dec r4L ; 2095 C6 0A .. bne L207A ; 2097 D0 E1 .. + PopB r6H + inc r6H + lda r6H + bne @10 + LoadB r6H, %11111000 inc r2H ; 2099 E6 07 .. +@10: dec r3H ; 209B C6 09 .. bne L2067 ; 209D D0 C8 .. rts ; 209F 60 ` @@ -2763,6 +2772,55 @@ L233C: lda vdcdata ; 233C AD 01 D6 .endif ; ---------------------------------------------------------------------------- +.ifdef mega65 + ; extended modes standard dialog coordinates are +dlgCooridnates: + ByteCY %101100000000 | ((-96) & $FF), %101100000000 | ((-48) & $FF) + ByteCY %101100000000 | ((95) & $FF), %101100000000 | ((47) & $FF) + WordCX %101100000000 | ((-96) & $FF), %101100000000 | ((-48) & $FF) + WordCX %101100000000 | ((95) & $FF), %101100000000 | ((47) & $FF) +L2340: + PushW r2 + PushW r3 + + ldy #$07 ; 2344 A0 07 .. +L2346: lda L235C,y ; 2346 B9 5C 23 .\# + sta L236C,y ; 2349 99 6C 23 .l# + dey ; 234C 88 . + bpl L2346 ; 234D 10 F7 + + ; + MoveW dlgCooridnates+2, r3 + MoveB dlgCooridnates, r2L + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY + + lda r3H + lsr + ror r2L + lsr + ror r2L + lsr + ror r2L + lda r2L + sta L236C+1 + + lda r3L + asr r3H + ror + asr r3H + ror + asr r3H + ror + sta L236C + + PopW r3 + PopW r2 + rts +.else + L2340: bit graphMode ; 2340 24 3F $? bmi L2350 ; 2342 30 0C 0. ldy #$07 ; 2344 A0 07 .. @@ -2779,12 +2837,16 @@ L2352: lda L2364,y ; 2352 B9 64 23 dey ; 2358 88 . bpl L2352 ; 2359 10 F7 .. rts ; 235B 60 ` +.endif ; ---------------------------------------------------------------------------- -L235C: php ; 235C 08 . - jsr L6819 ; 235D 20 19 68 .h - brk ; 2360 00 . - asl $2C0E ; 2361 0E 0E 2C .., +L235C: ;php ; 235C 08 . + ;jsr L6819 ; 235D 20 19 68 .h + ;brk ; 2360 00 . + ;asl $2C0E ; 2361 0E 0E 2C .., + .byte $08, $20, $19, $68 + .byte $00, $01, $0E, $2C+6 + L2364: ;bpl L2386 ; 2364 10 20 . .byte $10, $20, $32 ; 2366 32 2 pla ; 2367 68 h From f5a42587324f45f74c400e9395410e9a9d09ed50 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 17 Oct 2021 21:36:34 +0200 Subject: [PATCH 083/125] cbmfiles file location changed to https. --- Makefile | 64 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index 1c3efdf1..49feed6e 100755 --- a/Makefile +++ b/Makefile @@ -350,100 +350,100 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg fi; prmgr128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/PRMGR128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/PRMGR128.CVT pdmgr128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/PDMGR128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/PDMGR128.CVT calc128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/CALC128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/CALC128.CVT spell128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/SPELL128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/SPELL128.CVT spelldata.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/DICT.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/DICT.CVT merge128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/GM128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/GM128.CVT alarm128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/ALARM128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/ALARM128.CVT california.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/CALIF.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/CALIF.CVT cory.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/CORY.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/CORY.CVT dwinelle.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/DWIN.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/DWIN.CVT roma.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/ROMA.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/ROMA.CVT university.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/UNIV.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/UNIV.CVT commfont.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/COMMFONT.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/COMMFONT.CVT lwroma.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/LWROMA.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWROMA.CVT lwcal.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/LWCAL.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWCAL.CVT lwgreek.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/LWGREEK.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWGREEK.CVT lwbarrows.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/LWBARR.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWBARR.CVT notepad.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/NOTE128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/NOTE128.CVT photo_mgr.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/PHMGR128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/PHMGR128.CVT text_mgr.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TXMGR128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TXMGR128.CVT gw128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/GW128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/GW128.CVT gpt128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/GPT128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/GPT128.CVT paint_drivers.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/PNTDRVRS.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/PNTDRVRS.CVT geolaser.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/GEOLASER.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/GEOLASER.CVT text_grabber128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TG128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TG128.CVT tgfs4128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TGFS4128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGFS4128.CVT tgpc2128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TGPC2128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGPC2128.CVT tgww128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TGWW128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGWW128.CVT tgg1128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TGG1128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGG1128.CVT tgg2128.cvt: - curl --output $@ http://cbmfiles.com/geos/geosfiles/TGG2128.CVT + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGG2128.CVT dt128.cvt: - curl --output $(BUILD_DIR)/G1281581.ZIP http://cbmfiles.com/geos/geosfiles/G1281581.ZIP + curl --output $(BUILD_DIR)/G1281581.ZIP https://cbmfiles.com/geos/geosfiles/G1281581.ZIP unzip $(BUILD_DIR)/G1281581.ZIP echo geosread \"128 DESKTOP\" dt128.cvt | $(C1541) GEOS128.D81 >/dev/null; %.CVT: - curl --output $@ http://cbmfiles.com/geos/geosfiles/$@ + curl --output $@ https://cbmfiles.com/geos/geosfiles/$@ ifdef XCV 1526.CVT From 819fd4a1660e96d4dd634bc7e4688ba0f2fe1864 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 17:31:35 +0100 Subject: [PATCH 084/125] Basic implementation of mount utility done. --- mount/main.s | 357 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 339 insertions(+), 18 deletions(-) diff --git a/mount/main.s b/mount/main.s index ea0ca2a8..4af0e3fe 100644 --- a/mount/main.s +++ b/mount/main.s @@ -6,6 +6,7 @@ .export __STARTUP_RUN__ +.export EndOfCode .segment "STARTUP" @@ -23,7 +24,8 @@ DirEntry: .endrep __STARTUP_RUN__: - + LoadW r0, EndOfCode + lda firstBoot cmp #$FF beq @1b @@ -99,14 +101,14 @@ __STARTUP_RUN__: serialText: - .byte "$XXXX", NULL + .byte BOLDON, "No mountable drive configured.", NULL NoDriveDialog: .byte $81 ; standard dialog, light bachground .byte OK - .byte 17, 42 + .byte 17, 70 - .byte DBTXTSTR, 10,10 + .byte DBTXTSTR, 10,20 .word serialText .byte NULL @@ -125,11 +127,11 @@ SelectDialog: .byte CANCEL .byte 17, 76 - .byte DBTXTSTR, 17*8-5,11 - .word driveText + ;.byte DBTXTSTR, 17*8-5,11 + ;.word driveText - .byte DBTXTSTR, 17*8-5,21 - .word imageName + ;.byte DBTXTSTR, 17*8-5,21 + ;.word imageName ;.byte DBUSRICON,26,26 ;.word @icon4 @@ -241,7 +243,11 @@ DialogMouse: MoveW r3, r4 AddVW 124, r4 - + lda graphMode + cmp #$41 + bne @100 + AddVW 124, r4 +@100: clc lda r2L adc #88 @@ -265,11 +271,21 @@ DialogMouse: clc adc #73 sta r2L - + bcc @600 + clc + lda r3H + adc #16 + sta r3H +@600: ; check up AddVW 73, r3 SubVW 16, r4 - + lda graphMode + cmp #$41 + bne @200 + AddVW 73, r3 + SubVW 16, r4 +@200: jsr IsMseInRegion cmp #$FF bne @3 @@ -296,6 +312,12 @@ DialogMouse: @3: AddVW 16, r3 AddVW 16, r4 + lda graphMode + cmp #$41 + bne @201 + AddVW 16, r3 + AddVW 16, r4 +@201: jsr IsMseInRegion cmp #$FF bne @4 @@ -329,10 +351,21 @@ DialogMouse: MoveW r3, r4 AddVW 122, r4 + lda graphMode + cmp #$41 + bne @300 + AddVW 124, r4 +@300: clc lda r2L adc #11 sta r2H + bcc @500 + clc + lda #16 + adc r4H + sta r4H +@500: @loop: jsr IsMseInRegion @@ -359,11 +392,22 @@ DialogMouse: lda r2L adc #12 sta r2L + bcc @401 + clc + lda r3H + adc #16 + sta r3H +@401: clc lda r2H adc #12 sta r2H - + bcc @402 + clc + lda r4H + adc #16 + sta r4H +@402: inc r13L dec r5L bne @loop @@ -393,14 +437,78 @@ DrawDialog: jsr ReadDir bcs @end @ok: + MoveB entryCount, r13L + jsr GetEntryString + + ldy #0 +@nextLen: + lda (r0), y + beq @len + iny + bra @nextLen +@len: + cpy #4 + bcc @next + + dey + lda (r0), y + cmp #'1' + bne @next + dey + lda (r0), y + cmp #'8' + bne @next + dey + lda (r0), y + cmp #'D' + beq @good + cmp #'d' + bne @next +@good: + dey + lda (r0), y + cmp #'.' + bne @next + AddVW 64, r1 AddVW 4, r2 - + inc entryCount lda entryCount cmp #192 bne @next @end: + jsr SortImageList + + MoveW SelectionX, r11 + MoveB SelectionY, r1H + + ldx #r11 + jsr NormalizeX + ldy #r1H + jsr NormalizeY + + AddVW 130, r11 + lda graphMode + cmp #$41 + bne @101 + AddVW 130, r11 + +@101: + AddVB 6, r1H + bcc @11 + AddVB 16, r11H +@11: + LoadW r0, driveText + PushW r11 + jsr PutString + PopW r11 + AddVB 10, r1H + bcc @12 + AddVB 16, r11H +@12: + LoadW r0, imageName + jsr PutString LoadB selectedEntry, 0 MoveW SelectionX, r3 @@ -417,6 +525,84 @@ DrawDialog: rts +SortImageList: + LoadB a0L, 0 + +@loop: + LoadB a1L, 0 +@loop2: + MoveB a0L, r13L + jsr GetEntryString + MoveW r0, r5 + + MoveB a1L, r13L + jsr GetEntryString + MoveW r0, r6 + + ldx #r5 + ldy #r6 + jsr CmpString + + bcs @keep + + ; swap + MoveB a0L, a2L + LoadB a2H, 0 + + ; by 64 + clc + ldx #6 + beq @10 +@11: + rol a2L + rol a2H + dex + bne @11 +@10: + AddVW $2000, a2 + + MoveB a1L, a3L + LoadB a3H, 0 + + ; by 64 + clc + ldx #6 + beq @20 +@21: + rol a3L + rol a3H + dex + bne @21 +@20: + AddVW $2000, a3 + + ldy #0 +@swap1: + lda (a2), y + tax + lda (a3), y + sta (a2), y + txa + sta (a3), y + iny + cpy #64 + bne @swap1 + +@keep: + inc a1L + lda a1L + cmp entryCount + beq @_loop2 + jmp @loop2 +@_loop2: + inc a0L + lda a0L + cmp entryCount + beq @_loop + jmp @loop +@_loop: + rts + GetEntryString: MoveB r13L, r0L LoadB r0H, 0 @@ -441,6 +627,11 @@ testName: DrawSelectionBox: MoveW r3, r4 AddVW 124, r4 + lda graphMode + cmp #$41 + bne @100 + AddVW 124, r4 +@100: clc lda r2L @@ -455,6 +646,7 @@ DrawSelectionBox: lda #$FF jsr FrameRectangle + PushW r2 PushW r3 PushW r4 @@ -470,9 +662,70 @@ DrawSelectionBox: adc #16 sta r3H @20: + PushW r2 + PushW r3 + PushW r4 + PushB r11L + + MoveB r11L, r2L + + AddVW (124-32), r3 + SubVW 16, r4 + lda graphMode + cmp #$41 + bne @101 + AddVW (124-32), r3 + SubVW 16, r4 +@101: + + lda #$FF + jsr FrameRectangle + + MoveB r2, r11L + AddVW 4, r3 + lda graphMode + cmp #$41 + bne @202 + AddVW 4, r3 +@202: + AddVB 10, r11L + bcc @21 + AddVB 16, r3H +@21: + LoadB r0L, $FF + PushW r3 + PushB r11L + jsr DrawArrow + PopB r11L + PopW r3 + + AddVW 16, r3 + lda graphMode + cmp #$41 + bne @203 + AddVW 16, r3 +@203: + sec + lda r11L + sbc #3 + sta r11L + bcs @22 + sec + lda r3H + sbc #16 + sta r3H +@22: + LoadB r0L, 0 + jsr DrawArrow + + PopB r11L + PopW r4 + PopW r3 + PopW r2 + lda #%11111111 jsr HorizontalLine - +.if 0 sta r3L lda r11L clc @@ -486,17 +739,22 @@ DrawSelectionBox: SubVW 16, r4 lda #%11111111 jsr VerticalLine - +.endif PopW r4 PopW r3 PopW r2 -.if 0 +.if 1 inc r2L IncW r3 MoveW r3, r4 AddVW 122, r4 + lda graphMode + cmp #$41 + bne @107 + AddVW 124, r4 +@107: clc lda r2L adc #11 @@ -520,10 +778,22 @@ DrawSelectionBox: lda r2L adc #12 sta r2L + bcc @400 + clc + lda r3H + adc #16 + sta r3H +@400: clc lda r2H adc #12 sta r2H + bcc @401 + clc + lda r4H + adc #16 + sta r4H +@401: inc r13L dec r5L @@ -558,6 +828,12 @@ OutputLine: clc adc #8 sta r1H + bcc @20 + clc + lda r11H + adc #16 + sta r11H +@20: jsr GetEntryString jsr PutString @@ -568,6 +844,48 @@ OutputLine: PopB currentMode rts +DrawArrow: + LoadB r2H, 4 + + MoveW r3, r4 + AddVW 7, r4 + lda graphMode + cmp #$41 + bne @100 + AddVW 7, r4 +@100: +@20: + lda #%11111111 + jsr HorizontalLine + + IncW r3 + DecW r4 + lda graphMode + cmp #$41 + bne @101 + DecW r4 + IncW r3 +@101: + lda r0L + bne @11 + inc r11L + bne @10 + AddVB 16, r3H +@10: + bra @21 +@11: + lda r11L + bne @22 + sec + lda r3H + sbc #16 + sta r3H +@22: + dec r11L +@21: + dec r2H + bne @20 + rts fileDesc: .byte 0 entryCount: @@ -766,8 +1084,8 @@ IsMountableDrive: lda driveType-8,x cmp #DRV_SD_81 beq @yes - cmp #DRV_SD_71 - beq @yes + ;cmp #DRV_SD_71 + ;beq @yes clc rts @yes: @@ -844,3 +1162,6 @@ IconC: .incbin "mount/IconC.map" IconD: .incbin "mount/IconD.map" + +EndOfCode: + .byte 0 From 5952fd32358abe680ee40ff837c5008340beef06 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 17:32:49 +0100 Subject: [PATCH 085/125] MEGA65 compatible version of the 1351 emulation mouse driver added to the system. --- input/mega1351.cfg | 7 + input/mega1351.grc | 8 + input/mega1351.s | 417 +++++++++++++++++++++++++++++++++++++++++ input/mega1351Icon.cfg | 7 + input/mega1351Icon.s | 24 +++ input/mega1351_cvt.cfg | 11 ++ 6 files changed, 474 insertions(+) create mode 100644 input/mega1351.cfg create mode 100644 input/mega1351.grc create mode 100644 input/mega1351.s create mode 100644 input/mega1351Icon.cfg create mode 100644 input/mega1351Icon.s create mode 100644 input/mega1351_cvt.cfg diff --git a/input/mega1351.cfg b/input/mega1351.cfg new file mode 100644 index 00000000..aab7651a --- /dev/null +++ b/input/mega1351.cfg @@ -0,0 +1,7 @@ +MEMORY { + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + mega1351: load = MOUSE_BASE, type = ro; +} diff --git a/input/mega1351.grc b/input/mega1351.grc new file mode 100644 index 00000000..65f2e658 --- /dev/null +++ b/input/mega1351.grc @@ -0,0 +1,8 @@ +HEADER APPLICATION "MEGA 1351" "Input Drvr" "V6.0" { + author "Falk Rehwagen" + dostype USR + structure SEQ + info "Input driver for the Commodore 1351 proportional mouse on MEGA65." + date 20 03 03 21 47 + icon "build/mega65/input/mega1351.bf" +} diff --git a/input/mega1351.s b/input/mega1351.s new file mode 100644 index 00000000..f00fe2d6 --- /dev/null +++ b/input/mega1351.s @@ -0,0 +1,417 @@ +; GEOS by Berkeley Softworks +; reverse engineered by Maciej Witkowiak, Michael Steil +; +; Commodore 1531 mouse input driver + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "c64.inc" + +.export __VLIR0_START__ +.export __STARTUP_RUN__ + +.segment "mega1351" +__STARTUP_RUN__: +__VLIR0_START__: + +MouseInit: + jmp _MouseInit +SlowMouse: + jmp _SlowMouse +UpdateMouse: + jmp _UpdateMouse +SetMouse: + +;tmpFire: +; .byte 0 +;mseX: +; .byte 0 +;mseY: +; .byte 0 + +buttonLeft = $10 +buttonRight = $01 + +SID = $D400 ; SID REGISTERS +SID_ADConv1 = SID + $19 +SID_ADConv2 = SID + $1A + +CIA1_DDRA = $DC02 +CIA1_DDRB = $DC03 +CIA1_PRB = $DC01 + +DirectionTemp = r4H +XPosNew = r5 +YPosNew = r6 +XPosPending = r7 +YPosPending = r8 +XDirection = r9L +YDirection = r9H +OldPotX = r10L ; Old hw counter values +OldPotY = r10H +Buttons = r11L ; button status bits +ButtonsOld = r11H +;ButtonLClick = r12L +;ButtonRClick = r12H + +VarBuffer: .repeat 15 + .byte 0 + .endrep + + +;mouseCheck: .byte $00 + +_MouseInit: + lda #8 + sta mouseXPos + sta mouseYPos + lda #0 + sta mouseXPos+1 +_SlowMouse: + rts + +_UpdateMouse: + jsr UM_END + + bbsf MOUSEON_BIT, mouseOn, UM_1 + jmp UM_END + +UM_1: + MoveW mouseXPos, XPosNew + MoveB mouseYPos, YPosNew + MoveB r3H, YPosNew+1 + + PushB CPU_DATA + LoadB CPU_DATA, IO_IN + PushW cia1base+2 + PushB cia1base+0 + +; Record the state of the buttons. +; Avoid crosstalk between the keyboard and the mouse. + LDY #%00000000 ;Set ports A and B to input + STY CIA1_DDRB + STY CIA1_DDRA ;Keyboard won't look like mouse + LDA CIA1_PRB ;Read Control-Port 1 + ;DEC CIA1_DDRA ;Set port A back to output + ;STA Buttons + ;EOR #%11111111 ;Bit goes up when button goes down + ;BEQ @L0 ;(bze) + ;DEC CIA1_DDRB ;Mouse won't look like keyboard + ;STY CIA1_PRB ;Set "all keys pushed" + +@L0: + JSR ButtonCheck + + LDA SID_ADConv1 ;Get mouse X movement + ;LDY flgMse1351 + ;BEQ @full_x + + AND #$7E + +@full_x: + LDY OldPotX + JSR MoveCheck ;Calculate movement vector + STY OldPotX + +; Skip processing if nothing has changed + BCC @SkipX + +; Calculate the new X coordinate (--> a/y) + ASL + PHA + TXA + ROL + TAX + PLA + + CLC + ADC XPosNew + + TAY ;Remember low byte + TXA + ADC XPosNew+1 + +; Limit the X coordinate to the bounding box + + ;CPY #0 + ;SBC #0 + BPL @L1 + ;LDA #0 + ;TAY + ;BRA @L2 +@L1: + ;TXA + + ;CPY screenMaxX + ;SBC screenMaxX+1 + ;BMI @L2 + ;LDY screenMaxX + ;LDX screenMaxX+1 +@L2: + STY XPosNew + STA XPosNew+1 + jsr historesisCheck + +; Move the mouse pointer to the new X pos + + TYA + ;JSR CMOVEX + + ;LDA mouseCheck + ;BNE @SkipX + + ;LDA #$01 + ;STA mouseCheck + +; Calculate the Y movement vector + +@SkipX: + LDA SID_ADConv2 ;Get mouse Y movement + ;LDY flgMse1351 + ;BEQ @full_y + + AND #$7E + +@full_y: + LDY OldPotY + JSR MoveCheck ;Calculate movement + STY OldPotY + +; Skip processing if nothing has changed + + BCC @SkipY + +; Calculate the new Y coordinate (--> a/y) + + ASL + PHA + TXA + ROL + TAX + PLA + + STA r1L + LDA YPosNew + SEC + SBC r1L + + TAY + STX r1L + LDA YPosNew+1 + SBC r1L + ;TAX + +; Limit the Y coordinate to the bounding box + + ;CPY #0 + ;SBC #0 + BPL @L3 + LDA #0 + TAY + ;BRA @L4 +@L3: + ;TXA + + ;CPY screenMaxY + ;SBC screenMaxY+1 + ;BMI @L4 + ;LDY screenMaxY + ;LDX screenMaxY+1 +@L4: + STY YPosNew + STA YPosNew+1 + + jsr historesisCheck + +; Move the mouse pointer to the new Y pos + + TYA + ;JSR CMOVEY + + ;LDA mouseCheck + ;BNE @SkipY + + ;LDA #$01 + ;STA mouseCheck + +; Done + +@SkipY: + PopB cia1base + PopW cia1base+2 + PopB CPU_DATA + +UM_END: + ldx #15 +@10: + lda VarBuffer,x + tay + lda r4H,x + sta VarBuffer, x + tya + sta r4H,x + dex + bne @10 + + rts + +historesisCheck: + ;; Dont actually update mouse unless it has moved more than 1 px in the same direction + + lda XPosNew + cmp XPosPending + bne @XChanged + lda XPosNew+1 + cmp XPosPending+1 + beq @updatedXDirection +@XChanged: + ;; Get sign of difference between XPos and XPosNew + lda XPosNew + sta XPosPending + lda XPosNew+1 + sta XPosPending+1 + + lda XPosNew + sec + sbc XPosPending + lda XPosNew+1 + sbc XPosPending+1 + + ;; Is the direction different to last time? + and #$80 + sta DirectionTemp + eor XDirection + bne @UpdateXDirection + ;; Direction same, so update X position + lda mouseXPos+1 + and #$F0 + ora XPosNew+1 + sta mouseXPos+1 + lda XPosNew + sta mouseXPos + bra @updatedXDirection +@UpdateXDirection: + ;; Don't update X, but do update the direction of last movement + lda DirectionTemp + sta XDirection +@updatedXDirection: + + lda YPosNew + cmp YPosPending + bne @YChanged + lda YPosNew+1 + cmp YPosPending+1 + beq @updatedYDirection +@YChanged: + + ;; Get sign of difference between YPos and YPosNew + lda YPosNew + sta YPosPending + lda YPosNew+1 + sta YPosPending+1 + + lda YPosNew + sec + sbc YPosPending + lda YPosNew+1 + sbc YPosPending+1 + + ;; Is the direction different to last time? + and #$80 + sta DirectionTemp + eor YDirection + bne @UpdateYDirection + ;; Direction same, so update Y position + lda YPosNew+1 + sta r3H + lda YPosNew + sta mouseYPos + bra @updatedYDirection +@UpdateYDirection: + ;; Don't update Y, but do update the direction of last movement + lda DirectionTemp + sta YDirection +@updatedYDirection: + + rts + +;------------------------------------------------------------------------------- +ButtonCheck: +;------------------------------------------------------------------------------- + ;LDA Buttons + and #$10 + CMP ButtonsOld + BEQ @done + STA ButtonsOld + asl + asl + asl + sta mouseData + + ; left button state changed + smbf MOUSE_BIT, pressFlag + +.if 0 + AND #buttonLeft + BNE @testRight + + LDA ButtonsOld + AND #buttonLeft + BEQ @testRight + + LDA #$01 + STA ButtonLClick +.endif + +@testRight: +.if 0 + AND #buttonRight + BNE @done + + LDA ButtonsOld + AND #buttonRight + BEQ @done + + LDA #$01 + STA ButtonRClick +.endif + +@done: + RTS + +;------------------------------------------------------------------------------- +MoveCheck: +; Move check routine, called for both coordinates. +; +; Entry: y = old value of pot register +; a = current value of pot register +; Exit: y = value to use for old value +; x/a = delta value for position +;------------------------------------------------------------------------------- + STY r0L + STA r0H + LDX #$00 + + SEC ; a = mod64 (new - old) + SBC r0L + + cmp #$3f + bcs @notPositiveMovement + LDY r0H + LDX #0 + SEC + RTS +@notPositiveMovement: + cmp #$c0 + bcc @notNegativeMovement + LDY r0H + ldx #$ff + SEC + RTS + +@notNegativeMovement: + ldy r0H + TXA ; A = $00 + CLC + RTS diff --git a/input/mega1351Icon.cfg b/input/mega1351Icon.cfg new file mode 100644 index 00000000..dd0dc92a --- /dev/null +++ b/input/mega1351Icon.cfg @@ -0,0 +1,7 @@ +MEMORY { + VARS: start = $1000, size = $0600; +} + +SEGMENTS { + ICON: load = VARS, type = ro; +} \ No newline at end of file diff --git a/input/mega1351Icon.s b/input/mega1351Icon.s new file mode 100644 index 00000000..c8f55e01 --- /dev/null +++ b/input/mega1351Icon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte $FF, $FF, $FF ;%11111111, %11111111, %11111111 +.byte $80, $00, $01 ;%10000000, %00000000, %00000001 +.byte $C0, $CF, $F1 ;%10000000, %01111110, %00000001 +.byte $A3, $30, $09 ;%10000001, %10011001, %10000001 +.byte $9C, $01, $85 ;%10000011, %00000001, %01000001 +.byte $80, $62, $45 ;%10000111, %10011000, %01100001 +.byte $80, $9C, $25 ;%10001000, %01011000, %00010001 +.byte $81, $6C, $25 ;%10001000, %00111000, %00010001 +.byte $82, $E4, $19 ;%10001100, %00011000, %00110001 +.byte $84, $DA, $01 ;%10001000, %00001000, %00010001 +.byte $88, $3A, $01 ;%10000110, %00000000, %01100001 +.byte $90, $36, $01 ;%10000010, %10000001, %01000001 +.byte $A0, $0C, $F9 ;%10000001, %10011001, %10000001 +.byte $A0, $18, $85 ;%10000000, %01111110, %00000001 +.byte $B0, $30, $85 ;%10000000, %00000000, %00000001 +.byte $98, $60, $F9 ;%10000000, %00000000, %00000001 +.byte $8C, $C0, $81 ;%10111111, %11110000, %11000001 +.byte $87, $80, $81 ;%10001111, %11000011, %11110001 +.byte $83, $00, $81 ;%10000011, %00001111, %11111101 +.byte $80, $00, $01 ;%10000000, %00000000, %00000001 +.byte $FF, $FF, $FF ;%11111111, %11111111, %11111111 \ No newline at end of file diff --git a/input/mega1351_cvt.cfg b/input/mega1351_cvt.cfg new file mode 100644 index 00000000..c7a043c6 --- /dev/null +++ b/input/mega1351_cvt.cfg @@ -0,0 +1,11 @@ +MEMORY { + CVT: file = %O, start = $0, size = $40000; + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + + mega1351: run = MOUSE_BASE, type = ro, load = CVT, align_load = $FE, define = yes; +} From 31b5f28f8ecd8632b43208995e21f6bd80a54640 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 17:37:56 +0100 Subject: [PATCH 086/125] Add DecW macro. --- inc/geosmac.inc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/inc/geosmac.inc b/inc/geosmac.inc index 8f163f32..238f1b7d 100644 --- a/inc/geosmac.inc +++ b/inc/geosmac.inc @@ -348,6 +348,15 @@ @j: .endmacro +.macro DecW addr + .local @j + dec addr + lda addr + cmp #$ff + bne @j + dec addr+1 + @j: +.endmacro .macro ASSERT_NOT_BELOW_IO .assert * < $D000 || * >= $E000, error, "This code can't run below the C64 I/O area." From 5dbcb0f0135f90179fdcd83064a04212d151c4ef Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 17:40:50 +0100 Subject: [PATCH 087/125] TopDesk fixed disc validation, removed DecW macro now defined more centrally. --- topdesk/DeskInclude/Validate+Undelet.inc | 11 ++++++++++- topdesk/Include/Symbol/CiMac.inc | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/topdesk/DeskInclude/Validate+Undelet.inc b/topdesk/DeskInclude/Validate+Undelet.inc index 99b859aa..51090313 100644 --- a/topdesk/DeskInclude/Validate+Undelet.inc +++ b/topdesk/DeskInclude/Validate+Undelet.inc @@ -163,8 +163,17 @@ Validate: ; Des: a,y,r1,r4,r5-r8 ClearBAM: lda curType and #DRIVE_MASK - cmp #3 + cmp #3 ;DRV_1581 + beq @is1581 + cmp #4 ;DRV_F011_0 + beq @is1581 + cmp #5 ;DRV_F011_1 + beq @is1581 + cmp #6 ;DRV_SD_81 + beq @is1581 + cmp #8 ;DRV_F011_V bne @no1581 +@is1581: ldy #16 @3a: lda #40 sta dir2Head,y diff --git a/topdesk/Include/Symbol/CiMac.inc b/topdesk/Include/Symbol/CiMac.inc index e196a96d..7734d248 100644 --- a/topdesk/Include/Symbol/CiMac.inc +++ b/topdesk/Include/Symbol/CiMac.inc @@ -1,13 +1,13 @@ -.macro DecW addr - .local @10 - dec addr - lda addr - cmp #$ff - bne @10 - dec addr+1 -@10: -.endmacro +;.macro DecW addr +; .local @10 +; dec addr +; lda addr +; cmp #$ff +; bne @10 +; dec addr+1 +;@10: +;.endmacro ;.macro IncW addr @@ -30,7 +30,7 @@ .endmacro .macro SubSW source, dest - SubB source+0, dest+0 + SubB source+0, dest+0 lda dest+1 sbc #$00 sta dest+1 From c2909e23638052c77d47bcb6edba7aa50fff2e20 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 18:01:41 +0100 Subject: [PATCH 088/125] Fetch currently mounted image name from hypervisor. --- kernal/start/start64.s | 108 +++++++++++++++++++++++++---------------- 1 file changed, 67 insertions(+), 41 deletions(-) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index b16d8de1..ea60bd6a 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -53,7 +53,7 @@ .import SetNewMode .endif -.ifdef debugger +.ifdef debugger .global _DebugStart .endif @@ -107,7 +107,7 @@ ASSERT_NOT_BELOW_IO sta countHighMap lda #$80 sta lastHighMap - + ; draw background pattern .ifndef mega65 LoadW r0, SCREEN_BASE @@ -161,7 +161,7 @@ ASSERT_NOT_BELOW_IO bpl @6 ; jsr FirstInit - + LDA #0 STA $D05D @@ -182,7 +182,7 @@ ASSERT_NOT_BELOW_IO sta $d702 sta $d704 ; enhanced bank sty $d705 - + jsr FirstInit .endif .if 0 @@ -190,7 +190,7 @@ ASSERT_NOT_BELOW_IO STA $D640 NOP tax - ldy #>$0400 ; write dirent to DirEntry + ldy #>$0400 ; write dirent to DirEntry lda #$14 STA $D640 @@ -199,11 +199,11 @@ ASSERT_NOT_BELOW_IO .if 0 ; run a raster line cycle counter sei ; interrupts off - + ; 1 mhz - lda $d031 + lda $d031 and #%10111111 - sta $D031 + sta $D031 lda #0 ldx #0 @@ -214,8 +214,8 @@ ASSERT_NOT_BELOW_IO sta $4300, x inx bne @aaa - - + + @eee: ldx rasreg bne @eee @@ -224,12 +224,12 @@ ASSERT_NOT_BELOW_IO beq @eee1 lda $D011 - bmi @eee + bmi @eee @ccc2: ldx rasreg beq @bbb - + @ccc: ; inc inc $4000, x @@ -239,14 +239,14 @@ ASSERT_NOT_BELOW_IO inc $4200, x bne @ccc1 inc $4300, x -@ccc1: +@ccc1: ; wait for next line cpx rasreg beq @ccc - + ldx rasreg jmp @ccc2 - + @bbb: cli @@ -261,24 +261,24 @@ ASSERT_NOT_BELOW_IO sta NUMDRV ldy $BA sty curDrive - + lda #DRV_TYPE ; see config.inc -.ifdef mega65 +.ifdef mega65 ; determ proper drive type, ; from MEGA65 BASIC 10.0 coming there are following options: - ; 1.) + ; 1.) ; preconditions: - ; curDrive is one of the BASIC mapped drives, directing us to + ; curDrive is one of the BASIC mapped drives, directing us to ; F011-0 or F011-1, we don't support booting from other drives and ; could/should hard reset here? In general we assume that GEOS ; holds an disk driver that is in some way compatible to the boot drive. - + lda #C65_VIC_INIT1 sta $d02f lda #C65_VIC_INIT2 sta $d02f - + ; get MEGA65 DOS drive 0 device number ; 10113/10114 clear device numbers of the f011 drive, we will ; manage those independent of dos @@ -297,7 +297,7 @@ ASSERT_NOT_BELOW_IO lda (r0), Z cmp curDrive beq @detectDrive0 - + ; get MEGA65 DOS drive 1 device number ;LDZ #4 inz @@ -305,17 +305,17 @@ ASSERT_NOT_BELOW_IO lda ($02), Z cmp curDrive beq @detectDrive1 - + ; unclear how this has been booted ; still could try to setup drive 0 as real or sd mount - + @detectDrive0: ; is virtual enabled? - ldx #DRV_F011_V + ldx #DRV_F011_V lda $D68A bit #4 bne @detected - + ; check if real drive ldx #DRV_F011_0 ; real internal floppy lda $D6A1 @@ -324,8 +324,9 @@ ASSERT_NOT_BELOW_IO ldx #DRV_SD_81 ; setup d81 offset + LoadB r2L, 0 ; remember the drive number bra @detected - + @detectDrive1: ; potentially now drive 1 may be virtual, ; but because monitor-load does not support this @@ -337,10 +338,11 @@ ASSERT_NOT_BELOW_IO bne @detected ldx #DRV_SD_81 ; setup d81 offset + LoadB r2L, 1 ; remember the drive number bra @detected - + @detected: - ; redirect DOS device numbers of ther internal drives + ; redirect DOS device numbers of the internal drives ; so GEOS only looks at real serial drives using the DOS ;LDZ #3 jsr loadZDriveOffset @@ -353,14 +355,38 @@ ASSERT_NOT_BELOW_IO sta (r0), Z txa .endif - sta curType - sta _driveType,y - + sta curType + sta _driveType,y + cmp #DRV_SD_81 bne @detectDone + + ; get the current tasks mounted image file names via HYPPO + ; load the process descriptor to $4F00 just before the boot code + LDY #$4F + + LDA #$48 ; HYPPO_DOS_GET_PROC_DESC + STA $D640 + NOP + bcc @10 ; branch if error/unsupported + lda r2L + bne @31 ; branch if current drive is not device 0 + LoadW r0, $4F00+21 + ldy $4F00+19 + bra @30 +@31: + LoadW r0, $4F00+21+32 + ldy $4F00+20 +@30: + lda #0 + sta (r0), y + bra @20 + +@10: ; unsupported by HYPPO use default LoadW r0, imageFileName +@20: jsr SetImageFile - + @detectDone: ; on MEGA65 we check if we are able to transform ; from F011 mode to direct access SD mount @@ -368,7 +394,7 @@ ASSERT_NOT_BELOW_IO ;lda #8 ; DRV_F011_V, see config.inc ;sta curType ;sta _driveType,y - + ; This is the original code the cbmfiles version ; has at $5000. @@ -398,8 +424,8 @@ OrigResetHandle: jsr DetectRamCart .endif _DebugStart: - brk - + ;brk + jsr GetDirHead MoveB bootSec, r1H MoveB bootTr, r1L @@ -444,21 +470,21 @@ _DebugStart: LoadW EnterDeskTop+1, OrigResetHandle LoadB r0L, 0 jsr LdApplic - + loadZDriveOffset: ; ok, different ROM version have different locations of the ; device numbers map for the internal/F011 drives ; for 910110 ROM it is 010112/010113 ; for 9110XY ROM it is 010113/010114 - + ; as a simple solution for now we detect the ROM and use ; ROM < 10 to be 010112/010113, otherwise 010113/010114 ; default is 2, so for old ROM or unrecognized situations PushW r0 PushW r1 - + lda #$16 sta r0L lda #$00 @@ -478,7 +504,7 @@ loadZDriveOffset: lda (r0), z cmp #'9' bne @1 - + inz inz EOM @@ -526,7 +552,7 @@ debuggerlist: .endif imageFileName: - .byte "GEOS.D81", NULL + .byte "GEOSX.D81", NULL bootTr: .byte DIR_1581_TRACK bootSec: From 7b5c685ce9e318dfd13f94937163a4a05c92ffd2 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 18:08:01 +0100 Subject: [PATCH 089/125] Stop at start. --- kernal/start/start64.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index ea60bd6a..8cda87ed 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -424,7 +424,7 @@ OrigResetHandle: jsr DetectRamCart .endif _DebugStart: - ;brk + brk jsr GetDirHead MoveB bootSec, r1H From 908dd35ac257db2293c86f1787e87160b87cffca Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 18:23:56 +0100 Subject: [PATCH 090/125] Testing GEOS with new stable bitstream. --- kernal/start/start64.s | 1 + 1 file changed, 1 insertion(+) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 8cda87ed..62661d44 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -383,6 +383,7 @@ ASSERT_NOT_BELOW_IO bra @20 @10: ; unsupported by HYPPO use default + inc $D020 LoadW r0, imageFileName @20: jsr SetImageFile From bb6123bed1b687bf66db8c6e3335c6968f1e15f4 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 18:31:16 +0100 Subject: [PATCH 091/125] More testing hyppo. --- kernal/start/start64.s | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index 62661d44..e2c78d18 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -427,6 +427,12 @@ OrigResetHandle: _DebugStart: brk + LDY #$4F + + LDA #$48 ; HYPPO_DOS_GET_PROC_DESC + STA $D640 + NOP + jsr GetDirHead MoveB bootSec, r1H MoveB bootTr, r1L From d72171cff5aeda713dbbe979cd3f10a15556597b Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 18:55:25 +0100 Subject: [PATCH 092/125] Configure, keep mounted image name. --- configure/r0.s | 90 ++++++++++++++++++++++++++++++++++++++++++++++---- configure/r1.s | 54 +++++++++++++++++++++++++----- 2 files changed, 129 insertions(+), 15 deletions(-) diff --git a/configure/r0.s b/configure/r0.s index 1a597b6a..ed0abeda 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -7,6 +7,7 @@ .include "geossym.inc" .include "geossym2.inc" .include "geosmac.inc" +.include "diskdrv.inc" ;.cpu 6502 ;.to "r0.bin",plain @@ -70,6 +71,9 @@ L6216 = $6216; .import V20D9 .import V2102 .import V2103 +.import VarImageFileName +.import VarImageFileNames +.import VarImageDriveType .import V2104 .import V2105 .import V2106 @@ -123,6 +127,18 @@ L0418: bit c128Flag ; 0418 2C 13 C0 tay ; 0423 A8 . lda $8486,y ; 0424 B9 86 84 ... sta V2105 ; 0427 8D 05 21 ..! + + ; remember mounted image file, to resort + cmp #DRV_SD_81 + bne @10 + + ; fetch image name + jsr GetImageFile + LoadW r1, VarImageFileName + ldx #r0 + ldy #r1 + jsr CopyString +@10: jsr L0FB3 ; 042A 20 B3 0F .. jsr i_MoveData ; 042D 20 B7 C1 .. .word $5000 @@ -137,8 +153,20 @@ L0418: bit c128Flag ; 0418 2C 13 C0 jsr L0558 ; 043B 20 58 05 X. L043E: lda V2104 ; 043E AD 04 21 ..! jsr InitDrive ; 0441 20 3E 07 >. - jsr L1081 ; 0444 20 81 10 .. + + jsr L1081 ; 0444 20 81 10 .. jsr L0FA0 ; 0447 20 A0 0F .. + + lda firstBoot + cmp #$FF + beq @10 + lda V2105 + cmp #DRV_SD_81 + bne @10 + LoadW r0, VarImageFileName + jsr SetImageFile +@10: + .ifndef config128 ; for config64 if no RAM exp is available, only ; multiple drives are supported if they are of the same type @@ -315,6 +343,7 @@ L0563: and #$A0 ; 0563 29 A0 sta sysRAMFlg ; 0565 8D C4 88 ... sta sysFlgCopy ; 0568 8D 12 C0 ... .if 1 + ; check boot driver to be 1541 or 1571 lda V2105 ; 056B AD 05 21 ..! cmp #$02 ; 056E C9 02 .. bcs L057B ; 0570 B0 09 .. @@ -326,6 +355,8 @@ L0563: and #$A0 ; 0563 29 A0 bne L057B ; 0577 D0 02 .. lda #$01 ; 0579 A9 01 .. L057B: + ;ldx V2104 + ;sta V2106-8,x sta V2106 ; 057B 8D 06 21 ..! .endif .if 1 @@ -358,9 +389,9 @@ L05A5: sta V2108 ; 05A5 8D 08 21 jsr L06B2 ; 05AE 20 B2 06 .. ; setup default drive - ldx V2104 - lda V2105 - sta V2106-8,x + ;ldx V2104 + ;lda V2105 + ;sta V2106-8,x jsr SetupDefaulDrives ; load required drivers? @@ -728,6 +759,27 @@ InitDrive: jsr SetDevice ; 073E 20 B0 C2 .. txa ; 0741 8A . bne L0768 ; 0742 D0 24 .$ + + lda firstBoot + cmp #$FF + bne @10 + ldy curDrive + lda VarImageDriveType-8,y + cmp #DRV_SD_81 + bne @10 + cmp driveType-8,y + bne @10 + LoadW r0, VarImageFileNames +@12: + cpy #8 + beq @11 + AddVW 64, r0 + dey + bra @12 +@11: + jsr SetImageFile +@10: + .ifndef config128 lda ramExpSize ; 0744 AD C3 88 ... bne L075F ; 0747 D0 16 .. @@ -878,7 +930,7 @@ InitVirtual: beq L07FE ; 07F4 F0 08 .. lda #$08 ; 07F6 A9 03 .. sta V212F ; 07F8 8D 2F 21 ./! - jmp InitNewDrive ; 07FB 4C D7 08 L.. + jmp InitNewDrive ; 07FB 4C D7 08 L.. ; ---------------------------------------------------------------------------- InitSD: lda V212C ; 07EF AD 2C 21 .,! @@ -1020,7 +1072,18 @@ InitNewDrive: ; init drive driver lda V212F ; 08EA AD 2F 21 ./! sta $8486,y ; 08ED 99 86 84 ... inc NUMDRV ; 08F0 EE 8D 84 ... - clv ; 08F3 B8 . +.if 0 + cmp #DRV_SD_81 + bne @10 + ;brk + cpy V2104 + bne @10 + ;brk + LoadW r0, VarImageFileName + jsr SetImageFile +@10: +.endif + clv ; 08F3 B8 . bvc L08FF ; 08F4 50 09 P. L08F6: ; handle non first boot setup, using dialogs @@ -1034,6 +1097,18 @@ L08FF: dec L180C ; 08FF CE 0C 18 lda #$00 ; 090B A9 00 .. sta driveData,y ; 090D 99 BF 88 ... + lda $8486,y ; 0905 B9 86 84 ... +.if 0 + cmp #DRV_SD_81 + bne @10 + ;brk + cpy V2104 + bne @10 + ;brk + LoadW r0, VarImageFileName + jsr SetImageFile +@10: +.endif rts ; 0910 60 ` ; ---------------------------------------------------------------------------- L0911: pha ; 0911 48 H @@ -1175,7 +1250,8 @@ L0A0B: ldy $848F ; 0A0B AC 8F 84 jsr L0A3D ldy $848F - jsr StashRAM + + jsr StashRAM ; stash driver c driver L0A18: ldy $8490 ; 0A18 AC 90 84 ... diff --git a/configure/r1.s b/configure/r1.s index e9998441..aa85d07e 100644 --- a/configure/r1.s +++ b/configure/r1.s @@ -7,7 +7,7 @@ .include "geossym.inc" .include "geossym2.inc" .include "geosmac.inc" - +.include "diskdrv.inc" .segment "OVERLAY1" @@ -66,6 +66,9 @@ vdcdata = $d601 .export V20D9 .export V2102 .export V2103 +.export VarImageFileName +.export VarImageFileNames +.export VarImageDriveType .export V2104 .export V2105 .export V2106 @@ -391,7 +394,35 @@ L147F: lda #$80 ; 147F A9 80 tay ; 1489 A8 . lda $8486,y ; 148A B9 86 84 ... sta V2105 ; 148D 8D 05 21 ..! - jsr L0FB3 ; check for reu ; 1490 20 B3 0F .. + + ; fetch all mounted image file names + ldy #8 + LoadW r1, VarImageFileNames +@11: + tya + pha + tax + lda driveType-8,y + sta VarImageDriveType-8, y + cmp #DRV_SD_81 + bne @10 + txa + jsr SetDevice + jsr GetImageFile + ldx #r0 + ldy #r1 + jsr CopyString +@10: + AddVW 64, r1 + pla + tay + iny + cpy #4+8 + bne @11 + lda V2104 + jsr SetDevice + + jsr L0FB3 ; check for reu ; 1490 20 B3 0F .. lda #$01 ; 1493 A9 01 .. sta NUMDRV ; 1495 8D 8D 84 ... jsr L14FC ; 1498 20 FC 14 .. @@ -1021,7 +1052,8 @@ REUTextSuffix: MenuSaveConfig: jsr DoPreviousMenu ; 1990 20 90 C1 .. lda V2104 ; 1993 AD 04 21 ..! - jsr InitDrive ; 1996 20 3E 07 >. + brk + jsr InitDrive ; 1996 20 3E 07 >. LoadW r0, V20D9 jsr OpenRecordFile ; 19A1 20 74 C2 t. txa ; 19A4 8A . @@ -2060,7 +2092,7 @@ L1E48: bne L1EB0 ; 1E48 D0 66 L1E4A: sty L1E04 ; 1E4A 8C 04 1E ... jsr L0739 ; 1E4D 20 39 07 9. lda L1E04 ; 1E50 AD 04 1E ... - jsr Init ; 1E53 20 C5 1F .. + jsr Init ; 1E53 20 C5 1F .. jsr PurgeTurbo ; 1E56 20 35 C2 5. L1E59: ldx #>PluginDlg ; 1E59 A2 1F .. lda #PluginDlg ; 1E59 A2 1F lda V212F ; 1E79 AD 2F 21 ./! sta $8486,y ; 1E7C 99 86 84 ... lda V212B ; 1E7F AD 2B 21 .+! - jsr Init ; 1E82 20 C5 1F .. + jsr Init ; 1E82 20 C5 1F .. lda V212B ; 1E85 AD 2B 21 .+! sta curDevice ; 1E88 85 BA .. sta curDrive ; 1E8A 8D 89 84 ... @@ -2101,7 +2133,7 @@ L1E98: lda L1E04 ; 1E98 AD 04 1E bvc L1EB0 ; 1EA6 50 08 P. L1EA8: lda V212B ; 1EA8 AD 2B 21 .+! eor #$01 ; 1EAB 49 01 I. - jsr Init ; 1EAD 20 C5 1F .. + jsr Init ; 1EAD 20 C5 1F .. L1EB0: jsr CheckAllDrives ; 1EB0 20 B0 1D .. rts ; 1EB3 60 ` ; ---------------------------------------------------------------------------- @@ -2222,7 +2254,6 @@ PluginDlg2: .byte 0 ; 1FB2 00 . Init: - brk bit sysRAMFlg ; 1FC5 2C C4 88 ,.. bvc L1FEE ; 1FC8 50 24 P$ pha ; 1FCA 48 H @@ -2868,7 +2899,10 @@ V20FA = V20D9 + 33 V20EA = V20D9 + 17 V2102 = V20D9 + 17 + 24 V2103 = V2102 + 1 -V2104 = V2103 + 1 + +VarImageFileName = V2103 + 1 + +V2104 = VarImageFileName + 64 V2105 = V2104 + 1 ;+ 35 + 1 V2106 = V2105 + 1 V2107 = V2106 + 1 @@ -2884,5 +2918,9 @@ V212E = V212D + 1 V212F = V212E + 1 V2130 = V212F + 1 V2150 = V2130 + 1 + 31 + +VarImageDriveType = V2150 +VarImageFileNames = V2150+4 ; 4x 64 for file name + V2550 = V2150 + $400 V2551 = V2550 + 1 From 358ae4f21920210e660c2e98634612d57be5654d Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:04:46 +0100 Subject: [PATCH 093/125] Remove debug code. --- kernal/start/start64.s | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index e2c78d18..ea60bd6a 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -383,7 +383,6 @@ ASSERT_NOT_BELOW_IO bra @20 @10: ; unsupported by HYPPO use default - inc $D020 LoadW r0, imageFileName @20: jsr SetImageFile @@ -425,13 +424,7 @@ OrigResetHandle: jsr DetectRamCart .endif _DebugStart: - brk - - LDY #$4F - - LDA #$48 ; HYPPO_DOS_GET_PROC_DESC - STA $D640 - NOP + ;brk jsr GetDirHead MoveB bootSec, r1H From c978b05be4b398dba17fca42e527b229cc4d44a9 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:05:28 +0100 Subject: [PATCH 094/125] Remove predefined image name. --- drv/drvf011.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/drv/drvf011.s b/drv/drvf011.s index a92f4948..b897d745 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -1737,7 +1737,6 @@ currentImageCluster: ; for disc image .word $FFFF currentImageName: - .byte "GEOS.D81", NULL .repeat 64 .byte 0 .endrep @@ -1773,4 +1772,3 @@ borderFlag: cname: .byte "#" cname_end: - From 3ec975e24cad09a0d17856cfb766375d9d43a679 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:18:20 +0100 Subject: [PATCH 095/125] Commit debug fixes. --- kernal/debug/main.s | 196 ++++++++++++++++++++++++-------------------- 1 file changed, 105 insertions(+), 91 deletions(-) diff --git a/kernal/debug/main.s b/kernal/debug/main.s index a6cadea0..96af2e59 100644 --- a/kernal/debug/main.s +++ b/kernal/debug/main.s @@ -25,9 +25,9 @@ STACK_OFFSET = 4 TRACE_MODE = 0 SSTEP_MODE = $80 -consoleCols: +consoleCols: .byte 80 -consoleLines: +consoleLines: .byte 25 posX: .byte 0 @@ -118,10 +118,10 @@ DebugMain: ; on any entry? tsx stx stackPointer - + MoveW IRQ_VECTOR, saveIRQ_VECTOR LoadW IRQ_VECTOR, IRQHandler - + ; correct PC after BRK ldy stackPointer @@ -203,7 +203,7 @@ ClearConsole: ldx #0 stx posX ; output position top left stx posY - MoveW consoleBufAddr, r0 + MoveW consoleBufAddr, r0 @2: lda #' ' ldy #0 @@ -264,7 +264,7 @@ PutChar: txa bne @7 - ldy posX + ldy posX lda (r1), y eor #%10000000 sta (r1), y @@ -290,7 +290,7 @@ PutChar: sec sbc #96 @6: - ldy posX + ldy posX sta (r1), y inc posX iny @@ -304,7 +304,7 @@ PutChar: tay rts @3: - ldy posX + ldy posX lda (r1), y and #%01111111 sta (r1), y @@ -403,7 +403,7 @@ Prompt: jsr PutChar jsr EnterConsole - + MoveB promptLen, promptLenOld LoadB promptLen, 0 @@ -431,7 +431,7 @@ Prompt: cpy #100 bcs @4 sta promptBuf, y - inc promptLen + inc promptLen jsr PutChar @4: bra @1 @@ -458,7 +458,7 @@ Prompt: bra @1 GetKeyPress: - + ; wait to receive next key press from buffer jsr _GetNextChar @@ -475,7 +475,7 @@ IRQHandler: PushB CPU_DATA LoadB CPU_DATA, IO_IN ldx #0 -@2: +@2: lda r0,x pha inx @@ -487,14 +487,14 @@ IRQHandler: lda #1 sta $D019 - + lda cursorCount beq @7 ldx #0 dec cursorCount @7: ldx #31 -@6: +@6: pla sta r0,x dex @@ -571,7 +571,7 @@ traceNow: sta $107+STACK_OFFSET, y lda r0L sta $106+STACK_OFFSET, y - + ldy #0 ;lda (r0), y ; get opcode at PC jsr GetByte @@ -613,26 +613,26 @@ traceNow: @3: cmp #$90 ; BCC bne @4a - + ldy stackPointer lda $105+STACK_OFFSET, y and #1 beq @3c lda #$90 jmp @3b -@3c: +@3c: ; follow branch ldy #1 jsr GetByte ; branch offset - + ldx #0 sta r0L bit r0L bpl @3d ldx #$FF -@3d: +@3d: stx r0H - + ldy stackPointer lda $106+STACK_OFFSET, y clc @@ -641,7 +641,7 @@ traceNow: lda $107+STACK_OFFSET, y adc r0H sta r0H - + AddVW 2, r0 bra @2 @@ -652,6 +652,16 @@ traceNow: ;clc ;rts @4a: + cmp #$B0 ; BCS + bne @4c2 + + ldy stackPointer + lda $105+STACK_OFFSET, y + and #$10 + bne @3c ; it is positiv, branch off + lda #$B0 + bne @3b +@4c2: cmp #$10 ; BPL bne @4c @@ -672,7 +682,7 @@ traceNow: bra @3b @4d: cmp #$D0 ; BNE - bne @4g + bne @4d2 ldy stackPointer lda $105+STACK_OFFSET, y and #$02 @@ -680,17 +690,21 @@ traceNow: lda #$D0 bra @3b +@4d2: + cmp #$80 ; BRA + bne @4g + bra @3c ; it is zero/equal, branch off @4g: cmp #$60 ; RTS bne @3b - + ; return ldy stackPointer lda $108+STACK_OFFSET, y sta r0L lda $109+STACK_OFFSET, y sta r0H - + AddVW 3, r0 bra @2 @@ -711,7 +725,7 @@ traceNow: jsr SetupSingleStep jsr EnterConsole - sec + sec rts @@ -741,7 +755,7 @@ ResetSingleStep: lda breakList,y ora breakList+1,y beq @1 - + lda breakList,y sta r1L lda breakList+1,y @@ -883,7 +897,7 @@ ProcessPrompt: MoveW r1, u_cl MoveB r2L, u_cl_h @6c: - MoveW u_cl, r0 + MoveW u_cl, r0 MoveB u_cl_h, r2L ldx #0 @@ -966,11 +980,11 @@ ProcessDump: MoveW r1, u_cl MoveB r2L, u_cl_h @6c: - MoveW u_cl, r0 + MoveW u_cl, r0 lda #'$' jsr PutChar - MoveB u_cl_h, r2L + MoveB u_cl_h, r2L lda r2L jsr PrintByteHex lda r0H @@ -979,7 +993,7 @@ ProcessDump: jsr PrintByteHex lda #' ' jsr PutChar - MoveB u_cl_h, r2L + MoveB u_cl_h, r2L ldx #0 @6b: @@ -1197,14 +1211,14 @@ colloop: STA $D069 LDA #0 STA $D06A - + MoveB $D058, saveD058 MoveB $D05E, saveD05E LDA #80 STA $D058 STA $D05E - + ; video ram @ 0800, chargen @1800 MoveB $d018, saveD018 lda #$26 @@ -1269,23 +1283,23 @@ ExitConsole: MoveB saveD021, $d021 MoveB saveD015, $d015 - MoveB saveD060, $D060 - MoveB saveD061, $D061 - MoveB saveD062, $D062 - MoveB saveD063, $D063 - MoveB saveD068, $D068 - MoveB saveD069, $D069 - MoveB saveD06A, $D06A - MoveB saveD058, $D058 - MoveB saveD05E, $D05E + MoveB saveD060, $D060 + MoveB saveD061, $D061 + MoveB saveD062, $D062 + MoveB saveD063, $D063 + MoveB saveD068, $D068 + MoveB saveD069, $D069 + MoveB saveD06A, $D06A + MoveB saveD058, $D058 + MoveB saveD05E, $D05E jsr SwapConsoleBuf LoadW consoleBufAddr, consoleBuf rts SwapConsoleBuf: - LoadW r2, consoleBuf - LoadW r3, $0800 + LoadW r2, consoleBuf + LoadW r3, $0800 ldx #0 @2: ldy #0 @@ -1458,7 +1472,7 @@ RestorePCBreakpoint: lda breakOpList, y ldy #0 sta (r1), y - + rts @3: @@ -1484,7 +1498,7 @@ UpdatePCBreakpoint: ldy #0 tya sta (r1), y - + @1: inx inx @@ -1545,8 +1559,8 @@ OpcodeLength: .byte 2 ;INDZ = 11 .byte 2 ;INDY = 12 .byte 3 ;ABS = 13 - .byte 2 ;BREL = 14 - .byte 3 ;WINDX = 15 + .byte 2 ;BREL = 14 + .byte 3 ;WINDX = 15 ; in: A = opcode ; out: A = len @@ -1568,12 +1582,12 @@ DebugOpcode_GetLen: lda #>Opcodes adc r1H sta r1H - + ldx #1 ldy #3 lda (r1), y - + tax lda OpcodeLength,x @@ -1764,7 +1778,7 @@ DebugOpcode_Print: @8: cmp #BREL bne @9 - + jsr DebugOpcode_PrintBREL bra @done @@ -1818,13 +1832,13 @@ DebugOpcode_Print: adc #0 sta r0H rts - + DebugOpcode_PrintIND: lda #'(' jsr PutChar lda #'$' jsr PutChar - + ldy #2 jsr GetByte jsr PrintByteHex @@ -1841,22 +1855,22 @@ DebugOpcode_PrintBREL: lda #'$' jsr PutChar - + PushW r0 - - + + ldy #1 ;lda (r0), Y jsr GetByte pha - + clc adc r0L sta r0L lda r0H adc #0 sta r0H - + lda r0L clc adc #2 @@ -1864,7 +1878,7 @@ DebugOpcode_PrintBREL: lda r0H adc #0 sta r0H - + pla bpl @8a dec r0H @@ -1873,17 +1887,17 @@ DebugOpcode_PrintBREL: jsr PrintByteHex lda r0L jsr PrintByteHex - + PopW r0 rts - + GetByte: LoadB r2L, 0 GetByteLong: PushW r0 PushB r2L - clc + clc tya adc r0L sta r0L @@ -1893,7 +1907,7 @@ GetByteLong: lda r2L adc #0 sta r2L - + beq @zeroBank PushW r0 @@ -1915,12 +1929,12 @@ GetByteLong: EOM lda (r0L), Z tay - + PopW r1 PopW r0 tya - + jmp @3 @zeroBank: @@ -1941,7 +1955,7 @@ GetByteLong: @a3_: CmpWI r0, r1+1 bne @a4 - lda saveR1+1 + lda saveR1+1 jmp @3 @a4: CmpWI r0, r2 @@ -1959,7 +1973,7 @@ GetByteLong: lda saveR3 jmp @3 @a7: - CmpWI r0, r3+1 + CmpWI r0, r3+1 bne @a8 lda saveR3+1 jmp @3 @@ -1992,7 +2006,7 @@ GetByteLong: CmpWI consoleBufAddr, $800 bne @a3 CmpWI r0, $800 - bcc @a3 + bcc @a3 CmpWI r0, $800+80*25 beq @a3 bcs @a3 @@ -2011,7 +2025,7 @@ GetByteLong: @a3: ; check mapped area $6000-$7FFF CmpWI r0, $6000 - bcc @b5 + bcc @b5 CmpWI r0, $8000 beq @b5 bcs @b5 @@ -2035,16 +2049,16 @@ GetByteLong: EOM lda (r0L), Z tay - + PopW r1 PopW r0 tya - + bra @3 @b5: CmpWI r0, $D000 - bcc @b6 + bcc @b6 CmpWI r0, $E000 beq @b6 bcs @b6 @@ -2057,7 +2071,7 @@ GetByteLong: PopB r2L PopW r0 tya - rts + rts Opcodes: .byte "BRK", 0 @@ -2073,7 +2087,7 @@ Opcodes: .byte "ASL", 0 .byte "TSY", 0 .byte "TSB", ABS - .byte "ORA", ABS + .byte "ORA", ABS .byte "ASL", ABS .byte "BBR", ZP ; BBR0 @@ -2094,7 +2108,7 @@ Opcodes: .byte "ASL", ABSX .byte "BBR", ZP ; BBR1 - .byte "JSR", ABS + .byte "JSR", ABS .byte "AND", INDX .byte "JSR", IND .byte "JSR", WINDX @@ -2102,13 +2116,13 @@ Opcodes: .byte "AND", ZP .byte "ROL", ZP .byte "RMB", ZP ; RMB2 - .byte "PLP", 0 - .byte "AND", IMM - .byte "ROL", 0 + .byte "PLP", 0 + .byte "AND", IMM + .byte "ROL", 0 .byte "TYS", 0 .byte "BIT", ABS - .byte "AND", ABS - .byte "ROL", ABS + .byte "AND", ABS + .byte "ROL", ABS .byte "BBR", ZP ; BBR2 .byte "BMI", BREL @@ -2128,7 +2142,7 @@ Opcodes: .byte "ROL", ABSX .byte "BBR", ZP ; BBR3 - .byte "RTI", 0 + .byte "RTI", 0 .byte "EOR", INDX .byte "NEG", 0 .byte "ASR", 0 @@ -2162,7 +2176,7 @@ Opcodes: .byte "LSR", ABSX .byte "BBR", ZP ; BBR5 - .byte "RTS", 0 + .byte "RTS", 0 .byte "ADC", INDX .byte "RTN", 0 .byte "BSR", WREL @@ -2189,15 +2203,15 @@ Opcodes: .byte "RMB", ZP ; RMB7 .byte "SEI", 0 .byte "ADC", ABSY - .byte "PLY", ABSY + .byte "PLY", ABSY .byte "TBA", ABSY .byte "JMP", WINDX .byte "ADC", ABSX .byte "ROR", ABSX .byte "BBR", ZP ; BBR7 - .byte "BRU", BREL - .byte "STA", INDX + .byte "BRU", BREL + .byte "STA", INDX .byte "STA", IDSP .byte "BRU", WREL .byte "STY", ZP @@ -2213,7 +2227,7 @@ Opcodes: .byte "STX", ABS .byte "BBS", ZP ;BBS0 - .byte "BCC", BREL + .byte "BCC", BREL .byte "STA", INDY .byte "STA", INDZ .byte "BCC", WREL @@ -2230,7 +2244,7 @@ Opcodes: .byte "STZ", ABSX .byte "BBS", ZP ;BBS1 - .byte "LDY", IMM + .byte "LDY", IMM .byte "LDA", INDX .byte "LDX", IMM .byte "LDZ", IMM @@ -2264,7 +2278,7 @@ Opcodes: .byte "LDX", ABSY .byte "BBS", ZP ; BBS3 - .byte "CPY", IMM + .byte "CPY", IMM .byte "CMP", INDX .byte "CPZ", IMM .byte "DEW", ZP @@ -2272,7 +2286,7 @@ Opcodes: .byte "CMP", ZP .byte "DEC", ZP .byte "SMB", ZP ; SMB4 - .byte "INY", 0 + .byte "INY", 0 .byte "CMP", IMM .byte "DEX", 0 .byte "ASW", ABS @@ -2281,7 +2295,7 @@ Opcodes: .byte "DEC", ABS .byte "BBS", ZP ; BBS4 - .byte "BNE", BREL + .byte "BNE", BREL .byte "CMP", INDY .byte "CMP", INDZ .byte "BNE", WREL @@ -2315,7 +2329,7 @@ Opcodes: .byte "INC", ABS .byte "BBS", ZP ; BBS6 - .byte "BEQ", BREL + .byte "BEQ", BREL .byte "SBC", INDY .byte "SBC", INDZ .byte "BEQ", WREL @@ -2323,7 +2337,7 @@ Opcodes: .byte "SBC", ZPX .byte "INC", ZPX .byte "SMB", ZP ; SMB7 - .byte "SED", 0 + .byte "SED", 0 .byte "SBC", ABSY .byte "PLX", 0 .byte "PLZ", 0 From cddc45a12141a6b8d0434c28ed5afa45914a52f6 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:20:39 +0100 Subject: [PATCH 096/125] Makefile updated. --- Makefile | 381 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 210 insertions(+), 171 deletions(-) diff --git a/Makefile b/Makefile index 49feed6e..3b73c445 100755 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ INPUT ?= joydrv AS = ca65 LD = ld65 +CL = cl65 GRC = grc65 C1541 = c1541 PUCRUNCH = pucrunch @@ -18,6 +19,9 @@ D81_TEMPLATE = GEOS64.D81 D81_RESULT = geos.d81 GEOS_OUT = autoboot.c65 DESKTOP_CVT = desktop.cvt +WEEIP_SRC = test/mega65-weeip/src + +CONFIRM_CBMFILES_PERSONAL_USE_LICENSE = NO ASFLAGS = -I inc -I . @@ -261,6 +265,7 @@ DRIVER_SOURCES= \ input/amigamse.bin \ input/lightpen.bin \ input/mse1351.bin \ + input/mega1351.bin \ input/koalapad.bin \ input/pcanalog.bin @@ -307,6 +312,7 @@ ALL_BINS= \ $(BUILD_DIR)/input/amigamse.bin \ $(BUILD_DIR)/input/lightpen.bin \ $(BUILD_DIR)/input/mse1351.bin \ + $(BUILD_DIR)/input/mega1351.bin \ $(BUILD_DIR)/input/koalapad.bin \ $(BUILD_DIR)/input/pcanalog.bin @@ -506,7 +512,7 @@ endif $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topdesk.cvt \ $(BUILD_DIR)/mount.cvt $(BUILD_DIR)/clock.cvt $(BUILD_DIR)/config.cvt \ - $(BUILD_DIR)/joydrv.cvt $(BUILD_DIR)/mse1351.cvt \ + $(BUILD_DIR)/joydrv.cvt $(BUILD_DIR)/mse1351.cvt $(BUILD_DIR)/mega1351.cvt \ prmgr128.cvt pdmgr128.cvt alarm128.cvt calc128.cvt \ spell128.cvt merge128.cvt spelldata.cvt gw128.cvt gpt128.cvt \ $(BUILD_DIR)/printer_driver.cvt $(BUILD_DIR)/document.cvt \ @@ -590,6 +596,7 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/mega1351.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mse1351.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt64.cvt | $(C1541) $@ >/dev/null; \ @@ -598,12 +605,13 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo format \"mega65 geos,00\" d81 $@ | $(C1541) >/dev/null; \ echo write $< $(GEOS_OUT) | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/config.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/geospace.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mount.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/clock.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite $(BUILD_DIR)/mega1351.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/mse1351.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/autostart.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite $(BUILD_DIR)/geospace.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite prmgr128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite pdmgr128.cvt | $(C1541) $@ >/dev/null; \ @@ -617,177 +625,179 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/other_data.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/coding.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/misc.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite dt128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite gw128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite gpt128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite photo_mgr.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite text_mgr.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite alarm128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite calc128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite notepad.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite spell128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite spelldata.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite merge128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite california.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite cory.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite dwinelle.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite roma.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite university.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite commfont.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite lwroma.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite lwcal.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite lwgreek.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite lwbarrows.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite paint_drivers.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite geolaser.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite text_grabber128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite tgfs4128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite tgpc2128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite tgww128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite tgg1128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite tgg2128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite COMMCOMP.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite 1526.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite ASC.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite BCM120.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite CI8510.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite CI8510A.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite CI8510DS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite CI8510QS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite CIRED.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPFX80.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPFX80DS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPFX80QS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPJX80.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPLQ1500.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPLX80.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPMX80.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite EPRED.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite GEM10X.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite GEMDS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite GEMQS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IBM51P.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IBM51PDS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IBM51PQS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IMW.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IMWDS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IMWQS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IMW2.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IMW2DS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite IMW2QS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite LJPAR.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite LJSER.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite LW21.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite MPS801.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite MPS803.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite MPS1000.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite MPS1200.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite MP1200DS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite MP1200QS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite OK120.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite OK120NLQ.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite OKML92.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite OK10.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite OK20.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite OLPR2300.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite RITECP.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SCRIBE.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SNB15.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SNL10COM.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SNX10.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SNX10DS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SNX10QS.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SNX10C.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite NX1000R.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite SSG10.CVT | $(C1541) $@ >/dev/null; \ - echo geoswrite TOSHP321.CVT | $(C1541) $@ >/dev/null; \ echo geosfolder "Startup" "MEGA\\ MOUNT"| $(C1541) $@ >/dev/null; \ echo geosfolder "Startup" "MEGA\\ RTC"| $(C1541) $@ >/dev/null; \ echo geosfolder "Input\\ Drivers" "COMM\\ 1351"| $(C1541) $@ >/dev/null; \ echo geosfolder "Input\\ Drivers" "JOYSTICK"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Applications" "GEOWRITE\\ 128"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Applications" "GEOPAINT"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Applications" "GEOSPELL\\ 128"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Applications" "GEOMERGE"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Utilities" "GEOLASER"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Utilities" "PAINT\\ DRIVERS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Utilities" "TEXT\\ GRABBER\\ 128"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Desk\\ Accessories" "alarm\\ clock"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Desk\\ Accessories" "calculator"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Desk\\ Accessories" "photo\\ manager"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Desk\\ Accessories" "text\\ manager"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Desk\\ Accessories" "note\\ pad"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Other\\ Data" "GeoDictionary"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Other\\ Data" "FleetSystem\\ 4"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Other\\ Data" "PaperClip\\ II"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Other\\ Data" "WordWriter\\ 128"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Other\\ Data" "C128\\ Generic\\ I"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Other\\ Data" "C128\\ Generic\\ II"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "California"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "Cory"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "Dwinelle"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "Roma"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "University"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "Commodore"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "LW_Roma"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "LW_Cal"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "LW_Greek"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Fonts" "LW_Barrows"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "1526"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ASCII\\ Only"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "BlueChip\\ M120"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510A"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510\\ D.S."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510\\ Q.S."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "C.Itoh\\ RED."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Comm.\\ Compat."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80\\ DS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80\\ QS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ JX-80"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ LQ-1500"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ LX-80"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ MX-80"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Epson\\ RED."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Gemini\\ 10x"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Gemini\\ DS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Gemini\\ QS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+\\ DS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+\\ QS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ImageWriter"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ImageWriterDS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ImageWriterQS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ImageWriter\\ II"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ImWrtr\\ II\\ DS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "ImWrtr\\ II\\ QS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "LaserJet\\ PAR."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "LaserJet\\ SER."| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "LaserWriter\\ 2.1"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "MPS-801"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "MPS-803"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "MPS-1000"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "MPS\\ 1200"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "MPS-1200\\ DS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "MPS\\ 1200\\ QS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Oki\\ 120"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Oki\\ 120\\ NLQ"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Oki\\ ML-92/93"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Okimate\\ 10"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Okimate\\ 20"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Olivetti\\ PR2300"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Riteman\\ C+"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Scribe"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ NB-15"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ NL-10(com)"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ NX-10"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ NX-10\\ DS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ NX-10\\ QS"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ NX-10C"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "NX-1000\\ Rainbow"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Star\\ SG-10/15"| $(C1541) $@ >/dev/null; \ - echo geosfolder "Printer\\ Drivers" "Toshiba\\ P321"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Input\\ Drivers" "MEGA\\ 1351"| $(C1541) $@ >/dev/null; \ + if [ "$(CONFIRM_CBMFILES_PERSONAL_USE_LICENSE)" = "ACCEPT_CBMFILES_LICENSE" ]; then \ + echo geoswrite gw128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite gpt128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite photo_mgr.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite text_mgr.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite alarm128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite calc128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite notepad.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite spell128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite spelldata.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite merge128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite california.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite cory.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite dwinelle.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite roma.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite university.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite commfont.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwroma.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwcal.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwgreek.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite lwbarrows.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite paint_drivers.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite geolaser.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite text_grabber128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgfs4128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgpc2128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgww128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgg1128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite tgg2128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite COMMCOMP.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite 1526.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite ASC.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite BCM120.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510A.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CI8510QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite CIRED.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPFX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPFX80DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPFX80QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPJX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPLQ1500.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPLX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPMX80.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite EPRED.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GEM10X.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GEMDS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite GEMQS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IBM51P.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IBM51PDS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IBM51PQS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMWDS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMWQS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW2.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW2DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite IMW2QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite LJPAR.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite LJSER.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite LW21.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS801.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS803.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS1000.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MPS1200.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MP1200DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite MP1200QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK120.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK120NLQ.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OKML92.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK10.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OK20.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite OLPR2300.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite RITECP.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SCRIBE.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNB15.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNL10COM.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10DS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10QS.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SNX10C.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite NX1000R.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite SSG10.CVT | $(C1541) $@ >/dev/null; \ + echo geoswrite TOSHP321.CVT | $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOWRITE\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOPAINT"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOSPELL\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Applications" "GEOMERGE"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Utilities" "GEOLASER"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Utilities" "PAINT\\ DRIVERS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Utilities" "TEXT\\ GRABBER\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "alarm\\ clock"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "calculator"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "photo\\ manager"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "text\\ manager"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Desk\\ Accessories" "note\\ pad"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "GeoDictionary"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "FleetSystem\\ 4"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "PaperClip\\ II"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "WordWriter\\ 128"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "C128\\ Generic\\ I"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Other\\ Data" "C128\\ Generic\\ II"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "California"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Cory"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Dwinelle"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Roma"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "University"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "Commodore"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Roma"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Cal"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Greek"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Fonts" "LW_Barrows"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "1526"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ASCII\\ Only"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "BlueChip\\ M120"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510A"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510\\ D.S."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ 8510\\ Q.S."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "C.Itoh\\ RED."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Comm.\\ Compat."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ FX-80\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ JX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ LQ-1500"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ LX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ MX-80"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Epson\\ RED."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Gemini\\ 10x"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Gemini\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Gemini\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "IBM\\ 5152+\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriter"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriterDS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriterQS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImageWriter\\ II"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImWrtr\\ II\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "ImWrtr\\ II\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "LaserJet\\ PAR."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "LaserJet\\ SER."| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "LaserWriter\\ 2.1"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-801"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-803"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-1000"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS\\ 1200"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS-1200\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "MPS\\ 1200\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Oki\\ 120"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Oki\\ 120\\ NLQ"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Oki\\ ML-92/93"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Okimate\\ 10"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Okimate\\ 20"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Olivetti\\ PR2300"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Riteman\\ C+"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Scribe"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NB-15"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NL-10(com)"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10\\ DS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10\\ QS"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ NX-10C"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "NX-1000\\ Rainbow"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Star\\ SG-10/15"| $(C1541) $@ >/dev/null; \ + echo geosfolder "Printer\\ Drivers" "Toshiba\\ P321"| $(C1541) $@ >/dev/null; \ + fi; \ if [ -e $(DESKTOP_CVT) ]; then echo geoswrite $(DESKTOP_CVT) | $(C1541) $@; fi >/dev/null; \ echo \*\*\* Created fresh $@.; \ fi; @@ -868,6 +878,16 @@ $(BUILD_DIR)/input/mse1351Hdr.o: sed 's/.byte 6/.byte 10/g' $(BUILD_DIR)/input/mse1351.s4 > $(BUILD_DIR)/input/mse1351.s5 $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/input/mse1351.s5 -o $@ +$(BUILD_DIR)/input/mega1351Hdr.o: + @mkdir -p `dirname $@` + $(AS) input/mega1351Icon.s -o $(BUILD_DIR)/input/mega1351Icon.o + $(LD) -C input/mega1351Icon.cfg $(BUILD_DIR)/input/mega1351Icon.o -o $(BUILD_DIR)/input/mega1351.bf + $(GRC) -s $(BUILD_DIR)/input/mega1351.s2 -o $(BUILD_DIR)/input/mega1351.c input/mega1351.grc + sed 's/192/1/g' $(BUILD_DIR)/input/mega1351.s2 > $(BUILD_DIR)/input/mega1351.s3 + sed 's/131, 6/131, 10/g' $(BUILD_DIR)/input/mega1351.s3 > $(BUILD_DIR)/input/mega1351.s4 + sed 's/.byte 6/.byte 10/g' $(BUILD_DIR)/input/mega1351.s4 > $(BUILD_DIR)/input/mega1351.s5 + $(AS) -D $(VARIANT)=1 -D $(DRIVE)=1 -D $(INPUT)=1 $(ASFLAGS) $(BUILD_DIR)/input/mega1351.s5 -o $@ + $(BUILD_DIR)/folder/input_driver.o: @mkdir -p `dirname $@` $(AS) folder/input_driver.s -o $(BUILD_DIR)/folder/input_driver.o @@ -899,8 +919,9 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/mount.cvt: $(BUILD_DIR)/mount/mount.o $(BUILD_DIR)/mount/main.o $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o -$(BUILD_DIR)/geospace.cvt: $(BUILD_DIR)/space/space.o $(BUILD_DIR)/space/main.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o +$(BUILD_DIR)/geospace.cvt: $(BUILD_DIR)/space/space.o $(BUILD_DIR)/space/main.o \ + $(BUILD_DIR)/space/ip/eth.o $(BUILD_DIR)/space/ip/arp.o $(BUILD_DIR)/space/ip/nwk.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/checksum.o $(BUILD_DIR)/space/ip/dhcp.o $(BUILD_DIR)/space/ip/dns.o $(BUILD_DIR)/space/ip/task.o + $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o $(BUILD_DIR)/space/ip/eth.o $(BUILD_DIR)/space/ip/arp.o $(BUILD_DIR)/space/ip/nwk.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/checksum.o $(BUILD_DIR)/space/ip/dhcp.o $(BUILD_DIR)/space/ip/dns.o $(BUILD_DIR)/space/ip/task.o $(BUILD_DIR)/clock.cvt: $(BUILD_DIR)/clock/clock.o $(BUILD_DIR)/clock/main.o $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o @@ -944,6 +965,21 @@ $(BUILD_DIR)/joydrv.cvt: $(BUILD_DIR)/input/joydrvHdr.o $(BUILD_DIR)/input/joydr $(BUILD_DIR)/mse1351.cvt: $(BUILD_DIR)/input/mse1351Hdr.o $(BUILD_DIR)/input/mse1351.o $(LD) -C input/mse1351_cvt.cfg -o $@ $(BUILD_DIR)/input/mse1351Hdr.o -m $(BUILD_DIR)/mse1351.map $(BUILD_DIR)/input/mse1351.o +$(BUILD_DIR)/mega1351.cvt: $(BUILD_DIR)/input/mega1351Hdr.o $(BUILD_DIR)/input/mega1351.o + $(LD) -C input/mega1351_cvt.cfg -o $@ $(BUILD_DIR)/input/mega1351Hdr.o -m $(BUILD_DIR)/mega1351.map $(BUILD_DIR)/input/mega1351.o + +TCPSRCS=$(WEEIP_SRC)/arp.c \ + $(WEEIP_SRC)/checksum.c \ + $(WEEIP_SRC)/eth.c \ + $(WEEIP_SRC)/nwk.c \ + $(WEEIP_SRC)/socket.c \ + $(WEEIP_SRC)/task.c \ + $(WEEIP_SRC)/dhcp.c \ + $(WEEIP_SRC)/dns.c + +#$(BUILD_DIR)/test.cvt: test/testres.grc test/test.c +# $(CL) -t geos-cbm -O -o $(BUILD_DIR)/test.cvt -m $(BUILD_DIR)/test.map -I $(WEEIP_SRC)/mega65-libc/cc65/include -I $(WEEIP_SRC)/../include test/testres.grc test/test.c $(TCPSRCS) + ifeq ($(VARIANT), mega65) $(BUILD_DIR)/compressed.bin: $(BUILD_DIR)/kernal_combined.prg $(EXOMIZER) mem $<,0x5000 -o $@ @@ -1034,6 +1070,9 @@ $(BUILD_DIR)/input/lightpen.bin: $(BUILD_DIR)/input/lightpen.o input/lightpen.cf $(BUILD_DIR)/input/mse1351.bin: $(BUILD_DIR)/input/mse1351.o input/mse1351.cfg $(DEPS) $(LD) -C input/mse1351.cfg $(BUILD_DIR)/input/mse1351.o -o $@ +$(BUILD_DIR)/input/mega1351.bin: $(BUILD_DIR)/input/mega1351.o input/mega1351.cfg $(DEPS) + $(LD) -C input/mega1351.cfg $(BUILD_DIR)/input/mega1351.o -o $@ + $(BUILD_DIR)/input/koalapad.bin: $(BUILD_DIR)/input/koalapad.o input/koalapad.cfg $(DEPS) $(LD) -C input/koalapad.cfg $(BUILD_DIR)/input/koalapad.o -o $@ From e9f2965b25e39c48dbaf459f5624342d092612ff Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:22:45 +0100 Subject: [PATCH 097/125] Allow to override licence parameter. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3b73c445..37d7c23c 100755 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ GEOS_OUT = autoboot.c65 DESKTOP_CVT = desktop.cvt WEEIP_SRC = test/mega65-weeip/src -CONFIRM_CBMFILES_PERSONAL_USE_LICENSE = NO +CONFIRM_CBMFILES_PERSONAL_USE_LICENSE ?= NO ASFLAGS = -I inc -I . From f7ed05571a1b582e2a7978f45d7405346b8ea3e7 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:25:05 +0100 Subject: [PATCH 098/125] Update latest GeoSpace. --- space/convert.s | 0 space/download.s | 9 + space/ip/arp.s | 621 ++++++++++++ space/ip/checksum.s | 201 ++++ space/ip/defs.inc | 91 ++ space/ip/dhcp.s | 760 ++++++++++++++ space/ip/dns.s | 558 +++++++++++ space/ip/eth.s | 751 ++++++++++++++ space/ip/nwk.s | 2333 +++++++++++++++++++++++++++++++++++++++++++ space/ip/socket.s | 599 +++++++++++ space/ip/task.s | 507 ++++++++++ space/main.s | 1577 ++++++++++++++++++++++++++++- 12 files changed, 8003 insertions(+), 4 deletions(-) create mode 100644 space/convert.s create mode 100644 space/download.s create mode 100644 space/ip/arp.s create mode 100644 space/ip/checksum.s create mode 100644 space/ip/defs.inc create mode 100644 space/ip/dhcp.s create mode 100644 space/ip/dns.s create mode 100644 space/ip/eth.s create mode 100644 space/ip/nwk.s create mode 100644 space/ip/socket.s create mode 100644 space/ip/task.s diff --git a/space/convert.s b/space/convert.s new file mode 100644 index 00000000..e69de29b diff --git a/space/download.s b/space/download.s new file mode 100644 index 00000000..d1974e84 --- /dev/null +++ b/space/download.s @@ -0,0 +1,9 @@ + + +; in: r0 - target file name ptr +; r1 - URL of file to download +; r2 - progress callback +; out: x - error code for init + +downdload_file: + rts diff --git a/space/ip/arp.s b/space/ip/arp.s new file mode 100644 index 00000000..0ef33b7a --- /dev/null +++ b/space/ip/arp.s @@ -0,0 +1,621 @@ +;** +;* @file arp.c +;* @brief Address Resolution Protocol implementation. +;* @compiler CPIK 0.7.3 / MCC18 3.36 +;* @author Bruno Basseto (bruno@wise-ware.org) +;*/ + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + +;#include + +;#include "task.h" +;#include "weeip.h" +;#include "eth.h" + +;#include "memory.h" +;#include "random.h" + +.import eth_arp_send +.import ip_local +.import mac_local +.import _header +.import task_add + +.export arp_query +.export query_cache +.export arp_init +.export arp_mens + + +;******************************************************************************** +;******************************************************************************** +;* The MIT License (MIT) +;* +;* Copyright (c) 1995-2013 Bruno Basseto (bruno@wise-ware.org). +;* +;* Permission is hereby granted, free of charge, to any person obtaining a copy +;* of this software and associated documentation files (the "Software"), to deal +;* in the Software without restriction, including without limitation the rights +;* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +;* copies of the Software, and to permit persons to whom the Software is +;* furnished to do so, subject to the following conditions: +;* +;* The above copyright notice and this permission notice shall be included in +;* all copies or substantial portions of the Software. +;* +;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +;* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +;* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +;* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +;* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +;* THE SOFTWARE. +;******************************************************************************** +;********************************************************************************/ + +;#include +;#include "weeip.h" +;#include "eth.h" + +;* +;* Opcodes. +;*/ +ARP_REQUEST = $0100 ;// big-endian for 0x0001 +ARP_REPLY = $0200 ;// big-endian for 0x0002 + +;** +;* A known IP-MAC addresses pair. +;*/ +;typedef struct { +; IPV4 ip; ///< IP address. +; EUI48 mac; ///< Associated MAC address. +; uint16_t time; ///< Time to expire. +;} ARP_CACHE_ENTRY; + +ARP_CACHE_ENTRY_SIZE = 12 +ARP_CACHE_ENTRY_TIME_OFFSET = 10 + +ARP_HDR_HARDWARE_OFFSET = 0 +ARP_HDR_PROTOCOL_OFFSET = 2 +ARP_HDR_HW_SIZE_OFFSET = 4 +ARP_HDR_PR_SIZE_OFFSET = 5 +ARP_HDR_OPCODE_OFFSET = 6 +ARP_HDR_ORIG_HW_OFFSET = 8 +ARP_HDR_ORIG_IP4_OFFSET = 14 +ARP_HDR_DEST_HW_OFFSET = 18 +ARP_HDR_DEST_IP4_OFFSET = 24 + +MAX_CACHE = 8 ;///< ARP Cache table size. + +ARP_TICK_TIME = 147 ;// about 10 seconds +MAX_TIMEOUT_ARP = 120 ;// about 20 minutes +MIN_TIMEOUT_ARP = 2 ;// about 20 seconds + +arptickName: + .byte "arptick", 0 + + +;** +;* List of known MAC addresses. +;* +arp_cache: + .repeat MAX_CACHE*ARP_CACHE_ENTRY_SIZE + .byte 0 + .endrep + +;#define ARP(X) _header.arp.X + +;** +;* Search for an IP among the known ones. +;* Starts a new table entry if not found. +;* @param ip Address to look for. +;* @param mac Corresponding MAC address, if found. +;* @return TRUE if found. +;* +; in: r0/r1 ip address +; out: c set if resolved, c if new entry has been reserved +; r3,r4,r5 mac +query_cache: + ;ARP_CACHE_ENTRY *i, *s; + ;byte_t old; + + ;* + ;* Checks if broadcast address. + ;* + ldx #0 +@10: + lda r0, x + cmp #$ff + bne @noBroadcast + inx + cpx #4 + bne @10 + + ldx #0 +@20: + sta r3,x + inx + cpx #6 + bne @20 + sec + rts + +@noBroadcast: + ;* + ;* Loops into arp_cache. + ;*/ + ldx #0 + LoadW r3, arp_cache +@30: + ldy #0 +@32: + lda (r3), y + cmp r0, y + bne @31 + iny + cpy #4 + bne @32 + + ; found ip address in cache + lda (r3), y + cmp #$FF + bne @33 + clc + rts +@33: + ldy #0 + AddVW 4, r3 + MoveW r3, r2 +@34: + lda (r2), y + sta r3, y + iny + cpy #6 + bne @34 +.if 0 + printf("IP %d.%d.%d.%d is in ARP cache\n", + ip->b[0],ip->b[1],ip->b[2],ip->b[3]); +.endif + sec ; found successfully + rts + +@31: + AddVW ARP_CACHE_ENTRY_SIZE, r3 + + inx + cpx #MAX_CACHE + bne @30 +.if 0 + printf("IP %d.%d.%d.%d not in ARP cache\n", + ip->b[0],ip->b[1],ip->b[2],ip->b[3]); +.endif + + ;* + ;* Unknown IP. + ;* Look for an empty entry. + ;*/ + LoadW r5, $FF + ldx #0 + LoadW r3, arp_cache + MoveW r3, r6 +@40: + ldy #ARP_CACHE_ENTRY_TIME_OFFSET + lda (r3),y + sta r4L + iny + lda (r3),y + sta r4H + + CmpW r4, r5 + bcs @41 + + ;brk + ;lda #$39 + + MoveW r3, r6 ; remember this cache entry + MoveW r4, r5 ; remember this time out +@41: + CmpWI r5, 0 + beq @found + ;* + ;* Done: found an empty entry. + ;*/ + + AddVW ARP_CACHE_ENTRY_SIZE, r3 + inx + cpx #MAX_CACHE + bne @40 + ; use the oldest one + +@found: + ; r6 points to cache entry to be filled + + ;* + ;* Init the entry with the desired IP. + ;* + ldy #0 +@51: + lda (r0),y + sta (r6),y + iny + cpy #4 + bne @51 + AddVW 4, r6 + + ldy #0 +@52: + lda (r1),y + sta (r6),y + iny + cpy #6 + bne @52 + AddVW 6, r6 + + ldy #0 + lda #MIN_TIMEOUT_ARP + sta (r6), y + + clc + rts + +;** +;* Update IP information into the ARP cache. +;* @param ip IP Address, must already be into the cache. +;* @param mac MAC address to update. +;*/ +; in: r0 ptr to IPV4 +; r1 ptr to MAC +; destroy: r2, r3, r6, r7, r8 +update_cache: +.if 0 + printf("ARP: IP %d.%d.%d.%d is at %x:%x:%x:%x:%x:%x\n", + ip->b[0],ip->b[1],ip->b[2],ip->b[3], + mac->b[0],mac->b[1],mac->b[2],mac->b[3],mac->b[4],mac->b[5] + ); +.endif + + LoadW r2, arp_cache + ldx #0 +@10: + ; compare ip + ldy #0 +@12: + lda (r0), y + cmp (r2), y + bne @11 + iny + cpy #4 + bne @12 + + ; entry found + jmp @set +@11: + AddVW ARP_CACHE_ENTRY_SIZE, r2 + inx + cpx #MAX_CACHE + bne @10 + + ;// Not an existing entry in the cache to be updated, so replace a random entry? + jsr GetRandom + + PushW r3 + PushW r6 + PushW r7 + PushW r8 + + MoveW random, r6 + LoadW r7, MAX_CACHE + ldx #r6 + ldy #r7 + jsr Ddiv + + ; r8 rest + MoveW r8, r2 + ldx #r2 + LoadW r3, ARP_CACHE_ENTRY_SIZE + ldy #r3 + jsr DMult + + LoadW r6, arp_cache + AddW r6, r2 + PopW r8 + PopW r7 + PopW r6 + PopW r3 +@setAll: + + ; set ip + ldy #0 +@21: + lda (r0), y + sta (r2), y + iny + cpy #4 + bne @21 + +@set: + ; set mac + AddVW 4, r2 + ldy #0 +@20: + lda (r1), y + sta (r2), y + iny + cpy #6 + bne @20 + + ; set timeout + lda #MAX_TIMEOUT_ARP + iny + sta (r2),y + + rts + +;** +;* Send a ARP QUERY message to find about an IP address. +;* @param IP address to find. +;*/ +; in: r1 ptr to ip +arp_query: + ;* + ;* ARP REQUEST message. + ;* + LoadW _header+ARP_HDR_HARDWARE_OFFSET, $0100 + ; // ethernet (big-endian for 0x0001) + LoadW _header+ARP_HDR_PROTOCOL_OFFSET, $0008 + ; // internet protocol (big-endian for 0x0800) + LoadB _header+ARP_HDR_HW_SIZE_OFFSET, 6 + ; // 6 bytes for ethernet MAC + LoadB _header+ARP_HDR_PR_SIZE_OFFSET, 4 + ; // 4 bytes for IPv4 + LoadW _header+ARP_HDR_OPCODE_OFFSET, ARP_REQUEST + + ;* + ;* Local addresses for the Sender. + ;* + ldx #0 +@10: + lda mac_local, x + sta _header+ARP_HDR_ORIG_HW_OFFSET,x + inx + cpx #6 + bne @10 + + ldx #0 +@11: + lda ip_local, x + sta _header+ARP_HDR_ORIG_IP4_OFFSET,x + inx + cpx #4 + bne @11 + + ;* + ;* Destination addresses. + ;* + ldx #0 + ldy #0 +@20: + lda r0, y + sta _header+ARP_HDR_DEST_IP4_OFFSET,x + inx + iny + cpy #4 + bne @20 + + jsr i_FillRam + .word 6 ; sizeof(EUI48) + .word _header+ARP_HDR_DEST_HW_OFFSET + .byte $FF + ;// what we want to know + + ;* + ;* Send message. + ;* + LoadW r1, _header+ARP_HDR_DEST_HW_OFFSET + jsr eth_arp_send + + rts + + +;** +;* Process an incoming ARP message. +;* +arp_mens: + ;* Check opcode. + ;* + ;*/ + MoveW _header+ARP_HDR_OPCODE_OFFSET, r0 + CmpWI r0, ARP_REQUEST + beq @19 + jmp @10 +@19: + ;* + ;* Address request. + ;* Check local address. + ;* + LoadW r0, ip_local + LoadW r1, _header+ARP_HDR_DEST_IP4_OFFSET + ldy #0 +@11: + lda (r0),y + cmp (r1),y + beq @18 + jmp @done +@18: + iny + cpy #4 + bne @11 + + ;* + ;* Looking for us. + ;* Insert sender address into cache. + ;* + LoadW r0, _header+ARP_HDR_ORIG_IP4_OFFSET + LoadW r1, 0 ; don't exepect to receive result + + jsr query_cache ; ensure entry exists, create in free + ; slot if possible + + LoadW r1, _header+ARP_HDR_ORIG_HW_OFFSET + jsr update_cache + + ;* + ;* Assemble a response message. + ;* + LoadW _header+ARP_HDR_HARDWARE_OFFSET, $0100 + ;// ethernet (big-endian for 0x0001) + LoadW _header+ARP_HDR_PROTOCOL_OFFSET, $0008 + ;// internet protocol (big-endian for 0x0800) + LoadB _header+ARP_HDR_HW_SIZE_OFFSET, 6 + ;// 6 bytes for ethernet MAC + LoadB _header+ARP_HDR_PR_SIZE_OFFSET, 4 + ;// 4 bytes for IPv4 + LoadW _header+ARP_HDR_OPCODE_OFFSET, ARP_REPLY + + ;* + ;* Swap addresses. + ;* + ldx #0 +@30: + lda _header+ARP_HDR_DEST_HW_OFFSET, x + tay + lda _header+ARP_HDR_ORIG_HW_OFFSET,x + sta _header+ARP_HDR_DEST_HW_OFFSET, x + tya + sta _header+ARP_HDR_ORIG_HW_OFFSET, x + inx + cpx #6 + bne @30 + + ldx #0 +@31: + lda _header+ARP_HDR_DEST_IP4_OFFSET, x + tay + lda _header+ARP_HDR_ORIG_IP4_OFFSET,x + sta _header+ARP_HDR_DEST_IP4_OFFSET, x + tya + sta _header+ARP_HDR_ORIG_IP4_OFFSET, x + inx + cpx #4 + bne @31 + + ;* + ;* Local addresses as Sender. + ;* + ldx #0 +@32: + lda mac_local, x + sta _header+ARP_HDR_ORIG_HW_OFFSET,x + inx + cpx #6 + bne @32 + + ldx #0 +@33: + lda ip_local, x + sta _header+ARP_HDR_ORIG_IP4_OFFSET,x + inx + cpx #4 + bne @33 + + ;* + ;* Send answer. + ;* + LoadW r1, _header+ARP_HDR_DEST_HW_OFFSET + jsr eth_arp_send +@done: + rts + +@10: + CmpWI r0, ARP_REPLY + bne @done + + ;* + ;* ARP response. + ;* + LoadW r0, _header+ARP_HDR_ORIG_IP4_OFFSET + LoadW r1, _header+ARP_HDR_ORIG_HW_OFFSET + jsr update_cache + rts + +;** +;* ARP timing control task. +;* Called each 10 seconds. +;* +; destoryed: r0 +arp_tick: +rts + LoadW r0, arp_cache + ldx #0 +@10: + ldy #ARP_CACHE_ENTRY_TIME_OFFSET + lda (r0), y + bne @11 + iny + lda (r0), y + bne @11 + + ; handle outdated entry here, time is already 0 + ldy #0 + lda #$FF +@12: + sta (r0), y + iny + cpy #10 + bne @12 +@11: + AddVW ARP_CACHE_ENTRY_SIZE, r0 + inx + cpx #MAX_CACHE + bne @10 + + ;* + ;* Reschedule for periodic execution. + ;* + LoadW r0, arp_tick + LoadB r1L, ARP_TICK_TIME + LoadB r1H, 0 + LoadW r2, arptickName + jsr task_add + rts + +;** +;* ARP setup and startup. +;*/ +; destroy: a, x, y, r0, r1, r2 +arp_init: + jsr i_FillRam + .word MAX_CACHE*ARP_CACHE_ENTRY_SIZE + .word arp_cache + .byte $FF + + LoadW r0, arp_cache + ldx #0 +@10: + ldy #ARP_CACHE_ENTRY_TIME_OFFSET + lda #0 + sta (r0), y + iny + sta (r0), y + + AddVW ARP_CACHE_ENTRY_SIZE, r0 + inx + cpx #MAX_CACHE + bne @10 + + ; tick is applied from the outside + LoadW r0, arp_tick + LoadB r1L, ARP_TICK_TIME + LoadB r1H, 0 + LoadW r2, arptickName + jsr task_add + rts diff --git a/space/ip/checksum.s b/space/ip/checksum.s new file mode 100644 index 00000000..e5a9b847 --- /dev/null +++ b/space/ip/checksum.s @@ -0,0 +1,201 @@ +;** +;* @file checksum.c +;* @brief Helper functions for calculating IP checksums. +;* @compiler CPIK 0.7.3 / MCC18 3.36 +;* @author Bruno Basseto (bruno@wise-ware.org) +;*/ + +;******************************************************************************** +;******************************************************************************** +;* The MIT License (MIT) +;* +;* Copyright (c) 1995-2013 Bruno Basseto (bruno@wise-ware.org). +;* +;* Permission is hereby granted, free of charge, to any person obtaining a copy +;* of this software and associated documentation files (the "Software"), to deal +;* in the Software without restriction, including without limitation the rights +;* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +;* copies of the Software, and to permit persons to whom the Software is +;* furnished to do so, subject to the following conditions: +;* +;* The above copyright notice and this permission notice shall be included in +;* all copies or substantial portions of the Software. +;* +;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +;* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +;* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +;* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +;* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +;* THE SOFTWARE. +;******************************************************************************** +;********************************************************************************/ + +;#include "task.h" +;#include "checksum.h" + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + + +.export chks +.export ip_checksum +.export add_checksum + +;** +;* Last checksum computation result. +;*/ +;chks_t chks; +chks: + .word 0 + +_a: .byte 0 +_b: .byte 0 +_c: .byte 0 +_b16: .word 0 + + +;** +;* Sums a 16-bit word to the current checksum value. +;* Optimized for 8-bit word processors. +;* The result is found in chks. +;* @param v Value to sum. +;*/ +; in: r0 - word +add_checksum: + ;* + ;* First byte (MSB). + ;* + MoveB chks, _a + + MoveB _a, _b16 + LoadB _b16+1, 0 + LoadB r1H, 0 + MoveB r0H, r1L + AddW r1, _b16 + MoveB _b16, _b + MoveB _b16+1, _c + + MoveB _b, chks + + ;* + ;* Second byte (LSB). + ;*/ + MoveB chks+1, _a + MoveB _a, _b16 + LoadB _b16+1, 0 + LoadB r1H, 0 + MoveB r0L, r1L + AddW r1, _b16 + MoveB _c, r1L + AddW r1, _b16 + MoveB _b16, _b + MoveB _b16+1, _c + + MoveB _b, chks+1 + + ;* + ;* Test for carry. + ;* + lda _c + beq @10 + + inc chks + bne @10 + inc chks+1 +@10: + rts + +;** +;* Calculate checksum for a memory area (must be word-aligned). +;* Pad a zero byte, if the size is odd. +;* Optimized for 8-bit word processors. +;* The result is found in chks. +;* @param p Pointer to a memory buffer. +;* @param t Data size in bytes. +;*/ +; in: r0 - buffer address, r1 - buffer size +ip_checksum: + LoadB _c, 0 + +@loop: + CmpWI r1, 0 + bne @11 + jmp @10 +@11: + ;* + ;* First byte (do not care if LSB or not). + ;*/ + MoveB chks, _a + + LoadB _b16+1, 0 + MoveB _a, _b16 + + LoadB r2H, 0 + MoveB _c, r2L + AddW r2, _b16 + ldy #0 + lda (r0), y + sta r2L + IncW r0 + AddW r2, _b16 + MoveB _b16, _b + MoveB _b16+1, _c + + MoveB _b, chks + DecW r1 + + CmpWI r1, 0 + bne @20 + ;* + ;* Pad a zero. Just test the carry. + ;*/ + + CmpBI _c, 0 + beq @30 + inc chks+1 + lda chks+1 + cmp #0 + bne @30 + + inc chks +@30: + bra @done +@20: + ;* + ;* Second byte (do not care if MSB or not). + ;*/ + MoveB chks+1, _a + + MoveB _a, _b16 + LoadB _b16+1, 0 + + MoveB _c, r2L + LoadB r2H, 0 + AddW r2, _b16 + + ldy #0 + lda (r0), y + sta r2L + IncW r0 + AddW r2, _b16 + MoveB _b16, _b + MoveB _b16+1, _c + MoveB _b, chks+1 + + DecW r1 + jmp @loop +@10: + ;* + ;* Test the carry. + ;*/ + CmpBI _c, 0 + beq @done + inc chks + CmpBI chks, 0 + bne @done + inc chks+1 +@done: + rts diff --git a/space/ip/defs.inc b/space/ip/defs.inc new file mode 100644 index 00000000..9003e2ef --- /dev/null +++ b/space/ip/defs.inc @@ -0,0 +1,91 @@ +MAX_SOCKET = 8 + +SOCKET_SIZE = 43 + + +;* +;* Transport Control Protocol flags. +;* +URG = $20 ;///< Urgent pointer valid (not used). +ACK = $10 ;///< ACK field valid. +PSH = $08 ;///< Push data. +RST = $04 ;///< Reset connection. +SYN = $02 ;///< Synchronize (connection startup). +FIN = $01 ;///< Finalize (connection end). + +_IDLE = 0 +_LISTEN = 1 +_SYN_SENT = 2 +_SYN_REC = 3 +_ACK_REC = 4 +_CONNECT = 5 +_ACK_WAIT = 6 +_FIN_SENT = 7 +_FIN_REC = 8 +_FIN_ACK_REC = 9 + +SOCKET_TYPE_OFFSET = 0 +SOCKET_LISTEN_OFFSET = 1 +SOCKET_TIMEOUT_OFFSET = 2 +SOCKET_TIME_OFFSET = 3 +SOCKET_STATE_OFFSET = 4 +SOCKET_RETRY_OFFSET = 5 +SOCKET_TO_SEND_OFFSET = 6 +SOCKET_RX_OFFSET = 7 +SOCKET_TX_OFFSET = 9 +SOCKET_RX_SIZE_OFFSET = 11 +SOCKET_TX_SIZE_OFFSET = 13 +SOCKET_RX_DATA_OFFSET = 15 +SOCKET_RX_OO_START_OFFSET = 17 +SOCKET_RX_OO_END_OFFSET = 19 +SOCKET_CALLBACK_OFFSET = 21 +SOCKET_PORT_OFFSET = 23 +SOCKET_REMPORT_OFFSET = 25 +SOCKET_REMIP_OFFSET = 27 +SOCKET_SEQ_OFFSET_DW = 31 +SOCKET_REMSEQ_OFFSET_DW = 35 +SOCKET_REMSEQSTART_OFFSET_DW = 39 + +SOCKET_FREE = 0 +SOCKET_UDP = 1 +SOCKET_TCP = 2 + +RETRIES_TCP = 30 +TIMEOUT_TCP = 15 +TCP_HDR_SIZE = 20 +UDP_HDR_SIZE = 8 + +DNS_BUF_SIZE = 512 +DSN_QUERY_SIZE = 512 + +WEEIP_EV_NONE = 0 +WEEIP_EV_CONNECT = 1 ;///< Connection established. +WEEIP_EV_DISCONNECT = 2 ;///< Disconnection from peer. +WEEIP_EV_DISCONNECT_WITH_DATA = 3 ;///< Disconnection from peer, but packet also contains data +WEEIP_EV_DATA = 4 ;///< Data arrival. +WEEIP_EV_DATA_SENT = 5 ;///< Data sent. + +TICK_TCP = 44 ;// one second + +IP_HDR_SIZE = 20 + + +TCP_HDR_SOURCE_OFFSET = 0+IP_HDR_SIZE +TCP_HDR_DEST_OFFSET = 2+IP_HDR_SIZE +TCP_HDR_N_SEQ_OFFSET = 4+IP_HDR_SIZE +TCP_HDR_N_ACK_OFFSET = 8+IP_HDR_SIZE +TCP_HDR_ACK_OFFSET_DW = 8+IP_HDR_SIZE +TCP_HDR_HLEN = 12+IP_HDR_SIZE +TCP_HDR_FLAGS = 13+IP_HDR_SIZE +TCP_HDR_CHECKSUM_OFFSET = 16+IP_HDR_SIZE + +IP_HDR_VER_LENGTH_OFFSET = 0 +IP_HDR_LENGTH_OFFSET = 2 +IP_HDR_ID = 4 +IP_HDR_PROTO_OFFSET = 9 +IP_HDR_CHECKSUM_OFFSET = 10 +IP_HDR_SOURCE_OFFSET = 12 +IP_HDR_DEST_OFFSET = 16 + +UDP_HDR_CHECKSUM_OFFSET = 6+IP_HDR_SIZE +UDP_HDR_LENGTH_OFFSET = 4+IP_HDR_SIZE diff --git a/space/ip/dhcp.s b/space/ip/dhcp.s new file mode 100644 index 00000000..f7c72112 --- /dev/null +++ b/space/ip/dhcp.s @@ -0,0 +1,760 @@ +;#include + +;#include "weeip.h" +;#include "eth.h" +;#include "arp.h" +;#include "dns.h" +;#include "dhcp.h" + +;#include "memory.h" +;#include "random.h" + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + +.include "defs.inc" + + +.import socket_send +.import socket_connect +.import socket_set_rx_buffer +.import socket_set_callback +.import socket_create +.import socket_release +.import socket_select + +.import ip_local +.import ip_dnsserver +.import ip_mask +.import ip_gate +.import mac_local +.import task_add + +.export dhcp_configured +.export dhcp_autoconfig + + +;// Don't request DHCP retries too quickly +;// as the network tick loop may be called +;// very fast during configuration +DHCP_RETRY_TICKS = 255 + +dhcp_configured: + .byte 0 +dhcp_acks: + .byte 0 +dhcp_xid: + .byte 0, 0, 0, 0 + +.import ip_broadcast ;///< Subnetwork broadcast address +ip_dhcpserver: + .byte 0, 0, 0, 0 + +;// Share data buffer with DNS client to save space +;// NOTE: dns_query must be at least 512 bytes long +.import dns_query +.import dns_buf +dhcp_socket: + .word 0 + +dhcprtryName: + .byte "dhcprtry", NULL + +;void dhcp_send_query_or_request(unsigned char requestP); + + + +dhcp_reply_handler: + + ;unsigned int type,len,offset; + ;unsigned int i; + ; offset => r2 + ; type = r4L + ; len = r4H + cmp #WEEIP_EV_DATA + beq @101 + rts +@102b: + jmp @100 +@101: + PushW r0 + PushW r1 + PushW r2 + PushW r3 + PushW r4 + PushW r5 + PushW r6 + PushW r7 + PushW r8 + PushW r9 + + MoveW dhcp_socket, r1 + jsr socket_select + + lda r0L + ;// First time it will be the offer. + ;// And actually, that's all we care about receiving. +;// We MUST however, send the ACCEPT message. +;// Checbk that XID matches us +ldx #0 +@21: + lda dhcp_xid, x + cmp dns_buf+4,x + bne @20 + inx + cpx #6 + bne @21 +@20: + cpx #4 + bcc @102b ; branch x < #4 + + ;// Check that MAC address matches us + ldx #0 +@31: + lda dns_buf+$1c,x + cmp mac_local,x + bne @30 + inx + cpx #6 + bne @31 +@30: + cpx #6 + bcc @102b + + ;// Check that its a DHCP reply message + lda dns_buf + cmp #$02 + bne @102 + lda dns_buf+1 + cmp #$01 + bne @102 + lda dns_buf+2 + cmp #$06 + bne @102 + lda dns_buf+3 + cmp #$00 + bne @102 + + ;// Ok, its for us. Extract the info we need. + + ;// Default mask 255.255.255.0 + LoadB ip_mask, $FF + LoadB ip_mask+1, $FF + LoadB ip_mask+2, $FF + LoadB ip_mask+3, 0 + + ;// DNS defaults to the DHCP server, unless specified later in an option + ;// (This is required because although we ask for it in our request, + ;// Fritz Boxes at least seem to not always provide it, even when asked.) + ldx #0 + @40: + lda dns_buf+20, x + sta ip_dnsserver, x + sta ip_dhcpserver,x + inx + cpx #4 + bne @40 + + ;// Set our IP from BOOTP field + ldx #0 +@41: + lda dns_buf+$10, x + sta ip_local,x + inx + cpx #4 + bne @41 + +.ifdef DEBUG_DHCP + ;printf("IP is %d.%d.%d.%d\n",ip_local.b[0],ip_local.b[1],ip_local.b[2],ip_local.b[3]); +.endif + + ;// Only process DHCP fields if magic cookie is set + lda dns_buf+$ec + cmp #$63 + bne @103 + lda dns_buf+$ed + cmp #$82 + bne @103 + lda dns_buf+$ee + cmp #$53 + bne @103 + lda dns_buf+$ef + cmp #$63 + beq @104 +@103: + jmp @100 +@cont2: + jmp @cont +@102: + jmp @100 +@104: +.ifdef DEBUG_DHCP + printf("Parsing DHCP fields $%002x\n",dns_buf[0xf2]); +.endif + lda dns_buf+$f2 + cmp #$02 + beq @501 + jmp @500 +@501: + LoadW r2, $f0 + +@loop: + LoadW r3, dns_buf + AddW r2, r3 + ldy #0 + lda (r3),y + cmp #$FF ; end of record? + beq @cont2 + CmpW r2, 512 + bcs @do + jmp @cont2 +@do: + ldy #0 + lda (r3),y + bne @99 + IncW r2 + jmp @98 +@99: + sta r4L + + ;// Skip field type + IncW r2 + ;// Parse and skip length marker + LoadW r3, dns_buf + AddW r2, r3 + lda (r3), y + sta r4H + IncW r2 + + ;// offset now points to the data field. + lda r4L + cmp #$01 + bne @81 + LoadW r3, dns_buf + AddW r2, r3 + ldy #0 +@82: + lda (r3), y + sta ip_mask, y + iny + cpy #4 + bne @82 +.ifdef DEBUG_DHCP + ;printf("Netmask is %d.%d.%d.%d\n",ip_mask.b[0],ip_mask.b[1],ip_mask.b[2],ip_mask.b[3]); +.endif + bra @89 +@81: + cmp #$03 + bne @83 + + LoadW r3, dns_buf + AddW r2, r3 + + ldy #0 +@84: + lda (r3), y + sta ip_gate, y + iny + cpy #4 + bne @84 + +.ifdef DEBUG_DHCP + ;printf("Gateway is %d.%d.%d.%d\n",ip_gate.b[0],ip_gate.b[1],ip_gate.b[2],ip_gate.b[3]); +.endif + bra @89 +@83: + cmp #$06 + bne @89 + + ldy #0 + LoadW r3, dns_buf + AddW r2, r3 +@88: + lda (r3), y + sta ip_dnsserver, y + iny + cpy #4 + bne @88 + +.ifdef DEBUG_DHCP + ;printf("DNS option is %d.%d.%d.%d\n",ip_dnsserver.b[0],ip_dnsserver.b[1],ip_dnsserver.b[2],ip_dnsserver.b[3]); +.endif +@89: + ;// Skip over length and continue + MoveB r4H, r3L + LoadB r3H, 0 + AddW r3, r2 + jmp @loop +@98: +@cont: + + ;// Compute broadcast address + ldx #0 +@85: + lda #$FF + eor ip_mask, x + and #$FF + ora ip_local, x + sta ip_broadcast, x + inx + cpx #4 + bne @85 + +.ifdef DEBUG_DHCP + ;printf("Broadcast is %d.%d.%d.%d\n",ip_broadcast.b[0],ip_broadcast.b[1],ip_broadcast.b[2],ip_broadcast.b[3]); +.endif + ;// XXX We SHOULD send a packet to acknowledge the offer. + ;// It works for now without it, because we start responding to ARP requests which + ;// sensible DHCP servers will perform to verify occupancy of the IP. +.ifdef DEBUG_DHCP + printf("Sending DHCP ACK\n"); +.endif + lda #1 + jsr dhcp_send_query_or_request + ;// Fritz box only sends DHCP ACK, not message type 5, so we just give up + ;// after a couple of goes + + inc dhcp_acks + lda dhcp_acks + cmp #2 + beq @86 + bcc @86 + + LoadB dhcp_configured, 1 + + lda ip_dnsserver + ora ip_dnsserver+1 + ora ip_dnsserver+2 + ora ip_dnsserver+3 + + MoveW dhcp_socket, r1 + jsr socket_release +@86: + bra @502 +@500: + cmp #$05 + bne @510 + + ;// Mark DHCP configuration complete, and free the socket + LoadB dhcp_configured, 1 +.ifdef DEBUG_DHCP + printf("DHCP configuration complete.\n"); +.endif + MoveW dhcp_socket, r1 + jsr socket_release + bra @502 + +@510: + +.ifdef DEBUG_DHCP + printf("Unknown DHCP message\n"); +.endif +@502: +@100: + PopW r9 + PopW r8 + PopW r7 + PopW r6 + PopW r5 + PopW r4 + PopW r3 + PopW r2 + PopW r1 + PopW r0 + rts + +dhcp_autoconfig_retry: + lda dhcp_configured + bne @10 + ;// This will automatically re-add us to the list + lda #0 + jsr dhcp_send_query_or_request + LoadW r0, dhcp_autoconfig_retry + LoadW r1, DHCP_RETRY_TICKS + LoadW r2, dhcprtryName + jsr task_add +@10: + rts + +; out: carry set dhcp done +dhcp_autoconfig: + lda dhcp_configured + bne @10 + + ;// Initially we have seen zero DHCP acks + LoadB dhcp_acks, 0 + + LoadB r0L, SOCKET_UDP + jsr socket_create + MoveW r1, dhcp_socket + + LoadW r0, dhcp_reply_handler + jsr socket_set_callback + + LoadW r0, dns_buf + LoadW r1, DNS_BUF_SIZE + jsr socket_set_rx_buffer + + lda #0 + jsr dhcp_send_query_or_request + + ;// Mark ourselves as not yet having configured by DHCP + LoadB dhcp_configured, 0 + + ;// Schedule ourselves to retransmit DHCP query until we are configured + LoadW r0, dhcp_autoconfig_retry + LoadW r1, DHCP_RETRY_TICKS + LoadW r2, dhcprtryName + jsr task_add +@10: + sec + rts + +; in: requestP +dhcp_send_query_or_request: + sta r7L + ;uint16_t dhcp_query_len=0; + ;unsigned char i; + ;IPV4 ip_broadcast; + + MoveW dhcp_socket, r1 + jsr socket_select + + ldx #0 + lda #$FF +@440: + sta ip_broadcast, x + inx + cpx #4 + bne @440 + + MoveW ip_broadcast, r0 + MoveW ip_broadcast+2, r1 + LoadW r2, 67 + jsr socket_connect + + ;// force local port to 68 + ;// (reversed byte order for network byte ordering) + MoveW dhcp_socket, r8 + ldy #SOCKET_PORT_OFFSET + lda #0 + sta (r8), y + iny + lda #68 + sta (r8), y + + ;// Now form our DHCP discover message + ;// 16-bit random request ID: + + LoadW r3, 0 + + LoadW r4, dns_query + AddW r3, r4 + ldy #0 + lda #$01 ; // OP + sta (r4), y + IncW r3 + IncW r4 + lda #$01 ; // HTYPE + sta (r4), y + IncW r3 + IncW r4 + lda #$06 ; // HLEN + sta (r4), y + IncW r3 + IncW r4 + lda #$00 ; // HOPS + sta (r4), y + IncW r3 + IncW r4 + + ;// Transaction ID + ;// PGS Generate a single XID we use across multiple requests, to + ;// avoid race conditions where a reply might always come just as + ;// we have sent of a new request with a different XID. + ;// (I have seen this happen quite a number of times). + lda dhcp_xid + ora dhcp_xid+1 + ora dhcp_xid+2 + ora dhcp_xid+3 + bne @655 + lda $D012 + sta random+1 + jsr GetRandom + + jsr GetRandom + lda random + sta dhcp_xid + lda random+1 + sta dhcp_xid+1 + jsr GetRandom + lda random + sta dhcp_xid+2 + lda random+1 + sta dhcp_xid+3 +@655: + LoadW r4, dns_query + AddW r3, r4 + + ldx #0 + ldy #0 +@656: + lda dhcp_xid, x + sta (r4), y + IncW r4 + IncW r3 + inx + cpx #4 + bne @656 + + LoadW r4, dns_query + AddW r3, r4 + ldy #0 + lda #0 ;// SECS since start of request + sta (r4), y + IncW r3 + IncW r4 + lda #0 ;// SECS since start of request + sta (r4), y + IncW r3 + IncW r4 + lda #0 + sta (r4), y + IncW r3 + IncW r4 + lda #0 ;// FLAGS + sta (r4), y + IncW r3 + IncW r4 + + ;// Various empty fields + ldx #0 + ldy #0 + lda #0 ;// FLAGS +@432: + sta (r4), y + iny + cpy #16 + bne @432 + + lda r7L + beq @441 + + LoadW r4, dns_query + AddW r3, r4 + + ;// Client IP + ldy #0 +@451: + lda ip_local, y + sta (r4), y + iny + cpy #4 + bne @451 + + AddVW 8, r4 + + ;// Server IP + ldy #0 +@452: + lda ip_dhcpserver, y + sta (r4), y + iny + cpy #4 + bne @452 +@441: + AddVW 16, r3 + + ;// our MAC address padded to 192 bytes + LoadW r4, dns_query + AddW r3, r4 + ldy #0 +@453: + lda mac_local, y + beq @454 + sta (r4), y + iny + cpy #6 + bne @453 + + lda #0 +@454: + sta (r4), y + iny + cpy #16+192 + bne @454 + + AddVW 16+192, r3 + + ;// DHCP magic cookie + LoadW r4, dns_query + AddW r3, r4 + ldy #0 + lda #$63 + sta (r4), y + IncW r3 + IncW r4 + lda #$82 + sta (r4), y + IncW r3 + IncW r4 + lda #$53 + sta (r4), y + IncW r3 + IncW r4 + lda #$63 + sta (r4), y + IncW r3 + IncW r4 + lda #$35 + sta (r4), y + IncW r3 + IncW r4 + lda #$01 + sta (r4), y + IncW r3 + IncW r4 + + LoadW r4, dns_query + AddW r3, r4 + ;if (requestP) + lda r7L + beq @803 + ldy #0 + lda #$03 + sta (r4), y ;// DHCP request (i.e., client accepting offer) + IncW r3 + bra @804 +@803: + ldy #0 + lda #$01 + sta (r4), y ;// DHCP discover + IncW r3 +@804: + ;// Pad to word boundary + LoadW r4, dns_query + AddW r3, r4 + IncW r3 + ldy #0 + lda #0 + sta (r4), y + + lda r7L + bne @618 + jmp @607 +@618: + ;// BOOTP option $32 Confirm IP address + LoadW r4, dns_query + AddW r3, r4 + + ldy #0 + lda #$32 + sta (r4), y + IncW r3 + IncW r4 + + lda #$04 + sta (r4), y + IncW r3 + IncW r4 + + ldx #0 +@801: + lda ip_local, x + sta (r4), y + IncW r3 + IncW r4 + inx + cpx #4 + bne @801 + + ;// BOOTP $36 Confirm DHCP server + lda #$36 + sta (r4), y + IncW r3 + IncW r4 + + lda #$04 + sta (r4), y + IncW r3 + IncW r4 + + ldx #0 +@802: + lda ip_dhcpserver, x + sta (r4), y + IncW r3 + IncW r4 + inx + cpx #4 + bne @802 + jmp @608 +@607: + ;// Request subnetmask, router, domainname, DNS server + LoadW r4, dns_query + AddW r3, r4 + + ldy #0 + lda #$37 + sta (r4), y + IncW r3 + IncW r4 + + lda #$05 + sta (r4), y + IncW r3 + IncW r4 + + lda #$01 + sta (r4), y + IncW r3 + IncW r4 + + lda #$03 + sta (r4), y + IncW r3 + IncW r4 + + lda #$0f + sta (r4), y + IncW r3 + IncW r4 + + lda #$06 + sta (r4), y + IncW r3 + IncW r4 + + lda #$06 + sta (r4), y + IncW r3 + IncW r4 +@608: + ;// End of request + LoadW r4, dns_query + AddW r3, r4 + ldy #0 + lda #$FF + sta (r4), y + IncW r3 + IncW r4 + + ;// Pad out to standard length +@601: + CmpWI r3, 512 + ;bcs @600 + beq @600 + LoadW r4, dns_query + AddW r3, r4 + IncW r3 + ldy #0 + lda #0 + sta (r4), y + bra @601 +@600: + LoadW r0, dns_query + MoveW r3, r1 + jsr socket_send + rts diff --git a/space/ip/dns.s b/space/ip/dns.s new file mode 100644 index 00000000..e0861e1f --- /dev/null +++ b/space/ip/dns.s @@ -0,0 +1,558 @@ +;#include +;#include + +;#include "weeip.h" +;#include "eth.h" +;#include "arp.h" +;#include "dns.h" + +;#include "memory.h" +;#include "random.h" + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + +.include "defs.inc" + + +.import socket_release +.import task_periodic +.import socket_connect +.import ip_dnsserver +.import socket_select +.import socket_set_rx_buffer +.import socket_set_callback +.import socket_create +.import socket_send + +.export dns_query +.export dns_buf +.export dns_hostname_to_ip + + +dns_query_returned: + .byte 0 + +dns_return_ip: + .byte 0, 0, 0, 0 + +dns_socket: + .word 0 + +dns_query: + .repeat DSN_QUERY_SIZE + .byte 0 + .endrep + +dns_query_len: + .word 0 +dns_buf: + .repeat DNS_BUF_SIZE + .byte 0 + .endrep + + +; in: r0 ptr to host name to query: +dns_construct_hostname_to_ip_query: + ;unsigned char prefix_position,i; + ;unsigned char field_len; + ; prefix_position => r3L + + ;// Now form our DNS query + ;// 16-bit random request ID: + jsr GetRandom + lda random + sta dns_query + lda random+1 + sta dns_query+1 + ;// Request flags: Is request, please recurse etc + LoadB dns_query+2, $01 + LoadB dns_query+3, $00 + ;// QDCOUNT = 1 (one question follows) + LoadB dns_query+4, $00 + LoadB dns_query+5, $01 + ;// ANCOUNT = 0 (no answers follow) + LoadB dns_query+6, $00 + LoadB dns_query+7, $00 + ;// NSCOUNT = 0 (no records follow) + LoadB dns_query+8, $00 + LoadB dns_query+9, $00 + ;// ARCOUNT = 0 (no additional records follow) + LoadB dns_query+10, $00 + LoadB dns_query+11, $00 + LoadW dns_query_len, 12 + + ;// Now convert dotted hostname to DNS field format. + ;// This involves changing each . to the length of the following field, + ;// adding a $00 to the end, and prefixing the whole thing with the + ;// length of the first part. + ;// This is most easily done by reserving the prefix byte first, and whenever + ;// we hit a . or end of string, updating the previous prefix byte. + MoveB dns_query_len, r3L + inc dns_query_len + + PushW r0 ; hostname + LoadW r1, dns_query + AddW dns_query_len, r1 + ldy #0 + sty r2H +@21: + lda (r0), y + beq @22 + iny + bne @21 +@22: + iny + sty r2L + jsr MoveData + PopW r0 + LoadB r3H, 0 + + ldx #0 + ldy #0 +@dnsLoop: + lda (r0), y + ;iny + cmp #'.' + beq @dnsPart + cmp #0 + bne @dnsNext +@dnsPart: + txa + ldx r3L + sta dns_query, x + tax + inc + clc + adc r3L + sta r3L + ldx #0 ; field_len = 0 + bra @33 +@dnsNext: + inx +@33: + lda (r0), y + beq @34 + iny + bra @dnsLoop +@34: + ldy r3L + iny + sty dns_query_len + LoadB dns_query_len+1, 0 + + ;// QTYPE = 0x0001 = "A records" + LoadW r1, dns_query + AddW dns_query_len, r1 + ldy #0 + lda #$00 + sta (r1), y + iny + lda #$01 + sta (r1), y + iny + ;// QCLASS = 0x0001 = "internet addressses + lda #$00 + sta (r1), y + iny + lda #$01 + sta (r1), y + AddVW 4, dns_query_len + rts + + +dns_reply_handler: + + cmp #WEEIP_EV_DATA + beq @10b + rts +@10b: + PushW r0 + PushW r1 + PushW r2 + PushW r3 + PushW r4 + PushW r5 + PushW r6 + PushW r7 + PushW r8 + PushW r9 + + ;unsigned int ofs; + ;unsigned char i,j; + + ;// printf("DNS packet seen.\n"); + + MoveW dns_socket, r0 + jsr socket_select + +;// Check that query ID matches + lda dns_buf + cmp dns_query + bne @10a + lda dns_buf+1 + cmp dns_query+1 + bne @10a + + ;// Check that it is a reply + lda dns_buf+2 + cmp #$81 + beq @20 + cmp #$85 + bne @10a +@20: + ;// Check if we have at least one answer + lda dns_buf+6 + ora dns_buf+7 + bne @30 + + ;// printf("DNS response contained no answers.\n"); + bra @10a +@10a: + jmp @10 +@30: + ;// Skip over the question text (HACK: Search for first $00 byte) + LoadW r1, dns_buf + AddVW $0c, r1 + ldy #0 +@31: + lda (r1), y + beq @40 + IncW r1 + bra @31 +@40: + ;// Then skip that $00 byte + IncW r1 + + ;// Skip over query type and class if correct + lda (r1), y + cmp #$00 + bne @10a + IncW r1 + lda (r1), y + cmp #$01 + bne @10a + IncW r1 + + lda (r1), y + cmp #$00 + bne @10a + IncW r1 + lda (r1), y + cmp #$01 + beq @10c +@10d: + jmp @10 +@10c: + IncW r1 + + ;// Now we are at the start of the answer section + ;// Assume that answers will be pointers to the name in the query. + ;// For this we look for fixed value $c0 $0c indicating pointer to the name in the query + lda (r1), y + cmp #$c0 + bne @10d + IncW r1 + lda (r1), y + cmp #$0c + bne @10d + IncW r1 + + ;// Check if it is a CNAME, in which case we need to re-issue the request for the + ;// CNAME + lda (r1), y + cmp #$00 + beq @11a +@11b: + jmp @11 +@11a: + iny + lda (r1), y + cmp #$05 + bne @11b + IncW r1 + IncW r1 + + ;// printf("DNS server responded with a CNAME\n"); + ;// Skip TTL and size + AddVW 8, r1 + + ;// We should now have len+string tuples following. + ;// So decode those into a hostname string, and resolve that instead + ;// We decode them into place in dns_buf to avoid having a separate buffer + ldx #0 ; i=0; +@101: + ;while(dns_buf[ofs]) { + ldy #0 + lda (r1), y + bne @100 + + cmp #$C0 + bcc @102 + + ;// Expand compressed name pointers + IncW r1 + lda (r1), y + sta r1L + LoadB r1H, 0 + AddW dns_buf, r1 +@102: + LoadB r2L,0 ; j in the original + cpx #0 + beq @103 + lda #'.' + sta dns_buf, x + inx +@103: + ldy #0 + lda (r1), y + beq @104 + dec + sta (r1), y + + iny + tya + clc + adc r2L + tay + lda (r1), y + sta dns_buf, x + inx + inc r2L + bne @103 +@104: + IncW r1 + LoadB r2H, 0 + AddW r2, r1 + lda #0 + sta dns_buf, x + bra @101 +@100: + + ;printf("Resolving CNAME '%s' ...\n",dns_buf); + LoadW r0, dns_buf + jsr dns_construct_hostname_to_ip_query + LoadW r0, dns_query + MoveW dns_query_len, r1 + jsr socket_send +@11: + ;// Then we check that answer type is $00 $01 = "type a" + ldy #0 + lda (r1), y + cmp #$00 + bne @10 + iny + lda (r1), y + cmp #$01 + bne @10 + IncW r1 + IncW r1 + dey + ;// Then we check that answer class is $00 $01 = "IPv4 address" + lda (r1), y + cmp #$00 + bne @10 + iny + lda (r1), y + cmp #$01 + bne @10 + IncW r1 + IncW r1 + dey + ;// Now we can just skip over the TTL and size, by assuming its a 4 byte + AddVW 6, r1 + + ;// IP address + ldy #0 + lda (r1), y + sta dns_return_ip, y + iny + lda (r1), y + sta dns_return_ip, y + iny + lda (r1), y + sta dns_return_ip, y + iny + lda (r1), y + sta dns_return_ip, y + iny + LoadB dns_query_returned, 1 +@10: + PopW r9 + PopW r8 + PopW r7 + PopW r6 + PopW r5 + PopW r4 + PopW r3 + PopW r2 + PopW r1 + PopW r0 + rts + +;unsigned char offset=0; +;unsigned char bytes=0; +;unsigned char value=0; + +;in: r0 - hostname, r1 - ip address ptr +;out: carry - set if +dns_hostname_to_ip: + ;EUI48 mac; + ;unsigned char next_retry,retries; + + ;// Check if IP address, and if so, parse directly. + ;offset=0; bytes=0; value=0; + + LoadB r2L, 0 ; value + ldx #0 ; bytes + ldy #0 ; offset +@30: + lda (r0), y + beq @10 + cmp #'.' + bne @11 + lda r2L + sta dns_return_ip,x + inx + LoadB r2L, 0 ; restart value with 0 + cpx #3 + beq @12 + bcs @100 ; branch if x > 3 and '.' found +@12: + iny + bra @30 + @11: + cmp #'0' + bcc @10 ;// Not a digit or a period, so its not an IP address + cmp #'9' + beq @13 + bcs @10 +@13: + lda r2L + asl ; by 2 + asl ; by 4 + asl ; by 8 + clc + adc r2L + clc + adc r2L + sta r2L + lda (r0), y + sec + sbc #'0' + clc + adc r2L + sta r2L + + iny + bra @30 +@10: + cpx #3 + bne @100 + lda (r0), y + bne @100 + + lda r2L + sta dns_return_ip, x + jmp @done + + @100: + PushW r1 + PushW r0 + LoadB r0L, SOCKET_UDP + jsr socket_create + MoveW r1, dns_socket + LoadW r0, dns_reply_handler + jsr socket_set_callback + LoadW r0, dns_buf + LoadW r1, DNS_BUF_SIZE + jsr socket_set_rx_buffer + + ;// Before we get any further, send an ARP query for the DNS server + ;// (or if it isn't on the same network segment, for our gateway.) + ;// to prime things. + ;// XXX Should not be necessary, as it will happen automatically? + ;// arp_query(&ip_dnsserver); + ;// arp_query(&ip_gate); + ;// Then wait until we get a reply. + ;// while((!query_cache(&ip_dnsserver,&mac)) &&(!query_cache(&ip_gate,&mac)) ) { + ;// task_periodic(); + ;// } + ;// printf("ARPed"); + + MoveW dns_socket, r1 + jsr socket_select + + MoveW ip_dnsserver, r0 + MoveW ip_dnsserver+2, r1 + LoadW r2, 53 + + lda r0L + ora r0H + ora r1L + ora r1H + bne @999 +@999: + jsr socket_connect + + PopW r0 + jsr dns_construct_hostname_to_ip_query + + LoadW r0, dns_query + MoveW dns_query_len, r1 + jsr socket_send + + PopW r1 + + ;// Run normal network state machine + ;// XXX Call-back handlers for other network tasks can still occur + LoadB dns_query_returned, 0 + + ;// Retry for approx 30 seconds (will be slightly longer on NTSC, as we + ;// time retries based on elapsed video frames). + LoadB r2L, 30 + LoadB dblClickCount, 50 +@203: + lda dns_query_returned + bne @200 + + jsr task_periodic + + ;// Detect timeout, and retry for ~30 seconds + lda dblClickCount + bne @202 + + lda r2L + bne @204 + clc + rts +@204: + MoveW dns_socket, r1 + jsr socket_select + + LoadW r0, dns_query + MoveW dns_query_len, r1 + jsr socket_send + + dec r2L + LoadB dblClickCount, 50 +@202: + bra @203 +@200: + MoveW dns_socket, r1 + jsr socket_release + +@done: + ;// Copy resolved IP address + ldx #0 +@201: + lda dns_return_ip, x + sta r0, x + inx + cpx #4 + bne @201 + + sec + rts diff --git a/space/ip/eth.s b/space/ip/eth.s new file mode 100644 index 00000000..5fe9bba8 --- /dev/null +++ b/space/ip/eth.s @@ -0,0 +1,751 @@ +;** +;* @file eth.c +;* @brief Ethernet management for the MEGA65 45GS100 integrated 100mbit Ethernet controller +;* @compiler CC65 +;* @author Paul Gardner-Stephen (paul@m-e-g-a.org) +;* Based on code by: +;* @author Bruno Basseto (bruno@wise-ware.org) +;*/ + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + +.include "defs.inc" + +;#include +;#include + +;#include +;#include "task.h" +;#include "weeip.h" +;#include "arp.h" +;#include "eth.h" + +;#include "memory.h" +;#include "hal.h" +;#include "debug.h" +;#include "time.h" + +.import arp_query +.import arp_mens +.import query_cache +.import nwk_downstream + +.import _header +.import _header_ip_protocol +.import ip_local +.import task_add + +.export eth_init +.export eth_arp_send +.export eth_clear_to_send +.export eth_write +.export eth_ip_send +.export eth_packet_send +.export mac_local +.export ip_dnsserver +.export ip_mask +.export ip_gate +.export eth_task + +.export dmalist_count +.export dmalist_source_mb +.export dmalist_source_bank +.export dmalist_source_addr +.export dmalist_dest_mb +.export dmalist_dest_bank +.export dmalist_dest_addr +.export do_dma + + + +.segment "STARTUP" + +_PROMISCUOUS = 1 +NOCRCCHECK = 1 + +eth_log_mode: + .byte 0 + +eth_size: + .word 0 ;// Packet size. + +eth_tx_len: + .word 0 ;// Bytes written to TX buffer + + +ip_mask: ; IPV4 ///< Subnetwork address mask. + .dword 0 +ip_gate: + .dword 0 ; IPV4 ///< IP Gateway address. +ip_dnsserver: + .dword 0 ; IPV4 ///< DNS Server IP + +;** +;* Ethernet frame header. +;*/ +;typedef struct { +; EUI48 destination; ///< Packet Destination address. +; EUI48 source; ///< Packet Source address. +; uint16_t type; ///< Packet Type or Size (big-endian) +;} ETH_HEADER; + +ethtaskName: + .byte "ethtask", 0 + +;/** +; * Ethernet frame header buffer. +; */ +eth_header: +eth_header_destination: + .byte 0, 0, 0, 0, 0, 0 +eth_header_source: + .byte 0, 0, 0, 0, 0, 0 +eth_header_type: + .word 0 + +ETH_TX_BUFFER = $FFDE800 +ETH_RX_BUFFER = $FFDE800 + +ETH_HEADER_SIZE = 14 +ARP_HDR_SIZE = 28 +ICMP_HDR_SIZE = 8 + +IP_PROTO_TCP = 6 ;///< TCP packet. +IP_PROTO_UDP = 17 ;///< UDP packet. +IP_PROTO_ICMP = 1 ;///< ICMP packet. + +;/** +; * Local MAC address. +; */ +mac_local: + .byte 0, 0, 0, 0, 0, 0 + +MTU = 2048 + +tx_frame_buf = $5800 + ;.repeat MTU + ; .byte 0 + ;.endrep + +dmalist: + ;// Enhanced DMA options + .byte $0b ;option_0b; + .byte $80 ;option_80; +dmalist_source_mb: + .byte 0 ;source_mb; + .byte $81 ;option_81; +dmalist_dest_mb: + .byte 0 ;dest_mb; + .byte 0 ;end_of_options; + + ;// F018B format DMA request + .byte 0 ;command; // copy +dmalist_count: + .word 0 ;count; +dmalist_source_addr: + .word 0 ;source_addr; +dmalist_source_bank: + .byte 0 ;source_bank; +dmalist_dest_addr: + .word 0 ;dest_addr; +dmalist_dest_bank: + .byte 0 ;dest_bank; + .byte 0 ;sub_cmd; // F018B subcmd + .word 0 ;modulo; // unset in lcopy + + +; in: a byte to send +; destroyed: x +eth: + tax + CmpWI eth_tx_len, MTU + beq @1 ; branch if eth_tx_len bigger or equal MTU + bcs @1 + PushW r0 + LoadW r0, tx_frame_buf + AddW eth_tx_len, r0 + ldy #0 + txa + sta (r0), y + PopW r0 +@1: IncW eth_tx_len + rts + +;* +;* Check if the transceiver is ready to transmit a packet. +;* @return TRUE if a packet can be sent. +;* +; out: c set if +eth_clear_to_send: + lda $D6E0 + and #$80 + bne @1 + clc + rts +@1: + sec + rts + +;** +;* Command the ethernet controller to discard the current frame in the +;* RX buffer. +;* Select next one, if existing. +;* +eth_drop: + ;// Do nothing, as we pop the ethernet buffer off when asking for a frame in + ;// eth_task(). + rts + +do_dma: + LoadB $d702, 0 + LoadB $d704, $00 ; // List is in $00xxxxx + LoadB $d701, >dmalist + LoadB $d705, >2)&3; +.if 0 + // Check the RXIRQ flag to see if we have frames waiting or not + if(!(PEEK(0xD6E1)&0x20)) { + task_add(eth_task, 10, 0,"ethtask"); + return 0; + } +.else + ;// XXX Kludge until the Ethernet controller gets updated to have a working + ;// RX ready flag. + lda $D6EF + tax + lsr + lsr + and #$03 + sta @10+1 + txa + and #$03 + + sec +@10: + sbc #$00 + and #3 + cmp #3 + bne @havePkt + + LoadW r0, eth_task + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, ethtaskName + jsr task_add + + jmp @1000 +@havePkt: +.endif + ;// Get next received packet + ;// Just $01 and $03 should be enough, but then packets may be received in triplicate + ;// based on testing in wirekrill. But clearing bit 1 again solves this problem. + LoadB $D6E1, $01 + LoadB $D6E1, $03 + LoadB $D6E1, $01 + + ;* + ;* A packet is available. + ;* + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, ETH_RX_BUFFER & $ffff; + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + + ;if (eth_log_modeÐ_LOG_RX) { + ; getrtc(&tm); + ; debug_msg(""); + ; snprintf(dbg_msg,80,"%02d:%02d:%02d/%d eth rx\n",tm.tm_hour,tm.tm_min,tm.tm_sec,PEEK(0xD012)); + ; debug_msg(dbg_msg); + ; for(i=0;i<2048;i+=16) { + ; lcopy(ETH_RX_BUFFER+i,(unsigned long)sixteenbytes,16); + ; snprintf(dbg_msg,80," %04x : ",i); + ; for(j=0;j<16;j++) snprintf(&dbg_msg[strlen(dbg_msg)],80-strlen(dbg_msg)," %02x",sixteenbytes[j]); + ; debug_msg(dbg_msg); + ; } + ;} + + ;// +2 to skip length and flags field + LoadW dmalist_count, ETH_HEADER_SIZE + LoadB dmalist_source_addr, 2 ; ETH_RX_BUFFER+2L + LoadW dmalist_dest_addr, eth_header + jsr do_dma + ;lcopy(ETH_RX_BUFFER+2L,(uint32_t)ð_header, sizeof(eth_header)); + + ;* + ;* Check destination address. + ;* + lda #$FF + ldx #6 +@chkBroadcast: + dex + beq @processPkt + cmp eth_header_destination-1,x + beq @chkBroadcast + + ; check for local mac + ldx #0 +@checkLocalMac: + lda mac_local, x + cmp eth_header_destination,x + bne @drop2 ; not for us + inx + cpx #6 + bne @checkLocalMac + +@processPkt: + LoadB dmalist_source_addr, 2+14 ; ETH_RX_BUFFER+2+14 + + ;* + ;* Address match, check protocol. + ;* Read protocol header. + ;* + CmpWI eth_header_type, $0608 ; // big-endian for 0x0806 + bne @checkIP + + ;* + ;* ARP packet. + ;* + LoadW dmalist_count, ARP_HDR_SIZE + LoadW dmalist_dest_addr, _header + jsr do_dma + ;lcopy(ETH_RX_BUFFER+2+14,(uint32_t)&_header, sizeof(ARP_HDR)); + + jsr arp_mens + +@drop2: + jmp @drop + +@checkIP: + CmpWI eth_header_type, $0008 ;// big-endian for 0x0800 + bne @other + + ;* + ;* IP packet. + ;* Verify transport protocol to load header. + ;* + LoadW dmalist_count, IP_HDR_SIZE + LoadW dmalist_dest_addr, _header + jsr do_dma + ;lcopy(ETH_RX_BUFFER+2+14,(uint32_t)&_header, sizeof(IP_HDR)); +;update_cache(&_header.ip.source, ð_header.source); + + LoadB dmalist_source_addr, 2+14+IP_HDR_SIZE ; ETH_RX_BUFFER+2+14 + + LoadW dmalist_dest_addr, _header+IP_HDR_SIZE + + lda _header+IP_HDR_PROTO_OFFSET + cmp #IP_PROTO_UDP + bne @checkTCP + + LoadW dmalist_count, UDP_HDR_SIZE + jsr do_dma + ;lcopy(ETH_RX_BUFFER+2+14+sizeof(IP_HDR),(uint32_t)&_header.t.udp, sizeof(UDP_HDR)); + + bra @ipEnd +@checkTCP: + cmp #IP_PROTO_TCP + bne @checkICMP + + LoadW dmalist_count, TCP_HDR_SIZE + jsr do_dma + ;lcopy(ETH_RX_BUFFER+2+14+sizeof(IP_HDR),(uint32_t)&_header.t.tcp, sizeof(TCP_HDR)); + bra @ipEnd +@checkICMP: + cmp #IP_PROTO_ICMP + bne @unknownIP + LoadW dmalist_count, ICMP_HDR_SIZE + jsr do_dma + ;lcopy(ETH_RX_BUFFER+2+14+sizeof(IP_HDR),(uint32_t)&_header.t.icmp, sizeof(ICMP_HDR)); + bra @ipEnd +@unknownIP: + bra @drop +@ipEnd: + + jsr nwk_downstream + +@other: + ; printf("Unknown ether type $%04x\n",eth_header.type); + +@drop: + jsr eth_drop + ;// We processed a packet, so schedule ourselves immediately, in case there + ;// are more packets coming. + LoadW r0, eth_task + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, ethtaskName + jsr task_add ;// try again to check more packets. +@1000: + ldx #0 +.if 0 + lda $2709 + cmp #$C0 + bne @HOHO + lda r9L + brk + @HOHO2: + lda #$56 + @HOHO: +.endif + PopW r9 + PopW r8 + PopW r7 + PopW r6 + PopW r5 + PopW r4 + PopW r3 + PopW r2 + PopW r1 + PopW r0 + + rts + +;#define IPH(X) _header.ip.X + +; in: r0 - buffer length +; r1 - buffer address +; destroyed: a, x, y +eth_write: + ldx r0L + ldy r0H + + AddW eth_tx_len, r0 + CmpWI r0, MTU + beq @done ; branch if eth_tx_len bigger or equal MTU + bcs @done + + ;lcopy((uint32_t)buf,(unsigned long)&tx_frame_buf[eth_tx_len],len); + + PushW r2 + stx r2L ; amount + sty r2H + MoveW r1, r0 ; src + LoadW r1, tx_frame_buf + AddW eth_tx_len, r1 ; dest + AddW r2, eth_tx_len + jsr MoveData + ldy r2H + MoveW r0, r1 + PopW r2 +@done: + stx r0L + sty r0H + rts + +;** +;* Finish transfering an IP packet to the ethernet controller and start transmission. +;* +eth_packet_send: + + ;unsigned short i; + ;unsigned char j; + ;struct m65_tm tm; + + ;// Set packet length + ;mega65_io_enable(); + MoveB eth_tx_len, $D6E2 + LoadB dblClickCount, 1 +@wait2: + lda dblClickCount + bne @wait2 + MoveB eth_tx_len+1, $D6E3 + + ; setup dmalist to send to ETH_TX_BUFFER + LoadB dmalist_dest_mb, ETH_TX_BUFFER>>20; + LoadB dmalist_dest_bank, (ETH_TX_BUFFER>>16) & $0f; + LoadW dmalist_dest_addr, ETH_TX_BUFFER & $ffff; + + LoadB dmalist_source_mb, 0 ; fetching into bank 0 + LoadB dmalist_source_bank, 0 + + MoveW eth_tx_len, dmalist_count + + LoadW dmalist_source_addr, tx_frame_buf + jsr do_dma + + ;// Copy our working frame buffer to + ;lcopy((unsigned long)tx_frame_buf,ETH_TX_BUFFER,eth_tx_len); + +.if 0 + ;if (eth_log_modeÐ_LOG_TX) { + ; getrtc(&tm); + ; debug_msg(""); + ; snprintf(dbg_msg,80,"%02d:%02d:%02d/%d eth tx\n",tm.tm_hour,tm.tm_min,tm.tm_sec,PEEK(0xD012)); + ; debug_msg(dbg_msg); + ; for(i=0;i> 20 + LoadB dmalist_source_bank, ($FFD36E9>>16) & $0f + LoadW dmalist_source_addr, $FFD36E9 & $ffff + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + + LoadW dmalist_count, 6 + LoadW dmalist_dest_addr, mac_local + jsr do_dma + ;lcopy(0xFFD36E9,(unsigned long)&mac_local.b[0],6); + + ;// Reset, then release from reset and reset TX FSM + LoadB $D6E0,0 + LoadB dblClickCount, 1 +@wait1: + lda dblClickCount + bne @wait1 + LoadB $D6E0,3 + LoadB dblClickCount, 1 +@wait2: + lda dblClickCount + bne @wait2 + LoadB $D6E1,3 + LoadB dblClickCount, 1 +@wait3: + lda dblClickCount + bne @wait3 + LoadB $D6E1,0 + LoadB dblClickCount, 1 +@wait4: + lda dblClickCount + bne @wait4 + + ;// XXX Enable ethernet IRQs? + rts + +;** +;* Disable ethernet controller. +;*/ +eth_disable: + ;* + ;* Wait for any pending activity. + ;*/ + ;; XXX Disable ethernet IRQs? + rts diff --git a/space/ip/nwk.s b/space/ip/nwk.s new file mode 100644 index 00000000..6698dad5 --- /dev/null +++ b/space/ip/nwk.s @@ -0,0 +1,2333 @@ +;** +;* @file nwk.c +;* @brief Network and Transport layers. +;* @compiler CC65 +;* @author Paul Gardner-Stephen (paul@m-e-g-a.org) +;* derived from: +;* @author Bruno Basseto (bruno@wise-ware.org) +;* + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + +.include "defs.inc" +;#include + +;#include "memory.h" +;#include "debug.h" + +;// On MEGA65 we have deep enough stack we don't need to schedule sending +;// ACKs, we can just send them immediately. +;// #define INSTANT_ACK +;// Report various things on serial monitor interface +;// #define DEBUG_ACK + +;// Enable ICMP PING if desired. +;//#define ENABLE_ICMP + + +;* +; Use a graduated timeout that starts out fast, and then slows down, +; so that we spread our timeouts over a longer preiod of time, but +; at the same time, we don't wait forever for initial retries on a +; local LAN +;*/ +;#define SOCKET_TIMEOUT(S) (TIMEOUT_TCP + 32*(RETRIES_TCP - S->retry)) +;//#define DEBUG_TCP_RETRIES +socket_timeout: + lda #RETRIES_TCP + sec + ldy #SOCKET_RETRY_OFFSET + sec + sbc (r8), y + + asl + asl + asl + asl + asl + + clc + adc #TIMEOUT_TCP + rts + +;#define SOCKET_TIMEOUT(S) (TIMEOUT_TCP + 32*(RETRIES_TCP - S->retry)) + +;* +;* Values for protocol field. +;* +IP_PROTO_TCP = 6 ;///< TCP packet. +IP_PROTO_UDP = 17 ;///< UDP packet. +IP_PROTO_ICMP = 1 ;///< ICMP packet. + + +;******************************************************************************** +;******************************************************************************** +;* The MIT License (MIT) +;* +;* Copyright (c) 1995-2013 Bruno Basseto (bruno@wise-ware.org). +;* +;* Permission is hereby granted, free of charge, to any person obtaining a copy +;* of this software and associated documentation files (the "Software"), to deal +;* in the Software without restriction, including without limitation the rights +;* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +;* copies of the Software, and to permit persons to whom the Software is +;* furnished to do so, subject to the following conditions: +;* +;* The above copyright notice and this permission notice shall be included in +;* all copies or substantial portions of the Software. +;* +;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +;* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +;* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +;* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +;* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +;* THE SOFTWARE. +;******************************************************************************** +;********************************************************************************/ + +;#include +;#include "weeip.h" +;#include "checksum.h" +;#include "eth.h" +;#include "arp.h" + +;#include "memory.h" + +.import _sockets +.import ip_checksum + +.import dmalist_source_mb +.import dmalist_source_bank +.import dmalist_source_addr +.import dmalist_dest_mb +.import dmalist_dest_bank +.import dmalist_dest_addr +.import dmalist_count + +.import chks +.import ip_checksum +.import checksum_init +.import add_checksum + +.import eth_packet_send +.import eth_ip_send +.import eth_write +.import eth_clear_to_send + +.import do_dma +.import task_add +.import task_cancel + + +.export _header +.export ip_local +.export nwk_downstream +.export id +.export ip_broadcast +.export nwk_upstream +.export nwk_tick +.export upstreamName +.export nwktickName + + +;** +;* Message header buffer. +;* +_header: + .repeat 40 + .byte 0 + .endrep + +ip_broadcast: ;///< Subnetwork broadcast address + .repeat 4 + .byte 0 + .endrep + +data_size: + .word 0 +data_ofs: + .word 0 +seq: + .dword 0 + +;#define TCPH(X) _header.t.tcp.X +;#define ICMPH(X) _header.t.icmp.X +;#define UDPH(X) _header.t.udp.X +;#define IPH(X) _header.ip.X + + +upstreamName: + .byte "upstream", NULL +nwktickName: + .byte "nwktick", NULL + + +ETH_RX_BUFFER = $FFDE800 + +;// Smaller MTU to save memory +MTU = 1000 +;extern unsigned char tx_frame_buf[MTU]; +;extern unsigned short eth_tx_len; + +;** +;* Packet counter. +;*/ +id: + .word 0 +;** +;* Local IP address. +;*/ +ip_local: + .byte 0, 0, 0, 0 +;** +;* Default header. +;*/ +WINDOW_SIZE_OFFSET = 34 +default_header: + .byte $45, $08, $00, $28, $00, $00, $00, $00, $40, $06 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $50, $00 + ;// TCP Window size + .byte $06, $00 ;// ~1.5KB by default + .byte $00, $00, $00, $00 + + +;** +;* Flags received within last packet. +;* +_flags: + .byte 0 + +;** +;* TCP timing control task. +;* Called periodically at a rate defined by TICK_TCP. +;*/ +nwk_tick: ; (byte_t sig) + rts + ;static byte_t t=0; + + ;* + ;* Loop all sockets. + ;*/ + + ldx #0 + LoadW r8, _sockets +@processSocket: + ldy #0 + lda (r8), y + cmp #SOCKET_TCP + beq @processTCP + jmp @nextSocket + ;// UDP socket or unused. +@processTCP: + ;// if(_sckt->time == 0) continue; + ;// does not have timing requirements. + + ;* + ;* Do socket timing. + ;* + ldy #SOCKET_TIME_OFFSET + lda (r8),y + beq @10 + dec + sta (r8), y + +@10: + beq @processTimeout + jmp @noTimeout + +@processTimeout: + ;* + ;* Timeout. + ;* Check retransmissions. + ;*/ + + ldy #SOCKET_RETRY_OFFSET + lda (r8), y + bne @doRetry + jmp @noRetry +@doRetry: + +.ifdef DEBUG_TCP_RETRIES + printf("tcp retry %d\n",_sckt->retry); +.endif + ldy #SOCKET_RETRY_OFFSET + lda (r8), y + dec + sta (r8), y + + jsr socket_timeout + ldy #SOCKET_TIME_OFFSET + sta (r8), y + + ldy #SOCKET_STATE_OFFSET + lda (r8), y + + cmp #_SYN_SENT + beq @201 + cmp #_ACK_REC + bne @200 +@201: + lda #SYN + ldy #SOCKET_TO_SEND_OFFSET + sta (r8), y + bra @290 +@200: + cmp #_SYN_REC + bne @202 + ldy #SOCKET_TO_SEND_OFFSET + lda #SYN|ACK + sta (r8), y + bra @290 +@202: + cmp #_ACK_WAIT + bne @203 + + ldy #SOCKET_TO_SEND_OFFSET + lda # ACK | PSH + sta (r8), y +@203: +bra @290 + cmp #_FIN_SENT + beq @205 + cmp #_FIN_ACK_REC + bne @204 +@205: + ldy #SOCKET_TO_SEND_OFFSET + lda # ACK + sta (r8), y +.ifdef DEBUG_ACK + debug_msg("Asserting ACK: _FIN_ACK_REC state"); +.endif + bra @290 +@204: + cmp #_FIN_REC + bne @206 + ldy #SOCKET_TO_SEND_OFFSET + lda # FIN|ACK + sta (r8), y +.ifdef DEBUG_ACK + debug_msg("Asserting ACK: _FIN_REC state"); +.endif + bra @290 +@206: + jsr socket_timeout + ldy #SOCKET_TIME_OFFSET + sta (r8), y + ldy #SOCKET_TIMEOUT_OFFSET + lda #0 + sta (r8), y +@290: + ldy #SOCKET_TO_SEND_OFFSET + lda (r8), y + beq @207 + ;* + ;* Force nwk_upstream() to execute. + ;* + ldy #SOCKET_TIMEOUT_OFFSET + lda #$FF + sta (r8), y +.ifdef INSTANT_ACK + jsr nwk_upstream +.endif +.ifdef DEBUG_ACK + debug_msg("scheduling nwk_upstream 0 0"); +.endif + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add +@207: + bra @noTimeout + +@noRetry: + ;* + ;* Too much retransmissions. + ;* Socket down + ;* + ldy #SOCKET_STATE_OFFSET + lda #_IDLE + sta (r8), y + + ldy #SOCKET_CALLBACK_OFFSET + lda (r8), y + sta r7L + iny + lda (r8), y + sta r7H + iny + + lda #WEEIP_EV_DISCONNECT + jsr (r7) + + jsr remove_rx_data + +@noTimeout: + +@nextSocket: + AddVW SOCKET_SIZE, r8 + inx + cmp #MAX_SOCKET + beq @noNextSocket + jmp @processSocket + +@noNextSocket: + ;* + ;* Reschedule task for periodic execution. + ;* + ; periodicly done by integration + LoadW r0, nwk_tick + LoadB r1L, TICK_TCP + LoadB r1H, 0 + LoadW r2, nwktickName + jsr task_add + rts + +; in: r8 socket ptr +remove_rx_data: + ldy #SOCKET_RX_DATA_OFFSET + lda (r8),y + iny + ora (r8),y + + bne @run + jmp @done +@run: + ldy #SOCKET_RX_OO_START_OFFSET + lda (r8), y + iny + ora (r8), y + bne @301 + jmp @300 +@301: + ldy #SOCKET_RX_OFFSET + lda (r8), y + sta r5L + iny + lda (r8), y + sta r5H + + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, 0 + LoadB dmalist_source_bank, 0 + MoveW r5, dmalist_source_addr + AddW dmalist_source_addr, r4 + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + MoveW r5, dmalist_dest_addr + + ldy #SOCKET_RX_OO_END_OFFSET + lda (r8), y + sta dmalist_count + iny + lda (r8), y + sta dmalist_count+1 + SubW dmalist_count, r4 + + jsr do_dma + + ldy #SOCKET_RX_OO_START_OFFSET + sec + lda (r8), y + sbc r4L + sta (r8), y + iny + lda (r8), y + sbc r4H + sta (r8), y + + ldy #SOCKET_RX_OO_END_OFFSET + sec + lda (r8), y + sbc r4L + sta (r8), y + iny + lda (r8), y + sbc r4H + sta (r8), y +@300: + ldy #SOCKET_RX_DATA_OFFSET + lda #0 + sta (r8), y + iny + sta (r8), y +@done: + rts + +; in: r8 socket ptr +; destroy: r6, r7 +compute_window_size: + + ;unsigned short available_window=0; + LoadW r7, 0 + + ;// Now patch the header to take account of how much buffer space we _actually_ have available + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + sta r6L + iny + lda (r8), y + sta r6 + CmpW r6, r7 + bcc @10 + MoveW r6, r7 +@10: + ldy #SOCKET_RX_OO_END_OFFSET + lda (r8), y + sta r6L + iny + lda (r8), y + sta r6 + CmpW r6, r7 + bcc @11 + MoveW r6, r7 +@11: + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8),y + sta r6L + iny + lda (r8),y + sta r6H + SubW r6, r7 + + MoveB r6H, default_header+WINDOW_SIZE_OFFSET+0 + MoveB r6L, default_header+WINDOW_SIZE_OFFSET+1 + rts + +;** +;* Network upstream task. Send outgoing network messages. +;*/ +nwk_upstream: ; (byte_t sig) + +.ifdef DEBUG_ACK + debug_msg("nwk_upstream called."); +.endif + PushW r0 + PushW r1 + PushW r2 + PushW r3 + PushW r4 + PushW r5 + PushW r6 + PushW r7 + PushW r8 + PushW r9 + + jsr eth_clear_to_send + bcs @ready + + ;* + ;* Ethernet not ready. + ;* Delay task execution. + ;* + ;// printf("ETH TX wait\n"); +.ifdef DEBUG_ACK + debug_msg("scheduling nwk_upstream 2 0"); +.endif + LoadW r0, nwk_upstream + LoadB r1L, 2 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add + jmp @done +@ready: + ;* + ;* Search for pending messages. + ;* + + LoadW r8, _sockets + ldx #0 + +@processSocket: + stx r9L + + ldy #SOCKET_TO_SEND_OFFSET + lda (r8), y + bne @10 + jmp @nextSocket + ;// no message to send for this socket. +@10: +.ifdef DEBUG_ACK + debug_msg("nwk_upstream sending a packet for socket"); +.endif + + ;* + ;* Pending message found, send it. + ;* + ;jsr checksum_init + LoadW chks, 0 + + jsr compute_window_size + + ;// XXX Correct buffer offset processing to handle variable + ;// header lengths + LoadB dmalist_source_mb, 0 + LoadB dmalist_source_bank, 0 + LoadW dmalist_source_addr, default_header + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + LoadW dmalist_dest_addr, _header + LoadW dmalist_count, 40 + + jsr do_dma + + MoveB id, _header+IP_HDR_ID+1; + MoveB id+1, _header+IP_HDR_ID; + IncW id + + ldx #0 + ldy #SOCKET_REMIP_OFFSET +@50: + lda ip_local, x + sta _header+IP_HDR_SOURCE_OFFSET, x + lda (r8), y + sta _header+IP_HDR_DEST_OFFSET, x + iny + inx + cpx #4 + bne @50 + + ldx #0 + ldy #SOCKET_PORT_OFFSET +@51: + lda (r8), y + sta _header+TCP_HDR_SOURCE_OFFSET,x + inx + iny + cpx #2 + bne @51 + + ldx #0 + ldy #SOCKET_REMPORT_OFFSET +@52: + lda (r8), y + sta _header+TCP_HDR_DEST_OFFSET,x + inx + iny + cpx #2 + bne @52 + + ;* + ;* Check payload area in _sckt->tx. + ;* + LoadW data_size, 0 ; data_size + ldy #SOCKET_TO_SEND_OFFSET + lda (r8), y + and #PSH + beq @60 + + ldy #SOCKET_TX_SIZE_OFFSET + lda (r8), y + sta r1L + sta data_size + iny + lda (r8), y + sta r1H + sta data_size+1 + + ldy #SOCKET_TX_OFFSET + lda (r8), y + sta r0L + iny + lda (r8), y + sta r0H + + jsr ip_checksum +@60: + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_TCP + beq @handleTCP + jmp @handleUDP +@handleTCP: + + ;* + ;* TCP message header. + ;* + MoveW data_size, r4 + AddVW 40, r4 + lda r4L + sta _header+IP_HDR_LENGTH_OFFSET+1 + lda r4H + sta _header+IP_HDR_LENGTH_OFFSET + + ldy #SOCKET_TO_SEND_OFFSET + lda (r8),y + sta _header+TCP_HDR_FLAGS + + ;* + ;* Check sequence numbers. + ;* + ldy #SOCKET_SEQ_OFFSET_DW + lda (r8), y + sta seq + iny + lda (r8), y + sta seq+1 + iny + lda (r8), y + sta seq+2 + iny + lda (r8), y + sta seq+3 + iny + + ldy #SOCKET_TIMEOUT_OFFSET + lda (r8), y + beq @noTimeout + + brk + lda #$89 + + ;* + ;* Retransmission. + ;* Use old sequence number. + ;* + lda data_size + ora data_size+1 + beq @61 + SubW seq, data_size +@61: + ;// XXX Why on earth do we subtract one here? + ;// This messes up connections sometimes, because + ;// we SYN, get SYN+ACK, and have sent a 2nd SYN + ;// again before we read the SYN+ACK. But in the process + ;// we have of course decremented the sequence number + ;// by one, so the other side gets VERY confused, and says + ;// RST! + ;// if(_sckt->toSend & (SYN | FIN)) seq.d--; +@noTimeout: + MoveB seq+3, _header+TCP_HDR_N_SEQ_OFFSET + MoveB seq+2, _header+TCP_HDR_N_SEQ_OFFSET+1 + MoveB seq+1, _header+TCP_HDR_N_SEQ_OFFSET+2 + MoveB seq+0, _header+TCP_HDR_N_SEQ_OFFSET+3 + + ldy #SOCKET_REMSEQ_OFFSET_DW + lda (r8), y + sta _header+TCP_HDR_N_ACK_OFFSET+3 + iny + lda (r8), y + sta _header+TCP_HDR_N_ACK_OFFSET+2 + iny + lda (r8), y + sta _header+TCP_HDR_N_ACK_OFFSET+1 + iny + lda (r8), y + sta _header+TCP_HDR_N_ACK_OFFSET + + ;if (_sckt->remSeq.d-_sckt->remSeqStart.d) + ; // printf("ACKing %ld\n",_sckt->remSeq.d-_sckt->remSeqStart.d+data_size); + + ldy #SOCKET_TIMEOUT_OFFSET + lda (r8), y + bne @noTimeout2 + ;* + ;* Update sequence number data. + ;* + lda data_size + ora data_size+1 + beq @70 + + clc + lda data_size + adc seq + sta seq + lda data_size+1 + adc seq+1 + sta seq+1 + lda #0 + adc seq+2 + sta seq+2 + lda #0 + adc seq+3 + sta seq+3 +@70: + ldy #SOCKET_TO_SEND_OFFSET + lda (r8), y + and #SYN|FIN + beq @71 + + inc seq + bne @71 + inc seq+1 + bne @71 + inc seq+2 + bne @71 + inc seq+3 +@71: + + ldy #SOCKET_SEQ_OFFSET_DW + lda seq + sta (r8), y + iny + lda seq+1 + sta (r8), y + iny + lda seq+2 + sta (r8), y + iny + lda seq+3 + sta (r8), y + iny +@noTimeout2: + ;* + ;* Update TCP checksum information. + ;* + LoadW _header+TCP_HDR_CHECKSUM_OFFSET, 0 + + LoadW r0, _header+12 + LoadW r1, 8+TCP_HDR_SIZE + jsr ip_checksum + LoadW r0, IP_PROTO_TCP + jsr add_checksum + MoveW data_size, r0 + AddVW TCP_HDR_SIZE, r0 + jsr add_checksum + lda chks + eor #$FF + sta _header+TCP_HDR_CHECKSUM_OFFSET + lda chks+1 + eor #$FF + sta _header+TCP_HDR_CHECKSUM_OFFSET+1 + jmp @cont + +@handleUDP: + + ;* + ;* UDP message header. + ;* + LoadB _header+IP_HDR_PROTO_OFFSET, IP_PROTO_UDP + + MoveW data_size, r0 + AddVW 28, r0 + MoveB r0H, _header+IP_HDR_LENGTH_OFFSET + MoveB r0L, _header+IP_HDR_LENGTH_OFFSET+1 + + MoveW data_size, r0 + AddVW 8, r0 + MoveB r0H, _header+UDP_HDR_LENGTH_OFFSET + MoveB r0L, _header+UDP_HDR_LENGTH_OFFSET+1 + + ;* + ;* Update UDP checksum information. + ;* + LoadW _header+UDP_HDR_CHECKSUM_OFFSET, 0 + + LoadW r0, _header+12 + LoadW r1, 8 + UDP_HDR_SIZE + jsr ip_checksum + + LoadW r0, IP_PROTO_UDP + jsr add_checksum + MoveW data_size, r0 + AddVW UDP_HDR_SIZE, r0 + jsr add_checksum + lda chks + eor #$FF + sta _header+UDP_HDR_CHECKSUM_OFFSET + lda chks+1 + eor #$FF + sta _header+UDP_HDR_CHECKSUM_OFFSET+1 + + ;* + ;* Tell UDP that data was sent (no acknowledge). + ;* + ldy #SOCKET_CALLBACK_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + lda #WEEIP_EV_DATA_SENT + jsr (r4) + jsr remove_rx_data + +@cont: + ;* + ;* Update IP checksum information. + ;* + ;jsr checksum_init + LoadW chks, 0 + LoadW r0, _header + LoadW r1, 20 + jsr ip_checksum + lda chks + eor #$FF + sta _header+IP_HDR_CHECKSUM_OFFSET + lda chks+1 + eor #$FF + sta _header+IP_HDR_CHECKSUM_OFFSET+1 + + ;* + ;* Send IP packet. + ;* + jsr eth_ip_send + bcc @failed + + lda data_size + ora data_size+1 + beq @62 + MoveW data_size, r0 + ldy #SOCKET_TX_OFFSET + lda (r8),y + sta r1L + iny + lda (r8), y + sta r1H + jsr eth_write +@62: +.ifdef DEBUG_ACK + debug_msg("eth_packet_send() called"); +.endif + jsr eth_packet_send + ldy #SOCKET_TO_SEND_OFFSET + lda #0 + sta (r8), y + ldy #SOCKET_TIMEOUT_OFFSET + lda #0 + sta (r8), y + jsr socket_timeout + ldy #SOCKET_TIME_OFFSET + sta (r8), y + +@failed: + ;// Sending the IP packet failed, possibly because there was no ARP + ;// entry for the requested IP, if it is on the local network. + + ;// So we don't clear the status that we need to send + + ;* + ;* Reschedule 50ms later for eventual further processing. + ;* +.ifdef DEBUG_ACK + debug_msg("scheduling nwk_upstream 5 0"); +.endif + LoadW r0, nwk_upstream + LoadB r1L, 5 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add +@nextSocket: + AddVW SOCKET_SIZE, r8 + ldx r9L + inx + cpx #MAX_SOCKET + beq @noNextSocket + jmp @processSocket +@noNextSocket: + ;* + ;* Job done, finish. + ;* +@done: + PopW r9 + PopW r8 + PopW r7 + PopW r6 + PopW r5 + PopW r4 + PopW r3 + PopW r2 + PopW r1 + PopW r0 + rts + +.if 0 +unsigned long byte_order_swap_d(unsigned long in) +{ + unsigned long out; + ((unsigned char *)&out)[0]=((unsigned char *)&in)[3]; + ((unsigned char *)&out)[1]=((unsigned char *)&in)[2]; + ((unsigned char *)&out)[2]=((unsigned char *)&in)[1]; + ((unsigned char *)&out)[3]=((unsigned char *)&in)[0]; + return out; +} +.endif + +; in: r8 socket ptr +nwk_schedule_oo_ack: + ;* + ;* Out of order, send our number. + ;* +.if 0 + ;printf("request OOO ack: %ld != %ld\n", + ; byte_order_swap_d(TCPH(n_seq.d))-_sckt->remSeqStart.d,_sckt->remSeq.d-_sckt->remSeqStart.d); +.endif + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8),y +.ifdef INSTANT_ACK + lda #0 + jsr nwk_upstream +.endif +.ifdef DEBUG_ACK + debug_msg("asserting ack: Out-of-order rx"); + debug_msg("scheduling nwk_upstream 0 0"); +.endif + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add + rts + +;** +;* Network downstream processing. +;* Parse incoming network messages. +;*/ +nwk_downstream: + + PushW r0 + PushW r1 + PushW r2 + PushW r3 + PushW r4 + PushW r5 + PushW r6 + PushW r7 + PushW r8 + PushW r9 + + ;WEEIP_EVENT ev; => r7L + ;_uint32_t rel_sequence; => r2/r3 + ;static unsigned char i; + + LoadB r7L, WEEIP_EV_NONE + + ;* + ;* Packet size. + ;* + CmpBI _header+IP_HDR_VER_LENGTH_OFFSET, $45 + beq @10 + jmp @drop +@10: + MoveB _header+IP_HDR_LENGTH_OFFSET, data_size+1 + MoveB _header+IP_HDR_LENGTH_OFFSET+1, data_size + + ;* + ;* Checksum. + ;*/ + ;jsr checksum_init + LoadW chks, 0 + LoadW r0, _header + LoadW r1, 20 + jsr ip_checksum + CmpWI chks, $FFFF + beq @9 + + brk + lda #$56 + + jmp @drop +@9: +.if 0 + ;printf("\nI am %d.%d.%d.%d\n",ip_local.b[0],ip_local.b[1],ip_local.b[2],ip_local.b[3]); + ;printf("P=%02x: %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d\n", + ; IPH(protocol), + ; IPH(source).b[0],IPH(source).b[1],IPH(source).b[2],IPH(source).b[3], + ; NTOHS(TCPH(source)), + ; IPH(destination).b[0],IPH(destination).b[1],IPH(destination).b[2],IPH(destination).b[3], + ; NTOHS(TCPH(destination))); +.endif + + ;* + ;* Destination address. + ;* + lda #$FF + cmp _header+IP_HDR_DEST_OFFSET ;// broadcast. + bne @80 + cmp _header+IP_HDR_DEST_OFFSET+1 + bne @80 + cmp _header+IP_HDR_DEST_OFFSET+2 + bne @80 + cmp _header+IP_HDR_DEST_OFFSET+3 + beq @89 + +@80: + lda ip_local + cmp _header+IP_HDR_DEST_OFFSET ;// unicast. + bne @81 + lda ip_local+1 + cmp _header+IP_HDR_DEST_OFFSET+1 + bne @81 + lda ip_local+2 + cmp _header+IP_HDR_DEST_OFFSET+2 + bne @81 + lda ip_local+3 + cmp _header+IP_HDR_DEST_OFFSET+3 + beq @89 + +@81: + lda ip_broadcast + cmp _header+IP_HDR_DEST_OFFSET ;// unicast. + bne @82 + lda ip_broadcast+1 + cmp _header+IP_HDR_DEST_OFFSET+1 + bne @82 + lda ip_broadcast+2 + cmp _header+IP_HDR_DEST_OFFSET+2 + bne @82 + lda ip_broadcast+3 + cmp _header+IP_HDR_DEST_OFFSET+3 + beq @89 + +@82: + lda #0 + cmp ip_local ;// Waiting for DHCP configuration + bne @83 + cmp ip_local+1 + bne @83 + cmp ip_local+2 + bne @83 + cmp ip_local+3 + beq @89 +@83: + jmp @drop ; // not for us. +@89: + CmpBI _header+IP_HDR_PROTO_OFFSET, IP_PROTO_ICMP + bne @noICMP + jmp @parse_icmp +@noICMP: + lda _header+TCP_HDR_DEST_OFFSET+1 + + ;* + ;* Search for a waiting socket. + ;* + LoadW r8, _sockets + ldx #0 +@socketLoop: + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_FREE + beq @next + ldy #SOCKET_PORT_OFFSET + lda (r8), y + cmp _header+TCP_HDR_DEST_OFFSET + bne @next + iny + lda (r8), y + cmp _header+TCP_HDR_DEST_OFFSET+1 + bne @next ;// another port. + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_UDP + bne @noUDP ;// another protocol. + CmpBI _header+IP_HDR_PROTO_OFFSET, IP_PROTO_UDP + bne @next + bra @use +@noUDP: + CmpBI _header+IP_HDR_PROTO_OFFSET, IP_PROTO_TCP + bne @next +@use: + ldy #SOCKET_LISTEN_OFFSET + lda (r8), y + bne @found ;// waiting for a connection + + ;// Don't check source if we are bound to broadcast + ldy #SOCKET_REMIP_OFFSET + lda #$FF +@broadcastCheck: + cmp (r8), y + bne @checkSource + iny + cpy #SOCKET_REMIP_OFFSET+4 + bne @broadcastCheck + bra @remIPChecked +@checkSource: + ldy #SOCKET_REMIP_OFFSET +@remIPCheck: + lda _header+IP_HDR_SOURCE_OFFSET-SOCKET_REMIP_OFFSET, y + cmp (r8), y + bne @next + iny + cpy #SOCKET_REMIP_OFFSET+4 + bne @remIPCheck ;// another source. +@remIPChecked: + ldy #SOCKET_REMPORT_OFFSET + lda (r8), y + cmp _header+TCP_HDR_SOURCE_OFFSET + bne @next + iny + lda (r8), y + cmp _header+TCP_HDR_SOURCE_OFFSET+1 + bne @next ;// another port. + bra @found ;// found! +@next: + AddW r8, SOCKET_SIZE + inx + cpx #MAX_SOCKET + bne @socketLoop + + jmp @drop ;// no socket for the message. + +@found: + ;* + ;* Update socket data. + ;* + ;// printf("found socket: source.d=$%08lx\n",IPH(source).d); + ldy #SOCKET_REMIP_OFFSET +@15: + lda _header+IP_HDR_SOURCE_OFFSET-SOCKET_REMIP_OFFSET, y + sta (r8), y + iny + cpy #SOCKET_REMIP_OFFSET+4 + bne @15 + + ldy #SOCKET_REMPORT_OFFSET + lda _header+TCP_HDR_SOURCE_OFFSET + sta (r8), y + iny + ldy _header+TCP_HDR_SOURCE_OFFSET+1 + sta (r8), y + + lda #0 ; FALSE + ldy #SOCKET_LISTEN_OFFSET + sta (r8), y + + CmpBI _header+IP_HDR_PROTO_OFFSET, IP_PROTO_TCP + bne @noTCP + + jmp @parse_tcp + +@noTCP: + + + ;* + ;* UDP message. + ;* Copy data into user socket buffer. + ;* Add task for processing. + ;* + SubVW 28, data_size + + ldy #SOCKET_RX_OFFSET + lda (r8), y + iny + ora (r8), y + beq @16 + + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + CmpW r4, data_size + bcs @64 ; if r4 bigger than data_size + beq @64 + MoveW r4, data_size +@64: + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, (ETH_RX_BUFFER+2+14+8+20) & $ffff; + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + + ldy #SOCKET_RX_OFFSET + lda (r8), y + sta dmalist_dest_addr + iny + lda (r8), y + sta dmalist_dest_addr+1 + + MoveW data_size, dmalist_count + jsr do_dma + + ldy #SOCKET_RX_DATA_OFFSET + lda data_size + sta (r8), y + iny + lda data_size+1 + sta (r8), y +@16: + + LoadB r7L, WEEIP_EV_DATA + jmp @done + +@parse_tcp: + ;// printf(":"); + + ;* + ;* TCP message. + ;* Check flags. + ;* + LoadB _flags, 0 + SubVW 40, data_size + + lda _header+TCP_HDR_FLAGS + and #ACK + beq @noAck + + ;* + ;* Test acked sequence number. + ;* + ldy #SOCKET_SEQ_OFFSET_DW + lda (r8), y + cmp _header+TCP_HDR_ACK_OFFSET_DW+3 + bne @wrongAck + iny + lda (r8), y + cmp _header+TCP_HDR_ACK_OFFSET_DW+2 + bne @wrongAck + iny + lda (r8), y + cmp _header+TCP_HDR_ACK_OFFSET_DW+1 + bne @wrongAck + iny + lda (r8), y + cmp _header+TCP_HDR_ACK_OFFSET_DW + beq @ack + +@wrongAck: + brk + lda #$33 + ;* + ;* Out of order, drop it. + ;* XXX This is when the other side has ACKed a different part + ;* of our stream. + ;* PGS: I think we lock-step and have only one unacknowledged packet + ;* at a time, so can effectively ignore it (but should probably be + ;* clever and re-send?) + ;* + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_CONNECT + bne @67 + ;printf("Drop\n"); + jmp @drop +@67: +@ack: + LoadB _flags, ACK +@noAck: + + lda _header+TCP_HDR_FLAGS + and #SYN + beq @synNotSet + + ;* + ;* Restart of remote sequence number (connection?). + ;* + ldy #SOCKET_REMSEQ_OFFSET_DW + lda _header+TCP_HDR_N_SEQ_OFFSET+3 + sta (r8), y + iny + lda _header+TCP_HDR_N_SEQ_OFFSET+2 + sta (r8), y + iny + lda _header+TCP_HDR_N_SEQ_OFFSET+1 + sta (r8), y + iny + lda _header+TCP_HDR_N_SEQ_OFFSET+0 + sta (r8), y + + ;// Remember initial remote sequence # for convenient debugging + ldy #SOCKET_REMSEQ_OFFSET_DW + lda (r8),y + ldy #SOCKET_REMSEQSTART_OFFSET_DW + sta (r8), y + + ldy #SOCKET_REMSEQ_OFFSET_DW + lda (r8), y + inc + sta (r8), y + lda _flags + ora #SYN|ACK + sta _flags + + ;// printf("SYN%d",_sckt->state); + jmp @synDone + +@synNotSet: + ;// XXX Correct buffer offset processing to handle variable + ;// header lengths + lda _header+IP_HDR_VER_LENGTH_OFFSET + and #$0F + asl + asl + sta r4L + lda _header+TCP_HDR_HLEN + lsr + lsr + lsr + lsr + asl + asl + clc + adc r4L + sta data_ofs + + SubW data_ofs, data_size + AddVW 40, data_size + + ;* + ;* Test remote sequence number. + ;* + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + + CmpW r4, data_size + bcs @180 ; if r4 bigger than data_size + beq @180 + + brk + lda #$01 + MoveW r4, data_size +@180: + MoveB _header+TCP_HDR_N_SEQ_OFFSET+3, r2L ;rel_sequence + MoveB _header+TCP_HDR_N_SEQ_OFFSET+2, r2H ;rel_sequence+1 + MoveB _header+TCP_HDR_N_SEQ_OFFSET+1, r3L ;rel_sequence+2 + MoveB _header+TCP_HDR_N_SEQ_OFFSET, r3H ;rel_sequence+3 + + ldy #SOCKET_REMSEQ_OFFSET_DW + sec + lda r2L ;rel_sequence + sbc (r8), y + sta r2L ;rel_sequence + iny + lda r2H ;rel_sequence+1 + sbc (r8), y + sta r2H ;rel_sequence+1 + iny + lda r3L ;rel_sequence+2 + sbc (r8), y + sta r3L ;rel_sequence+2 + iny + lda r3H ;rel_sequence+3 + sbc (r8), y + sta r3H ;rel_sequence+3 + +.if 0 + ;printf("\n%5ld: rel_seq=%ld, rx:%d,%d to %d\n", + ; _sckt->remSeq.d-_sckt->remSeqStart.d, + ; rel_sequence.d, + ; _sckt->rx_data, + ; _sckt->rx_oo_start,_sckt->rx_oo_end); +.endif +.if 0 + ldy #SOCKET_RX_SIZE_OFFSET+1 + lda (r8), y + cmp r2H ;rel_sequence + beq @101b + bcc @100 ; branch if buffer size < sequence update +@101b: + dey + lda (r8), y + cmp r2L ;rel_sequence+1 + beq @100 + bcs @101 +@100: + MoveW r2, r5 ; from rel_sequence + AddW data_size, r5 + ldy #SOCKET_RX_SIZE_OFFSET+1 + lda (r8), y + cmp r5H + beq @100b + bcc @102 +@100b: + dey + lda (r8), y + cmp r5L + beq @102 + bcc @102 +@101: + +brk +lda #$59 + ;// Ignore segments that we can't possibly handle + ;// printf("drop(a)"); + CmpWI data_size, 0 + bne @299 +@298: + jmp @200 +@299: + jsr nwk_schedule_oo_ack + jmp @drop +.endif + ;} else if (rel_sequence.w[0]==_sckt->rx_data) { +@102: + + ldy #SOCKET_RX_DATA_OFFSET+1 + lda (r8), y + cmp r2H ;rel_sequence+1 + beq @_103 +@__103: + jmp @103 +@_103: + dey + lda (r8), y + cmp r2L ;rel_sequence + bne @__103 + + ;// Copy to end of data in RX buffer + ;// printf("rx append %d@%d",data_size,_sckt->rx_data); + clc + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + adc data_size + sta r6L + iny + lda (r8), y + adc data_size+1 + sta r6H + + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8), y + sta r5L + iny + lda (r8), y + sta r5H + + ;if (data_size+_sckt->rx_data>_sckt->rx_size) + CmpW r5, r6 + beq @104 ; branch r5 == r6 + bcs @104 ; branch r5 > r6 + + brk + lda #$1 + + MoveW r5, data_size + SubW r6, data_size +@104: + lda data_size + ora data_size+1 + beq @105 + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, (ETH_RX_BUFFER+16) & $ffff; + AddW data_ofs, dmalist_source_addr + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + sta dmalist_dest_addr + iny + lda (r8), y + sta dmalist_dest_addr+1 + + ldy #SOCKET_RX_OFFSET + clc + lda (r8), y + adc dmalist_dest_addr + sta dmalist_dest_addr + iny + lda (r8), y + adc dmalist_dest_addr+1 + sta dmalist_dest_addr+1 + + MoveW data_size, dmalist_count + jsr do_dma +@105: + ldy #SOCKET_RX_DATA_OFFSET + clc + lda (r8), y + adc data_size + sta (r8), y + iny + lda (r8), y + adc data_size+1 + sta (r8), y + + cmp #$08 + bne @999 + + brk + lda #$1 +@999: + jmp @200 + + ;} else if (rel_sequence.w[0]==_sckt->rx_oo_end) { +@103: +.if 0 + ;// Copy to end of OO data in RX buffer + ;// printf("oo append"); + ldy #SOCKET_RX_OO_END_OFFSET + lda (r8), y + sta r6L + iny + lda (r8), y + sta r6H + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8), y + sta r5L + iny + lda (r8), y + sta r5H + + CmpW r5, r6 + beq @106b + jmp @106 +@106b: + brk + lda #$03 + MoveW r6, r4 + AddW r6, data_size + + CmpW r5, r6 + bcc @_120 + jmp @120 +@_120: +brk +lda #$04 + + MoveW r5, data_size + SubW data_size, r4 + + lda data_size + ora data_size+1 + beq @120 + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, (ETH_RX_BUFFER+16) & $ffff; + AddW dmalist_source_addr, data_ofs + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + ldy #SOCKET_RX_OO_END_OFFSET + lda (r8),y + sta dmalist_dest_addr + iny + lda (r8),y + sta dmalist_dest_addr+1 + ldy #SOCKET_RX_OFFSET + clc + lda dmalist_dest_addr + adc (r8), y + sta dmalist_dest_addr + iny + lda dmalist_dest_addr+1 + adc (r8), y + sta dmalist_dest_addr+1 + + MoveW data_size, dmalist_count + jsr do_dma + +@120: jmp @200 + + ;} else if ((rel_sequence.w[0]+data_size)==_sckt->rx_oo_start) { +@106: + MoveW data_size, r6 + AddW r2, r6 ;rel_sequence + ldy #SOCKET_RX_OO_START_OFFSET + lda (r8),y + cmp r6L + bne @107 + iny + ldy #SOCKET_RX_OO_START_OFFSET + lda (r8),y + cmp r6H + bne @107 + + ;// Copy to start of OO data in RX buffer + ;// printf("oo prepend"); + lda data_size + ora data_size + beq @122 + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, (ETH_RX_BUFFER+16) & $ffff; + AddW dmalist_source_addr, data_ofs + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + ldy #SOCKET_RX_OFFSET + lda (r8), y + sta dmalist_dest_addr + iny + lda (r8), y + sta dmalist_dest_addr+1 + AddW dmalist_dest_addr, r2 ;rel_sequence + + MoveW data_size, dmalist_count + + jsr do_dma +@122: + ldy #SOCKET_RX_OO_END_OFFSET + clc + lda (r8), y + adc r2L ;rel_sequence + sta (r8), y + lda (r8), y + adc r2H ;rel_sequence+1 + sta (r8), y + + jmp @200 + ;} else if ((rel_sequence.w[0]+data_size)<_sckt->rx_size&&!_sckt->rx_oo_start) { +@107: + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8) ,y + sta r5L + iny + ldy #SOCKET_RX_SIZE_OFFSET + lda (r8) ,y + sta r5H + + MoveW r2, r6 ; from rel_sequence + AddW r6, r5 + + CmpW r6, r5 + bcs @_108 ; branch if r6 >= r5 +@__108: + jmp @108 +@_108: + ldy #SOCKET_RX_OO_START_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + + lda r4L + lda r4H + beq @__108 + + ;// It belongs in the window, but not at the start, so put in RX OO buffer + ;// printf("oo stash"); + lda data_size + ora data_size+1 + beq @123 + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, (ETH_RX_BUFFER+16) & $ffff; + AddW dmalist_source_addr, data_ofs + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + ldy #SOCKET_RX_OFFSET + lda (r8), y + sta dmalist_dest_addr + iny + lda (r8), y + sta dmalist_dest_addr+1 + AddW dmalist_dest_addr, r2 ;rel_sequence + + MoveW data_size, dmalist_count + + jsr do_dma +@123: + ldy #SOCKET_RX_OO_START_OFFSET + lda r2L ;rel_sequence + sta (r8), y + iny + lda r2H ;rel_sequence + sta (r8), y + MoveW data_size, r4 + AddW r4, r2 ;rel_sequence + ldy #SOCKET_RX_OO_END_OFFSET + lda r4L + sta (r8), y + iny + lda r4H + sta (r8), y + jmp @200 +.endif + ;} else if (rel_sequence.d) { +@108: + lda r2L ;rel_sequence + ora r2H + beq @200 + + ;// printf("drop(b)"); + lda data_size + ora data_size + 1 + beq @200 + jsr nwk_schedule_oo_ack + jmp @drop +@200: +.if 0 + ;// while(!PEEK(0xD610)) continue; POKE(0xD610,0); + + ;// Merge received data and RX OO area, if possible + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + sta r6L + iny + lda (r8), y + sta r6H + + lda r6L + ora r6H + bne @124 + + ldy #SOCKET_RX_OO_START_OFFSET + lda (r8), y + sta r5L + iny + lda (r8), y + sta r5H + + CmpW r6, 56 + bne @124 + + ldy #SOCKET_RX_OO_END_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + ldy #SOCKET_RX_DATA_OFFSET + lda r4L + sta (r8), y + iny + lda r4H + sta (r8), y + + lda #0 + ldy #SOCKET_RX_OO_END_OFFSET + sta (r8), y + iny + sta (r8), y + ldy #SOCKET_RX_OO_START_OFFSET + sta (r8), y + iny + sta (r8), y +@124: +.endif + ;* + ;* Update stream sequence number. + ;* + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + + ldy #SOCKET_REMSEQ_OFFSET_DW + clc + lda (r8), y + adc r4L + sta (r8), y + iny + lda (r8), y + adc r4H + sta (r8), y + iny + lda (r8), y + adc #0 + sta (r8), y + iny + lda (r8), y + adc #0 + sta (r8), y + iny + + ;// Deliver data to programme + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + iny + ora (r8), y + beq @125 + + ldy #SOCKET_CALLBACK_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + + lda #WEEIP_EV_DATA + jsr (r4) + jsr remove_rx_data + +@125: + ;// And ACK every packet, because we don't have buffer space for multiple ones, + ;// and its thus very easy for the sender to not know where we are upto, and for + ;// everything to generally get very confused if we have encountered any out-of-order + ;// packets. + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8), y +@126: +@synDone: + + ;// XXX PGS moved this lower down, so that we can check any included data has the correct sequence + ;// number, so that we can pass the data up, if required, so that data included in the RST + ;// packet doesn't get lost (Boar's Head BBS does this, for example) + lda _header+TCP_HDR_FLAGS + and #RST + beq @300 + + ;* + ;* RST flag received. Force disconnection. + ;* + ldy #SOCKET_STATE_OFFSET + lda #_IDLE + sta (r8), y + lda data_size + ora data_size + bne @301 + ;// No data, so just disconnect + LoadB r7L, WEEIP_EV_DISCONNECT + bra @302 +@301: + ;// Disconnect AND valid data + LoadB r7L, WEEIP_EV_DISCONNECT_WITH_DATA + jmp @done +@302: + +@300: + ;// If FIN flag is set, then we also acknowledge all data so far, + ;// plus the FIN flag. + lda _header+TCP_HDR_FLAGS + and #FIN + bne @310 + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_FIN_REC + bne @309 + +@310: + ldy #SOCKET_REMSEQ_OFFSET_DW + lda _header+TCP_HDR_N_SEQ_OFFSET+3 + sta (r8), y + iny + lda _header+TCP_HDR_N_SEQ_OFFSET+2 + sta (r8), y + iny + lda _header+TCP_HDR_N_SEQ_OFFSET+1 + sta (r8), y + iny + lda _header+TCP_HDR_N_SEQ_OFFSET + sta (r8), y + + ldy #SOCKET_REMSEQ_OFFSET_DW + clc + lda (r8),y + adc data_size + sta (r8), y + iny + lda (r8),y + adc data_size+1 + sta (r8), y + iny + lda (r8),y + adc #0 + sta (r8), y + iny + lda (r8),y + adc #0 + sta (r8), y + + ldy #SOCKET_REMSEQ_OFFSET_DW + lda (r8), y + inc + sta (r8), y + bne @311 + iny + lda (r8), y + inc + sta (r8), y + bne @311 + iny + lda (r8), y + inc + sta (r8), y + bne @311 + iny + lda (r8), y + inc + sta (r8), y + bne @311 + iny +@311: + lda _flags + ora #FIN + sta _flags + ;// printf("FIN ACK = %ld\n",_sckt->remSeq.d-_sckt->remSeqStart.d); +@309: + + ;* + ;* TCP state machine implementation. + ;*/ + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_LISTEN + bne @401 + + lda _flags + and #SYN + beq @402 + ;* + ;* Start incoming connection procedure. + ;* +.ifdef DEBUG_ACK + debug_msg("asserting ack: _listen state"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_SYN_REC + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #SYN | ACK + sta (r8), y +@402: + jmp @500 +@401: + cmp #_SYN_SENT + bne @403 + + lda _flags + and #ACK|SYN + beq @408 + ;* + ;* Connection established. + ;* +.ifdef DEBUG_ACK + debug_msg("asserting ack: _syn_sent state with syn or ack"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_CONNECT + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8), y + + ;// Advance sequence # by one to ack the ack + ;ldy #SOCKET_SEQ_OFFSET_DW + ;lda (r8), y + ;inc + ;sta (r8), y + + LoadB r7L, WEEIP_EV_CONNECT + ;//printf("Saw SYN\n"); + jmp @500 +@408: + lda _flags + and #SYN + beq @409 +.ifdef DEBUG_ACK + ;debug_msg("asserting ack: _syn_sent state with syn"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_SYN_REC + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #SYN|ACK + sta (r8), y +@409: + jmp @500 + +@403: + cmp #_SYN_REC + bne @410 + lda _flags + and #ACK + beq @411 + ;* + ;* Connection established. + ;* + ldy #SOCKET_STATE_OFFSET + lda #_CONNECT + sta (r8), y + LoadB r7L, WEEIP_EV_CONNECT +@411: + jmp @500 +@410: + cmp #_CONNECT + beq @421 + cmp #_ACK_WAIT + bne @420 +@421: + lda _flags + and #FIN + beq @419 + + ;* + ;* Start remote disconnection procedure. + ;* +.ifdef DEBUG_ACK + debug_msg("asserting ack: _ack_wait state"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_FIN_REC + sta (r8), y + + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK|FIN + sta (r8), y + + ;LoadB r7L, WEEIP_EV_DISCONNECT ; // TESTE + + jmp @500 +@419: + lda _flags + and #ACK + beq @418 + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_ACK_WAIT + bne @418 + + ;* + ;* The peer acknowledged the previously sent data. + ;* + lda #_CONNECT + sta (r8), y +@418: + lda data_size + ora data_size+1 + beq @417 + + ;* + ;* Data received. + ;* +.ifdef DEBUG_ACK + debug_msg("asserting ack: data received"); +.endif + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8), y + ;LoadB r7L, WEEIP_EV_DATA + ;inc $d020 + +@417: + jmp @500 +@420: + cmp #_FIN_SENT + bne @430 + + lda _flags + and #FIN|ACK + beq @429 + + ;* + ;* Disconnection done. + ;* +.ifdef DEBUG_ACK + debug_msg("asserting ack: _fin_sent state with fin or ack"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_IDLE + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8), y + + + LoadB r7L, WEEIP_EV_DISCONNECT + ;// Allow the final state to be selected based on ACK and FIN flag state. + ;// break; +@429: + lda _flags + and #ACK + beq @428 + LoadB r7L, WEEIP_EV_NONE + + ldy #SOCKET_STATE_OFFSET + lda #_FIN_ACK_REC + sta (r8), y +@428: + lda _flags + and #FIN + beq @427 +.ifdef DEBUG_ACK + debug_msg("asserting ack: _fin_ack_rec state with fin"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_FIN_REC + sta (r8),y + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8),y +@427: + jmp @500 +@430: + cmp #_FIN_REC + bne @440 + lda _flags + and #ACK + beq @431 + + ;* + ;* Disconnection done. + ;* + ldy #SOCKET_STATE_OFFSET + lda #_IDLE + sta (r8), y + LoadB r7L, WEEIP_EV_DISCONNECT +@431: + jmp @500 +@440: + cmp #_FIN_ACK_REC + bne @500 + lda _flags + and #FIN + beq @441 + ;* + ;* Disconnection done. + ;* +.ifdef DEBUG_ACK + debug_msg("asserting ack: _fin_ack_rec state with fin"); +.endif + ldy #SOCKET_STATE_OFFSET + lda #_FIN_REC + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK + sta (r8), y + LoadB r7L, WEEIP_EV_DISCONNECT +@441: +@500: + jmp @done + +@parse_icmp: + ;* + ;Parse ICMP messages. + ;Only care about ECHO REQUEST for now + ;*/ +.ifdef ENABLE_ICMP + CmpB _header+ICMP_HDR_TYPE_OFFSET, 0x08 + bne @45 + CmpB _header+ICMP_HDR_FCODE_OFFSET, 0x00 + bne @45 + ;// ICMP Echo request: + + ; setup dmalist to receive from ETH_RX_BUFFER + LoadB dmalist_source_mb, ETH_RX_BUFFER>>20; + LoadB dmalist_source_bank, (ETH_RX_BUFFER>>16) & $0f; + LoadW dmalist_source_addr, (ETH_RX_BUFFER+2L) & $ffff; + + LoadB dmalist_dest_mb, 0 ; fetching into bank 0 + LoadB dmalist_dest_bank, 0 + LoadW dmalist_dest_addr, tx_frame_buf + + ;// 0. Copy received packet to tx buffer + MoveW data_size, dmalist_count + AddVW 14, dmalist_count + jsr do_dma + + // 1. Copy Eth src to DST + LoadB dmalist_source_mb, 0 + LoadB dmalist_source_bank, 0 + LoadW dmalist_source_addr, tx_frame_buf+6 + LoadW dmalist_dest_addr, tx_frame_buf + + LoadW dmalist_count, 6 + jsr do_dma + + // 2. Put our ETH as src + LoadW dmalist_source_addr, $D6E9 + LoadW dmalist_dest_addr, tx_frame_buf+6 + jsr do_dma + + // 3. IP SRC becomes DST + LoadW dmalist_source_addr, tx_frame_buf+26 + LoadW dmalist_dest_addr, tx_frame_buf+30 + + LoadW dmalist_count, 4 + jsr do_dma + + // 4. Put our IP as SRC + LoadW dmalist_source_addr, ip_local + LoadW dmalist_dest_addr, tx_frame_buf+26 + jsr do_dma + + // 5. Change type from 0x08 (ECHO REQUEST) to 0x00 (ECHO REPLY) + LoadB tx_frame_buf+14+20, $00 + + // 6. Update ICMP checksum + LoadB tx_frame_buf+14+20+2, 0 + LoadB tx_frame_buf+14+20+2+1, 0 + LoadW chks, 0 + LoadW r0, tx_frame_buf+14+20 + MoveW r1, data_size + jsr ip_checksum + // XXX For some reason if we do the following assignment as single + // operation, it crashes the programme. But doing it this way, + // seems to be fine. Go figure :/ + lda chks + eor #$FF + sta tx_frame_buf+14+20+2 + lda chks+1 + eor #$FF + sta tx_frame_buf+14+20+2+1 + + // 7. Update IP checksum + tx_frame_buf[14+10]=0; tx_frame_buf[14+11]=0; + LoadW chks, 0 + LoadW r0, tx_frame_buf+14 + LoadW r1, 20 + jsr ip_checksum + *(unsigned short *)&tx_frame_buf[14+10] = checksum_result(); + + // Send immediately + eth_tx_len=14+data_size; + eth_packet_send(); +@45: +.endif + jmp @drop + +@done: +.ifdef INSTANT_ACK + lda #0 + jsr nwk_upstream +.endif +.ifdef DEBUG_ACK + debug_msg("scheduling nwk_upstream 0 0"); +.endif + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add +@99: + + ;* + ;* Verify event processing. + ;* Add socket management task. + ;* + CmpBI r7L, WEEIP_EV_NONE + beq @177 + ldy #SOCKET_CALLBACK_OFFSET + lda (r8), y + sta r4L + iny + lda (r8), y + sta r4H + lda r7L + jsr (r4) + jsr remove_rx_data +@177: + +@drop: + PopW r9 + PopW r8 + PopW r7 + PopW r6 + PopW r5 + PopW r4 + PopW r3 + PopW r2 + PopW r1 + PopW r0 + rts diff --git a/space/ip/socket.s b/space/ip/socket.s new file mode 100644 index 00000000..e6ed2802 --- /dev/null +++ b/space/ip/socket.s @@ -0,0 +1,599 @@ +;** +;* @file socket.c +;* @brief Socket API implementation. +;* @compiler CC65 +;* @author Paul Gardner-Stephen (paul@m-e-g-a.org) +;* derived from: +;* @author Bruno Basseto (bruno@wise-ware.org) +;* + +;******************************************************************************** +;******************************************************************************** +;* The MIT License (MIT) +;* +;* Copyright (c) 1995-2013 Bruno Basseto (bruno@wise-ware.org). +;* +;* Permission is hereby granted, free of charge, to any person obtaining a copy +;* of this software and associated documentation files (the "Software"), to deal +;* in the Software without restriction, including without limitation the rights +;* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +;* copies of the Software, and to permit persons to whom the Software is +;* furnished to do so, subject to the following conditions: +;* +;* The above copyright notice and this permission notice shall be included in +;* all copies or substantial portions of the Software. +;* +;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +;* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +;* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +;* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +;* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +;* THE SOFTWARE. +;******************************************************************************** +;********************************************************************************/ +;#include +;#include +;#include +;#include "weeip.h" +;#include "arp.h" +;#include "eth.h" + +;#include "random.h" + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + + +.include "defs.inc" + +.import id +.import arp_init +.import eth_init +.import nwk_tick +.import nwk_upstream +.import task_add +.import task_cancel + +.export _sockets + +.export socket_send +.export socket_connect +.export socket_set_rx_buffer +.export socket_set_callback +.export socket_create +.export socket_release +.export socket_select +.export socket_data_size +.export socket_disconnect +.export socket_reset +.export socket_release + +.export weeip_init + +.import upstreamName +.import nwktickName + +;** +;* Socket list. +;*/ +_sockets: + .repeat MAX_SOCKET*SOCKET_SIZE + .byte 0 + .endrep +;** +;* Socket currently in use. +;*/ +_sckt: + .word 0 + +;* +;* Local port definitions. +;* +PORT_MIN = 1024 +PORT_MAX = 4096 + + +port_used: ;///< Next port to use. + .word 0 + +;** +;* Create and initialize a socket. +;* @param protocol Transport Protocol (SOCKET_TCP or SOCKET_UDP). +;* @return Socket identifier, or NULL if there are no more available sockets. +;*/ +; in: r0L, protocol +; out: r1, ptr to created socket or NULL if failed to create one +socket_create: + ;* + ;* Find an unused socket. + ;*/ + LoadW r1, _sockets + ldx #0 +@nextSocket: + ldy #SOCKET_TYPE_OFFSET + lda (r1), y + cmp #SOCKET_FREE + bne @notFree + + PushB r0L + PushW r1 + LoadW r0, SOCKET_SIZE + jsr ClearRam + PopW r1 + PopB r0L + + ;* + ;* Initialize socket structure. + ;*/ + ldy #SOCKET_TYPE_OFFSET + lda r0L + sta (r1), y + + ldy #SOCKET_SEQ_OFFSET_DW + jsr GetRandom + lda random + sta (r1), y + iny + lda random+1 + sta (r1), y + iny + jsr GetRandom + lda random + sta (r1), y + iny + lda random+1 + sta (r1), y + bra @done +@notFree: + AddVW SOCKET_SIZE, r1 + inx + cpx #MAX_SOCKET + bne @nextSocket + + LoadW r1, NULL +@done: + rts + +;** +;* Finish using a socket. +;* @param s Socket identifier. +;*/ +; in: r1 socket ptr +; destroy: r0-r2L +socket_release: + CmpW r1, NULL + beq @done + + LoadW r0, SOCKET_SIZE + jsr ClearRam + +@done: + rts + +;** +;* Select a socket for the next operations. +;* @param s Socket identifier. +;*/ +; in: r1 socket ptr +socket_select: + MoveW r1, _sckt + rts + +;** +;* Setup a reception buffer for the selected socket. +;* @param b Reception buffer to use. +;* @param size Buffer size in bytes. +;*/ +; in: r0 - ptr to buffer, r1 - size of buffer +socket_set_rx_buffer: + CmpW _sckt, NULL + beq @done + MoveW _sckt, r8 + ldy #SOCKET_RX_OFFSET + lda r0L + sta (r8), y + iny + lda r0H + sta (r8), y + ldy #SOCKET_RX_SIZE_OFFSET + lda r1L + sta (r8), y + iny + lda r1H + sta (r8), y + ldy #SOCKET_RX_DATA_OFFSET + lda #0 + sta (r8), y + iny + sta (r8), y + ldy #SOCKET_RX_OO_START_OFFSET + sta (r8), y + iny + sta (r8), y + ldy #SOCKET_RX_OO_END_OFFSET + sta (r8), y + iny + sta (r8), y +@done: + rts + +;** +;* Setup a callback task for the selected socket. +;* @param c Task for socket management. +;*/ +; in: r0 - callback ptr +socket_set_callback: + CmpW _sckt, NULL + beq @done + MoveW _sckt, r8 + ldy #SOCKET_CALLBACK_OFFSET + lda r0L + sta (r8), y + iny + lda r0H + sta (r8), y +@done: + rts + +;** +;* Put the socket to listen at the specified port. +;* @param p Listening port. +;* @return TRUE if succeed. +;*/ +; in: r0 - port to listen on +; out: carry set on success, socket is (or was already) active +socket_listen: + CmpW _sckt, NULL + beq @err + MoveW _sckt, r8 + + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_TCP + bne @udp + + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_IDLE + bne @done + lda #_LISTEN + sta (r8), y + bra @setup +@udp: + ldy #SOCKET_STATE_OFFSET + lda #_CONNECT + sta (r8), y +@setup: + ldy #SOCKET_PORT_OFFSET + lda r0H + sta (r8), y + iny + lda r0L + sta (r8), y + ldy #SOCKET_LISTEN_OFFSET + lda #$FF + sta (r8), y +@done: + sec + rts +@err: + clc + rts + +;** +;* Ask for a connection to a remote socket. +;* @param a Destination host IP address. +;* @param p Destination port. +;* @return TRUE if succeeded. +;* +; in: r0,r1 - IPV4, r2 - port +; out: carry set on success +socket_connect: + ;* + ;* Check socket availability. + ;* + CmpW _sckt, NULL + bne @1 + jmp @err +@1: + MoveW _sckt, r8 + + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_TCP + bne @10 + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_IDLE + beq @10 + jmp @err + +@10: + ;* + ;* Select a local port number. + ;* + ldy #SOCKET_PORT_OFFSET + lda port_used+1 + sta (r8), y + iny + lda port_used + sta (r8), y + + CmpW port_used, PORT_MAX + bne @20 + LoadW port_used, PORT_MIN + bra @30 +@20: + IncW port_used +@30: + ldy #SOCKET_REMIP_OFFSET + ldx #0 +@31: + lda r0, x + sta (r8), y + iny + inx + cpx #4 + bne @31 + + ldy #SOCKET_REMPORT_OFFSET + lda r2H + sta (r8), y + iny + lda r2L + sta (r8), y + + ldy #SOCKET_TYPE_OFFSET + lda (r8) ,y + cmp #SOCKET_UDP + bne @40 + + ;* + ;* UDP socket. + ;* No connection procedure needed. + ;*/ + ldy #SOCKET_STATE_OFFSET + lda #_CONNECT + sta (r8), y + bra @done +@40: + ;* + ;* TCP socket. + ;* Force sending SYN message. + ;*/ + ldy #SOCKET_STATE_OFFSET + lda #_SYN_SENT + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #SYN + sta (r8), y + ldy #SOCKET_RETRY_OFFSET + lda #RETRIES_TCP + sta (r8), y + + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add +@done: + sec + rts +@err: + clc + rts + +;** +;* Ask for data transmission to the peer. +;* @param data Buffer for the data message. +;* @param size Buffer size in bytes. +;* @return TRUE if succeeded. +;*/ +; in: r0 - ptr to data buffer, r1 - size of data buffer +; out: carry, set if success +socket_send: + CmpW _sckt, NULL + beq @err + + ldy #SOCKET_STATE_OFFSET + MoveW _sckt, r8 + lda (r8), y + cmp #_CONNECT + bne @err + + ;// Check if we still have un-acknowledged data, and + ;// if so, return failure + ldy #SOCKET_TO_SEND_OFFSET + lda (r8), y + and #PSH + bne @err + + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_TCP + bne @10 + + ldy #SOCKET_STATE_OFFSET + lda #_ACK_WAIT + sta (r8), y +@10: + ldy #SOCKET_TX_OFFSET + lda r0L + sta (r8), y + iny + lda r0H + sta (r8), y + ldy #SOCKET_TX_SIZE_OFFSET + lda r1L + sta (r8), y + iny + lda r1H + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #ACK|PSH + sta (r8), y + ldy #SOCKET_RETRY_OFFSET + lda #RETRIES_TCP + sta (r8), y + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add + sec + rts +@err: + clc + rts + +;** +;* Returns the amount of data available for reading in bytes. +;*/ +; out: r0 - data size +socket_data_size: + + CmpW _sckt, NULL + beq @err + MoveW _sckt, r8 + ldy #SOCKET_RX_DATA_OFFSET + lda (r8), y + sta r0L + iny + lda (r8), y + sta r0H + + sec + rts +@err: + clc + rts + +;** +;* Ask for socket disconnection. +;* @return TRUE if succeeded. +;*/ +; out: carry set if succeeded +socket_disconnect: + CmpW _sckt, NULL + beq @err + MoveW _sckt, r8 + + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_UDP + bne @10 + ;* + ;* UDP socket. + ;* No disconnection procedure. + ;* + ldy #SOCKET_STATE_OFFSET + lda #_IDLE + sta (r8), y + bra @done +@10: + ;* + ;* TCP socket. + ;* Start sending FIN message. + ;*/ + ;printf("TCP close\n"); + + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_CONNECT + ;bne @err + + ldy #SOCKET_STATE_OFFSET + lda #_FIN_SENT + sta (r8), y + ldy #SOCKET_TO_SEND_OFFSET + lda #FIN | ACK + sta (r8), y + ldy #SOCKET_RETRY_OFFSET + lda #RETRIES_TCP + sta (r8), y + + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add +@done: sec + rts + +@err: clc + rts + +;** +;* Reset a socket, possibly sending a RST message. +;*/ +socket_reset: + CmpW _sckt, NULL + beq @done + MoveW _sckt, r8 + ldy #SOCKET_TYPE_OFFSET + lda (r8), y + cmp #SOCKET_TCP + bne @done + ldy #SOCKET_STATE_OFFSET + lda (r8), y + cmp #_IDLE + beq @10 + + ldy #SOCKET_TO_SEND_OFFSET + lda #RST + sta (r8), y + LoadW r0, nwk_upstream + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2, upstreamName + jsr task_add +@10: + ldy #SOCKET_STATE_OFFSET + lda #_IDLE + sta (r8),y +@done: rts + +;** +;* Network system initialization. +;*/ +weeip_init: + LoadW r0, SOCKET_SIZE*MAX_SOCKET + LoadW r1, _sockets + jsr ClearRam + LoadW _sckt, _sockets + + lda $D012 + sta random+1 + + jsr GetRandom + MoveW random, r0 + LoadW r1, PORT_MAX - PORT_MIN + 1 + ldx #r0 + ldy #r1 + jsr Ddiv + + MoveW r8, r0 + AddVW PORT_MIN, r0 + MoveW r0, port_used + + jsr GetRandom + jsr GetRandom + jsr GetRandom + jsr GetRandom + MoveW random, id + + LoadW r0, nwk_tick + LoadB r1L, TICK_TCP + LoadB r1H, 0 + LoadW r2, nwktickName + jsr task_add + jsr eth_init + jsr arp_init + rts diff --git a/space/ip/task.s b/space/ip/task.s new file mode 100644 index 00000000..84815151 --- /dev/null +++ b/space/ip/task.s @@ -0,0 +1,507 @@ +;** +;* @file task.c +;* @brief Task scheduler and dispatcher. +;* @compiler CC65 +;* @author Paul Gardner-Stephen (paul@m-e-g-a.org) +;* based on: +;* @author Bruno Basseto (bruno@wise-ware.org) +;* @version 0. +;*/ + +;#include +;#include "debug.h" + +.include "geosmac.inc" +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" + +.include "defs.inc" + +.export ticks +.export task_periodic +.export task_add +.export task_cancel + +;// Periodically show the scheduled tasks +;//#define DEBUG_TASKS +;// Show each task as it is called +;//#define DEBUG_TASK_CALLS +;//#define DEBUG_NAMED_TASK "ethtask" + +;******************************************************************************** +;******************************************************************************** +;* The MIT License (MIT) +;* +;* Copyright (c) 1995-2013 Bruno Basseto (bruno@wise-ware.org). +;* +;* Permission is hereby granted, free of charge, to any person obtaining a copy +;* of this software and associated documentation files (the "Software"), to deal +;* in the Software without restriction, including without limitation the rights +;* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +;* copies of the Software, and to permit persons to whom the Software is +;* furnished to do so, subject to the following conditions: +;* +;* The above copyright notice and this permission notice shall be included in +;* all copies or substantial portions of the Software. +;* +;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +;* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +;* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +;* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +;* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +;* THE SOFTWARE. +;******************************************************************************** +;********************************************************************************/ + +;#include +;#include "task.h" + +;** +;* Go into sleep mode when all tasks were executed. +;*/ +;//#define _SLEEP + +TASK_SIZE = 2+1+1+9 +NTASKS = 8 + +TASK_FUN_OFFSET = 0 +TASK_TMR_OFFSET = 2 +TASK_PARA_OFFSET = 3 +TASK_NAME_OFFSET = 4 + +;** +;* Time counter. +;*/ +;volatile _uint32_t ticks; +ticks: + .byte 0, 0, 0, 0 + +;* +;* Exponential byte timing for a 10ms timebase (in seconds). +;* .===========================================================================. +;* | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +;* |===========================================================================| +;* | 000 | 0 | .01 | .02 | .03 | .04 | .05 | .06 | .07 | .08 | .09 | +;* | 010 | .1 | .11 | .12 | .13 | .14 | .15 | .17 | .19 | .21 | .23 | +;* | 020 | .25 | .27 | .29 | .31 | .33 | .35 | .37 | .39 | .41 | .43 | +;* | 030 | .45 | .47 | .51 | .55 | .59 | .63 | .67 | .71 | .75 | .79 | +;* | 040 | .83 | .87 | .91 | .95 | .99 | 1.03 | 1.07 | 1.11 | 1.15 | 1.19 | +;* | 050 | 1.23 | 1.27 | 1.31 | 1.35 | 1.39 | 1.43 | 1.47 | 1.51 | 1.55 | 1.59 | +;* | 060 | 1.63 | 1.67 | 1.71 | 1.75 | 1.83 | 1.91 | 1.99 | 2.07 | 2.15 | 2.23 | +;* | 070 | 2.31 | 2.39 | 2.47 | 2.55 | 2.63 | 2.71 | 2.79 | 2.87 | 2.95 | 3.03 | +;* | 080 | 3.11 | 3.19 | 3.27 | 3.35 | 3.43 | 3.51 | 3.59 | 3.67 | 3.75 | 3.83 | +;* | 090 | 3.91 | 3.99 | 4.07 | 4.15 | 4.23 | 4.31 | 4.39 | 4.47 | 4.55 | 4.63 | +;* | 100 | 4.71 | 4.79 | 4.87 | 4.95 | 5.03 | 5.11 | 5.19 | 5.27 | 5.35 | 5.43 | +;* | 110 | 5.51 | 5.59 | 5.67 | 5.75 | 5.83 | 5.91 | 5.99 | 6.07 | 6.15 | 6.23 | +;* | 120 | 6.31 | 6.39 | 6.47 | 6.55 | 6.63 | 6.71 | 6.79 | 6.87 | 7.03 | 7.19 | +;* | 130 | 7.35 | 7.51 | 7.67 | 7.83 | 7.99 | 8.15 | 8.31 | 8.47 | 8.63 | 8.79 | +;* | 140 | 8.95 | 9.11 | 9.27 | 9.43 | 9.59 | 9.75 | 9.91 | 10.1 | 10.2 | 10.4 | +;* | 150 | 10.5 | 10.7 | 10.9 | 11.0 | 11.2 | 11.3 | 11.5 | 11.7 | 11.8 | 12.0 | +;* | 160 | 12.1 | 12.3 | 12.5 | 12.6 | 12.8 | 12.9 | 13.1 | 13.3 | 13.4 | 13.6 | +;* | 170 | 13.7 | 13.9 | 14.1 | 14.2 | 14.4 | 14.5 | 14.7 | 14.9 | 15.0 | 15.2 | +;* | 180 | 15.3 | 15.5 | 15.7 | 15.8 | 16.0 | 16.1 | 16.3 | 16.5 | 16.6 | 16.8 | +;* | 190 | 16.9 | 17.1 | 17.3 | 17.4 | 17.6 | 17.7 | 17.9 | 18.1 | 18.2 | 18.4 | +;* | 200 | 18.5 | 18.7 | 18.9 | 19.0 | 19.2 | 19.3 | 19.5 | 19.7 | 19.8 | 20.0 | +;* | 210 | 20.1 | 20.3 | 20.5 | 20.6 | 20.8 | 20.9 | 21.1 | 21.3 | 21.4 | 21.6 | +;* | 220 | 21.7 | 21.9 | 22.1 | 22.2 | 22.4 | 22.5 | 22.7 | 22.9 | 23.0 | 23.2 | +;* | 230 | 23.3 | 23.5 | 23.7 | 23.8 | 24.0 | 24.1 | 24.3 | 24.5 | 24.6 | 24.8 | +;* | 240 | 24.9 | 25.1 | 25.3 | 25.4 | 25.6 | 25.7 | 25.9 | 26.1 | 26.2 | 26.4 | +;* | 250 | 26.5 | 26.7 | 26.9 | 27.0 | 27.2 | 27.3 | | | | | +;* '===========================================================================' +;*/ + +;** +;* Task list. +;*/ +_tasks: + .repeat NTASKS * TASK_SIZE + .byte 0 + .endrep + +;** +;* Sleep task. +;*/ +;static task_t _task_sleep = NULL; + +;** +;* Define a task to be run during sleep time. +;* It will be called after the periodic action of the watchdog-timer. +;* @param f Task address. +;*/ +;void +;task_sleep +; (task_t f) +;{ +; _task_sleep = f; +;} + +;** +;* Create a task for execution. +;* @param f Task address. +;* @param time Time to call (0 = immediate). +;* @param par Task parameter. +;* @return TRUE if successful. +;*/ +;in: r0 - task handler address, r1L - tempo, r1H - param, r2 - name +;out: carry set on success +task_add: + ;bool_t ok; + ;volatile tid_t *task; + ;uint8_t j; + + CmpW r0, NULL + beq @err + + ;* + ;* Search the task list for an empty slot. + ;*/ + ldx #0 + LoadW r3, _tasks +@loop: + cpx #NTASKS + beq @endLoop + + ldy #TASK_FUN_OFFSET + lda (r3), y + bne @next + iny + lda (r3), y + bne @next + + ; free slot + + ;* + ;* Empty slot found. + ;* Save task information. + ;*/ + ldy #TASK_FUN_OFFSET + lda r0L + sta (r3), y + iny + lda r0H + sta (r3), y + ldy #TASK_PARA_OFFSET + lda r1H + sta (r3), y + ldy #TASK_TMR_OFFSET + lda r1L + sta (r3), y + + AddVW TASK_NAME_OFFSET, r3 + ldy #0 +@20: + lda (r2), y + sta (r3), y + iny + cpy #8 + bne @20 + lda #0 + sta (r3), y + sec + rts +@next: + AddVW TASK_SIZE, r3 + inx + bra @loop +@endLoop: +@err: + clc + rts + +;** +;* Cancel the execution of a task. +;* @param f Task address. +;* @return FALSE if the task was already called. +;*/ +;in: r0 task ptr to be cancelled +;out: carry - false if the task was already called. +task_cancel: + ;volatile tid_t *task; + ;bool_t ok; + + CmpW r0, NULL + beq @10 + + ;* + ;* Search for the task in the list. + ;*/ + ldx #0 + + ldx #0 + LoadW r3, _tasks +@loop: + cpx #NTASKS + beq @10 + + ldy #TASK_FUN_OFFSET + lda (r3), y + cmp r0L + bne @next + iny + lda (r3), y + cmp r0H + bne @next + + ;* + ;* Found. Remove it. + ;*/ + lda #0 + sta (r3), y + dey + sta (r3), y + sec + rts +@next: + AddVW TASK_SIZE, r3 + inx + bra @loop +@10: + clc + rts + +;** +;* Cancel all tasks. +;*/ +task_cancel_all: + + ;printf("Cancel all tasks.\n"); + ldx #0 + LoadW r3, _tasks +@loop: + cpx #NTASKS + beq @10 + + ldy #TASK_FUN_OFFSET + lda #0 + sta (r3), y + iny + sta (r3), y +@next: + AddVW TASK_SIZE, r3 + inx + bra @loop +@10: + rts + +;** +;* Time interrupt handler. +;* Must be called by the interrupt thread. +;*/ +tick: + ;volatile static tid_t *task; + ;static byte_t tmp; + + ;* + ;* Update timing information. + ;*/ + inc ticks + bne @17 + inc ticks+1 + bne @17 + inc ticks+2 + bne @17 + inc ticks+3 +@17: + + ;* + ;* Update task timing information. + ;*/ + ldx #0 + LoadW r3, _tasks + +@loop: + cpx #NTASKS + beq @10 + + ldy #TASK_FUN_OFFSET + lda (r3), y + bne @20 + iny + lda (r3), y + bne @20 + bra @next + +@20: + ldy #TASK_TMR_OFFSET + lda (r3), y + beq @next + sta r2L + + ;* + ;* Exponential time algorithm. + ;*/ + lda r2L + and #$80 + beq @21 + lda ticks + and #$0F ;// each 16 ticks. + bne @next + bra @30 +@21: + lda r2L + and #$C0 + beq @22 + lda ticks + and #$007 ;// each 8 ticks. + bne @next + bra @30 +@22: + lda r2L + and #$E0 + beq @23 + lda ticks + and #$003 ;// each 4 ticks. + bne @next + bra @30 +@23: + lda r2L + and #$F0 + beq @30 + lda ticks + and #$001 ;// each 2 ticks. + bne @next +@30: + lda (r3), y + dec + sta (r3), y +@next: + AddVW TASK_SIZE, r3 + inx + bra @loop +@10: + rts + +;** +;* Task management system initialization. +;*/ +task_init: + ;* + ;* Setup data structures. + ;*/ + LoadW r0, TASK_SIZE * NTASKS + LoadW r1, _tasks + jsr ClearRam + rts + +;** +;* Main loop. +;* Schedule tasks as needed. +;*/ +task_periodic: + ;static byte_t (*f)(byte_t); + ;volatile static tid_t *task; + ;static bool_t exe; +.ifdef DEBUG_TASK_CALLS + ;static task_t last_task_fun = NULL; + ;static unsigned char rev_toggle = 0x00; +.endif +.ifdef DEBUG_TASKS + ;static char show_task_list_n=0; + ;if (!show_task_list_n) printf("Tasks="); +.endif + + ;* + ;* Call pending tasks. + ;*/ + ;exe = FALSE; + LoadW r3, _tasks + ldx #0 +@loop: + cpx #NTASKS + beq @endLoop + + ldy #TASK_FUN_OFFSET + lda (r3), y + bne @16 + iny + lda (r3), y + bne @16 + bra @next +@16: +.ifdef DEBUG_TASKS + ;if (!show_task_list_n) printf("%s,",task->name); +.endif + + ;* + ;* Check task timing. + ;*/ + ldy #TASK_TMR_OFFSET + lda (r3), y + bne @next + +.ifdef DEBUG_TASK_CALLS +.ifdef DEBUG_NAMED_TASK + ;if (strstr(DEBUG_NAMED_TASK,task->name)) { +.endif + ;if (task->fun!=last_task_fun) { + ; printf("[Task:%s]",task->name); + ; last_task_fun=task->fun; + ;} else { + ; // Show blinking cursor as function is repeatedly called + ; printf("%c %c%c",0x12+rev_toggle,0x9d,0x92); + ; rev_toggle^=0x80; + ;} +.endif +.ifdef DEBUG_NAMED_TASK + ;} +.endif + ;* + ;* Task is ready. + ;* Remove from the list and run. + ;*/ + ldy #TASK_FUN_OFFSET + lda (r3), y + sta r2L + lda #0 + sta (r3), y + iny + lda (r3), y + sta r2H + lda #0 + sta (r3), y + ldy #TASK_PARA_OFFSET + lda (r3), y + + txa + pha + jsr (r2) + + pla + tax +@next: + AddVW TASK_SIZE, r3 + inx + bra @loop + +@endLoop: + jsr tick +.ifdef DEBUG_TASKS + ;if (!show_task_list_n) printf("\n"); +.endif + + LoadW r3, _tasks + ldx #0 +@loop2: + cpx #NTASKS + beq @endLoop2 + + ldy #TASK_FUN_OFFSET + lda (r3), y + bne @16_ + iny + lda (r3), y + bne @16 + bra @next2 +@16_: + rts +@next2: + AddVW TASK_SIZE, r3 + inx + bra @loop2 +@endLoop2: + + lda #$67 + brk + rts diff --git a/space/main.s b/space/main.s index 01eea423..a5e98700 100644 --- a/space/main.s +++ b/space/main.s @@ -4,18 +4,828 @@ .include "geosmac.inc" .include "diskdrv.inc" +.include "ip/defs.inc" .export __STARTUP_RUN__ +.import eth_init +.import weeip_init +.import dhcp_configured +.import dhcp_autoconfig +.import task_periodic +.import task_add +.import task_cancel +.import eth_task +.import dns_hostname_to_ip + +.import socket_create +.import socket_connect +.import socket_set_rx_buffer +.import socket_set_callback +.import socket_select +.import socket_send +.import socket_data_size +.import socket_disconnect +.import socket_reset +.import socket_release + +.import dns_buf + .segment "STARTUP" +LINE_BUF_SIZE = 256 + +HTTP_STATE_IDLE = 0 +HTTP_STATE_REQUEST = 1 +HTTP_STATE_HEADER = 2 +HTTP_STATE_BODY = 3 +HTTP_STATE_ERROR = 4 +HTTP_STATE_REDIRECT = 5 + __STARTUP_RUN__: - LoadW r0, WelcomeDialog + ;jsr CountMissingFiles ; -> r0 + + ;brk + ;lda #$43 + + LoadW r0, CheckDialog jsr DoDlgBox + lda r0L + cmp #OK + bne @10 + + ;jsr eth_init + + jsr prepare_network + + LoadW r0, WelcomeDialog + jsr DoDlgBox +@10: jmp EnterDeskTop +prepare_network: + cli + + ;// Setup WeeIP + + jsr weeip_init + LoadW r0, eth_task + jsr task_cancel + LoadB r1L, 0 + LoadB r1H, 0 + LoadW r2H, ethName + jsr task_add + + LoadB dblClickCount, 250 +@22: + lda dblClickCount + bne @22 + + ;// Do DHCP auto-configuration + LoadB dhcp_configured, 0 + ;printf("Configuring network via DHCP\n"); + jsr dhcp_autoconfig + +@20: + lda dhcp_configured + bne @10 + jsr task_periodic + LoadB dblClickCount, 1 +@21: + lda dblClickCount + bne @21 + bra @20 +@10: + brk + lda #$FF + LoadW r0, hostName + LoadW r1, hostIP + jsr dns_hostname_to_ip + + LoadB $D020, 0 + ; send http GET request + LoadW r2, gp128cvt + LoadW r3, 10 + jsr HTTP_GET + ; printf("My IP is %d.%d.%d.%d\n", + ; ip_local.b[0],ip_local.b[1],ip_local.b[2],ip_local.b[3]); + rts + +; r0,r1 up address to connect to +; r2 = address of file name or URL (for re-direct) +; r3 = length of file name +HTTP_GET: + PushW r2 + PushW r3 + PushW r0 + PushW r1 + + LoadB http_state, HTTP_STATE_IDLE + LoadB http_line_buf_pos, 0 + LoadB http_redirect, 0 + LoadB http_connected, 0 + LoadW download_count, 1 + LoadB download_pos, 2 + LoadW download_packets, 0 + LoadW r3, 0 ; lookup next free block from beginning + jsr SetNextFree + cpx #0 + beq @gotBlock + jmp @err +@gotBlock: + IncW download_count + MoveW r3, download_block + MoveW r3, download_first + + LoadB r0L, SOCKET_TCP + jsr socket_create + MoveW r1, http_socket + + jsr socket_select + + LoadW r0, HTTP_GET_callback + jsr socket_set_callback + + LoadW r0, $5000 + LoadW r1, 2048 + jsr socket_set_rx_buffer + + PopW r1 + PopW r0 + MoveW r0, a0 + MoveW r1, a1 + LoadW r2, 80 + jsr socket_connect + + ; wait to be connected +@20: + lda http_connected + bne @10 + jsr task_periodic + LoadB dblClickCount, 1 +@21: + ;lda dblClickCount + ;bne @21 + bra @20 +@10: + LoadB http_state, HTTP_STATE_REQUEST + + ; construct request + LoadW r7, 0 + + ; get get + jsr i_MoveData + .word fileRequestPrefix ; from + .word fileRequestBuf + .word fileRequestPrefixEnd - fileRequestPrefix + LoadW r0, fileRequestPrefixEnd - fileRequestPrefix + AddW r0, r7 + + LoadW r0, fileRequestBuf + AddW r7, r0 + MoveW r0, @locationTo + ; get location + jsr i_MoveData + .word fileRequestLocation +@locationTo: + .word 0 + .word fileRequestLocationEnd - fileRequestLocation + LoadW r0, fileRequestLocationEnd - fileRequestLocation + AddW r0, r7 + + PopW r3 + PopW r2 + MoveW r2, @nameFrom + MoveW r3, @fromNameSize + LoadW r0, fileRequestBuf + AddW r7, r0 + MoveW r0, @nameTo + AddW r3, r7 + ; add name + jsr i_MoveData +@nameFrom: + .word fileRequestSuffix +@nameTo: + .word 0 +@fromNameSize: + .word 0 + + LoadW r0, fileRequestBuf + AddW r7, r0 + MoveW r0, @suffixTo + ; get suffix + jsr i_MoveData + .word fileRequestSuffix +@suffixTo: + .word 0 + .word fileRequestSuffixEnd - fileRequestSuffix + LoadW r0, fileRequestSuffixEnd - fileRequestSuffix + AddW r0, r7 + + ; connected, send request + LoadW r0, fileRequestBuf + MoveW r7, r1 ; request len + jsr socket_send + +@30: + jsr task_periodic + LoadB dblClickCount, 1 +@31: + lda dblClickCount + bne @31 + + lda http_connected + bne @30 + + CmpBI http_state, HTTP_STATE_REDIRECT + beq @_33 + jmp @33 +@_33: + brk + lda #$71 + + LoadW r5, http_line_buf + (httpLocationHeaderEnd-httpLocationHeader) + LoadW r6, httpDomain + ldx #r5 + ldy #r6 + lda #<(httpDomainEnd - httpDomain) + jsr CmpFString + + + LoadB http_line_buf_pos, 0 + LoadB http_connected, 0 + + LoadB http_state, HTTP_STATE_REQUEST + + MoveW http_socket, r1 + jsr socket_reset + jsr socket_release + + LoadB r0L, SOCKET_TCP + jsr socket_create + MoveW r1, http_socket + + MoveW a1, r1 + MoveW a0, r0 + jsr socket_select + LoadW r2, 80 + jsr socket_connect + + ; wait until connected +@_20: + lda http_connected + bne @_10 + jsr task_periodic + LoadB dblClickCount, 1 +@_21: + ;lda dblClickCount + ;bne @21 + bra @_20 +@_10: + ; redirect request + ; construct request + LoadW r7, 0 + brk + lda #$F7 + + ; get get + jsr i_MoveData + .word fileRequestPrefix ; from + .word fileRequestBuf + .word fileRequestPrefixEnd - fileRequestPrefix + LoadW r0, fileRequestPrefixEnd - fileRequestPrefix + AddW r0, r7 + + ; copy url path + AddW r7, r0 + LoadW r0, fileRequestBuf + ldy #0 + ldx #<((httpLocationHeaderEnd-httpLocationHeader)+(httpDomainEnd - httpDomain)-1) +@27: + lda http_line_buf, x + sta (r0), y + beq @28 + iny + inx + IncW r7 + bra @27 +@28: + LoadW r0, fileRequestBuf + AddW r7, r0 + MoveW r0, @suffixTo2 + ; get suffix + jsr i_MoveData + .word fileRequestSuffix +@suffixTo2: + .word 0 + .word fileRequestSuffixEnd - fileRequestSuffix + LoadW r0, fileRequestSuffixEnd - fileRequestSuffix + AddW r0, r7 + + ; connected, send request + LoadW r0, fileRequestBuf + MoveW r7, r1 + jsr socket_send + +@34: + jsr task_periodic + LoadB dblClickCount, 1 +@33: + lda dblClickCount + bne @33 + + lda http_connected + bne @34 + rts +@err: + rts + +HTTP_GET_callback: + + tax + PushW r0 + PushW r1 + PushW r2 + PushW r3 + PushW r4 + PushW r5 + PushW r6 + PushW r7 + PushW r8 + PushW r9 + txa + + cmp #WEEIP_EV_CONNECT + bne @10 + + LoadB http_connected, $FF + jmp @11 +@10: + cmp #WEEIP_EV_DATA + beq @12b + cmp #WEEIP_EV_DISCONNECT_WITH_DATA + beq @12b + jmp @12 +@12b: + pha + jsr socket_data_size ; get data size to r0 + + ;IncW download_packets + ;AddW r0, download_packets + + LoadW r1, 0 + LoadW r2, $5000 + CmpWI r0, 0 + bne @haveData ; skip if not data available +@12c: + pla + jmp @12 + +@haveData: + ; start new or continue line + ldx http_line_buf_pos +@31: + CmpBI http_state, HTTP_STATE_REQUEST + beq @processLine + CmpBI http_state, HTTP_STATE_HEADER + beq @processLine + CmpBI http_state, HTTP_STATE_BODY + beq @processBody ; mode data for the body + jmp @12c ; idle? drop data + +@processLine: + + ; process next byte + + ldy #0 + lda (r2), y + bne @20 + + brk ; fail on \0 in lines + lda #$89 + lda (r2), y + +@20: + cmp #CR ; skip, we check for \n + beq @30 + cmp #LF + bne @32 ; no line end yet + + ; NULL terminate current line + lda #NULL + sta http_line_buf, x + + ; process line now + cpx #0 ; empty line? + beq @processBodyStart + + jsr ProcessLine + + ; next new line + ldx #0 + bra @30 +@32: + cpx #$FF + beq @30 + sta http_line_buf, x + inx +@30: + IncW r1 + IncW r2 + CmpW r1, r0 + bne @31 + stx http_line_buf_pos ; remeber line buf pos +@12d: + jmp @12c + + ; fall through to body processing of last line after header passed +@processBodyStart: + LoadB http_state, HTTP_STATE_BODY + IncW r1 + IncW r2 + CmpW r1, r0 + beq @12d + +@processBody: + ldx download_pos + + ; add bytes to buffer @diskBlkBuf +@bodyLoop: + IncW download_packets + txa + pha + jsr WriteBlockCount + pla + tax + ldy #0 + lda (r2), y + + cpx #0 ; check for overflow + bne @storeBody + + inx + inx + stx download_pos + + pha + PushW r1 + PushW r2 + PushW r0 + + LoadW r3, 0 ; lookup next free block from beginning + ; allocate next block + jsr SetNextFree + cpx #0 + bne @bodyErr + IncW download_count + + jsr WriteBlockCount + + ; write block + MoveW r3, diskBlkBuf + MoveW download_block, r1 + MoveW r3, download_block + LoadW r4, diskBlkBuf + jsr PutBlock + cpx #0 + bne @bodyErr + + PopW r0 + PopW r2 + PopW r1 + pla + + ; setup next + ldx download_pos + ;sta diskBlkBuf, x + ;bra @bodyNext +@storeBody: + sta diskBlkBuf, x + inx +@bodyNext: + IncW r1 ; read count + IncW r2 ; read pos + CmpW r1, r0 ; avail + beq @endLoop + jmp @bodyLoop +@endLoop: + stx download_pos + + jmp @12c +@bodyErr: + + brk + lda #$92 +@12: + cmp #WEEIP_EV_DISCONNECT + beq @11b + cmp #WEEIP_EV_DISCONNECT_WITH_DATA + bne @11 +@11b: + brk + lda #$93 + lda http_state + cmp #HTTP_STATE_BODY + bne @17 + jsr CloseFile + +@17: + LoadB http_connected, 0 +@11: +;brk +;lda #$97 + + PopW r9 + PopW r8 + PopW r7 + PopW r6 + PopW r5 + PopW r4 + PopW r3 + PopW r2 + PopW r1 + PopW r0 + rts + +ProcessLine: + + CmpBI http_state, HTTP_STATE_REQUEST + bne @100 + + ; check for result code + LoadW r5, http_line_buf + LoadW r6, httpSuccessResult + ldx #r5 + ldy #r6 + lda #<(httpSuccessResultEnd-httpSuccessResult) + jsr CmpFString + bne @11 + + ; success, start reading header + LoadB http_state, HTTP_STATE_HEADER + bra @end +@11: + LoadW r5, http_line_buf + LoadW r6, httpRedirectResult + ldx #r5 + ldy #r6 + lda #<(httpRedirectResultEnd-httpRedirectResult) + jsr CmpFString + bne @10 + + LoadB http_state, HTTP_STATE_HEADER + LoadB http_redirect, $FF + bra @end + +@10: ; handle wrong/unexpected result + LoadB http_state, HTTP_STATE_ERROR + jsr socket_disconnect + bra @end +@100: + ; reading header, just continue + lda http_redirect + beq @end + + LoadW r5, http_line_buf + LoadW r6, httpLocationHeader + ldx #r5 + ldy #r6 + lda #<(httpLocationHeaderEnd-httpLocationHeader) + jsr CmpFString + bne @end + + brk + lda #$85 + + ; + LoadB http_state, HTTP_STATE_REDIRECT + jsr socket_disconnect + +@end: + rts + +CloseFile: + brk + lda #$FF + + LoadB diskBlkBuf, $00 + MoveB download_pos, diskBlkBuf+1 + + ; write block + MoveW download_block, r1 + LoadW r4, diskBlkBuf + jsr PutBlock + + ; allocate dir entry + LoadB r10L, 0 + jsr GetFreeDirBlk + + ; fill in dir entry + lda #$82 + sta diskBlkBuf, y + + lda download_first + sta diskBlkBuf+1,y + lda download_first+1 + sta diskBlkBuf+2,y + + ; copy name + tya + pha + ldx #0 +@10: + lda tempName, x + sta diskBlkBuf+3,y + inx + iny + cpx #16 + bne @10 + pla + tay + lda #0 + sta diskBlkBuf+19,y + sta diskBlkBuf+20,y + sta diskBlkBuf+21,y + sta diskBlkBuf+22,y + sta diskBlkBuf+23,y + sta diskBlkBuf+24,y + sta diskBlkBuf+25,y + sta diskBlkBuf+26,y + sta diskBlkBuf+27,y + + lda download_count + sta diskBlkBuf+28,y + lda download_count+1 + sta diskBlkBuf+29,y + + + ; r1 point to track and sector + LoadW r4, diskBlkBuf + jsr PutBlock + + jsr PutDirHead ; destroys r1 + + rts + +WriteBlockCount: +PushW r0 +PushW r1 +PushW r2 +PushW r3 +PushW r4 +PushW r5 +PushW r6 +PushW r7 +PushW r8 +PushW r9 +PushW r10 +PushW r11 +PushW r12 +PushW r13 +jsr UseSystemFont +MoveW download_count, r0 +LoadW r11, 10 +LoadB r1H, 10 +lda #SET_SURPRESS|SET_LEFTJUST +jsr PutDecimal + +MoveW download_packets, r0 +LoadW r11, 10 +LoadB r1H, 26 +lda #SET_SURPRESS|SET_LEFTJUST +jsr PutDecimal + +PopW r13 +PopW r12 +PopW r11 +PopW r10 +PopW r9 +PopW r8 +PopW r7 +PopW r6 +PopW r5 +PopW r4 +PopW r3 +PopW r2 +PopW r1 +PopW r0 +rts + +CountMissingFiles: + LoadW r0, 0 + LoadW r8, bootstrapTable +@10: + ldy #2 + lda (r8), y + sta r6L + iny + lda (r8), y + sta r6H + jsr FindFile + cpx #0 + beq @20 + IncW r0 +@20: + AddVW 5, r8 + CmpWI r8, bootstrapTableEnd + bne @10 + rts + + +tempName: + .byte "Temp Download", $a0, $a0, $a0 +http_line_buf: + .repeat LINE_BUF_SIZE + .byte 0 + .endrep +http_line_buf_pos: + .byte 0 + +http_connected: + .byte 0 +http_redirect: + .byte 0 +http_socket: + .word 0 +http_state: + .byte HTTP_STATE_IDLE + +download_pos: + .byte 2 +download_block: + .word 0 +download_first: + .word 0 +download_count: + .word 0 +download_packets: + .word 0 + +fileRequestBuf: + .repeat 1024 + .byte 0 + .endrep + +fileRequestPrefix: + .byte "GET " +fileRequestPrefixEnd: + .byte NULL + +fileRequestLocation: + .byte "/web/20111025045336if_/http://cbmfiles.com:80/geos/geosfiles/" +fileRequestLocationEnd: + .byte NULL + +fileRequestSuffix: + .byte " HTTP/1.0", CR, LF + .byte "Host: web.archive.org", CR, LF + .byte "Connection: Close", CR, LF + .byte CR, LF +fileRequestSuffixEnd: + .byte NULL + +ethName: + .byte "eth", NULL + +httpSuccessResult: + .byte "HTTP/1.1 200 " +httpSuccessResultEnd: + +httpRedirectResult: + .byte "HTTP/1.1 302 " +httpRedirectResultEnd: + +httpLocationHeader: + .byte "location: " +httpLocationHeaderEnd: + +httpDomain: + .byte "http://web.archive.org/" +httpDomainEnd: + .byte NULL + +hostName: + ;.byte "www.bluewaysw.de", NULL + ;.byte "192.168.17.116", NULL + .byte "web.archive.org", NULL + ;.byte "breadbox.com", NULL +hostIP: + .byte 0, 0, 0, 0 + +CheckDialog: + .byte $81 ; standard dialog, light bachground + + .byte OK + .byte 1, 74 + + .byte CANCEL + .byte 17, 74 + + .byte NULL + + WelcomeDialog: .byte $81 ; standard dialog, light bachground @@ -24,7 +834,7 @@ WelcomeDialog: .byte DBTXTSTR, 10,11 .word welcomeText - + .byte DBTXTSTR, 10,21 .word geosVersionText @@ -45,11 +855,11 @@ WelcomeDialog: .byte DBTXTSTR, 10,89 .word bluewayswInfo - + .byte NULL - + welcomeText: .byte BOLDON, OUTLINEON, "Welcome!", PLAINTEXT, NULL geosVersionText: @@ -66,5 +876,764 @@ geoSpaceInfo: .byte "establishing GeoSpace:", NULL bluewayswInfo: .byte BOLDON, "www.bluewaysw.de", NULL + + +FOLDER_PRINTER_DRIVER = 10 +FOLDER_APPLICATION = 3 +FOLDER_FONTS = 6 +FOLDER_DEST_ACC = 0 +FOLDER_OTHER_DATA = 5 +FOLDER_UTILITIES = 7 + +gw128cvt: + .byte "GW128.CVT", NULL +gw128name: + .byte "GEOWRITE 128", NULL + +gp128cvt: + .byte "GPT128.CVT", NULL +gp128name: + .byte "GEOPAINT", NULL + +photo_mgrcvt: + .byte "PHMGR128.CVT", NULL +photo_mgrname: + .byte "photo manager", NULL + +text_mgrcvt: + .byte "TXMGR128.CVT", NULL +text_mgrname: + .byte "text manager", NULL + +alarm128cvt: + .byte "ALARM128.CVT", NULL +alarm128name: + .byte "alarm clock", NULL + +calc128cvt: + .byte "CALC128.CVT", NULL +calc128name: + .byte "calculator", NULL + +notepadcvt: + .byte "NOTE128.CVT", NULL +notepadname: + .byte "note pad", NULL + +spell128cvt: + .byte "SPELL128.CVT", NULL +spell128name: + .byte "GEOSPELL 128", NULL + +spelldatacvt: + .byte "DICT.CVT", NULL +spelldataname: + .byte "GeoDictionary", NULL + +merge128cvt: + .byte "GM128.CVT", NULL +merge128name: + .byte "GEOMERGE", NULL + +californiacvt: + .byte "CALIF.CVT", NULL +californianame: + .byte "California", NULL + +corycvt: + .byte "CORY.CVT", NULL +coryname: + .byte "Cory", NULL + +dwinellecvt: + .byte "DWIN.CVT", NULL +dwinellename: + .byte "Dwinelle", NULL + +romacvt: + .byte "ROMA.CVT", NULL +romaname: + .byte "Roma", NULL + +universitycvt: + .byte "UNIV.CVT", NULL +universityname: + .byte "University", NULL + +commfontcvt: + .byte "COMMFONT.CVT", NULL +commfontname: + .byte "Commodore", NULL + +lwromacvt: + .byte "LWROMA.CVT", NULL +lwromaname: + .byte "LW_Roma", NULL + +lwcalcvt: + .byte "LWCAL.CVT", NULL +lwcalname: + .byte "LW_Cal", NULL + +lwgreekcvt: + .byte "LWGREEK.CVT", NULL +lwgreekname: + .byte "LW_Greek", NULL + +lwbarrowscvt: + .byte "LWBARR.CVT", NULL +lwbarrowsname: + .byte "LW_Barrows", NULL + +paint_driverscvt: + .byte "PNTDRVRS.CVT", NULL +paint_driversname: + .byte "PAINT DRIVERS", NULL + +geolasercvt: + .byte "GEOLASER.CVT", NULL +geolasername: + .byte "GEOLASER", NULL + +text_grabbercvt: + .byte "TG128.CVT", NULL +text_grabbername: + .byte "TEXT GRABBER 128", NULL + +tgfs4128cvt: + .byte "TGFS4128.CVT", NULL +tgfs4128name: + .byte "FleetSystem 4", NULL + +tgpc2128cvt: + .byte "TGPC2128.CVT", NULL +tgpc2128name: + .byte "PaperClip II", NULL + +tgww128cvt: + .byte "TGWW128.CVT", NULL +tgww128name: + .byte "WordWriter 128", NULL + +tgg1128cvt: + .byte "TGG1128.CVT", NULL +tgg1128name: + .byte "C128 Generic I", NULL + +tgg2128cvt: + .byte "TGG2128.CVT", NULL +tgg2128name: + .byte "C128 Generic II", NULL + +COMMCOMPcvt: + .byte "COMMCOMP.CVT", NULL +COMMCOMPname: + .byte "Comm. Compat.", NULL + +p1526cvt: + .byte "1526.CVT", NULL +p1526name: + .byte "1526", NULL + +ASCcvt: + .byte "ASC.CVT", NULL +ASCname: + .byte "ASCII Only", NULL + +BCM120cvt: + .byte "BCM120.CVT", NULL +BCM120name: + .byte "BlueChip M120", NULL + +CI8510cvt: + .byte "CI8510.CVT", NULL +CI8510name: + .byte "C.Itoh 8510", NULL + +CI8510Acvt: + .byte "CI8510A.CVT", NULL +CI8510Aname: + .byte "C.Itoh 8510A", NULL + +CI8510DScvt: + .byte "CI8510DS.CVT", NULL +CI8510DSname: + .byte "C.Itoh 8510 D.S.", NULL + +CI8510QScvt: + .byte "CI8510QS.CVT", NULL +CI8510QSname: + .byte "C.Itoh 8510 Q.S.", NULL + +CIREDcvt: + .byte "CIRED.CVT", NULL +CIREDname: + .byte "C.Itoh RED.", NULL + +EPFX80cvt: + .byte "EPFX80.CVT", NULL +EPFX80name: + .byte "Epson FX-80", NULL + +EPFX80DScvt: + .byte "EPFX80DS.CVT", NULL +EPFX80DSname: + .byte "Epson FX-80 DS", NULL + +EPFX80QScvt: + .byte "EPFX80QS.CVT", NULL +EPFX80QSname: + .byte "Epson FX-80 QS", NULL + +EPJX80cvt: + .byte "EPJX80.CVT", NULL +EPJX80name: + .byte "Epson JX-80", NULL + +EPLQ1500cvt: + .byte "EPLQ1500.CVT", NULL +EPLQ1500name: + .byte "Epson LQ-1500", NULL + +EPLX80cvt: + .byte "EPLX80.CVT", NULL +EPLX80name: + .byte "Epson LX-80", NULL + +EPMX80cvt: + .byte "EPMX80.CVT", NULL +EPMX80name: + .byte "Epson MX-80", NULL + +EPREDcvt: + .byte "EPRED.CVT", NULL +EPREDname: + .byte "Epson RED.", NULL + +GEM10Xcvt: + .byte "GEM10X.CVT", NULL +GEM10Xname: + .byte "Gemini 10x", NULL + +GEMDScvt: + .byte "GEMDS.CVT", NULL +GEMDSname: + .byte "Gemini DS", NULL + +GEMQScvt: + .byte "GEMQS.CVT", NULL +GEMQSname: + .byte "Gemini QS", NULL + +IBM51Pcvt: + .byte "IBM51P.CVT", NULL +IBM51Pname: + .byte "IBM 5152+", NULL + +IBM51PDScvt: + .byte "IBM51PDS.CVT", NULL +IBM51PDSname: + .byte "IBM 5152+ DS", NULL + +IBM51PQScvt: + .byte "IBM51PQS.CVT", NULL +IBM51PQSname: + .byte "IBM 5152+ QS", NULL + +IMWcvt: + .byte "IMW.CVT", NULL +IMWname: + .byte "ImageWriter", NULL + +IMWDScvt: + .byte "IMWDS.CVT", NULL +IMWDSname: + .byte "ImageWriterDS", NULL + +IMWQScvt: + .byte "IMWQS.CVT", NULL +IMWQSname: + .byte "ImageWriterQS", NULL + +IMW2cvt: + .byte "IMW2.CVT", NULL +IMW2name: + .byte "ImageWriter II", NULL + +IMW2DScvt: + .byte "IMW2DS.CVT", NULL +IMW2DSname: + .byte "ImWrtr II DS", NULL + +IMW2QScvt: + .byte "IMW2QS.CVT", NULL +IMW2QSname: + .byte "ImWrtr II QS", NULL + +LJPARcvt: + .byte "LJPAR.CVT", NULL +LJPARname: + .byte "LaserJet PAR.", NULL + +LJSERcvt: + .byte "LJSER.CVT", NULL +LJSERname: + .byte "LaserJet SER.", NULL + +LW21cvt: + .byte "LW21.CVT", NULL +LW21name: + .byte "LaserWriter 2.1", NULL + +MPS801cvt: + .byte "MPS801.CVT", NULL +MPS801name: + .byte "MPS-801", NULL + +MPS803cvt: + .byte "MPS803.CVT", NULL +MPS803name: + .byte "MPS-803", NULL + +MPS1000cvt: + .byte "MPS1000.CVT", NULL +MPS1000name: + .byte "MPS-1000", NULL + +MPS1200cvt: + .byte "MPS2000.CVT", NULL +MPS1200name: + .byte "MPS 1200", NULL + +MPS1200DScvt: + .byte "MPS2000DS.CVT", NULL +MPS1200DSname: + .byte "MPS-1200 DS", NULL + +MPS1200QScvt: + .byte "MPS2000QS.CVT", NULL +MPS1200QSname: + .byte "MPS 1200 QS", NULL + +OK120cvt: + .byte "OK120.CVT", NULL +OK120name: + .byte "Oki 120", NULL + +OK120NLQcvt: + .byte "OK120NLQ.CVT", NULL +OK120NLQname: + .byte "Oki 120 NLQ", NULL + +OKML92cvt: + .byte "OKML92.CVT", NULL +OKML92name: + .byte "Oki ML-92/93", NULL + +OK10cvt: + .byte "OK10.CVT", NULL +OK10name: + .byte "Okimate 10", NULL + +OK20cvt: + .byte "OK20.CVT", NULL +OK20name: + .byte "Okimate 20", NULL + +OLPR2300cvt: + .byte "OLPR2300.CVT", NULL +OLPR2300name: + .byte "Olivetti PR2300", NULL + +RITECPcvt: + .byte "RITECP.CVT", NULL +RITECPname: + .byte "Riteman C+", NULL + +SCRIBEcvt: + .byte "SCRIBE.CVT", NULL +SCRIBEname: + .byte "Scribe", NULL + +SNB15cvt: + .byte "SNB15.CVT", NULL +SNB15name: + .byte "Star NB-15", NULL + +SNL10COMcvt: + .byte "SNL10COM.CVT", NULL +SNL10COMname: + .byte "Star NL-10(com)", NULL + +SNX10cvt: + .byte "SNX10.CVT", NULL +SNX10name: + .byte "Star NX-10", NULL + +SNX10DScvt: + .byte "SNX10DS.CVT", NULL +SNX10DSname: + .byte "Star NX-10 DS", NULL + +SNX10QScvt: + .byte "SNX10QS.CVT", NULL +SNX10QSname: + .byte "Star NX-10 QS", NULL + +SNX10Ccvt: + .byte "SNX10C.CVT", NULL +SNX10Cname: + .byte "Star NX-10C", NULL + +NX1000Rcvt: + .byte "NX1000R.CVT", NULL +NX1000Rname: + .byte "NX-1000 Rainbow", NULL + +SSG10cvt: + .byte "SSG10.CVT", NULL +SSG10name: + .byte "Star SG-10/15", NULL + +TOSHP321cvt: + .byte "TOSHP321.CVT", NULL +TOSHP321name: + .byte "Toshiba P321", NULL + + + + + +bootstrapTable: + .word gw128cvt + .word gw128name + .byte FOLDER_APPLICATION + + .word gp128cvt + .word gp128name + .byte FOLDER_APPLICATION + + .word photo_mgrcvt + .word photo_mgrname + .byte FOLDER_DEST_ACC + + .word text_mgrcvt + .word text_mgrname + .byte FOLDER_DEST_ACC + + .word alarm128cvt + .word alarm128name + .byte FOLDER_DEST_ACC + + .word calc128cvt + .word calc128name + .byte FOLDER_DEST_ACC + + .word notepadcvt + .word notepadname + .byte FOLDER_DEST_ACC + + .word spell128cvt + .word spell128name + .byte FOLDER_APPLICATION + + .word spelldatacvt + .word spelldataname + .byte FOLDER_OTHER_DATA + + .word merge128cvt + .word merge128name + .byte FOLDER_APPLICATION + + .word californiacvt + .word californianame + .byte FOLDER_FONTS + + .word corycvt + .word coryname + .byte FOLDER_FONTS + + .word dwinellecvt + .word dwinellename + .byte FOLDER_FONTS + + .word romacvt + .word romaname + .byte FOLDER_FONTS + + .word universitycvt + .word universityname + .byte FOLDER_FONTS + + .word commfontcvt + .word commfontname + .byte FOLDER_FONTS + + .word lwromacvt + .word lwromaname + .byte FOLDER_FONTS + + .word lwcalcvt + .word lwcalname + .byte FOLDER_FONTS + + .word lwgreekcvt + .word lwgreekname + .byte FOLDER_FONTS + + .word lwbarrowscvt + .word lwbarrowsname + .byte FOLDER_FONTS + + .word paint_driverscvt + .word paint_driversname + .byte FOLDER_UTILITIES + + .word geolasercvt + .word geolasername + .byte FOLDER_UTILITIES + + .word text_grabbercvt + .word text_grabbername + .byte FOLDER_UTILITIES + + .word tgfs4128cvt + .word tgfs4128name + .byte FOLDER_OTHER_DATA + + .word tgpc2128cvt + .word tgpc2128name + .byte FOLDER_OTHER_DATA + + .word tgww128cvt + .word tgww128name + .byte FOLDER_OTHER_DATA + + .word tgg1128cvt + .word tgg1128name + .byte FOLDER_OTHER_DATA + + .word tgg2128cvt + .word tgg2128name + .byte FOLDER_OTHER_DATA + + .word COMMCOMPcvt + .word COMMCOMPname + .byte FOLDER_PRINTER_DRIVER + + .word p1526cvt + .word p1526name + .byte FOLDER_PRINTER_DRIVER + + .word ASCcvt + .word ASCname + .byte FOLDER_PRINTER_DRIVER + + .word BCM120cvt + .word BCM120name + .byte FOLDER_PRINTER_DRIVER + + .word CI8510cvt + .word CI8510name + .byte FOLDER_PRINTER_DRIVER + + .word CI8510Acvt + .word CI8510Aname + .byte FOLDER_PRINTER_DRIVER + .word CI8510DScvt + .word CI8510DSname + .byte FOLDER_PRINTER_DRIVER + + .word CI8510QScvt + .word CI8510QSname + .byte FOLDER_PRINTER_DRIVER + + .word CIREDcvt + .word CIREDname + .byte FOLDER_PRINTER_DRIVER + + .word EPFX80cvt + .word EPFX80name + .byte FOLDER_PRINTER_DRIVER + + .word EPFX80DScvt + .word EPFX80DSname + .byte FOLDER_PRINTER_DRIVER + + .word EPFX80QScvt + .word EPFX80QSname + .byte FOLDER_PRINTER_DRIVER + + .word EPJX80cvt + .word EPJX80name + .byte FOLDER_PRINTER_DRIVER + + .word EPLQ1500cvt + .word EPLQ1500name + .byte FOLDER_PRINTER_DRIVER + + .word EPLX80cvt + .word EPLX80name + .byte FOLDER_PRINTER_DRIVER + + .word EPMX80cvt + .word EPMX80name + .byte FOLDER_PRINTER_DRIVER + + .word EPREDcvt + .word EPREDname + .byte FOLDER_PRINTER_DRIVER + + .word GEM10Xcvt + .word GEM10Xname + .byte FOLDER_PRINTER_DRIVER + + .word GEMDScvt + .word GEMDSname + .byte FOLDER_PRINTER_DRIVER + + .word GEMQScvt + .word GEMQSname + .byte FOLDER_PRINTER_DRIVER + + .word IBM51Pcvt + .word IBM51Pname + .byte FOLDER_PRINTER_DRIVER + + .word IBM51PDScvt + .word IBM51PDSname + .byte FOLDER_PRINTER_DRIVER + + .word IBM51PQScvt + .word IBM51PQSname + .byte FOLDER_PRINTER_DRIVER + + .word IMWcvt + .word IMWname + .byte FOLDER_PRINTER_DRIVER + + .word IMWDScvt + .word IMWDSname + .byte FOLDER_PRINTER_DRIVER + + .word IMWQScvt + .word IMWQSname + .byte FOLDER_PRINTER_DRIVER + + .word IMW2cvt + .word IMW2name + .byte FOLDER_PRINTER_DRIVER + + .word IMW2DScvt + .word IMW2DSname + .byte FOLDER_PRINTER_DRIVER + + .word IMW2QScvt + .word IMW2QSname + .byte FOLDER_PRINTER_DRIVER + + .word LJPARcvt + .word LJPARname + .byte FOLDER_PRINTER_DRIVER + + .word LJSERcvt + .word LJSERname + .byte FOLDER_PRINTER_DRIVER + + .word LW21cvt + .word LW21name + .byte FOLDER_PRINTER_DRIVER + + .word MPS801cvt + .word MPS801name + .byte FOLDER_PRINTER_DRIVER + + .word MPS803cvt + .word MPS803name + .byte FOLDER_PRINTER_DRIVER + + .word MPS1000cvt + .word MPS1000name + .byte FOLDER_PRINTER_DRIVER + + .word MPS1200cvt + .word MPS1200name + .byte FOLDER_PRINTER_DRIVER + + .word MPS1200DScvt + .word MPS1200DSname + .byte FOLDER_PRINTER_DRIVER + + .word MPS1200QScvt + .word MPS1200QSname + .byte FOLDER_PRINTER_DRIVER + + .word OK120cvt + .word OK120name + .byte FOLDER_PRINTER_DRIVER + + .word OK120NLQcvt + .word OK120NLQname + .byte FOLDER_PRINTER_DRIVER + + .word OKML92cvt + .word OKML92name + .byte FOLDER_PRINTER_DRIVER + + .word OK10cvt + .word OK10name + .byte FOLDER_PRINTER_DRIVER + + .word OK20cvt + .word OK20name + .byte FOLDER_PRINTER_DRIVER + + .word OLPR2300cvt + .word OLPR2300name + .byte FOLDER_PRINTER_DRIVER + + .word RITECPcvt + .word RITECPname + .byte FOLDER_PRINTER_DRIVER + + .word SCRIBEcvt + .word SCRIBEname + .byte FOLDER_PRINTER_DRIVER + + .word SNB15cvt + .word SNB15name + .byte FOLDER_PRINTER_DRIVER + + .word SNL10COMcvt + .word SNL10COMname + .byte FOLDER_PRINTER_DRIVER + + .word SNX10cvt + .word SNX10name + .byte FOLDER_PRINTER_DRIVER + + .word SNX10DScvt + .word SNX10DSname + .byte FOLDER_PRINTER_DRIVER + + .word SNX10QScvt + .word SNX10QSname + .byte FOLDER_PRINTER_DRIVER + + .word SNX10Ccvt + .word SNX10Cname + .byte FOLDER_PRINTER_DRIVER + + .word NX1000Rcvt + .word NX1000Rname + .byte FOLDER_PRINTER_DRIVER + + .word SSG10cvt + .word SSG10name + .byte FOLDER_PRINTER_DRIVER + .word TOSHP321cvt + .word TOSHP321name + .byte FOLDER_PRINTER_DRIVER +bootstrapTableEnd: From d298627f6bb6ef9fcae743abaf194a5a54c820c5 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:34:01 +0100 Subject: [PATCH 099/125] Ajust drive name locations in TopDesk. --- topdesk/Main/DeskTop.main.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index dfb09f2b..c9ccba27 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -2735,12 +2735,12 @@ PutDrive: ; schreibt DriveName sta @nr+1 LoadW___ r0, @dr @52: - AddVW 10,r11L ; nur low, da immer noch }ber 256 - jmp @50 + SubVW_ 10,r11L ; nur low, da immer noch }ber 256 + bra @50 @51: sty r0L stx r0H - ldx #r11 - jsr NormalizeX + ;ldx #r11 + ;jsr NormalizeX SubVW_ 7, r11 bra @50 From 5db3c87aca923c5b9bff5b942e02f25528ccffdc Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:45:55 +0100 Subject: [PATCH 100/125] GeoSpaces back to alpha behavour. --- space/main.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/space/main.s b/space/main.s index a5e98700..492ee057 100644 --- a/space/main.s +++ b/space/main.s @@ -43,6 +43,7 @@ HTTP_STATE_ERROR = 4 HTTP_STATE_REDIRECT = 5 __STARTUP_RUN__: +.if 0 ;jsr CountMissingFiles ; -> r0 ;brk @@ -58,7 +59,7 @@ __STARTUP_RUN__: ;jsr eth_init jsr prepare_network - +.endif LoadW r0, WelcomeDialog jsr DoDlgBox @10: From e87b94f078becdc64ac0144b836d97ecdf65c100 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 19:51:28 +0100 Subject: [PATCH 101/125] Update spaces info. --- space/main.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/space/main.s b/space/main.s index 492ee057..4b120dda 100644 --- a/space/main.s +++ b/space/main.s @@ -866,9 +866,9 @@ welcomeText: geosVersionText: .byte BOLDON, "GEOS V6.0 for the MEGA65", PLAINTEXT, NULL versionDetails: - .byte "(09/21/20, alpha preview)", NULL + .byte "(11/21/21, beta)", NULL coreInfo: - .byte "MEGA65 dev core: @192/56 3990bec", NULL + .byte "MEGA65 stable core: master@009727e, build 4", NULL warranties: .byte "Work in progress...", NULL warranties2: From d9922dbf6739842be8786493f28d9d9648ca3c9a Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 20:03:38 +0100 Subject: [PATCH 102/125] TopDesk adjustments for beta release. --- topdesk/Main/DeskTop.main.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index c9ccba27..234fcde2 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1328,13 +1328,13 @@ Speziell_Menue: lda #PLAINTEXT jsr MySubMenu .byte 13,28+28+14+14+14 .word 174,SPCRIGHT - .byte $86 + .byte $84 mpt @t1,MENU_ACTION,NeuerOrdner mpt @t2,MENU_ACTION,GetTime - mpt @t3,MENU_ACTION,MakeRamTop +; mpt @t3,MENU_ACTION,MakeRamTop mpt @t4,MENU_ACTION,Reset mpt AutoSwapFlag,MENU_ACTION,AutoSwap - mpt @t5,MENU_ACTION,GoToBasic +; mpt @t5,MENU_ACTION,GoToBasic ; mpt @t2,MENU_ACTION,EmptyAllDirs ; mpt @t4,MENU_ACTION,SaveWindowStat .ifdef lang_de @@ -2836,7 +2836,7 @@ Handler: ldx messageBuffer+1 ; File/Icontabellenadresse nach r0 ldx messageBuffer+1 jsr GetWorkArea bcs @05a - ;jsr DispSizeRectangle + jsr DispSizeRectangle jsr MyDispFiles txa beq @05a From d6fbd0f488ff54baf18c99d7d21f6aeb96eeac25 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 20:05:21 +0100 Subject: [PATCH 103/125] Update GeoSpaces menu for BETA release. --- space/main.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/space/main.s b/space/main.s index 4b120dda..e9e4db4b 100644 --- a/space/main.s +++ b/space/main.s @@ -866,11 +866,11 @@ welcomeText: geosVersionText: .byte BOLDON, "GEOS V6.0 for the MEGA65", PLAINTEXT, NULL versionDetails: - .byte "(11/21/21, beta)", NULL + .byte "(11/21/21, BETA)", NULL coreInfo: - .byte "MEGA65 stable core: master@009727e, build 4", NULL + .byte "M65 Core: master@009727e, build 4", NULL warranties: - .byte "Work in progress...", NULL + .byte "M65 Core: V920254", NULL warranties2: .byte BOLDON, "Use with care, no warranties!", PLAINTEXT, NULL geoSpaceInfo: From 46cc8151cf24291325d176a01882044c460e97d0 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 20:16:17 +0100 Subject: [PATCH 104/125] Final adjustments for BETA. --- clock/clock.grc | 3 +-- configure/configure65.grc | 2 +- mount/mount.grc | 3 +-- space/main.s | 2 +- space/space.grc | 3 +-- topdesk/Main/DeskTop.main.s | 2 +- topdesk/topdesk65.grc | 2 +- 7 files changed, 7 insertions(+), 10 deletions(-) diff --git a/clock/clock.grc b/clock/clock.grc index 7b1671ce..658f8ade 100644 --- a/clock/clock.grc +++ b/clock/clock.grc @@ -3,8 +3,7 @@ HEADER AUTO_EXEC "MEGA RTC" "MEGA RTC" "V1.0" { dostype USR structure SEQ info "Boot time init or setup of the RTC date and time." - date 20 03 03 21 45 + date 21 11 21 21 45 mode 80only icon "build/mega65/clock/clock.bf" } - diff --git a/configure/configure65.grc b/configure/configure65.grc index c1b15cae..7e643122 100644 --- a/configure/configure65.grc +++ b/configure/configure65.grc @@ -1,7 +1,7 @@ HEADER AUTO_EXEC "65 CONFIGURE" "65 Config" "V6.0" { author "BSW/Jim Collette" info "Allows varying disk configurations: 1541, 1571, 1581 & RAM disks supported." - date 23 12 91 22 54 + date 21 11 21 22 54 mode any structure VLIR mode 80only diff --git a/mount/mount.grc b/mount/mount.grc index 6984c1f0..c73aa06b 100644 --- a/mount/mount.grc +++ b/mount/mount.grc @@ -3,8 +3,7 @@ HEADER AUTO_EXEC "MEGA MOUNT" "MEGA Mount" "V1.0" { dostype USR structure SEQ info "Used to mount D81 or D41/D71 SD image files for mountable drives, save and restore at boot up." - date 25 01 20 13 19 + date 21 11 21 13 19 mode 80only icon "build/mega65/mount/mount.bf" } - diff --git a/space/main.s b/space/main.s index e9e4db4b..3e708ecc 100644 --- a/space/main.s +++ b/space/main.s @@ -870,7 +870,7 @@ versionDetails: coreInfo: .byte "M65 Core: master@009727e, build 4", NULL warranties: - .byte "M65 Core: V920254", NULL + .byte "M65 ROM versaion: V920254", NULL warranties2: .byte BOLDON, "Use with care, no warranties!", PLAINTEXT, NULL geoSpaceInfo: diff --git a/space/space.grc b/space/space.grc index 280b3186..6a08ebb4 100644 --- a/space/space.grc +++ b/space/space.grc @@ -3,8 +3,7 @@ HEADER APPLICATION "GEOSPACE" "GeoSpace" "V1.0" { dostype USR structure SEQ info "Service hub for the user and developer community of GEOS." - date 21 09 20 07 01 + date 21 11 21 07 01 mode 80only icon "build/mega65/space/space.bf" } - diff --git a/topdesk/Main/DeskTop.main.s b/topdesk/Main/DeskTop.main.s index 234fcde2..5a354288 100644 --- a/topdesk/Main/DeskTop.main.s +++ b/topdesk/Main/DeskTop.main.s @@ -1326,7 +1326,7 @@ Speziell_Menue: lda #PLAINTEXT lda #ITALICON @10: sta @t3 jsr MySubMenu - .byte 13,28+28+14+14+14 + .byte 13,28+28+14 ;+14+14 .word 174,SPCRIGHT .byte $84 mpt @t1,MENU_ACTION,NeuerOrdner diff --git a/topdesk/topdesk65.grc b/topdesk/topdesk65.grc index 47b9a6e3..0ac2b623 100644 --- a/topdesk/topdesk65.grc +++ b/topdesk/topdesk65.grc @@ -1,7 +1,7 @@ HEADER APPLICATION "65 DESKTOP" "TopDesk65" "V6.0" { author "DPT KnCiGo" info "New desk top." - date 9 10 93 23 54 + date 21 11 21 23 54 structure VLIR mode 80only icon "topdesk/TopDeskIcon.bf" From fa9cba1de49068ad5252bceed54804c51b5c95a2 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 21 Nov 2021 20:21:03 +0100 Subject: [PATCH 105/125] Fix typo. --- space/main.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/space/main.s b/space/main.s index 3e708ecc..a4cdad01 100644 --- a/space/main.s +++ b/space/main.s @@ -870,7 +870,7 @@ versionDetails: coreInfo: .byte "M65 Core: master@009727e, build 4", NULL warranties: - .byte "M65 ROM versaion: V920254", NULL + .byte "M65 ROM version: V920254", NULL warranties2: .byte BOLDON, "Use with care, no warranties!", PLAINTEXT, NULL geoSpaceInfo: From cddb4098f74ed986e0fc370c1814935225eff9a1 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 24 Nov 2021 09:20:07 +0100 Subject: [PATCH 106/125] Try HyperRAM fix by disabling cache operation. --- configure/r0.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configure/r0.s b/configure/r0.s index ed0abeda..2ec81fd2 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -1851,6 +1851,7 @@ HRBustCache: PushW r0 PushW r1 +.if 0 LoadW r0, $FFF2 LoadW r1, $0BFF @@ -1863,7 +1864,7 @@ HRBustCache: ldz #0 eom sta (r0), z - +.endif PopW r1 PopW r0 From 2d6f857b5714cd5b0ff440df9f259d3a17ee3a74 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 27 Nov 2021 17:00:45 +0100 Subject: [PATCH 107/125] Disabled IEC autodetection for CONFIGURE. Fixed a underlay mapping bug. --- configure/r0.s | 6 +++--- kernal/c65/map.s | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure/r0.s b/configure/r0.s index 2ec81fd2..cce6d8ef 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -342,7 +342,7 @@ L0558: jsr ExitTurbo ; 0558 20 32 C2 L0563: and #$A0 ; 0563 29 A0 ). sta sysRAMFlg ; 0565 8D C4 88 ... sta sysFlgCopy ; 0568 8D 12 C0 ... -.if 1 +.if 0 ; check boot driver to be 1541 or 1571 lda V2105 ; 056B AD 05 21 ..! cmp #$02 ; 056E C9 02 .. @@ -359,7 +359,7 @@ L057B: ;sta V2106-8,x sta V2106 ; 057B 8D 06 21 ..! .endif -.if 1 +.if 0 lda curDrive ; 057E AD 89 84 ... eor #$01 ; 0581 49 01 I. jsr SetDevice ; 0583 20 B0 C2 .. @@ -369,7 +369,7 @@ L057B: lda #$00 ; 058D A9 00 .. L058F: sta V2107 ; 058F 8D 07 21 ..! .endif -.if 1 +.if 0 lda ramExpSize ; 0592 AD C3 88 ... beq L05A3 ; 0595 F0 0C .. diff --git a/kernal/c65/map.s b/kernal/c65/map.s index e3912abc..d0c23196 100644 --- a/kernal/c65/map.s +++ b/kernal/c65/map.s @@ -357,7 +357,7 @@ MapUnderlay: pha tza pha - bit countHighMap + lda countHighMap bne @1 lda highMap sta lastHighMap From a84d4574706dfbbbd8dbb4fea2597f5f22e83ddd Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 27 Nov 2021 18:09:27 +0100 Subject: [PATCH 108/125] Fix initial default drive setup. --- configure/r0.s | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/configure/r0.s b/configure/r0.s index cce6d8ef..a778c1b6 100644 --- a/configure/r0.s +++ b/configure/r0.s @@ -342,9 +342,9 @@ L0558: jsr ExitTurbo ; 0558 20 32 C2 L0563: and #$A0 ; 0563 29 A0 ). sta sysRAMFlg ; 0565 8D C4 88 ... sta sysFlgCopy ; 0568 8D 12 C0 ... -.if 0 ; check boot driver to be 1541 or 1571 lda V2105 ; 056B AD 05 21 ..! +.if 0 cmp #$02 ; 056E C9 02 .. bcs L057B ; 0570 B0 09 .. @@ -355,10 +355,10 @@ L0563: and #$A0 ; 0563 29 A0 bne L057B ; 0577 D0 02 .. lda #$01 ; 0579 A9 01 .. L057B: - ;ldx V2104 - ;sta V2106-8,x - sta V2106 ; 057B 8D 06 21 ..! .endif + ldx V2104 + sta V2106-8,x + ;sta V2106 ; 057B 8D 06 21 ..! .if 0 lda curDrive ; 057E AD 89 84 ... eor #$01 ; 0581 49 01 I. @@ -366,9 +366,9 @@ L057B: jsr L0E64 ; 0586 20 64 0E d. cmp #$FF ; 0589 C9 FF .. bne L058F ; 058B D0 02 .. +.endif lda #$00 ; 058D A9 00 .. L058F: sta V2107 ; 058F 8D 07 21 ..! -.endif .if 0 lda ramExpSize ; 0592 AD C3 88 ... beq L05A3 ; 0595 F0 0C .. From aad7a3911a35265915a26503c80e39b795b06947 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 1 Feb 2023 07:30:18 +0100 Subject: [PATCH 109/125] Remove left over desk accessories from the unlicensed build setup. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 37d7c23c..b295754b 100755 --- a/Makefile +++ b/Makefile @@ -613,8 +613,6 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geoswrite $(BUILD_DIR)/joydrv.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/autostart.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/topdesk.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite prmgr128.cvt | $(C1541) $@ >/dev/null; \ - echo geoswrite pdmgr128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/input_driver.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/document.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite $(BUILD_DIR)/desk_accessory.cvt | $(C1541) $@ >/dev/null; \ @@ -631,6 +629,8 @@ $(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg $(BUILD_DIR)/topd echo geosfolder "Input\\ Drivers" "JOYSTICK"| $(C1541) $@ >/dev/null; \ echo geosfolder "Input\\ Drivers" "MEGA\\ 1351"| $(C1541) $@ >/dev/null; \ if [ "$(CONFIRM_CBMFILES_PERSONAL_USE_LICENSE)" = "ACCEPT_CBMFILES_LICENSE" ]; then \ + echo geoswrite prmgr128.cvt | $(C1541) $@ >/dev/null; \ + echo geoswrite pdmgr128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gw128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite gpt128.cvt | $(C1541) $@ >/dev/null; \ echo geoswrite photo_mgr.cvt | $(C1541) $@ >/dev/null; \ From 5b797ffdccfa2a03bcddcaf428a962689fa99a2d Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 3 Feb 2023 09:02:41 +0100 Subject: [PATCH 110/125] Documentation enhancements. --- MEGA65.md | 4 ++++ README.md | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/MEGA65.md b/MEGA65.md index 9e59d3af..d3d19d49 100644 --- a/MEGA65.md +++ b/MEGA65.md @@ -1,3 +1,7 @@ +... under construction ... + + + The memory mapping of the GEOS implementation for MEGA65 is as following: bank 0: diff --git a/README.md b/README.md index 81d81c18..91da4d63 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,41 @@ # GEOS Source Code (enhanced to support MEGA65 capabilities) -by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*. +by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*, [MEGA65](https://www.mega65.org/) version by *Falk Rehwagen*. + + +## MEGA65 GEOS Development + +### Goals + +* **Baseline** + * Target a GEOS 128 compatible version of GEOS + * Keep compatibility of GEOS 64 and GEOS 128 applications as high as possible + * Native support of MEGA65 hardware capabilities + * video modes, high resolutions + * all drives (SD, real floppy, serial connection) + * chip RAM and attic RAM capacity + * Built-in Debugger + * Support application specific serial number, so running application installed on another GEOS disk becomes more easy + + +* **Stretch** + * Full color support for selected screen modes + * Symbolic debugger, GeoDebugger compatible + + +* **Moonshot** + * Ad-hoc compatibility for Wheels or MegaPatch3 APIs + * Double resolution rendering + * **M65N** application support + + +### Status +The status of the MEGA65 version of GEOS as present on the master branch is considered early **BETA** and still under development. Please use with care! + +Learn more details about the GEOS MEGA65 implementation (soon) in the [Technical Documentation](MEGA65.md) section. + +We are on https://bluewaysw.slack.com/ for more efficient collaboration. Please register at https://blog.bluewaysw.de for MyGEOS and use the Slack section and receive access to our developer community. Welcome! -[MEGA65](https://www.mega65.org/) version initiated and maintained by *Falk Rehwagen*. (Source code release is in preparation and will become available here) ## Description @@ -258,8 +291,13 @@ The following command line will build the `bsw` and `wheels` variants of GEOS an For the underlying work on GEOS, please respect its license. +We open-sourced and included the original TopDesk with permission by Jürgen Heinisch from Geos-User-Club. + +Configure application source is based on reverse-engineering work from an site that is not online anymore, referrenced [here](https://www.lyonlabs.org/commodore/onrequest/geos/index.html). + The intellectual property added by the reverse-engineering and the subsequent improvements is in the public domain, but the authors request to be credited. + ## Authors GEOS was initially developed by Berkeley Softworks in 1985-1988. @@ -267,3 +305,5 @@ GEOS was initially developed by Berkeley Softworks in 1985-1988. The original reverse-engineering was done by [Maciej 'YTM/Elysium' Witkowiak](mailto:ytm@elysium.pl) in 1999-2002, targeted the ACME assembler and was released as [GEOS 2000](https://github.com/ytmytm/c64-GEOS2000), which included several code optimizations and code layout differences. In 2015/2016, [Michael Steil](mailto:mist64@mac.com) ported the sources to cc65, reconstructed the original code layout, did some more reverse-engineering and cleanups, and modularized the code aggressively. + +Based on the fabulous work above, in 2017-2023 *Falk Rehwagen* adapted the implementation to support the [MEGA65](https://www.mega65.org/) platform. \ No newline at end of file From 28fd6569c64d19f8dc96ed4fb6aee845f001c061 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 4 Feb 2023 17:06:14 +0100 Subject: [PATCH 111/125] Forcing buffer to floppy when allocating and reading disk images via f011. #4 --- drv/drvf011.s | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drv/drvf011.s b/drv/drvf011.s index b897d745..5486c59a 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -739,7 +739,7 @@ __InitForIO: ;95c6 ;STA $D640 ; Do hypervisor trap ;NOP ; Wasted instruction slot required following hyper trap instruction .endif - lda $d68b + lda $d68b ;write enable f011 drive one ora #$20 sta $d68b @@ -853,7 +853,7 @@ _EnsureImageMounted: sta $D6A1 ; but force internal drive to be mapped - ; -- @IO:GS $D689.4 - F011 swap drive 0 / 1 + ; -- @IO:GS $D689.5 - F011 swap drive 0 / 1 lda $D689 ora #%00100000 and #%01111111 @@ -872,7 +872,7 @@ _EnsureImageMounted: sta $D6A1 ; but force internal drive to be mapped - ; -- @IO:GS $D689.4 - F011 swap drive 0 / 1 + ; -- @IO:GS $D689.5 - F011 swap drive 0 / 1 lda $D689 and #%01011111 sta $D689 @@ -1019,16 +1019,21 @@ _EnsureImageMounted: jsr HyperRestore + ; the hypervisor in new bitstreams changes the buffer, so change it back as we need it + lda $d689 ; force to use floppy buffer + and #$7f + sta $d689 + lda #1 sta mountDrive LoadB imageMounted, STATE_SUCCESS @1b: - lda control_store - and #$FE + lda control_store + and #$FE ora mountDrive - sta $D080 - sta control_store + sta $D080 + sta control_store @1: clc rts From 965d538121ec64e6a99f59807f3f62f2140dcb03 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Mon, 6 Feb 2023 23:40:09 +0100 Subject: [PATCH 112/125] Reimplemented drive selection based on latest bitstream requirements. #4 --- drv/drvf011.s | 380 +++++++++++++++++++++++++++++++------------------- 1 file changed, 234 insertions(+), 146 deletions(-) diff --git a/drv/drvf011.s b/drv/drvf011.s index 5486c59a..828ccf5c 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -812,168 +812,245 @@ __DoneWithIO: RTS _EnsureImageMounted: - lda imageMounted - beq @1d -@1e: - cmp #STATE_SUCCESS - bne @err - clc - rts -@err: - ldx #NO_SYNC - sec - rts -@1d: - ; after update - ; virtual is assumed to be drive 0 - ; sd or (internal) floppy is used on drive 1 + ; after bitstream updates #192 #193 + ; virtual (one drive expected) is using first one found (or none) + ; floppy (internal or external) is used on and if there is an appropriate drive config + ; sd mount is used on and if there is an appropriate drive config ; init state ; set or reset floppy bit for drive 1 if needed + LoadB imageMounted, STATE_FAILED ldy curType + LoadB mountDrive, $FF + LoadB mountCount, 0 + + ; ====================================================================== + ; match drive 0 + + ; is drive 0 virtual? (D68A.2) + lda $D68A + and #%00000100 + beq @5000 + + ; are we looking for virtual drive cpy #DRV_F011_V - bne @2 + bne @6000 - ; basically this type means drive 0 is virtual + ; matched virtual drive + jmp @9002 + +@5000: + ; drive 0 not virual, check floppy + lda $D6A1 + and #%00000001 + beq @5001 ; drive 0 is no floppy + + ; drive 0 is floppy, check of internal or external + cpy #DRV_SD_81 + beq @5020 + LoadB mountDrive, 0 +@5020: lda $D689 - ;ora #%00010000 - and #%01111111 - sta $D689 + and #%00100000 + bne @5002 ; drive 0 is swapped, so it is external + ; drive 0 is internal floppy + cpy #DRV_F011_0 + bne @6000 lda #0 - sta mountDrive - LoadB imageMounted, STATE_SUCCESS - jmp @1b -@2: - lda $D6A1 - cpy #DRV_F011_0 - bne @2a - ora #4 ; set drive 1 real floppy - sta $D6A1 + jmp @9000 - ; but force internal drive to be mapped - ; -- @IO:GS $D689.5 - F011 swap drive 0 / 1 - lda $D689 - ora #%00100000 - and #%01111111 - sta $D689 +@5002: + ; drive 0 is external floppy + cpy #DRV_F011_1 + bne @6000 + bra @9002 + +@5001: + ; drive 0 is sd mount + inc mountCount + cpy #DRV_SD_81 + bne @6000 + + lda $D68B + and #$01 + beq @6000 + + LoadB mountDrive, 0 + + ; check if expected mount + ; check if something already has been mounted + ;lda currentImageCluster + ;and currentImageCluster+1 + ;and currentImageCluster+2 + ;and currentImageCluster+3 + ;cmp #$FF + ;bne @6000 + + ldy #3 +@5007: + lda $D68C,y + cmp currentImageCluster,y + bne @6001 + dey + bpl @5007 + +@9002: + lda #0 + bra @9000 + +@6001: + ldy curType + + ; ====================================================================== + ; match drive 1 +@6000: + ; is drive 1 virtual? (D68A.2) + lda $D68A + and #%00001100 + beq @6002 + + ; are we looking for virtual drive + cpy #DRV_F011_V + bne @7000 + + ; matched virtual drive lda #1 - sta mountDrive - LoadB imageMounted, STATE_SUCCESS - bra @1c + bra @9000 -@2a: +@6002: + ; drive 1 not virual, check floppy lda $D6A1 - cpy #DRV_F011_1 - bne @3 - ora #4 ; set drive 1 real floppy - sta $D6A1 + and #%00000100 + beq @6011 ; drive 1 is no floppy + + ; drive 1 is floppy, check of internal or external + cpy #DRV_SD_81 + beq @6020 + LoadB mountDrive, 1 +@6020: - ; but force internal drive to be mapped - ; -- @IO:GS $D689.5 - F011 swap drive 0 / 1 lda $D689 - and #%01011111 - sta $D689 + and #%00100000 + bne @6003 ; drive 1 is swapped, so it is internal + + ; drive 1 is external floppy + cpy #DRV_F011_1 + bne @7000 lda #1 - sta mountDrive - LoadB imageMounted, STATE_SUCCESS - bra @1c + bra @9000 -@3: - ; mount sd if needed - cpy #DRV_SD_81 - bne @1e - - ; basically this type means drive 0 is virtual - lda $D689 - ;ora #%00010000 - and #%01111111 - sta $D689 +@6003: + ; drive 1 is internal floppy + cpy #DRV_F011_0 + bne @7000 - lda currentImageCluster - and currentImageCluster+1 - and currentImageCluster+2 - and currentImageCluster+3 - cmp #$FF - bne @4a - jmp @4 -@4a: - ; check drive 0, for non virtual real mount - lda $D68A - and #4 - bne @5 - lda $D6A1 - and #1 - bne @5 ; floppy active, can't be mounted + lda #1 + bra @9000 + +@6011: + ; drive 1 is sd mount + inc mountCount + cpy #DRV_SD_81 + bne @7000 lda $D68B - and #1 - beq @5 - - lda currentImageCluster - cmp $D68C - bne @5 - lda currentImageCluster+1 - cmp $D68C+1 - bne @5 - lda currentImageCluster+2 - cmp $D68C+2 - bne @5 - lda currentImageCluster+3 - cmp $D68C+3 - bne @5 - - ; is mounted already - lda #0 + and #$02 + beq @7000 + + LoadB mountDrive, 1 + + ; check if expected mount + ; check if something already has been mounted + ;lda currentImageCluster + ;and currentImageCluster+1 + ;and currentImageCluster+2 + ;and currentImageCluster+3 + ;cmp #$FF + ;bne @7000 + + ldy #3 +@6007: + lda $D690,y + cmp currentImageCluster,y + bne @6091 + dey + bpl @6007 + + lda #1 +@9000: sta mountDrive LoadB imageMounted, STATE_SUCCESS -@1c: jmp @1b - -@5: - ; check drive 1 - lda $D68A - and #8 ; we assume that this does not happen - bne @4 - lda $D6A1 - and #4 - bne @4 ; floppy active, can't be mounted - - lda $D68B - and #8 - beq @4 - - lda currentImageCluster - cmp $D690 - bne @4 - lda currentImageCluster+1 - cmp $D690+1 - bne @4 - lda currentImageCluster+2 - cmp $D690+2 - bne @4 - lda currentImageCluster+3 - cmp $D690+3 - bne @4 - - ; is mounted already + +@6091: + ldy curType +@7000: + + ; no exact match + ; was there a candidate drive for reconfiguration/mount? + lda mountDrive + cmp #$FF + bne @7001 + + ; if floppy and mount count == 0, force drive 1 to be floppy + lda $D689 + cpy #DRV_F011_0 + bne @7010 + + ; drive 1 -> floppy, swapped + ora #%00100000 + + bra @7011 +@7010: + cpy #DRV_F011_1 + bne @7004 + + ; drive 1 -> floppy, unswapped + and #%11101111 +@7011: + sta $D689 + + ; GS $D6A1.2 F011:DRV2EN Use real floppy drive instead of SD card for 2nd floppy drive + lda $D6A1 ; force drive 1 to be floppy + ora #%00000100 + sta $D6A1 + lda #1 sta mountDrive LoadB imageMounted, STATE_SUCCESS jmp @1b -@4: - lda currentImageName - bne @4b + + ; failed to init a proper drive +@7004: LoadB imageMounted, STATE_FAILED ldx #NO_SYNC sec rts - -@4b: + +@7001: + cpy #DRV_SD_81 + beq @7002 + + ; so it is floppy, let swap and done + ; GS $D689.5 - F011 swap drive 0 / 1 + lda $D689 + eor #%00100000 + sta $D689 + + lda mountDrive + bra @9000 + +@7002: + ; we have to mount anyhow + lda currentImageName + beq @7004 + + ; mount image jsr HyperSave ; do mount now, drive 1 @@ -993,14 +1070,18 @@ _EnsureImageMounted: STA $D640 ; Do hypervisor trap NOP ; Wasted instruction slot required following hyper trap instruction - ;; XXX Check for error (carry would be clear) lda #$46 ; dos_d81attach1 + ldy mountDrive + cpy #1 + beq @8000 + lda #$40 ; dos_d81attach0 +@8000: STA $D640 ; Do hypervisor trap NOP ; Wasted instruction slot required following hyper trap instruction + bcs @ok @HOHO: - inc $D020 bra @HOHO @ok: lda $d68b @@ -1008,24 +1089,31 @@ _EnsureImageMounted: sta $d68b ; remember cluster - lda $D690 - sta currentImageCluster - lda $D690+1 - sta currentImageCluster+1 - lda $D690+2 - sta currentImageCluster+2 - lda $D690+3 - sta currentImageCluster+3 - + ldy #0 + lda mountDrive + cmp #0 + beq @8003 +@8001: + lda $D690,y + sta currentImageCluster,y + iny + cpy #4 + bne @8001 + bra @8002 +@8003: + lda $D68C,y + sta currentImageCluster,y + iny + cpy #4 + bne @8003 +@8002: jsr HyperRestore ; the hypervisor in new bitstreams changes the buffer, so change it back as we need it - lda $d689 ; force to use floppy buffer - and #$7f - sta $d689 + lda $d689 ; force to use floppy buffer + and #$7f + sta $d689 - lda #1 - sta mountDrive LoadB imageMounted, STATE_SUCCESS @1b: @@ -1747,6 +1835,8 @@ currentImageName: .endrep mountDrive: .byte 0 +mountCount: + .byte 0 HyperBuffer: .repeat 256 .byte 0 @@ -1774,6 +1864,4 @@ E9C64: borderFlag: .byte 0 ;9c65 -cname: - .byte "#" -cname_end: +.assert * <= $9C80, error, "Driver code and data need to end before $9C80" \ No newline at end of file From 0ae256b00cb61306757b0b1b58b7da8ecbb248f1 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Tue, 7 Feb 2023 19:17:53 +0100 Subject: [PATCH 113/125] More fixes for sd backed f011 drives that are unmounted (0xFFFFFFFF cluster). #5 --- drv/drvf011.s | 56 ++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/drv/drvf011.s b/drv/drvf011.s index 828ccf5c..f872a67e 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -858,8 +858,7 @@ _EnsureImageMounted: cpy #DRV_F011_0 bne @6000 - lda #0 - jmp @9000 + bra @9002 @5002: ; drive 0 is external floppy @@ -874,20 +873,17 @@ _EnsureImageMounted: cpy #DRV_SD_81 bne @6000 - lda $D68B + lda $D68B ; branch if unmounted and #$01 beq @6000 + LoadB mountDrive, 0 ; check if expected mount ; check if something already has been mounted - ;lda currentImageCluster - ;and currentImageCluster+1 - ;and currentImageCluster+2 - ;and currentImageCluster+3 - ;cmp #$FF - ;bne @6000 + lda remountNeeded + bmi @7000 ldy #3 @5007: @@ -917,8 +913,7 @@ _EnsureImageMounted: bne @7000 ; matched virtual drive - lda #1 - bra @9000 + bra @9010 @6002: ; drive 1 not virual, check floppy @@ -940,16 +935,14 @@ _EnsureImageMounted: cpy #DRV_F011_1 bne @7000 - lda #1 - bra @9000 + bra @9010 @6003: ; drive 1 is internal floppy cpy #DRV_F011_0 bne @7000 - lda #1 - bra @9000 + bra @9010 @6011: ; drive 1 is sd mount @@ -965,12 +958,8 @@ _EnsureImageMounted: ; check if expected mount ; check if something already has been mounted - ;lda currentImageCluster - ;and currentImageCluster+1 - ;and currentImageCluster+2 - ;and currentImageCluster+3 - ;cmp #$FF - ;bne @7000 + lda remountNeeded + bmi @7000 ldy #3 @6007: @@ -979,17 +968,15 @@ _EnsureImageMounted: bne @6091 dey bpl @6007 - +@9010: lda #1 @9000: sta mountDrive - LoadB imageMounted, STATE_SUCCESS jmp @1b @6091: ldy curType @7000: - ; no exact match ; was there a candidate drive for reconfiguration/mount? lda mountDrive @@ -1021,7 +1008,6 @@ _EnsureImageMounted: lda #1 sta mountDrive - LoadB imageMounted, STATE_SUCCESS jmp @1b @@ -1082,6 +1068,7 @@ _EnsureImageMounted: bcs @ok @HOHO: + inc $d020 bra @HOHO @ok: lda $d68b @@ -1090,32 +1077,29 @@ _EnsureImageMounted: ; remember cluster ldy #0 + sty remountNeeded + ldx #0 lda mountDrive cmp #0 beq @8003 -@8001: - lda $D690,y - sta currentImageCluster,y - iny - cpy #4 - bne @8001 - bra @8002 + ldx #4 @8003: - lda $D68C,y + lda $D68C,x sta currentImageCluster,y + inx iny cpy #4 bne @8003 @8002: jsr HyperRestore +@1b: ; the hypervisor in new bitstreams changes the buffer, so change it back as we need it lda $d689 ; force to use floppy buffer and #$7f sta $d689 LoadB imageMounted, STATE_SUCCESS -@1b: lda control_store and #$FE @@ -1781,6 +1765,7 @@ _SetImageFile: jsr CopyString LoadW currentImageCluster, $FFFF LoadW currentImageCluster+2, $FFFF + sta remountNeeded LoadB imageMounted, 0 jmp _SaveDriver @@ -1789,6 +1774,7 @@ _SetImageCluster: MoveW r1, currentImageCluster+2 LoadB imageMounted, 0 lda #0 + sta remountNeeded sta currentImageName jmp _SaveDriver @@ -1837,6 +1823,8 @@ mountDrive: .byte 0 mountCount: .byte 0 +remountNeeded: + .byte $FF HyperBuffer: .repeat 256 .byte 0 From 9785f868a06b97fd6a8bd284d93806352feba141 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 8 Feb 2023 21:14:16 +0100 Subject: [PATCH 114/125] Enables writing to real floppy discs, check for write protection. #2 --- drv/drvf011.s | 112 +++++++++++++++++++++++++------------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/drv/drvf011.s b/drv/drvf011.s index f872a67e..14ee4716 100644 --- a/drv/drvf011.s +++ b/drv/drvf011.s @@ -740,7 +740,7 @@ __InitForIO: ;95c6 ;NOP ; Wasted instruction slot required following hyper trap instruction .endif lda $d68b ;write enable f011 drive one - ora #$20 + ora #$24 sta $d68b jsr HyperRestore @@ -1072,7 +1072,7 @@ _EnsureImageMounted: bra @HOHO @ok: lda $d68b - ora #$20 + ora #$24 sta $d68b ; remember cluster @@ -1136,15 +1136,8 @@ _ReadBlockCont1: jsr _WaitReady LDA #$40 STA $D081 -.if 1 - ldy #$28 - ldx #0 -@aa: - DEX - bne @aa - dey - bne @aa -.endif + jsr __waitAbit + .if USE_BLOCK_DMA jsr _WaitReady .endif @@ -1160,13 +1153,7 @@ _ReadBlockCont1: @2: sec jmp _ReadBlockEnd -@1: - brk @1a: - lda curDrive - cmp #DRV_F011_0 - bne @2a -@2a: .ifdef USE_BLOCK_DMA MoveW r4, dmalist_to @@ -1194,11 +1181,7 @@ _ReadBlockCont1: lda #>dmalist ldy # Date: Fri, 18 Aug 2023 21:12:37 +0200 Subject: [PATCH 115/125] NTSC support added to M65 GEOS as of issue #11. The mode is recognized at startup time. --- kernal/graph/mode.s | 11 +++++++++++ kernal/start/start64.s | 44 ++++++++++++++++++++++++++++++++++++++++++ loader/loader.s | 4 ++-- 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/kernal/graph/mode.s b/kernal/graph/mode.s index 2aa66bf7..7315e8b3 100644 --- a/kernal/graph/mode.s +++ b/kernal/graph/mode.s @@ -51,6 +51,12 @@ .import UnmapUnderlay .import MapUnderlay +.global vmiTopBorder +.global vmiBottomBorder +.global vmiSpriteYPosOff +.global vmiMaxY +.global vmiFullCardsY + .global SetRightMargin _SetNewMode: jsr SetNewMode0 @@ -348,16 +354,19 @@ vmiMaxX: .word 319, 639, 639, 719 vmiMaxY: .word 199, 199, 399, 568 + ;NTSC .word 199, 199, 399, 478 vmiCardsX: .word 40, 80, 80, 90 vmiFullCardsX: .byte 40, 40, 80, 90 vmiFullCardsY: .byte 25, 25, 50, 71 + ;NTSC.byte 25, 25, 50, 59 vmiSpriteXPosOff: .byte 24, 79, 79, 38 vmiSpriteYPosOff: .byte 50, 50, 104, 17 + ;NTSC .byte 50, 50, 42, 1 vmiD011: .byte %00111011, $3B, $3B, $3b vmiD016: @@ -388,8 +397,10 @@ vmiBitmapRAMBank: ;504 vmiTopBorder: .word 104, 104, 104, 17 + ;NTSC .word 42, 42, 42, 1 vmiBottomBorder: .word 504, 504, 504, 586 + ;NTSC .word 442, 442, 442, 480 screenCols: .word Col320, Col640, Col640, Col720 screenRows: diff --git a/kernal/start/start64.s b/kernal/start/start64.s index ea60bd6a..a0f25d29 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -57,6 +57,12 @@ .global _DebugStart .endif +.import vmiTopBorder +.import vmiBottomBorder +.import vmiSpriteYPosOff +.import vmiMaxY +.import vmiFullCardsY + .segment "start" ; The original version of GEOS 2.0 has purgeable init code @@ -93,6 +99,44 @@ ASSERT_NOT_BELOW_IO LoadW NMI_VECTOR, _NMIHandler LoadW IRQ_VECTOR, _IRQHandler + lda $DC0E + ora #$80 + tax + lda $DD0E + ora #$80 + tay + + ; adapt screen mode tables for NTSC + bbrf 7, $D06F, @doneWithPAL + + LoadW vmiTopBorder, 42 + LoadW vmiTopBorder+2, 42 + LoadW vmiTopBorder+4, 42 + LoadW vmiTopBorder+6, 1 + + LoadW vmiBottomBorder, 442 + LoadW vmiBottomBorder+2, 442 + LoadW vmiBottomBorder+4, 442 + LoadW vmiBottomBorder+6, 480 + + LoadB vmiSpriteYPosOff+2, 41 + LoadB vmiSpriteYPosOff+3, 1 + + LoadW vmiMaxY+6, 478 + + LoadB vmiFullCardsY+3, 59 + + txa + and #$7F + tax + tya + and #$7F + tay + +@doneWithPAL: + stx $DC0E + sty $DD0E + ; move underlayr from $0A000 to $1A000 lda #>underlaylist ldy # Date: Sun, 20 Aug 2023 18:04:04 +0200 Subject: [PATCH 116/125] Force NTSC mode for further testing. --- loader/loader.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/loader/loader.s b/loader/loader.s index 2dd61153..66bc72f2 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -98,9 +98,9 @@ next: .WORD 0 STZ $D019 ; disable VIC interrupts STZ $D01A - ;lda #$80 ; NTSC + lda #$80 ; NTSC ; lda #$00 ; PAL -; sta $d06f + sta $d06f ; disable HDMI audio lda #0 From fddfdb23d8efe04632ef64f103816e15dd0229b0 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 26 Aug 2023 11:04:08 +0200 Subject: [PATCH 117/125] General approach to "not set the pal/ntsc mode". Remove disabling audio for hdmi, this is machine specific. #11 --- loader/loader.s | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/loader/loader.s b/loader/loader.s index 66bc72f2..2458d5da 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -98,13 +98,15 @@ next: .WORD 0 STZ $D019 ; disable VIC interrupts STZ $D01A - lda #$80 ; NTSC + lda $d06f +; lda #$80 ; NTSC ; lda #$00 ; PAL + and #$c0 sta $d06f ; disable HDMI audio - lda #0 - sta $d61a + ;lda #0 + ;sta $d61a ; not working with xemu From 9bc1ff2e0e9dcc4395958d5e7d1a0453019dbb12 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 27 Aug 2023 11:06:08 +0200 Subject: [PATCH 118/125] One more bit to reset, maybe helps to make drive go in GEOS. #11 --- loader/loader.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader/loader.s b/loader/loader.s index 2458d5da..8ca7c2a0 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -101,7 +101,7 @@ next: .WORD 0 lda $d06f ; lda #$80 ; NTSC ; lda #$00 ; PAL - and #$c0 + and #$80 sta $d06f ; disable HDMI audio From 6ec3ee1ff97117f1991e356b36608cf0ae8a7383 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 1 Sep 2023 19:30:30 +0200 Subject: [PATCH 119/125] Final cleanup for ntsc fix. #11 --- loader/loader.s | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/loader/loader.s b/loader/loader.s index 8ca7c2a0..ec52ffc0 100644 --- a/loader/loader.s +++ b/loader/loader.s @@ -88,27 +88,13 @@ next: .WORD 0 STA $D02F LDA #C65_VIC_INIT2 STA $D02F -@aaa: -; inc $d020 -; jmp @aaa ; Various VIC register stuffs STZ $D030 ; turn ROM mappings / etc OFF - STZ $D031 + STZ $D031 STZ $D019 ; disable VIC interrupts STZ $D01A - lda $d06f -; lda #$80 ; NTSC -; lda #$00 ; PAL - and #$80 - sta $d06f - - ; disable HDMI audio - ;lda #0 - ;sta $d61a - - ; not working with xemu ; disable badline emulation LDA #$04 From 0503bbfcbb1875b47153d240a522649ada86bf6c Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 1 Sep 2023 21:48:45 +0200 Subject: [PATCH 120/125] Implement read timeout for accessing RTC registers. #12 --- clock/main.s | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/clock/main.s b/clock/main.s index 98bca3d8..ec23a527 100644 --- a/clock/main.s +++ b/clock/main.s @@ -72,6 +72,27 @@ GetRTC: LoadW r0, $7110 LoadW r1, $0FFD + lda #30 + sta dblClickCount + + ; first we check if the clock return stable values (is powered by battery) +@3: + ldx dblClickCount + bne @4 ; no error exit, try again +@2: + sec ; signal error + rts +@4: + LDZ #0 + EOM + lda (r0), Z + EOM + cmp (r0), Z + bne @3 ; unstable retry + EOM + cmp (r0), Z + bne @3 ; unstable retry + jsr GetLongUnbounced sta MySec @@ -141,9 +162,6 @@ GetRTC: clc rts -@2: - sec ; signal error - rts SetRTC: LoadW r0, $7118 From b9337e9936cdb82b7739542c85511196499b20f1 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sat, 2 Sep 2023 18:26:20 +0200 Subject: [PATCH 121/125] Final fix for hanging GEOS65 if RTC is not ticking (with or without battery). #12 --- clock/main.s | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/clock/main.s b/clock/main.s index ec23a527..7ed29e4f 100644 --- a/clock/main.s +++ b/clock/main.s @@ -72,30 +72,9 @@ GetRTC: LoadW r0, $7110 LoadW r1, $0FFD - lda #30 - sta dblClickCount - - ; first we check if the clock return stable values (is powered by battery) -@3: - ldx dblClickCount - bne @4 ; no error exit, try again -@2: - sec ; signal error - rts -@4: - LDZ #0 - EOM - lda (r0), Z - EOM - cmp (r0), Z - bne @3 ; unstable retry - EOM - cmp (r0), Z - bne @3 ; unstable retry - jsr GetLongUnbounced sta MySec - + cli ; enable interrupts to operate dblClickCount lda #30 sta dblClickCount @1: @@ -162,6 +141,9 @@ GetRTC: clc rts +@2: + sec ; signal error + rts SetRTC: LoadW r0, $7118 From 6a5e9bb0c8e28b6e39575da3f45fd860659a3be5 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Sun, 4 Feb 2024 12:45:02 +0100 Subject: [PATCH 122/125] User pure registers to fetch X/Y values. #18 --- input/mega1351.s | 834 +++++++++++++++++++++++------------------------ 1 file changed, 417 insertions(+), 417 deletions(-) diff --git a/input/mega1351.s b/input/mega1351.s index f00fe2d6..8ea970e5 100644 --- a/input/mega1351.s +++ b/input/mega1351.s @@ -1,417 +1,417 @@ -; GEOS by Berkeley Softworks -; reverse engineered by Maciej Witkowiak, Michael Steil -; -; Commodore 1531 mouse input driver - -.include "const.inc" -.include "geossym.inc" -.include "geosmac.inc" -.include "c64.inc" - -.export __VLIR0_START__ -.export __STARTUP_RUN__ - -.segment "mega1351" -__STARTUP_RUN__: -__VLIR0_START__: - -MouseInit: - jmp _MouseInit -SlowMouse: - jmp _SlowMouse -UpdateMouse: - jmp _UpdateMouse -SetMouse: - -;tmpFire: -; .byte 0 -;mseX: -; .byte 0 -;mseY: -; .byte 0 - -buttonLeft = $10 -buttonRight = $01 - -SID = $D400 ; SID REGISTERS -SID_ADConv1 = SID + $19 -SID_ADConv2 = SID + $1A - -CIA1_DDRA = $DC02 -CIA1_DDRB = $DC03 -CIA1_PRB = $DC01 - -DirectionTemp = r4H -XPosNew = r5 -YPosNew = r6 -XPosPending = r7 -YPosPending = r8 -XDirection = r9L -YDirection = r9H -OldPotX = r10L ; Old hw counter values -OldPotY = r10H -Buttons = r11L ; button status bits -ButtonsOld = r11H -;ButtonLClick = r12L -;ButtonRClick = r12H - -VarBuffer: .repeat 15 - .byte 0 - .endrep - - -;mouseCheck: .byte $00 - -_MouseInit: - lda #8 - sta mouseXPos - sta mouseYPos - lda #0 - sta mouseXPos+1 -_SlowMouse: - rts - -_UpdateMouse: - jsr UM_END - - bbsf MOUSEON_BIT, mouseOn, UM_1 - jmp UM_END - -UM_1: - MoveW mouseXPos, XPosNew - MoveB mouseYPos, YPosNew - MoveB r3H, YPosNew+1 - - PushB CPU_DATA - LoadB CPU_DATA, IO_IN - PushW cia1base+2 - PushB cia1base+0 - -; Record the state of the buttons. -; Avoid crosstalk between the keyboard and the mouse. - LDY #%00000000 ;Set ports A and B to input - STY CIA1_DDRB - STY CIA1_DDRA ;Keyboard won't look like mouse - LDA CIA1_PRB ;Read Control-Port 1 - ;DEC CIA1_DDRA ;Set port A back to output - ;STA Buttons - ;EOR #%11111111 ;Bit goes up when button goes down - ;BEQ @L0 ;(bze) - ;DEC CIA1_DDRB ;Mouse won't look like keyboard - ;STY CIA1_PRB ;Set "all keys pushed" - -@L0: - JSR ButtonCheck - - LDA SID_ADConv1 ;Get mouse X movement - ;LDY flgMse1351 - ;BEQ @full_x - - AND #$7E - -@full_x: - LDY OldPotX - JSR MoveCheck ;Calculate movement vector - STY OldPotX - -; Skip processing if nothing has changed - BCC @SkipX - -; Calculate the new X coordinate (--> a/y) - ASL - PHA - TXA - ROL - TAX - PLA - - CLC - ADC XPosNew - - TAY ;Remember low byte - TXA - ADC XPosNew+1 - -; Limit the X coordinate to the bounding box - - ;CPY #0 - ;SBC #0 - BPL @L1 - ;LDA #0 - ;TAY - ;BRA @L2 -@L1: - ;TXA - - ;CPY screenMaxX - ;SBC screenMaxX+1 - ;BMI @L2 - ;LDY screenMaxX - ;LDX screenMaxX+1 -@L2: - STY XPosNew - STA XPosNew+1 - jsr historesisCheck - -; Move the mouse pointer to the new X pos - - TYA - ;JSR CMOVEX - - ;LDA mouseCheck - ;BNE @SkipX - - ;LDA #$01 - ;STA mouseCheck - -; Calculate the Y movement vector - -@SkipX: - LDA SID_ADConv2 ;Get mouse Y movement - ;LDY flgMse1351 - ;BEQ @full_y - - AND #$7E - -@full_y: - LDY OldPotY - JSR MoveCheck ;Calculate movement - STY OldPotY - -; Skip processing if nothing has changed - - BCC @SkipY - -; Calculate the new Y coordinate (--> a/y) - - ASL - PHA - TXA - ROL - TAX - PLA - - STA r1L - LDA YPosNew - SEC - SBC r1L - - TAY - STX r1L - LDA YPosNew+1 - SBC r1L - ;TAX - -; Limit the Y coordinate to the bounding box - - ;CPY #0 - ;SBC #0 - BPL @L3 - LDA #0 - TAY - ;BRA @L4 -@L3: - ;TXA - - ;CPY screenMaxY - ;SBC screenMaxY+1 - ;BMI @L4 - ;LDY screenMaxY - ;LDX screenMaxY+1 -@L4: - STY YPosNew - STA YPosNew+1 - - jsr historesisCheck - -; Move the mouse pointer to the new Y pos - - TYA - ;JSR CMOVEY - - ;LDA mouseCheck - ;BNE @SkipY - - ;LDA #$01 - ;STA mouseCheck - -; Done - -@SkipY: - PopB cia1base - PopW cia1base+2 - PopB CPU_DATA - -UM_END: - ldx #15 -@10: - lda VarBuffer,x - tay - lda r4H,x - sta VarBuffer, x - tya - sta r4H,x - dex - bne @10 - - rts - -historesisCheck: - ;; Dont actually update mouse unless it has moved more than 1 px in the same direction - - lda XPosNew - cmp XPosPending - bne @XChanged - lda XPosNew+1 - cmp XPosPending+1 - beq @updatedXDirection -@XChanged: - ;; Get sign of difference between XPos and XPosNew - lda XPosNew - sta XPosPending - lda XPosNew+1 - sta XPosPending+1 - - lda XPosNew - sec - sbc XPosPending - lda XPosNew+1 - sbc XPosPending+1 - - ;; Is the direction different to last time? - and #$80 - sta DirectionTemp - eor XDirection - bne @UpdateXDirection - ;; Direction same, so update X position - lda mouseXPos+1 - and #$F0 - ora XPosNew+1 - sta mouseXPos+1 - lda XPosNew - sta mouseXPos - bra @updatedXDirection -@UpdateXDirection: - ;; Don't update X, but do update the direction of last movement - lda DirectionTemp - sta XDirection -@updatedXDirection: - - lda YPosNew - cmp YPosPending - bne @YChanged - lda YPosNew+1 - cmp YPosPending+1 - beq @updatedYDirection -@YChanged: - - ;; Get sign of difference between YPos and YPosNew - lda YPosNew - sta YPosPending - lda YPosNew+1 - sta YPosPending+1 - - lda YPosNew - sec - sbc YPosPending - lda YPosNew+1 - sbc YPosPending+1 - - ;; Is the direction different to last time? - and #$80 - sta DirectionTemp - eor YDirection - bne @UpdateYDirection - ;; Direction same, so update Y position - lda YPosNew+1 - sta r3H - lda YPosNew - sta mouseYPos - bra @updatedYDirection -@UpdateYDirection: - ;; Don't update Y, but do update the direction of last movement - lda DirectionTemp - sta YDirection -@updatedYDirection: - - rts - -;------------------------------------------------------------------------------- -ButtonCheck: -;------------------------------------------------------------------------------- - ;LDA Buttons - and #$10 - CMP ButtonsOld - BEQ @done - STA ButtonsOld - asl - asl - asl - sta mouseData - - ; left button state changed - smbf MOUSE_BIT, pressFlag - -.if 0 - AND #buttonLeft - BNE @testRight - - LDA ButtonsOld - AND #buttonLeft - BEQ @testRight - - LDA #$01 - STA ButtonLClick -.endif - -@testRight: -.if 0 - AND #buttonRight - BNE @done - - LDA ButtonsOld - AND #buttonRight - BEQ @done - - LDA #$01 - STA ButtonRClick -.endif - -@done: - RTS - -;------------------------------------------------------------------------------- -MoveCheck: -; Move check routine, called for both coordinates. -; -; Entry: y = old value of pot register -; a = current value of pot register -; Exit: y = value to use for old value -; x/a = delta value for position -;------------------------------------------------------------------------------- - STY r0L - STA r0H - LDX #$00 - - SEC ; a = mod64 (new - old) - SBC r0L - - cmp #$3f - bcs @notPositiveMovement - LDY r0H - LDX #0 - SEC - RTS -@notPositiveMovement: - cmp #$c0 - bcc @notNegativeMovement - LDY r0H - ldx #$ff - SEC - RTS - -@notNegativeMovement: - ldy r0H - TXA ; A = $00 - CLC - RTS +; GEOS by Berkeley Softworks +; reverse engineered by Maciej Witkowiak, Michael Steil +; +; Commodore 1531 mouse input driver + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "c64.inc" + +.export __VLIR0_START__ +.export __STARTUP_RUN__ + +.segment "mega1351" +__STARTUP_RUN__: +__VLIR0_START__: + +MouseInit: + jmp _MouseInit +SlowMouse: + jmp _SlowMouse +UpdateMouse: + jmp _UpdateMouse +SetMouse: + +;tmpFire: +; .byte 0 +;mseX: +; .byte 0 +;mseY: +; .byte 0 + +buttonLeft = $10 +buttonRight = $01 + +SID = $D400 ; SID REGISTERS +SID_ADConv1 = SID + $19 +SID_ADConv2 = SID + $1A + +CIA1_DDRA = $DC02 +CIA1_DDRB = $DC03 +CIA1_PRB = $DC01 + +DirectionTemp = r4H +XPosNew = r5 +YPosNew = r6 +XPosPending = r7 +YPosPending = r8 +XDirection = r9L +YDirection = r9H +OldPotX = r10L ; Old hw counter values +OldPotY = r10H +Buttons = r11L ; button status bits +ButtonsOld = r11H +;ButtonLClick = r12L +;ButtonRClick = r12H + +VarBuffer: .repeat 15 + .byte 0 + .endrep + + +;mouseCheck: .byte $00 + +_MouseInit: + lda #8 + sta mouseXPos + sta mouseYPos + lda #0 + sta mouseXPos+1 +_SlowMouse: + rts + +_UpdateMouse: + jsr UM_END + + bbsf MOUSEON_BIT, mouseOn, UM_1 + jmp UM_END + +UM_1: + MoveW mouseXPos, XPosNew + MoveB mouseYPos, YPosNew + MoveB r3H, YPosNew+1 + + PushB CPU_DATA + LoadB CPU_DATA, IO_IN + PushW cia1base+2 + PushB cia1base+0 + +; Record the state of the buttons. +; Avoid crosstalk between the keyboard and the mouse. + LDY #%00000000 ;Set ports A and B to input + STY CIA1_DDRB + STY CIA1_DDRA ;Keyboard won't look like mouse + LDA CIA1_PRB ;Read Control-Port 1 + ;DEC CIA1_DDRA ;Set port A back to output + ;STA Buttons + ;EOR #%11111111 ;Bit goes up when button goes down + ;BEQ @L0 ;(bze) + ;DEC CIA1_DDRB ;Mouse won't look like keyboard + ;STY CIA1_PRB ;Set "all keys pushed" + +@L0: + JSR ButtonCheck + + LDA $D620 ;Get mouse X movement + ;LDY flgMse1351 + ;BEQ @full_x + + AND #$7E + +@full_x: + LDY OldPotX + JSR MoveCheck ;Calculate movement vector + STY OldPotX + +; Skip processing if nothing has changed + BCC @SkipX + +; Calculate the new X coordinate (--> a/y) + ASL + PHA + TXA + ROL + TAX + PLA + + CLC + ADC XPosNew + + TAY ;Remember low byte + TXA + ADC XPosNew+1 + +; Limit the X coordinate to the bounding box + + ;CPY #0 + ;SBC #0 + BPL @L1 + ;LDA #0 + ;TAY + ;BRA @L2 +@L1: + ;TXA + + ;CPY screenMaxX + ;SBC screenMaxX+1 + ;BMI @L2 + ;LDY screenMaxX + ;LDX screenMaxX+1 +@L2: + STY XPosNew + STA XPosNew+1 + jsr historesisCheck + +; Move the mouse pointer to the new X pos + + TYA + ;JSR CMOVEX + + ;LDA mouseCheck + ;BNE @SkipX + + ;LDA #$01 + ;STA mouseCheck + +; Calculate the Y movement vector + +@SkipX: + LDA $D621 ;Get mouse Y movement + ;LDY flgMse1351 + ;BEQ @full_y + + AND #$7E + +@full_y: + LDY OldPotY + JSR MoveCheck ;Calculate movement + STY OldPotY + +; Skip processing if nothing has changed + + BCC @SkipY + +; Calculate the new Y coordinate (--> a/y) + + ASL + PHA + TXA + ROL + TAX + PLA + + STA r1L + LDA YPosNew + SEC + SBC r1L + + TAY + STX r1L + LDA YPosNew+1 + SBC r1L + ;TAX + +; Limit the Y coordinate to the bounding box + + ;CPY #0 + ;SBC #0 + BPL @L3 + LDA #0 + TAY + ;BRA @L4 +@L3: + ;TXA + + ;CPY screenMaxY + ;SBC screenMaxY+1 + ;BMI @L4 + ;LDY screenMaxY + ;LDX screenMaxY+1 +@L4: + STY YPosNew + STA YPosNew+1 + + jsr historesisCheck + +; Move the mouse pointer to the new Y pos + + TYA + ;JSR CMOVEY + + ;LDA mouseCheck + ;BNE @SkipY + + ;LDA #$01 + ;STA mouseCheck + +; Done + +@SkipY: + PopB cia1base + PopW cia1base+2 + PopB CPU_DATA + +UM_END: + ldx #15 +@10: + lda VarBuffer,x + tay + lda r4H,x + sta VarBuffer, x + tya + sta r4H,x + dex + bne @10 + + rts + +historesisCheck: + ;; Dont actually update mouse unless it has moved more than 1 px in the same direction + + lda XPosNew + cmp XPosPending + bne @XChanged + lda XPosNew+1 + cmp XPosPending+1 + beq @updatedXDirection +@XChanged: + ;; Get sign of difference between XPos and XPosNew + lda XPosNew + sta XPosPending + lda XPosNew+1 + sta XPosPending+1 + + lda XPosNew + sec + sbc XPosPending + lda XPosNew+1 + sbc XPosPending+1 + + ;; Is the direction different to last time? + and #$80 + sta DirectionTemp + eor XDirection + bne @UpdateXDirection + ;; Direction same, so update X position + lda mouseXPos+1 + and #$F0 + ora XPosNew+1 + sta mouseXPos+1 + lda XPosNew + sta mouseXPos + bra @updatedXDirection +@UpdateXDirection: + ;; Don't update X, but do update the direction of last movement + lda DirectionTemp + sta XDirection +@updatedXDirection: + + lda YPosNew + cmp YPosPending + bne @YChanged + lda YPosNew+1 + cmp YPosPending+1 + beq @updatedYDirection +@YChanged: + + ;; Get sign of difference between YPos and YPosNew + lda YPosNew + sta YPosPending + lda YPosNew+1 + sta YPosPending+1 + + lda YPosNew + sec + sbc YPosPending + lda YPosNew+1 + sbc YPosPending+1 + + ;; Is the direction different to last time? + and #$80 + sta DirectionTemp + eor YDirection + bne @UpdateYDirection + ;; Direction same, so update Y position + lda YPosNew+1 + sta r3H + lda YPosNew + sta mouseYPos + bra @updatedYDirection +@UpdateYDirection: + ;; Don't update Y, but do update the direction of last movement + lda DirectionTemp + sta YDirection +@updatedYDirection: + + rts + +;------------------------------------------------------------------------------- +ButtonCheck: +;------------------------------------------------------------------------------- + ;LDA Buttons + and #$10 + CMP ButtonsOld + BEQ @done + STA ButtonsOld + asl + asl + asl + sta mouseData + + ; left button state changed + smbf MOUSE_BIT, pressFlag + +.if 0 + AND #buttonLeft + BNE @testRight + + LDA ButtonsOld + AND #buttonLeft + BEQ @testRight + + LDA #$01 + STA ButtonLClick +.endif + +@testRight: +.if 0 + AND #buttonRight + BNE @done + + LDA ButtonsOld + AND #buttonRight + BEQ @done + + LDA #$01 + STA ButtonRClick +.endif + +@done: + RTS + +;------------------------------------------------------------------------------- +MoveCheck: +; Move check routine, called for both coordinates. +; +; Entry: y = old value of pot register +; a = current value of pot register +; Exit: y = value to use for old value +; x/a = delta value for position +;------------------------------------------------------------------------------- + STY r0L + STA r0H + LDX #$00 + + SEC ; a = mod64 (new - old) + SBC r0L + + cmp #$3f + bcs @notPositiveMovement + LDY r0H + LDX #0 + SEC + RTS +@notPositiveMovement: + cmp #$c0 + bcc @notNegativeMovement + LDY r0H + ldx #$ff + SEC + RTS + +@notNegativeMovement: + ldy r0H + TXA ; A = $00 + CLC + RTS From d189e765443fcf0fda384fc006502ce382bab498 Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Wed, 7 Feb 2024 00:17:36 +0100 Subject: [PATCH 123/125] Fix issues at startup if $3F is not intialized with 0, which prevent GEOS from starting up properly. --- kernal/start/start64.s | 1222 ++++++++++++++++++++-------------------- 1 file changed, 613 insertions(+), 609 deletions(-) diff --git a/kernal/start/start64.s b/kernal/start/start64.s index a0f25d29..2ead99af 100644 --- a/kernal/start/start64.s +++ b/kernal/start/start64.s @@ -1,609 +1,613 @@ -; GEOS KERNAL by Berkeley Softworks -; reverse engineered by Maciej Witkowiak; Michael Steil -; -; Purgeable start code; first entry - -.include "const.inc" -.include "geossym.inc" -.include "geosmac.inc" -.include "config.inc" -.include "kernal.inc" -.include "inputdrv.inc" -.include "diskdrv.inc" -.include "c64.inc" - -; main.s -.import InitGEOEnv -.import _DoFirstInitIO -.import _EnterDeskTop - -; header.s -.import dateCopy - -; irq.s -.import _IRQHandler -.import _NMIHandler - -.import LdApplic -.import GetBlock -.import EnterDeskTop -.import GetDirHead -.import FirstInit -.import i_FillRam - -; used by header.s -.global _ResetHandle - -.ifdef usePlus60K -.import DetectPlus60K -.endif -.if .defined(useRamCart64) || .defined(useRamCart128) -.import DetectRamCart -.endif -.ifdef useRamExp -.import LoadDeskTop -.endif - -.ifdef mega65 -.import InitScanLineTab -.import MapUnderlay -.import UnmapUnderlay -.import _MapLow -.import ClrScr -.import SetNewMode -.endif - -.ifdef debugger -.global _DebugStart -.endif - -.import vmiTopBorder -.import vmiBottomBorder -.import vmiSpriteYPosOff -.import vmiMaxY -.import vmiFullCardsY - -.segment "start" - -; The original version of GEOS 2.0 has purgeable init code -; at $5000 that is run once. It does some initialization -; and handles application auto-start. -; -; The cbmfiles version of GEOS does some init inside -; "BOOTGEOS" right after copying the components to their -; respective locations, then jumps to $500D, which contains -; a different version of the code, and skipping the first -; five instructions. -; -; This version is based on the cbmfiles version. -; "OrigResetHandle" below is the original cbmfiles code at -; $5000, and the code here at _ResetHandle is some additional -; initialization derived from the code in BOOTGEOS to make -; everything work. -; -; TODO: * REU detection seems to be currently missing. -; * It would be best to put the original GEOS 2.0 code -; here. -; - -_ResetHandle: - sei - cld - ldx #$FF - txs - -ASSERT_NOT_BELOW_IO - lda #IO_IN - sta CPU_DATA - - LoadW NMI_VECTOR, _NMIHandler - LoadW IRQ_VECTOR, _IRQHandler - - lda $DC0E - ora #$80 - tax - lda $DD0E - ora #$80 - tay - - ; adapt screen mode tables for NTSC - bbrf 7, $D06F, @doneWithPAL - - LoadW vmiTopBorder, 42 - LoadW vmiTopBorder+2, 42 - LoadW vmiTopBorder+4, 42 - LoadW vmiTopBorder+6, 1 - - LoadW vmiBottomBorder, 442 - LoadW vmiBottomBorder+2, 442 - LoadW vmiBottomBorder+4, 442 - LoadW vmiBottomBorder+6, 480 - - LoadB vmiSpriteYPosOff+2, 41 - LoadB vmiSpriteYPosOff+3, 1 - - LoadW vmiMaxY+6, 478 - - LoadB vmiFullCardsY+3, 59 - - txa - and #$7F - tax - tya - and #$7F - tay - -@doneWithPAL: - stx $DC0E - sty $DD0E - - ; move underlayr from $0A000 to $1A000 - lda #>underlaylist - ldy #debuggerlist - ldy #$0400 ; write dirent to DirEntry - - lda #$14 - STA $D640 - NOP -.endif -.if 0 - ; run a raster line cycle counter - sei ; interrupts off - - ; 1 mhz - lda $d031 - and #%10111111 - sta $D031 - - lda #0 - ldx #0 -@aaa: - sta $4000, x - sta $4100, x - sta $4200, x - sta $4300, x - inx - bne @aaa - - -@eee: - ldx rasreg - bne @eee -@eee1: - ldx rasreg - beq @eee1 - - lda $D011 - bmi @eee - -@ccc2: - ldx rasreg - beq @bbb - -@ccc: - ; inc - inc $4000, x - bne @ccc1 - inc $4100, x - bne @ccc1 - inc $4200, x - bne @ccc1 - inc $4300, x -@ccc1: - ; wait for next line - cpx rasreg - beq @ccc - - ldx rasreg - jmp @ccc2 - -@bbb: - cli - - -.endif - - jsr MouseInit - lda #currentInterleave - sta interleave - - lda #1 - sta NUMDRV - ldy $BA - sty curDrive - - lda #DRV_TYPE ; see config.inc - -.ifdef mega65 - ; determ proper drive type, - ; from MEGA65 BASIC 10.0 coming there are following options: - ; 1.) - ; preconditions: - ; curDrive is one of the BASIC mapped drives, directing us to - ; F011-0 or F011-1, we don't support booting from other drives and - ; could/should hard reset here? In general we assume that GEOS - ; holds an disk driver that is in some way compatible to the boot drive. - - lda #C65_VIC_INIT1 - sta $d02f - lda #C65_VIC_INIT2 - sta $d02f - - ; get MEGA65 DOS drive 0 device number - ; 10113/10114 clear device numbers of the f011 drive, we will - ; manage those independent of dos - lda #$10 - sta r0L - lda #$01 - sta r0H - lda #$01 - sta r1L - lda #$00 - sta r1H - - jsr loadZDriveOffset - ;LDZ #3 - EOM - lda (r0), Z - cmp curDrive - beq @detectDrive0 - - ; get MEGA65 DOS drive 1 device number - ;LDZ #4 - inz - EOM - lda ($02), Z - cmp curDrive - beq @detectDrive1 - - ; unclear how this has been booted - ; still could try to setup drive 0 as real or sd mount - -@detectDrive0: - ; is virtual enabled? - ldx #DRV_F011_V - lda $D68A - bit #4 - bne @detected - - ; check if real drive - ldx #DRV_F011_0 ; real internal floppy - lda $D6A1 - bit #1 - bne @detected - - ldx #DRV_SD_81 - ; setup d81 offset - LoadB r2L, 0 ; remember the drive number - bra @detected - -@detectDrive1: - ; potentially now drive 1 may be virtual, - ; but because monitor-load does not support this - ; at the moment, we assume this will not be the case - ; check if real drive - ldx #DRV_F011_0 ; real internal floppy - lda $D6A1 - bit #4 - bne @detected - ldx #DRV_SD_81 - ; setup d81 offset - LoadB r2L, 1 ; remember the drive number - bra @detected - -@detected: - ; redirect DOS device numbers of the internal drives - ; so GEOS only looks at real serial drives using the DOS - ;LDZ #3 - jsr loadZDriveOffset - lda #28 - EOM - sta (r0), Z - inz - lda #29 - EOM - sta (r0), Z - txa -.endif - sta curType - sta _driveType,y - - cmp #DRV_SD_81 - bne @detectDone - - ; get the current tasks mounted image file names via HYPPO - ; load the process descriptor to $4F00 just before the boot code - LDY #$4F - - LDA #$48 ; HYPPO_DOS_GET_PROC_DESC - STA $D640 - NOP - bcc @10 ; branch if error/unsupported - lda r2L - bne @31 ; branch if current drive is not device 0 - LoadW r0, $4F00+21 - ldy $4F00+19 - bra @30 -@31: - LoadW r0, $4F00+21+32 - ldy $4F00+20 -@30: - lda #0 - sta (r0), y - bra @20 - -@10: ; unsupported by HYPPO use default - LoadW r0, imageFileName -@20: - jsr SetImageFile - -@detectDone: - ; on MEGA65 we check if we are able to transform - ; from F011 mode to direct access SD mount - ; this is possible if the drive is not a real drive and not virtual - ;lda #8 ; DRV_F011_V, see config.inc - ;sta curType - ;sta _driveType,y - - -; This is the original code the cbmfiles version -; has at $5000. -OrigResetHandle: - sei - cld - -.ifdef mega65 - lda #3|64 - sta graphMode - LoadW r5, 720 - jsr MapUnderlay - jsr InitScanLineTab -.endif - ldx #$ff - jsr _DoFirstInitIO -.ifdef mega65 - jsr UnmapUnderlay -.endif - jsr InitGEOEnv - jsr SetNewMode - jsr ClrScr -.ifdef usePlus60K - jsr DetectPlus60K -.endif -.if .defined(useRamCart64) || .defined(useRamCart128) - jsr DetectRamCart -.endif -_DebugStart: - ;brk - - jsr GetDirHead - MoveB bootSec, r1H - MoveB bootTr, r1L - AddVB 32, bootOffs - bne @3 -@1: MoveB bootSec2, r1H - MoveB bootTr2, r1L - bne @3 - lda NUMDRV - bne @2 - inc NUMDRV -@2: LoadW EnterDeskTop+1, _EnterDeskTop -.ifdef useRamExp - jsr LoadDeskTop -.endif - jmp EnterDeskTop - -@3: MoveB r1H, bootSec - MoveB r1L, bootTr - LoadW r4, diskBlkBuf - jsr GetBlock - bnex @2 - MoveB diskBlkBuf+1, bootSec2 - MoveB diskBlkBuf, bootTr2 -@4: ldy bootOffs - lda diskBlkBuf+2,y - beq @5 - lda diskBlkBuf+$18,y - cmp #AUTO_EXEC - beq @6 -@5: AddVB 32, bootOffs - bne @4 - beq @1 -@6: ldx #0 -@7: lda diskBlkBuf+2,y - sta dirEntryBuf,x - iny - inx - cpx #30 - bne @7 - LoadW r9, dirEntryBuf - LoadW EnterDeskTop+1, OrigResetHandle - LoadB r0L, 0 - jsr LdApplic - -loadZDriveOffset: - - ; ok, different ROM version have different locations of the - ; device numbers map for the internal/F011 drives - ; for 910110 ROM it is 010112/010113 - ; for 9110XY ROM it is 010113/010114 - - ; as a simple solution for now we detect the ROM and use - ; ROM < 10 to be 010112/010113, otherwise 010113/010114 - ; default is 2, so for old ROM or unrecognized situations - - PushW r0 - PushW r1 - - lda #$16 - sta r0L - lda #$00 - sta r0H - lda #$02 - sta r1L - lda #$00 - sta r1H - - ldz #0 - EOM - lda (r0), z - cmp 'V' - bne @1 - inz - EOM - lda (r0), z - cmp #'9' - bne @1 - - inz - inz - EOM - lda (r0), z - cmp #'1' - bne @1 - PopW r1 - PopW r0 - ldz #3 - rts -@1: - PopW r1 - PopW r0 - ldz #3 - rts - -underlaylist: - ; enchanced dma mode header - .byte $0a - .byte $80, $00 - .byte $81, $00 - .byte 0 - .byte 0 ; swap - .word $2000 ; $6000-$8000 - .word $A000 - .byte 0 ; bank 0 - .word $A000 - .byte 1 ; bank 1 - .word 0 ; unsued mod - -.ifdef debugger -debuggerlist: - ; enchanced dma mode header - .byte $0a - .byte $80, $00 - .byte $81, $00 - .byte 0 - .byte 0 ; swap - .word $2000 ; $6000-$8000 - .word $6000 - .byte 0 ; bank 0 - .word $6000 - .byte 1 ; bank 1 - .word 0 ; unsued mod -.endif - -imageFileName: - .byte "GEOSX.D81", NULL -bootTr: - .byte DIR_1581_TRACK -bootSec: - .byte 3 -bootTr2: - .byte 0 -bootSec2: - .byte 0 -bootOffs: - .byte 0 +; GEOS KERNAL by Berkeley Softworks +; reverse engineered by Maciej Witkowiak; Michael Steil +; +; Purgeable start code; first entry + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "config.inc" +.include "kernal.inc" +.include "inputdrv.inc" +.include "diskdrv.inc" +.include "c64.inc" + +; main.s +.import InitGEOEnv +.import _DoFirstInitIO +.import _EnterDeskTop + +; header.s +.import dateCopy + +; irq.s +.import _IRQHandler +.import _NMIHandler + +.import LdApplic +.import GetBlock +.import EnterDeskTop +.import GetDirHead +.import FirstInit +.import i_FillRam + +; used by header.s +.global _ResetHandle + +.ifdef usePlus60K +.import DetectPlus60K +.endif +.if .defined(useRamCart64) || .defined(useRamCart128) +.import DetectRamCart +.endif +.ifdef useRamExp +.import LoadDeskTop +.endif + +.ifdef mega65 +.import InitScanLineTab +.import MapUnderlay +.import UnmapUnderlay +.import _MapLow +.import ClrScr +.import SetNewMode +.endif + +.ifdef debugger +.global _DebugStart +.endif + +.import vmiTopBorder +.import vmiBottomBorder +.import vmiSpriteYPosOff +.import vmiMaxY +.import vmiFullCardsY + +.segment "start" + +; The original version of GEOS 2.0 has purgeable init code +; at $5000 that is run once. It does some initialization +; and handles application auto-start. +; +; The cbmfiles version of GEOS does some init inside +; "BOOTGEOS" right after copying the components to their +; respective locations, then jumps to $500D, which contains +; a different version of the code, and skipping the first +; five instructions. +; +; This version is based on the cbmfiles version. +; "OrigResetHandle" below is the original cbmfiles code at +; $5000, and the code here at _ResetHandle is some additional +; initialization derived from the code in BOOTGEOS to make +; everything work. +; +; TODO: * REU detection seems to be currently missing. +; * It would be best to put the original GEOS 2.0 code +; here. +; + +_ResetHandle: + sei + cld + ldx #$FF + txs + +ASSERT_NOT_BELOW_IO + lda #IO_IN + sta CPU_DATA + + LoadW NMI_VECTOR, _NMIHandler + LoadW IRQ_VECTOR, _IRQHandler + + lda $DC0E + ora #$80 + tax + lda $DD0E + ora #$80 + tay + + ; adapt screen mode tables for NTSC + bbrf 7, $D06F, @doneWithPAL + + LoadW vmiTopBorder, 42 + LoadW vmiTopBorder+2, 42 + LoadW vmiTopBorder+4, 42 + LoadW vmiTopBorder+6, 1 + + LoadW vmiBottomBorder, 442 + LoadW vmiBottomBorder+2, 442 + LoadW vmiBottomBorder+4, 442 + LoadW vmiBottomBorder+6, 480 + + LoadB vmiSpriteYPosOff+2, 41 + LoadB vmiSpriteYPosOff+3, 1 + + LoadW vmiMaxY+6, 478 + + LoadB vmiFullCardsY+3, 59 + + txa + and #$7F + tax + tya + and #$7F + tay + +@doneWithPAL: + stx $DC0E + sty $DD0E + + ; move underlayr from $0A000 to $1A000 + lda #>underlaylist + ldy #debuggerlist + ldy #$0400 ; write dirent to DirEntry + + lda #$14 + STA $D640 + NOP +.endif +.if 0 + ; run a raster line cycle counter + sei ; interrupts off + + ; 1 mhz + lda $d031 + and #%10111111 + sta $D031 + + lda #0 + ldx #0 +@aaa: + sta $4000, x + sta $4100, x + sta $4200, x + sta $4300, x + inx + bne @aaa + + +@eee: + ldx rasreg + bne @eee +@eee1: + ldx rasreg + beq @eee1 + + lda $D011 + bmi @eee + +@ccc2: + ldx rasreg + beq @bbb + +@ccc: + ; inc + inc $4000, x + bne @ccc1 + inc $4100, x + bne @ccc1 + inc $4200, x + bne @ccc1 + inc $4300, x +@ccc1: + ; wait for next line + cpx rasreg + beq @ccc + + ldx rasreg + jmp @ccc2 + +@bbb: + cli + + +.endif + + jsr MouseInit + lda #currentInterleave + sta interleave + + lda #1 + sta NUMDRV + ldy $BA + sty curDrive + + lda #DRV_TYPE ; see config.inc + +.ifdef mega65 + ; determ proper drive type, + ; from MEGA65 BASIC 10.0 coming there are following options: + ; 1.) + ; preconditions: + ; curDrive is one of the BASIC mapped drives, directing us to + ; F011-0 or F011-1, we don't support booting from other drives and + ; could/should hard reset here? In general we assume that GEOS + ; holds an disk driver that is in some way compatible to the boot drive. + + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + + ; get MEGA65 DOS drive 0 device number + ; 10113/10114 clear device numbers of the f011 drive, we will + ; manage those independent of dos + lda #$10 + sta r0L + lda #$01 + sta r0H + lda #$01 + sta r1L + lda #$00 + sta r1H + + jsr loadZDriveOffset + ;LDZ #3 + EOM + lda (r0), Z + cmp curDrive + beq @detectDrive0 + + ; get MEGA65 DOS drive 1 device number + ;LDZ #4 + inz + EOM + lda ($02), Z + cmp curDrive + beq @detectDrive1 + + ; unclear how this has been booted + ; still could try to setup drive 0 as real or sd mount + +@detectDrive0: + ; is virtual enabled? + ldx #DRV_F011_V + lda $D68A + bit #4 + bne @detected + + ; check if real drive + ldx #DRV_F011_0 ; real internal floppy + lda $D6A1 + bit #1 + bne @detected + + ldx #DRV_SD_81 + ; setup d81 offset + LoadB r2L, 0 ; remember the drive number + bra @detected + +@detectDrive1: + ; potentially now drive 1 may be virtual, + ; but because monitor-load does not support this + ; at the moment, we assume this will not be the case + ; check if real drive + ldx #DRV_F011_0 ; real internal floppy + lda $D6A1 + bit #4 + bne @detected + ldx #DRV_SD_81 + ; setup d81 offset + LoadB r2L, 1 ; remember the drive number + bra @detected + +@detected: + ; redirect DOS device numbers of the internal drives + ; so GEOS only looks at real serial drives using the DOS + ;LDZ #3 + jsr loadZDriveOffset + lda #28 + EOM + sta (r0), Z + inz + lda #29 + EOM + sta (r0), Z + txa +.endif + sta curType + sta _driveType,y + + cmp #DRV_SD_81 + bne @detectDone + + ; get the current tasks mounted image file names via HYPPO + ; load the process descriptor to $4F00 just before the boot code + LDY #$4F + + LDA #$48 ; HYPPO_DOS_GET_PROC_DESC + STA $D640 + NOP + bcc @10 ; branch if error/unsupported + lda r2L + bne @31 ; branch if current drive is not device 0 + LoadW r0, $4F00+21 + ldy $4F00+19 + bra @30 +@31: + LoadW r0, $4F00+21+32 + ldy $4F00+20 +@30: + lda #0 + sta (r0), y + bra @20 + +@10: ; unsupported by HYPPO use default + LoadW r0, imageFileName +@20: + jsr SetImageFile + +@detectDone: + ; on MEGA65 we check if we are able to transform + ; from F011 mode to direct access SD mount + ; this is possible if the drive is not a real drive and not virtual + ;lda #8 ; DRV_F011_V, see config.inc + ;sta curType + ;sta _driveType,y + + +; This is the original code the cbmfiles version +; has at $5000. +OrigResetHandle: + sei + cld + +.ifdef mega65 + lda #3|64 + sta graphMode + LoadW r5, 720 + jsr MapUnderlay + jsr InitScanLineTab +.endif + ldx #$ff + jsr _DoFirstInitIO +.ifdef mega65 + jsr UnmapUnderlay +.endif + jsr InitGEOEnv + jsr SetNewMode + jsr ClrScr +.ifdef usePlus60K + jsr DetectPlus60K +.endif +.if .defined(useRamCart64) || .defined(useRamCart128) + jsr DetectRamCart +.endif +_DebugStart: + ;brk + + jsr GetDirHead + MoveB bootSec, r1H + MoveB bootTr, r1L + AddVB 32, bootOffs + bne @3 +@1: MoveB bootSec2, r1H + MoveB bootTr2, r1L + bne @3 + lda NUMDRV + bne @2 + inc NUMDRV +@2: LoadW EnterDeskTop+1, _EnterDeskTop +.ifdef useRamExp + jsr LoadDeskTop +.endif + jmp EnterDeskTop + +@3: MoveB r1H, bootSec + MoveB r1L, bootTr + LoadW r4, diskBlkBuf + jsr GetBlock + bnex @2 + MoveB diskBlkBuf+1, bootSec2 + MoveB diskBlkBuf, bootTr2 +@4: ldy bootOffs + lda diskBlkBuf+2,y + beq @5 + lda diskBlkBuf+$18,y + cmp #AUTO_EXEC + beq @6 +@5: AddVB 32, bootOffs + bne @4 + beq @1 +@6: ldx #0 +@7: lda diskBlkBuf+2,y + sta dirEntryBuf,x + iny + inx + cpx #30 + bne @7 + LoadW r9, dirEntryBuf + LoadW EnterDeskTop+1, OrigResetHandle + LoadB r0L, 0 + jsr LdApplic + +loadZDriveOffset: + + ; ok, different ROM version have different locations of the + ; device numbers map for the internal/F011 drives + ; for 910110 ROM it is 010112/010113 + ; for 9110XY ROM it is 010113/010114 + + ; as a simple solution for now we detect the ROM and use + ; ROM < 10 to be 010112/010113, otherwise 010113/010114 + ; default is 2, so for old ROM or unrecognized situations + + PushW r0 + PushW r1 + + lda #$16 + sta r0L + lda #$00 + sta r0H + lda #$02 + sta r1L + lda #$00 + sta r1H + + ldz #0 + EOM + lda (r0), z + cmp 'V' + bne @1 + inz + EOM + lda (r0), z + cmp #'9' + bne @1 + + inz + inz + EOM + lda (r0), z + cmp #'1' + bne @1 + PopW r1 + PopW r0 + ldz #3 + rts +@1: + PopW r1 + PopW r0 + ldz #3 + rts + +underlaylist: + ; enchanced dma mode header + .byte $0a + .byte $80, $00 + .byte $81, $00 + .byte 0 + .byte 0 ; swap + .word $2000 ; $6000-$8000 + .word $A000 + .byte 0 ; bank 0 + .word $A000 + .byte 1 ; bank 1 + .word 0 ; unsued mod + +.ifdef debugger +debuggerlist: + ; enchanced dma mode header + .byte $0a + .byte $80, $00 + .byte $81, $00 + .byte 0 + .byte 0 ; swap + .word $2000 ; $6000-$8000 + .word $6000 + .byte 0 ; bank 0 + .word $6000 + .byte 1 ; bank 1 + .word 0 ; unsued mod +.endif + +imageFileName: + .byte "GEOSX.D81", NULL +bootTr: + .byte DIR_1581_TRACK +bootSec: + .byte 3 +bootTr2: + .byte 0 +bootSec2: + .byte 0 +bootOffs: + .byte 0 From 8237ebb82cce85a93206cdb6bec9425565a1e64a Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Thu, 22 May 2025 23:26:11 +0200 Subject: [PATCH 124/125] Fix some english TopDesk strings #24 --- topdesk/Include/DeskMain2.inc | 2 +- topdesk/Main/DeskTop.sub7.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/topdesk/Include/DeskMain2.inc b/topdesk/Include/DeskMain2.inc index a75e4948..9602a000 100644 --- a/topdesk/Include/DeskMain2.inc +++ b/topdesk/Include/DeskMain2.inc @@ -1083,7 +1083,7 @@ FehlerAusgabe: ; Dialogbox-Anzeige f}r Diskettenfehlermeldungen @t2: .byte "function aborted due to",0 @t3: .byte "disk error $" @nr: .byte "..",0 -@t4: .byte "auf Laufwerk " +@t4: .byte "on drive " @dr: .byte ".",0 .endif @db2: .byte $81 diff --git a/topdesk/Main/DeskTop.sub7.s b/topdesk/Main/DeskTop.sub7.s index 9296f936..ae8c0db2 100644 --- a/topdesk/Main/DeskTop.sub7.s +++ b/topdesk/Main/DeskTop.sub7.s @@ -514,7 +514,7 @@ DeskFormat: MoveB curDrive,Name+2 ; nur Zwischenspeicher .else @t1: .byte "Insert disk to be formatted",0 @t2: .byte "in drive " -@dr: .byte ". einlegen ",0 +@dr: .byte ".",0 @t3: .byte "and enter name:",0 .endif @icontab: .word @icon1,@icon2,@icon3,@icon4 From f51b5d74d712a05d426797bcf83c429143883d0e Mon Sep 17 00:00:00 2001 From: Falk Rehwagen Date: Fri, 23 May 2025 19:52:24 +0200 Subject: [PATCH 125/125] Fix building with CC65 2.18 #14 --- Makefile | 10 +-- topdesk/topdesk.cfg | 166 +++++++++++++++++++++--------------------- topdesk/topdesk65.grc | 26 +++---- 3 files changed, 101 insertions(+), 101 deletions(-) diff --git a/Makefile b/Makefile index b295754b..bdbba236 100755 --- a/Makefile +++ b/Makefile @@ -895,7 +895,7 @@ $(BUILD_DIR)/folder/input_driver.o: $(BUILD_DIR)/config.cvt: $(BUILD_DIR)/configure/configure.o $(BUILD_DIR)/configure/r0.o $(BUILD_DIR)/configure/r2.o \ $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o $(BUILD_DIR)/configure/r5.o \ $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o - $(LD) -C configure/configure.cfg -o $@ $(BUILD_DIR)/configure/configure.o -m $(BUILD_DIR)/configure.map $(BUILD_DIR)/configure/r0.o \ + $(LD) --allow-multiple-definition -C configure/configure.cfg -o $@ $(BUILD_DIR)/configure/configure.o -m $(BUILD_DIR)/configure.map $(BUILD_DIR)/configure/r0.o \ $(BUILD_DIR)/configure/r2.o $(BUILD_DIR)/configure/r3.o $(BUILD_DIR)/configure/r4.o \ $(BUILD_DIR)/configure/r5.o $(BUILD_DIR)/configure/r6.o $(BUILD_DIR)/configure/r1.o @@ -909,7 +909,7 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/topdesk/Main/DeskTop.sub8.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o - $(LD) -C topdesk/topdesk.cfg -o $@ $(BUILD_DIR)/topdesk/topdesk.o -m $(BUILD_DIR)/topdesk.map $(BUILD_DIR)/topdesk/Main/DeskTop.main.o \ + $(LD) --allow-multiple-definition -C topdesk/topdesk.cfg -o $@ $(BUILD_DIR)/topdesk/topdesk.o -m $(BUILD_DIR)/topdesk.map $(BUILD_DIR)/topdesk/Main/DeskTop.main.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub2.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub3.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub4.o \ $(BUILD_DIR)/topdesk/Main/DeskTop.sub5.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub6.o \ @@ -917,14 +917,14 @@ $(BUILD_DIR)/topdesk.cvt: $(BUILD_DIR)/topdesk/topdesk.o $(BUILD_DIR)/topdesk/Ma $(BUILD_DIR)/topdesk/Main/DeskTop.sub9.o $(BUILD_DIR)/topdesk/Main/DeskTop.sub10.o $(BUILD_DIR)/mount.cvt: $(BUILD_DIR)/mount/mount.o $(BUILD_DIR)/mount/main.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o + $(LD) --allow-multiple-definition -t geos-cbm -o $@ $(BUILD_DIR)/mount/mount.o -m $(BUILD_DIR)/mount.map $(BUILD_DIR)/mount/main.o $(BUILD_DIR)/geospace.cvt: $(BUILD_DIR)/space/space.o $(BUILD_DIR)/space/main.o \ $(BUILD_DIR)/space/ip/eth.o $(BUILD_DIR)/space/ip/arp.o $(BUILD_DIR)/space/ip/nwk.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/checksum.o $(BUILD_DIR)/space/ip/dhcp.o $(BUILD_DIR)/space/ip/dns.o $(BUILD_DIR)/space/ip/task.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o $(BUILD_DIR)/space/ip/eth.o $(BUILD_DIR)/space/ip/arp.o $(BUILD_DIR)/space/ip/nwk.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/checksum.o $(BUILD_DIR)/space/ip/dhcp.o $(BUILD_DIR)/space/ip/dns.o $(BUILD_DIR)/space/ip/task.o + $(LD) --allow-multiple-definition -t geos-cbm -o $@ $(BUILD_DIR)/space/space.o -m $(BUILD_DIR)/space.map $(BUILD_DIR)/space/main.o $(BUILD_DIR)/space/ip/eth.o $(BUILD_DIR)/space/ip/arp.o $(BUILD_DIR)/space/ip/nwk.o $(BUILD_DIR)/space/ip/socket.o $(BUILD_DIR)/space/ip/checksum.o $(BUILD_DIR)/space/ip/dhcp.o $(BUILD_DIR)/space/ip/dns.o $(BUILD_DIR)/space/ip/task.o $(BUILD_DIR)/clock.cvt: $(BUILD_DIR)/clock/clock.o $(BUILD_DIR)/clock/main.o - $(LD) -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o + $(LD) --allow-multiple-definition -t geos-cbm -o $@ $(BUILD_DIR)/clock/clock.o -m $(BUILD_DIR)/clock.map $(BUILD_DIR)/clock/main.o $(BUILD_DIR)/input_driver.cvt: $(BUILD_DIR)/folder/input_driver.o $(LD) -C folder/folder.cfg -o $@ $(BUILD_DIR)/folder/input_driver.o -m $(BUILD_DIR)/input_driver.map diff --git a/topdesk/topdesk.cfg b/topdesk/topdesk.cfg index 95261b85..420709f4 100644 --- a/topdesk/topdesk.cfg +++ b/topdesk/topdesk.cfg @@ -1,83 +1,83 @@ -SYMBOLS { - __BACKBUFSIZE__: type = weak, value = $2000; - __OVERLAYSIZE__: type = weak, value = $0000; - __OVERLAYADDR__: type = weak, value = $8000 - __BACKBUFSIZE__ - __OVERLAYSIZE__; - __STACKSIZE__: type = weak, value = $0400; - __STACKADDR__: type = weak, value = __OVERLAYADDR__ - __STACKSIZE__; - __MODSTART__: type = weak, value = $0000; - __DISPJUMPTABLE__: type = weak, value = $0000; - -} -MEMORY { - CVT: file = %O, start = $0, size = $40000; - ZP: define = yes, start = $58, size = $1A + $06; - VLIR0: define = yes, start = $0400, size = __STACKADDR__ - $0400; - VLIR1: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR2: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR3: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR4: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR5: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; - VLIR6: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; - VLIR7: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR8: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR9: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR10: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; - VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; -} -SEGMENTS { - ZEROPAGE: type = zp, load = ZP; - EXTZP: type = zp, load = ZP, optional = yes; - DIRENTRY: type = ro, load = CVT, align = $FE; - FILEINFO: type = ro, load = CVT, align = $FE; - RECORDS: type = ro, load = CVT, align = $FE, optional = yes; - STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; - LOWCODE: type = ro, run = VLIR0, load = CVT, optional = yes; - ONCE: type = ro, run = VLIR0, load = CVT, optional = yes; - CODE: type = ro, run = VLIR0, load = CVT; - RODATA: type = ro, run = VLIR0, load = CVT; - DATA: type = rw, run = VLIR0, load = CVT; - INIT: type = bss, load = VLIR0, optional = yes; - BSS: type = bss, load = VLIR0, define = yes; - OVERLAY1: type = ro, run = VLIR1, load = CVT, align_load = $FE, optional = yes; - OVERLAY2: type = ro, run = VLIR2, load = CVT, align_load = $FE, optional = yes; - OVERLAY3: type = ro, run = VLIR3, load = CVT, align_load = $FE, optional = yes; - OVERLAY4: type = ro, run = VLIR4, load = CVT, align_load = $FE, optional = yes; - OVERLAY5: type = ro, run = VLIR5, load = CVT, align_load = $FE, optional = yes; - OVERLAY6: type = ro, run = VLIR6, load = CVT, align_load = $FE, optional = yes; - OVERLAY7: type = ro, run = VLIR7, load = CVT, align_load = $FE, optional = yes; - OVERLAY8: type = ro, run = VLIR8, load = CVT, align_load = $FE, optional = yes; - OVERLAY9: type = ro, run = VLIR9, load = CVT, align_load = $FE, optional = yes; - OVERLAY10: type = ro, run = VLIR10, load = CVT, align_load = $FE, optional = yes; - OVERLAY11: type = ro, run = VLIR11, load = CVT, align_load = $FE, optional = yes; - OVERLAY12: type = ro, run = VLIR12, load = CVT, align_load = $FE, optional = yes; - OVERLAY13: type = ro, run = VLIR13, load = CVT, align_load = $FE, optional = yes; - OVERLAY14: type = ro, run = VLIR14, load = CVT, align_load = $FE, optional = yes; - OVERLAY15: type = ro, run = VLIR15, load = CVT, align_load = $FE, optional = yes; - OVERLAY16: type = ro, run = VLIR16, load = CVT, align_load = $FE, optional = yes; - OVERLAY17: type = ro, run = VLIR17, load = CVT, align_load = $FE, optional = yes; - OVERLAY18: type = ro, run = VLIR18, load = CVT, align_load = $FE, optional = yes; - OVERLAY19: type = ro, run = VLIR19, load = CVT, align_load = $FE, optional = yes; -} -FEATURES { - CONDES: type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__, - segment = ONCE; - CONDES: type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__, - segment = RODATA; - CONDES: type = interruptor, - label = __INTERRUPTOR_TABLE__, - count = __INTERRUPTOR_COUNT__, - segment = RODATA, - import = __CALLIRQ__; -} +SYMBOLS { + __BACKBUFSIZE__: type = weak, value = $2000; + __OVERLAYSIZE__: type = weak, value = $0000; + __OVERLAYADDR__: type = weak, value = $8000 - __BACKBUFSIZE__ - __OVERLAYSIZE__; + __STACKSIZE__: type = weak, value = $0400; + __STACKADDR__: type = weak, value = __OVERLAYADDR__ - __STACKSIZE__; + __MODSTART__: type = weak, value = $0000; + __DISPJUMPTABLE__: type = weak, value = $0000; + +} +MEMORY { + CVT: file = %O, start = $0, size = $40000; + ZP: define = yes, start = $58, size = $1A + $06; + VLIR0: define = yes, start = $0400, size = __STACKADDR__ - $0400 + 3412; + VLIR1: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR2: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR3: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR4: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR5: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; + VLIR6: define = yes, start = __DISPJUMPTABLE__, size = __OVERLAYSIZE__; + VLIR7: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR8: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR9: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR10: define = yes, start = __MODSTART__, size = __OVERLAYSIZE__; + VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; +} +SEGMENTS { + ZEROPAGE: type = zp, load = ZP; + EXTZP: type = zp, load = ZP, optional = yes; + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + RECORDS: type = ro, load = CVT, align = $FE, optional = yes; + STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; + LOWCODE: type = ro, run = VLIR0, load = CVT, optional = yes; + ONCE: type = ro, run = VLIR0, load = CVT, optional = yes; + CODE: type = ro, run = VLIR0, load = CVT; + RODATA: type = ro, run = VLIR0, load = CVT; + DATA: type = rw, run = VLIR0, load = CVT; + INIT: type = bss, load = VLIR0, optional = yes; + BSS: type = bss, load = VLIR0, define = yes; + OVERLAY1: type = ro, run = VLIR1, load = CVT, align_load = $FE, optional = yes; + OVERLAY2: type = ro, run = VLIR2, load = CVT, align_load = $FE, optional = yes; + OVERLAY3: type = ro, run = VLIR3, load = CVT, align_load = $FE, optional = yes; + OVERLAY4: type = ro, run = VLIR4, load = CVT, align_load = $FE, optional = yes; + OVERLAY5: type = ro, run = VLIR5, load = CVT, align_load = $FE, optional = yes; + OVERLAY6: type = ro, run = VLIR6, load = CVT, align_load = $FE, optional = yes; + OVERLAY7: type = ro, run = VLIR7, load = CVT, align_load = $FE, optional = yes; + OVERLAY8: type = ro, run = VLIR8, load = CVT, align_load = $FE, optional = yes; + OVERLAY9: type = ro, run = VLIR9, load = CVT, align_load = $FE, optional = yes; + OVERLAY10: type = ro, run = VLIR10, load = CVT, align_load = $FE, optional = yes; + OVERLAY11: type = ro, run = VLIR11, load = CVT, align_load = $FE, optional = yes; + OVERLAY12: type = ro, run = VLIR12, load = CVT, align_load = $FE, optional = yes; + OVERLAY13: type = ro, run = VLIR13, load = CVT, align_load = $FE, optional = yes; + OVERLAY14: type = ro, run = VLIR14, load = CVT, align_load = $FE, optional = yes; + OVERLAY15: type = ro, run = VLIR15, load = CVT, align_load = $FE, optional = yes; + OVERLAY16: type = ro, run = VLIR16, load = CVT, align_load = $FE, optional = yes; + OVERLAY17: type = ro, run = VLIR17, load = CVT, align_load = $FE, optional = yes; + OVERLAY18: type = ro, run = VLIR18, load = CVT, align_load = $FE, optional = yes; + OVERLAY19: type = ro, run = VLIR19, load = CVT, align_load = $FE, optional = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/topdesk/topdesk65.grc b/topdesk/topdesk65.grc index 0ac2b623..68dd08d2 100644 --- a/topdesk/topdesk65.grc +++ b/topdesk/topdesk65.grc @@ -1,13 +1,13 @@ -HEADER APPLICATION "65 DESKTOP" "TopDesk65" "V6.0" { - author "DPT KnCiGo" - info "New desk top." - date 21 11 21 23 54 - structure VLIR - mode 80only - icon "topdesk/TopDeskIcon.bf" -} - -MEMORY { - overlaysize -0x9e7 - overlaynums 0 1 2 3 4 5 6 7 8 9 10 -} +HEADER APPLICATION "65 DESKTOP" "TopDesk65" "V6.0" { + author "DPT KnCiGo" + info "New desk top." + date 21 11 21 23 54 + structure VLIR + mode 80only + icon "topdesk/TopDeskIcon.bf" +} + +MEMORY { + overlaysize 0x9e7 + overlaynums 0 1 2 3 4 5 6 7 8 9 10 +}