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/MEGA65.md b/MEGA65.md new file mode 100644 index 00000000..d3d19d49 --- /dev/null +++ b/MEGA65.md @@ -0,0 +1,17 @@ +... under construction ... + + + +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 cbdc7514..bdbba236 100755 --- a/Makefile +++ b/Makefile @@ -1,10 +1,15 @@ VARIANT ?= mega65 DRIVE ?= drvf011 -INPUT ?= joydrv +#INPUT ?= megaphn +#INPUT ?= mse1351 +INPUT ?= joydrv +#INPUT ?= amigamse AS = ca65 LD = ld65 +CL = cl65 +GRC = grc65 C1541 = c1541 PUCRUNCH = pucrunch EXOMIZER = exomizer @@ -12,8 +17,11 @@ 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 +WEEIP_SRC = test/mega65-weeip/src + +CONFIRM_CBMFILES_PERSONAL_USE_LICENSE ?= NO ASFLAGS = -I inc -I . @@ -115,7 +123,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) @@ -168,6 +177,20 @@ ifeq ($(VARIANT), bsw128) kernal/memory/memory_128.s endif + +ifeq ($(VARIANT), mega65) + KERNAL_SOURCES += \ + kernal/graph/normalize.s \ + kernal/graph/mode.s \ + kernal/640/bswfont80.s \ + kernal/graph/graph2p.s \ + kernal/c65/map.s \ + kernal/c65/iojmp.s \ + kernal/128k/swapdiskdriver.s \ + kernal/files/compat.s \ + kernal/memory/backram.s +endif + # code that is in C128 back bank KERNAL2_SOURCES= \ kernal/128k/bank_jmptab_back.s \ @@ -234,19 +257,24 @@ 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/megaphn.bin \ input/amigamse.bin \ input/lightpen.bin \ - input/mse1531.bin \ + input/mse1351.bin \ + input/mega1351.bin \ input/koalapad.bin \ input/pcanalog.bin # 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 \ @@ -276,19 +304,24 @@ 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/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/mega1351.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 += \ @@ -322,28 +355,639 @@ $(BUILD_DIR)/$(D64_RESULT): $(BUILD_DIR)/kernal_compressed.prg echo \*\*\* Created fresh $@.; \ fi; -$(BUILD_DIR)/$(D81_RESULT): $(BUILD_DIR)/kernal_compressed.prg +prmgr128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/PRMGR128.CVT + +pdmgr128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/PDMGR128.CVT + +calc128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/CALC128.CVT + +spell128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/SPELL128.CVT + +spelldata.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/DICT.CVT + +merge128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/GM128.CVT + +alarm128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/ALARM128.CVT + +california.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/CALIF.CVT + +cory.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/CORY.CVT + +dwinelle.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/DWIN.CVT + +roma.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/ROMA.CVT + +university.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/UNIV.CVT + +commfont.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/COMMFONT.CVT + +lwroma.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWROMA.CVT + +lwcal.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWCAL.CVT + +lwgreek.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWGREEK.CVT + +lwbarrows.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/LWBARR.CVT + +notepad.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/NOTE128.CVT + +photo_mgr.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/PHMGR128.CVT + +text_mgr.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TXMGR128.CVT + +gw128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/GW128.CVT + +gpt128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/GPT128.CVT + +paint_drivers.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/PNTDRVRS.CVT + +geolaser.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/GEOLASER.CVT + +text_grabber128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TG128.CVT + +tgfs4128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGFS4128.CVT + +tgpc2128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGPC2128.CVT + +tgww128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGWW128.CVT + +tgg1128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGG1128.CVT + +tgg2128.cvt: + curl --output $@ https://cbmfiles.com/geos/geosfiles/TGG2128.CVT +dt128.cvt: + 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 $@ https://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 +dt128.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 $(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 \ + $(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 \ + dt128.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 delete \"desk top\"| $(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)/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 $(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; \ 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)/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)/topdesk.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 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 "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; \ + 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; +# echo rename \"65 desktop\" \"65 topdesk\" | $(C1541) $@ >/dev/null; +# echo rename \"128 desktop\" \"65 desktop\" | $(C1541) $@ >/dev/null; + +ifeq ($(VARIANT), mega65) + +$(BUILD_DIR)/topdesk/topdesk.o: + @mkdir -p `dirname $@` + $(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 + +$(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.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 +$(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)/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)/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 + $(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 $@ + +$(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)/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 + +$(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) --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 + +$(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) --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 \ + $(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) --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) --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) --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 + +$(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 + +$(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 $@ $(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) $(BUILD_DIR)/kernal_compressed.prg: $(BUILD_DIR)/compressed_mega65.prg else @@ -382,7 +1026,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 @@ -399,6 +1043,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 $@ @@ -408,11 +1061,17 @@ $(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 $@ -$(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/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 $@ @@ -437,5 +1096,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/README.md b/README.md old mode 100755 new mode 100644 index bf368de4..91da4d63 --- a/README.md +++ b/README.md @@ -1,6 +1,41 @@ -# 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 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! -by Berkeley Softworks, reverse engineered by *Maciej Witkowiak*, *Michael Steil*. ## Description @@ -171,6 +206,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. @@ -246,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. @@ -255,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 diff --git a/_newconf/__MACOSX/._newconf b/_newconf/__MACOSX/._newconf new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/._newconf differ diff --git a/_newconf/__MACOSX/newconf/._configure.cvt.head b/_newconf/__MACOSX/newconf/._configure.cvt.head new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._configure.cvt.head differ diff --git a/_newconf/__MACOSX/newconf/._configure.cvt.record.2 b/_newconf/__MACOSX/newconf/._configure.cvt.record.2 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._configure.cvt.record.2 differ diff --git a/_newconf/__MACOSX/newconf/._configure.cvt.record.3 b/_newconf/__MACOSX/newconf/._configure.cvt.record.3 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._configure.cvt.record.3 differ diff --git a/_newconf/__MACOSX/newconf/._configure.cvt.record.4 b/_newconf/__MACOSX/newconf/._configure.cvt.record.4 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._configure.cvt.record.4 differ diff --git a/_newconf/__MACOSX/newconf/._configure.cvt.record.5 b/_newconf/__MACOSX/newconf/._configure.cvt.record.5 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._configure.cvt.record.5 differ diff --git a/_newconf/__MACOSX/newconf/._configure.cvt.record.6 b/_newconf/__MACOSX/newconf/._configure.cvt.record.6 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._configure.cvt.record.6 differ diff --git a/_newconf/__MACOSX/newconf/._inc b/_newconf/__MACOSX/newconf/._inc new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._inc differ diff --git a/_newconf/__MACOSX/newconf/._r0,prg b/_newconf/__MACOSX/newconf/._r0,prg new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0,prg differ diff --git a/_newconf/__MACOSX/newconf/._r0.asm b/_newconf/__MACOSX/newconf/._r0.asm new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.asm differ diff --git a/_newconf/__MACOSX/newconf/._r0.asm.modified b/_newconf/__MACOSX/newconf/._r0.asm.modified new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.asm.modified differ diff --git a/_newconf/__MACOSX/newconf/._r0.bin b/_newconf/__MACOSX/newconf/._r0.bin new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.bin differ diff --git a/_newconf/__MACOSX/newconf/._r0.find b/_newconf/__MACOSX/newconf/._r0.find new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.find differ diff --git a/_newconf/__MACOSX/newconf/._r0.info b/_newconf/__MACOSX/newconf/._r0.info new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.info differ diff --git a/_newconf/__MACOSX/newconf/._r0.labels b/_newconf/__MACOSX/newconf/._r0.labels new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.labels differ diff --git a/_newconf/__MACOSX/newconf/._r0.lst b/_newconf/__MACOSX/newconf/._r0.lst new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.lst differ diff --git a/_newconf/__MACOSX/newconf/._r0.o b/_newconf/__MACOSX/newconf/._r0.o new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.o differ diff --git a/_newconf/__MACOSX/newconf/._r0.prg b/_newconf/__MACOSX/newconf/._r0.prg new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r0.prg differ diff --git a/_newconf/__MACOSX/newconf/._r1.asm b/_newconf/__MACOSX/newconf/._r1.asm new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r1.asm differ diff --git a/_newconf/__MACOSX/newconf/._r1.bin b/_newconf/__MACOSX/newconf/._r1.bin new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r1.bin differ diff --git a/_newconf/__MACOSX/newconf/._r1.info b/_newconf/__MACOSX/newconf/._r1.info new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r1.info differ diff --git a/_newconf/__MACOSX/newconf/._r1.labels b/_newconf/__MACOSX/newconf/._r1.labels new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r1.labels differ diff --git a/_newconf/__MACOSX/newconf/._r2.asm b/_newconf/__MACOSX/newconf/._r2.asm new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r2.asm differ diff --git a/_newconf/__MACOSX/newconf/._r2.info b/_newconf/__MACOSX/newconf/._r2.info new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r2.info differ diff --git a/_newconf/__MACOSX/newconf/._r6.asm b/_newconf/__MACOSX/newconf/._r6.asm new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r6.asm differ diff --git a/_newconf/__MACOSX/newconf/._r6.info b/_newconf/__MACOSX/newconf/._r6.info new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._r6.info differ diff --git a/_newconf/__MACOSX/newconf/._tmp b/_newconf/__MACOSX/newconf/._tmp new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/._tmp differ diff --git a/_newconf/__MACOSX/newconf/inc/._c64kernal.inc b/_newconf/__MACOSX/newconf/inc/._c64kernal.inc new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/inc/._c64kernal.inc differ diff --git a/_newconf/__MACOSX/newconf/inc/._geossym.inc b/_newconf/__MACOSX/newconf/inc/._geossym.inc new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/inc/._geossym.inc differ diff --git a/_newconf/__MACOSX/newconf/inc/._labels.inc b/_newconf/__MACOSX/newconf/inc/._labels.inc new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/inc/._labels.inc differ diff --git a/_newconf/__MACOSX/newconf/inc/._r0.inc b/_newconf/__MACOSX/newconf/inc/._r0.inc new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/inc/._r0.inc differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg b/_newconf/__MACOSX/newconf/tmp/._configure,prg new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.head b/_newconf/__MACOSX/newconf/tmp/._configure,prg.head new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.head differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.0 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.0 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.0 differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.1 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.1 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.1 differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.2 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.2 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.2 differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.3 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.3 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.3 differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.4 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.4 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.4 differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.5 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.5 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.5 differ diff --git a/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.6 b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.6 new file mode 100644 index 00000000..60c466c5 Binary files /dev/null and b/_newconf/__MACOSX/newconf/tmp/._configure,prg.record.6 differ diff --git a/_newconf/newconf.zip b/_newconf/newconf.zip new file mode 100644 index 00000000..03720fbd Binary files /dev/null and b/_newconf/newconf.zip differ diff --git a/_newconf/newconf/_r6.info b/_newconf/newconf/_r6.info new file mode 100644 index 00000000..a16c86ca --- /dev/null +++ b/_newconf/newconf/_r6.info @@ -0,0 +1,26 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r6.asm"; + INPUTNAME "configure.cvt.record.6"; + STARTADDR $3c80; + 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 "/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 $3f02; END $3f12; TYPE TEXTTABLE; }; +RANGE { START $42ff; END $43aa; TYPE TEXTTABLE; }; + diff --git a/_newconf/newconf/configure.cvt.head b/_newconf/newconf/configure.cvt.head new file mode 100644 index 00000000..cbb7d64d Binary files /dev/null and b/_newconf/newconf/configure.cvt.head differ diff --git a/_newconf/newconf/configure.cvt.record.2 b/_newconf/newconf/configure.cvt.record.2 new file mode 100644 index 00000000..9374a012 Binary files /dev/null and b/_newconf/newconf/configure.cvt.record.2 differ diff --git a/_newconf/newconf/configure.cvt.record.3 b/_newconf/newconf/configure.cvt.record.3 new file mode 100644 index 00000000..11c6b535 Binary files /dev/null and b/_newconf/newconf/configure.cvt.record.3 differ diff --git a/_newconf/newconf/configure.cvt.record.4 b/_newconf/newconf/configure.cvt.record.4 new file mode 100644 index 00000000..8aaef740 Binary files /dev/null and b/_newconf/newconf/configure.cvt.record.4 differ diff --git a/_newconf/newconf/configure.cvt.record.5 b/_newconf/newconf/configure.cvt.record.5 new file mode 100644 index 00000000..5496fffe Binary files /dev/null and b/_newconf/newconf/configure.cvt.record.5 differ diff --git a/_newconf/newconf/configure.cvt.record.6 b/_newconf/newconf/configure.cvt.record.6 new file mode 100644 index 00000000..be8f54c9 Binary files /dev/null and b/_newconf/newconf/configure.cvt.record.6 differ 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 00000000..a09b98d6 Binary files /dev/null and b/_newconf/newconf/r0,prg differ diff --git a/_newconf/newconf/r0.asm b/_newconf/newconf/r0.asm new file mode 100644 index 00000000..95a93d73 --- /dev/null +++ b/_newconf/newconf/r0.asm @@ -0,0 +1,1794 @@ +; 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 + + + !cpu 6502 + !to "r0.bin",plain + !sl "r0.labels" + !source "inc/labels.inc" + !initmem $ea + !zone r0 +L1466 = $1466 +L1E05 = $1E05 +L3156 = $3156 + + *=$406 +;.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! +; ---------------------------------------------------------------------------- + +; ---------------------------------------------------------------------------- + !byte $01,$03 ; 0406 01 03 .. +L0408: !byte $03,$00 ; 0408 03 00 .. +L040A: !byte $00 ;$E0 ; 040A E0 . +; ---------------------------------------------------------------------------- + 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,. +; ---------------------------------------------------------------------------- + !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 00000000..92809fa5 Binary files /dev/null and b/_newconf/newconf/r0.bin differ 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 00000000..f43d9846 Binary files /dev/null and b/_newconf/newconf/r0.o differ diff --git a/_newconf/newconf/r0.prg b/_newconf/newconf/r0.prg new file mode 100644 index 00000000..7127d6a6 Binary files /dev/null and b/_newconf/newconf/r0.prg differ diff --git a/_newconf/newconf/r1.asm b/_newconf/newconf/r1.asm new file mode 100644 index 00000000..270ae234 --- /dev/null +++ b/_newconf/newconf/r1.asm @@ -0,0 +1,1600 @@ +; 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 + + + + !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! + + +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 -.. + txs ; 13DF 9A . + brk ; 13E0 00 . + !byte $2F ; 13E1 2F / + and $0088,y ; 13E2 39 88 00 9.. + 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 ].. + 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 " + !text "CONFIGURE" ; 1553 43 4F 4E 46 49 47 55 52 CONFIGUR + ; 155B 45 E + !byte $22 ; 155C 22 " + !text " 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 .. + !text "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 . + !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 00000000..e3c8bc55 Binary files /dev/null and b/_newconf/newconf/r1.bin differ diff --git a/_newconf/newconf/r1.info b/_newconf/newconf/r1.info new file mode 100644 index 00000000..bbdb2ddc --- /dev/null +++ b/_newconf/newconf/r1.info @@ -0,0 +1,36 @@ +# This is a comment. It extends to the end of the line + GLOBAL { + OUTPUTNAME "r1.asm"; + INPUTNAME "configure.cvt.record.1"; + STARTADDR $13b1; + 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";}; + +# One segment for the whole stuff +SEGMENT { START $13b1; END $FFFF; NAME "record1"; }; +RANGE { START $1552; END $158F; TYPE TEXTTABLE; }; +RANGE { START $1662; END $167b; TYPE TEXTTABLE; }; +RANGE { START $179F; END $17b2; TYPE TEXTTABLE; }; +RANGE { START $17d8; END $17e3; TYPE TEXTTABLE; }; +RANGE { START $18a5; END $18b5; 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/r1.labels b/_newconf/newconf/r1.labels new file mode 100644 index 00000000..346ac20b --- /dev/null +++ b/_newconf/newconf/r1.labels @@ -0,0 +1,677 @@ +_GetDirHead =$901a; unused +GotoFirstMenu =$c1bd; unused +TestPoint =$c13f; unused +READST =$ffb7; unused +i_ImprintRectangle =$c253; unused +L1590 =$1590; ? +spr5pic =$8b40; unused +L1551 =$1551; ? +L1760 =$1760; ? +CHKIN =$ffc6; unused +L1761 =$1761; ? +_GetFreeDirBlk =$901e; unused +mcmclr0 =$d025; unused +L1720 =$1720; ? +bkvec =$316; unused +bootName =$c006; unused +InitRam =$c181; unused +i_PutString =$c1ae; unused +mcmclr1 =$d026; unused +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 +AppendRecord =$c289; unused +a6H =$79; unused +dirEntryBuf =$8400; unused +EnterTurbo =$c214; unused +L16BE =$16be; ? +a8H =$7d; unused +inputDevName =$88cb; unused +VerWriteBlock =$c223; unused +a0L =$fb; unused +a2L =$70; unused +DoIcons =$c15a +ClearRam =$c178; unused +a4L =$74; unused +irqvec =$314; unused +InitProcesses =$c103; unused +a6L =$78; unused +L1518 =$1518; ? +APP_RAM =$400; unused +AddDirBlock =$9039; unused +L1C69 =$1c69; ? +L1DCB =$1dcb; ? +L1E59 =$1e59; ? +GetBlock =$c1e4 +ACPTR =$ffa5; unused +minMouseSpeed =$8502; unused +OPEN =$ffc0; unused +L1FFA =$1ffa; ? +PRINTBASE =$7900; unused +i_Rectangle =$c19f; unused +TempHideMouse =$c2d7; unused +L1DEC =$1dec; ? +mob3clr =$d02a; unused +inputData =$8506; unused +PutDecimal =$c184 +L043E =$43e +keyVector =$84a3; unused +_ChangeDiskDevice =$900a; unused +c128Flag =$c013 +SwapBData =$c2e6; unused +mouseFaultVec =$84a7; unused +stringX =$84be; unused +stringY =$84c0; unused +RstrFrmDialogue =$c2bf; unused +L1DAF =$1daf +ToBASIC =$c241; unused +SECOND =$ff93; unused +L1C88 =$1c88; ? +L1E98 =$1e98; ? +L1C40 =$1c40; ? +Get1stDirEntry =$9030; unused +L1C41 =$1c41; ? +STATUS =$90; unused +_FreeBlock =$9022; unused +L1C85 =$1c85; ? +L20C4 =$20c4 +SetNextFree =$c292; unused +L1C82 =$1c82; ? +saveFontTab =$850c; unused +PutChar =$c145 +ColorCard =$c2f8; unused +L1A74 =$1a74; ? +GetCharWidth =$c1c9; unused +BACK_SCR_BASE =$6000; unused +PromptOn =$c29b; unused +L20A0 =$20a0; ? +hour =$8519; unused +dblClickCount =$8515; unused +L1E14 =$1e14; ? +L6216 =$6216; unused +mouseData =$8505 +L2075 =$2075; ? +_PutBlock =$9018; unused +UDTIM =$ffea; unused +WriteFile =$c1f9; unused +L1AA0 =$1aa0 +Sleep =$c199; unused +GETIN =$ffe4; unused +L1CF2 =$1cf2; ? +spr4pic =$8b00; unused +mobenble =$d015; unused +MOUSE_BASE =$fe80; unused +L0911 =$911 +graphMode =$3f; unused +PurgeTurbo =$c235 +L1CD6 =$1cd6; ? +L2094 =$2094; ? +MainLoop =$c1c3; unused +SETLFS =$ffba; unused +turboFlags =$8492; unused +UseSystemFont =$c14b; unused +SmallPutChar =$c202; unused +alphaFlag =$84b4; unused +L1CD9 =$1cd9; ? +L1D1B =$1d1b; ? +appMain =$849b; unused +GetNextChar =$c2a7; unused +grirq =$d019; unused +CPU_DATA =$1 +L1D5B =$1d5b; ? +L1EA8 =$1ea8; ? +L1D3F =$1d3f +usedRecords =$8497; unused +moby2 =$d017; unused +_SetGEOSDisk =$902e; unused +VerifyRAM =$c2d1; unused +L1D9A =$1d9a; ? +_FindBAMBit =$9026; unused +GetBorder =$9036; unused +FollowChain =$c205; unused +L1D5F =$1d5f; ? +DoInlineReturn =$c2a4; unused +CIOUT =$ffa8; unused +isGEOS =$848b; unused +iconSelFlg =$84b5; unused +L145D =$145d +ReadRecord =$c28c; unused +mob2clr =$d029; unused +BASIN =$ffcf; unused +L0E19 =$e19 +L141E =$141e; ? +L147F =$147f; ? +L162E =$162e; ? +fileSize =$8499; unused +SetGDirEntry =$c1f0; unused +_ExitTurbo =$9004; unused +ReadByte =$c2b6; unused +L181B =$181b; ? +StringFaultVec =$84ab; unused +FrameRectangle =$c127 +CallRoutine =$c1d8; unused +L145B =$145b; ? +L147C =$147c +version =$c00f +BlkAlloc =$c1fc; unused +_ReadBlock =$900e; unused +msePicPtr =$31; unused +EnterDeskTop =$c22c +SETNAM =$ffbd; unused +L19E4 =$19e4; ? +ramExpSize =$88c3 +mouseLeft =$84ba; unused +dlgBoxRamBuf =$851f; unused +ReadBuff =$903c; unused +L15C2 =$15c2; ? +L17B2 =$17b2; ? +L19E2 =$19e2; ? +DeleteFile =$c238; unused +returnAddress =$3d; unused +L17D2 =$17d2; ? +StashRAM =$c2c8 +Ddec =$c175 +DrDCurDkNm =$88ee; unused +L0FB3 =$fb3 +L1857 =$1857; ? +L1837 =$1837; ? +GetNxtDirEntry =$9033; unused +vdcdata =$d601; unused +mouseRight =$84bc; unused +L1873 =$1873; ? +spr7pic =$8bc0; unused +L1623 =$1623 +L1872 =$1872; ? +RestartProcess =$c106; unused +L1472 =$1472; ? +PreviousRecord =$c27d; unused +mouseBottom =$84b9; unused +IRQ_VECTOR =$fffe; unused +r1L =$4 +r9H =$15; unused +_ChkDkGEOS =$902c; unused +bakclr2 =$d023; unused +L15CF =$15cf +L19CE =$19ce; ? +r3L =$8 +windowBottom =$34; unused +bakclr3 =$d024; unused +driveType =$848e +MoveData =$c17e; unused +CINT =$ff81; unused +r5L =$c +_CalcBlksFree =$9020; unused +bakclr0 =$d021; unused +IOBASE =$fff3; unused +dateCopy =$c018; unused +r7L =$10; unused +DrACurDkNm =$841e; unused +bakclr1 =$d022; unused +driveData =$88bf +ChangeDiskDevice =$c2bc +r1H =$5 +r9L =$14; unused +PutDirHead =$c24a; unused +RESET_VECTOR =$fffc; unused +RESTOR =$ff8a; unused +r3H =$9 +DrBCurDkNm =$8430; unused +L1458 =$1458; ? +i_GraphicsString =$c1a8 +NextRecord =$c27a; unused +r5H =$d +SCNKEY =$ff9f; unused +L15AA =$15aa; ? +r7H =$11; unused +DrCCurDkNm =$88dc; unused +_GetBlock =$9016; unused +CPU_DDR =$0 +obj6Pointer =$8ffe; unused +FillRam =$c17b; unused +GetFHdrInfo =$c229; unused +r14H =$1f; unused +mouseYPos =$3c; unused +GetScanLine =$c13c +mobbakcol =$d01f; unused +RDTIM =$ffde; unused +r10H =$17; unused +obj7Pointer =$8fff; unused +CopyString =$c265; unused +mob1clr =$d028; unused +r12H =$1b; unused +HideOnlyMouse =$c2f2; unused +L1CDC =$1cdc; ? +L1F29 =$1f29; ? +Ddiv =$c169; unused +r14L =$1e +obj4Pointer =$8ffc; unused +L1EEE =$1eee; ? +L207A =$207a +SAVE =$ffd8; unused +i_BitmapUp =$c1ab; unused +r10L =$16; unused +obj5Pointer =$8ffd; unused +mobmcm =$d01c; unused +grirqen =$d01a; unused +L205B =$205b; ? +r12L =$1a; unused +ReDoMenu =$c193; unused +DoneWithIO =$c25f; unused +L1CBD =$1cbd; ? +interleave =$848c; unused +obj2Pointer =$8ffa; unused +L1F60 =$1f60 +dir2Head =$8900; unused +WriteBlock =$c220; unused +SCREEN =$ffed; unused +obj3Pointer =$8ffb; unused +InterruptMain =$c100; unused +obj0Pointer =$8ff8; unused +BldGDirEntry =$c1f3; unused +SetColorMode =$c2f5; unused +L1B44 =$1b44; ? +scr80colors =$88bd; unused +obj1Pointer =$8ff9; unused +L1B46 =$1b46; ? +L1F80 =$1f80 +L1DE1 =$1de1; ? +mouseSpeed =$8507; unused +L1BB2 =$1bb2; ? +L1DE0 =$1de0; ? +DoDlgBox =$c256 +BSOUT =$ffd2; unused +spr6pic =$8b80; unused +SetNewMode =$c2dd; unused +ColorRectangle =$c2fb; unused +NewDisk =$c1e1 +CopyFString =$c268; unused +LISTEN =$ffb1; unused +Panic =$c2c2; unused +DoMenu =$c151 +LdDeskAcc =$c217; unused +mouseOn =$30 +_BlkAlloc =$902a; unused +screencolors =$851e; unused +EXP_BASE =$df00; unused +UNLSN =$ffae; unused +OpenRecordFile =$c274 +minutes =$851a; unused +config =$ff00; unused +L1C6C =$1c6c; ? +keyreg =$d02f; unused +L1A5C =$1a5c; ? +L1A9E =$1a9e; ? +scr80polar =$88bc; unused +vicbase =$d000; unused +InitForIO =$c25c; unused +PromptOff =$c29e; unused +L20AC =$20ac; ? +curRecord =$8496; unused +VECTOR =$ff8d; unused +DrawPoint =$c133; unused +L1C6F =$1c6f; ? +currentMode =$2e; unused +mouseXPos =$3a; unused +CKOUT =$ffc9; unused +mob0clr =$d027; unused +L153E =$153e; ? +L172E =$172e; ? +curDevice =$ba +InsertRecord =$c286; unused +L178F =$178f +L18C8 =$18c8; ? +MEMTOP =$ff99; unused +inputVector =$84a5; unused +L159E =$159e; ? +L193B =$193b; ? +L14A6 =$14a6 +VerifyBData =$c2e9; unused +L16F6 =$16f6; ? +L18C7 =$18c7; ? +SetDevice =$c2b0; unused +L18C0 =$18c0; ? +i_RecoverRectangle =$c1a5; unused +PutBlock =$c1e7 +leftMargin =$35; unused +rightMargin =$37; unused +_DoneWithIO =$9002; unused +BBMult =$c160 +mob2xpos =$d004; unused +L1904 =$1904; ? +mob0ypos =$d001; unused +FindFTypes =$c23b; unused +CLOSE =$ffc3; unused +GetRealSize =$c1b1; unused +cia2base =$dd00; unused +TURBO_DD00_CPY =$8f +memBase =$88cf; unused +L1541 =$1541; ? +L1921 =$1921; ? +spr1pic =$8a40; unused +mouseTop =$84b8; unused +L1712 =$1712; ? +i_FillRam =$c1b4; unused +L1752 =$1752; ? +FastDelFile =$c244; unused +CLALL =$ffe7; unused +a9L =$7e; unused +curType =$88c6; unused +STOP =$ffe1; unused +a1H =$fe; unused +a3H =$73; unused +a5H =$77; unused +BlockProcess =$c10c; unused +StartAppl =$c22f; unused +a7H =$7b; unused +random =$850a; unused +L1798 =$1798; ? +a9H =$7f; unused +UnFreezeProcess =$c115; unused +CloseRecordFile =$c277 +a1L =$fd; unused +a3L =$72; unused +EnableProcess =$c109; unused +NormalizeX =$c2e0; unused +L16CC =$16cc; ? +L1909 =$1909; ? +RstrAppl =$c23e; unused +a5L =$76; unused +curDrive =$8489 +_WriteBlock =$9010; unused +a7L =$7a; unused +PrntFilename =$8465; unused +AccessCache =$c2ef; unused +L14FC =$14fc; ? +mob1ypos =$d003; unused +mob3xpos =$d006; unused +intBotVector =$849f +MouseOff =$c18d; unused +L1E48 =$1e48; ? +BMult =$c163; unused +OpenDisk =$c2a1; unused +L1C39 =$1c39; ? +Dabs =$c16f; unused +mob7clr =$d02e; unused +curSetWidth =$27; unused +lpypos =$d014; unused +L1FEE =$1fee; ? +maxMouseSpeed =$8501; unused +RecoverRectangle =$c12d; unused +PosSprite =$c1cf; unused +BitOtherClip =$c2c5; unused +L1DDD =$1ddd; ? +ReadBlock =$c21a; unused +PrntDiskName =$8476; unused +intTopVector =$849d; unused +COLOR_MATRIX =$8c00; unused +L1C99 =$1c99; ? +SwapRAM =$c2ce; unused +string =$24; unused +i_FrameRectangle =$c1a2; unused +L1C50 =$1c50; ? +L1C96 =$1c96; ? +mmu =$d500; unused +DrawSprite =$c1c6; unused +keyData =$8504; unused +L1E43 =$1e43; ? +ExitTurbo =$c232 +BRKVector =$84af; unused +_PutDirHead =$901c; unused +L1C53 =$1c53; ? +fileWritten =$8498; unused +L1C93 =$1c93; ? +L20D1 =$20d1; ? +RecoverAllMenus =$c157; unused +L1C56 =$1c56; ? +L1E24 =$1e24; ? +L1E04 =$1e04 +selectionFlash =$84b3; unused +mob2ypos =$d005; unused +L1CC3 =$1cc3; ? +L2007 =$2007; ? +i_MoveData =$c1b7; unused +L1EB0 =$1eb0; ? +L2067 =$2067 +rasreg =$d012; unused +mobprior =$d01b; unused +sysRAMFlg =$88c4 +L1AF2 =$1af2; ? +L1CC0 =$1cc0; ? +WriteBuff =$903f; unused +ctab =$d800; unused +spr0pic =$8a00; unused +EnablSprite =$c1d2; unused +L2022 =$2022; ? +L2060 =$2060; ? +L2087 =$2087; ? +L1CA7 =$1ca7; ? +L1CA4 =$1ca4; ? +L1EB4 =$1eb4; ? +L2084 =$2084; ? +L2062 =$2062; ? +pressFlag =$39; unused +SetPattern =$c139 +DisablSprite =$c1d5; unused +DShiftRight =$c262; unused +L1B5A =$1b5a; ? +FreezeProcess =$c112; unused +UpdateRecordFile =$c295; unused +L1B5B =$1b5b; ? +mouseAccel =$8503; unused +CmpFString =$c26e; unused +curPattern =$22; unused +mobx2 =$d01d; unused +L6819 =$6819 +InitTextPrompt =$c1c0; unused +BitmapClip =$c2aa; unused +savedmoby2 =$88bb; unused +L0739 =$739 +L1F3E =$1f3e; ? +GetFile =$c208; unused +L165E =$165e; ? +L180D =$180d; ? +mob1xpos =$d002; unused +mob3ypos =$d007; unused +TKSA =$ff96; unused +GetSerialNumber =$c196; unused +L144D =$144d +L165D =$165d; ? +mob6clr =$d02d; unused +HorizontalLine =$c118; unused +lpxpos =$d013; unused +cia1base =$dc00; unused +year =$8516; unused +FreeBlock =$c2b9; unused +L140C =$140c; ? +L161C =$161c; ? +L169E =$169e; ? +L180B =$180b; ? +TALK =$ffb4; unused +L167C =$167c +L17C9 =$17c9 +L180C =$180c; ? +SETTMO =$ffa2; unused +SETTIM =$ffdb; unused +mouseVector =$84a1; unused +CRC =$c20e; unused +DrawLine =$c130; unused +ReadFile =$c1ff; unused +BitmapUp =$c142; unused +extclr =$d020; unused +LOAD =$ffd5; unused +ClearMouseMode =$c19c; unused +CalcBlksFree =$c1db; unused +mob4ypos =$d009; unused +mob6xpos =$d00c; unused +CLRCH =$ffcc; unused +sysDBData =$851d; unused +nationality =$c010; unused +L1406 =$1406; ? +CmpString =$c26b; unused +mousePicData =$84c1; unused +_InitForIO =$9000; unused +L1657 =$1657; ? +RecoverVector =$84b1 +L0FA0 =$fa0 +L1690 =$1690; ? +grmemptr =$d018; unused +nmivec =$318; unused +alarmTmtVector =$84ad; unused +L1441 =$1441 +L1800 =$1800; ? +spr3pic =$8ac0; unused +GetString =$c1ba; unused +AllocateBlock =$9048; unused +SetGEOSDisk =$c1ea; unused +UnBlockProcess =$c10f; unused +LdApplic =$c21d; unused +DoPreviousMenu =$c190 +r0L =$2 +r8H =$13; unused +r2L =$6 +RAMTAS =$ff87; unused +r4L =$a +L15FF =$15ff +r6L =$e; unused +SCREEN_BASE =$a000 +L15DF =$15df +r0H =$3 +r8L =$12; unused +L17EA =$17ea; ? +L1829 =$1829; ? +r2H =$7 +dataDiskName =$8453; unused +_OpenDisk =$9014; unused +VerticalLine =$c121; unused +L15BC =$15bc; ? +r4H =$b +MoveBData =$c2e3; unused +L19BC =$19bc +r6H =$f; unused +RecoverLine =$c11e; unused +r15H =$21 +mob5ypos =$d00b; unused +mob7xpos =$d00e; unused +vdcreg =$d600; unused +day =$8518; unused +dataFileName =$8442; unused +DeleteRecord =$c283; unused +L1B78 =$1b78; ? +r11H =$19 +mob5clr =$d02c; unused +L1D28 =$1d28; ? +r13H =$1d +L073E =$73e +L1CAA =$1caa; ? +L1D08 =$1d08; ? +L1EDB =$1edb; ? +L1F39 =$1f39; ? +r15L =$20 +L1EDD =$1edd; ? +L200C =$200c; ? +r11L =$18 +GetRandom =$c187; unused +L1CEF =$1cef; ? +L204B =$204b; ? +L208D =$208d; ? +WriteRecord =$c28f; unused +r13L =$1c +fileTrScTab =$8300; unused +GetDirHead =$c247; unused +ramBase =$88c7; unused +sysFlgCopy =$c012 +L1D60 =$1d60; ? +curDirHead =$8200; unused +L1D61 =$1d61 +OS_ROM =$c000; unused +_NewDisk =$900c; unused +_EnterTurbo =$9008; unused +L1B54 =$1b54; ? +InvertRectangle =$c12a; unused +FindFile =$c20b; unused +L1D27 =$1d27; ? +faultData =$84b6; unused +Dnegate =$c172; unused +msbxpos =$d010; unused +curHeight =$29; unused +NUMDRV =$848d +mob6ypos =$d00d; unused +mob4xpos =$d008; unused +L0616 =$616 +dispBufferOn =$2f +L1DF2 =$1df2; ? +L1DB0 =$1db0; ? +GraphicsString =$c136; unused +NxtBlkAlloc =$c24d; unused +SetMousePicture =$c2da; unused +DoRAMOp =$c2d4; unused +spr2pic =$8a80; unused +GetPtrCurDkNm =$c298; unused +UNTLK =$ffab; unused +diskBlkBuf =$8000; unused +LdFile =$c211; unused +InvertLine =$c11b; unused +L0672 =$672 +seconds =$851b; unused +Rectangle =$c124 +ChkDkGEOS =$c1de; unused +L1FC5 =$1fc5; ? +DShiftLeft =$c15d; unused +ImprintRectangle =$c250; unused +mobmobcol =$d01e; unused +L1E4A =$1e4a; ? +RenameFile =$c259; unused +PointRecord =$c280 +L1FE8 =$1fe8; ? +NMI_VECTOR =$fffa; unused +L1BA9 =$1ba9; ? +TURBO_DD00 =$8e; unused +grcntrl2 =$d016; unused +diskOpenFlg =$848a +baselineOffset =$26; unused +DoBOp =$c2ec; unused +L20BA =$20ba; ? +grcntrl1 =$d011; unused +mob5xpos =$d00a; unused +mob7ypos =$d00f; unused +L194F =$194f; ? +firstBoot =$88c5; unused +_PurgeTurbo =$9006; unused +curIndexTable =$2a; unused +month =$8517; unused +PutString =$c148 +DMult =$c166; unused +mob4clr =$d02b; unused +ReadLink =$904b; unused +FirstInit =$c271; unused +MouseUp =$c18a; unused +IOINIT =$ff84; unused +MEMBOT =$ff9c; unused +windowTop =$33; unused +IsMseInRegion =$c2b3 +L16E8 =$16e8; ? +vdcClrMode =$88be; unused +DSdiv =$c16c; unused +fileHeader =$8100; unused +_VerWriteBlock =$9012; unused +_SetNextFree =$9024; unused +FindBAMBit =$c2ad; unused +L18D6 =$18d6; ? +FetchRAM =$c2cb; unused +StartMouseMode =$c14e; unused +clkreg =$d030; unused +FreeFile =$c226; unused +SETMSG =$ff90; unused +RecoverMenu =$c154; unused +GetFreeDirBlk =$c1f6; unused +otherPressVec =$84a9 +L16A2 =$16a2; ? +RAMC_BASE =$de00; unused diff --git a/_newconf/newconf/r2.asm b/_newconf/newconf/r2.asm new file mode 100644 index 00000000..b8dc9d5f --- /dev/null +++ b/_newconf/newconf/r2.asm @@ -0,0 +1,2516 @@ +; 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/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..7532d91f --- /dev/null +++ b/_newconf/newconf/r6.asm @@ -0,0 +1,1530 @@ +; da65 V2.15 +; Created: 2017-07-29 22:56:46 +; Input file: configure128.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 +L3531 := $3531 +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 L9550 ; 9002 50 95 P. +_ExitTurbo: + .addr L957A ; 9004 7A 95 z. +_PurgeTurbo: + .addr L957A ; 9006 7A 95 z. +_EnterTurbo: + .addr L9571 ; 9008 71 95 q. +_ChangeDiskDevice: + .addr L9580 ; 900A 80 95 .. +_NewDisk: + .addr L9588 ; 900C 88 95 .. +_ReadBlock: + .addr L958C ; 900E 8C 95 .. +_WriteBlock: + .addr L95A2 ; 9010 A2 95 .. +_VerWriteBlock: + .addr L95AB ; 9012 AB 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 L9597 ; 904B 4C 97 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 L966A ; 90D4 8D 6A 96 .j. + 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 L966E ; 913F 8D 6E 96 .n. + 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 L966E ; 91AF AD 6E 96 .n. + beq L91BD ; 91B2 F0 09 .. + dec L966E ; 91B4 CE 6E 96 .n. + 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 L966F ; 91F5 8D 6F 96 .o. + 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 L966F ; 9223 AD 6F 96 .o. + bne L9243 ; 9226 D0 1B .. + lda #$FF ; 9228 A9 FF .. + sta L966F ; 922A 8D 6F 96 .o. + 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 L9660 ; 94E1 8D 60 96 .`. + sei ; 94E4 78 x + 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 ; 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: + 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 ` + +; ---------------------------------------------------------------------------- +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: + tsx ; 9584 BA . + ldx #$00 ; 9585 A2 00 .. + rts ; 9587 60 ` + +; ---------------------------------------------------------------------------- +L9588: .byte $20 ; 9588 20 + .byte $14 ; 9589 14 . +__ChangeDiskDevice: + .byte $C2 ; 958A C2 . + rts ; 958B 60 ` + +; ---------------------------------------------------------------------------- +L958C: jsr L90D2 ; 958C 20 D2 90 .. + bcc L9594 ; 958F 90 03 .. + .byte $20 ; 9591 20 +__NewDisk: + .byte $B3 ; 9592 B3 . + .byte $95 ; 9593 95 . +L9594: ldy #$00 ; 9594 A0 00 .. +__ReadBlock: + 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: + rts ; 95A1 60 ` + +; ---------------------------------------------------------------------------- +L95A2: jsr L90D2 ; 95A2 20 D2 90 .. + bcc L95AA ; 95A5 90 03 .. + jsr L95B7 ; 95A7 20 B7 95 .. +L95AA: rts ; 95AA 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 ` + +; ---------------------------------------------------------------------------- + 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 ` + +; ---------------------------------------------------------------------------- +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 . + 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 . + 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 new file mode 100644 index 00000000..f7a0f40f --- /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 "r2.asm"; + INPUTNAME "configure128.cvt.record.2"; + 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 00000000..5322b11e Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg differ diff --git a/_newconf/newconf/tmp/configure,prg.head b/_newconf/newconf/tmp/configure,prg.head new file mode 100644 index 00000000..75934e94 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.head differ diff --git a/_newconf/newconf/tmp/configure,prg.record.0 b/_newconf/newconf/tmp/configure,prg.record.0 new file mode 100644 index 00000000..0fec0bc7 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.0 differ diff --git a/_newconf/newconf/tmp/configure,prg.record.1 b/_newconf/newconf/tmp/configure,prg.record.1 new file mode 100644 index 00000000..e3c8bc55 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.1 differ diff --git a/_newconf/newconf/tmp/configure,prg.record.2 b/_newconf/newconf/tmp/configure,prg.record.2 new file mode 100644 index 00000000..9374a012 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.2 differ diff --git a/_newconf/newconf/tmp/configure,prg.record.3 b/_newconf/newconf/tmp/configure,prg.record.3 new file mode 100644 index 00000000..11c6b535 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.3 differ diff --git a/_newconf/newconf/tmp/configure,prg.record.4 b/_newconf/newconf/tmp/configure,prg.record.4 new file mode 100644 index 00000000..8aaef740 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.4 differ diff --git a/_newconf/newconf/tmp/configure,prg.record.5 b/_newconf/newconf/tmp/configure,prg.record.5 new file mode 100644 index 00000000..5496fffe Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.5 differ diff --git a/_newconf/newconf/tmp/configure,prg.record.6 b/_newconf/newconf/tmp/configure,prg.record.6 new file mode 100644 index 00000000..be8f54c9 Binary files /dev/null and b/_newconf/newconf/tmp/configure,prg.record.6 differ diff --git a/clock/clock.grc b/clock/clock.grc new file mode 100644 index 00000000..658f8ade --- /dev/null +++ b/clock/clock.grc @@ -0,0 +1,9 @@ +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 21 11 21 21 45 + 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..fccf46b1 --- /dev/null +++ b/clock/clockIcon.s @@ -0,0 +1,24 @@ + +.segment "ICON" + +.byte %11111111, %11111111, %11111111 +.byte %10000000, %00000000, %00000001 +.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 new file mode 100644 index 00000000..7ed29e4f --- /dev/null +++ b/clock/main.s @@ -0,0 +1,737 @@ +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" + + +.export __STARTUP_RUN__ + +.segment "STARTUP" + +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 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 + + jmp EnterDeskTop + +@1: jsr GetRTC + bcs @2 ; branch if no valid GetRTC + + 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 + cli ; enable interrupts to operate dblClickCount + 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 + jsr GetLongUnbounced + sta MyStd + + 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 + jsr GetLongUnbounced + sta MyMonat + + 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 + +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 + + MoveW EntryX, r11 + MoveB EntryY, r1H + 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 + 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 + ldx MySec + lda #SecZehner-TagZehner + jsr DivnSet + + rts + +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 + txa + lsr + lsr + lsr + lsr + sta r0L + txa + and #$0F + sta r8L + 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 + + +DPA = $dc00 +ampm: .byte 0 + +GetTimeString: + lda TagZehner + 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 + sta MyStd + + lda MinZehner + ldx MinEiner + jsr ASCBCD + sta MyMin + + lda SecZehner + ldx SecEiner + jsr ASCBCD + sta MySec + + rts + +SetTime2: + jsr InitForIO + + lda MyTag + jsr BcdToDec + sta day + + lda MyMonat + jsr BcdToDec + sta month + + 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 + pha + LoadB ampm,$80 + pla + sec + sbc #12 + +@am: jsr DezBCD + clc + adc ampm + sta DPA+$0b + + 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 + +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 diff --git a/config.inc b/config.inc old mode 100755 new mode 100644 index b37a247f..a5a62ef2 --- 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 @@ -141,6 +143,13 @@ config_inc = 1 ; additionally, there are ".ifdef mega65" checks ; throughout the code .setcpu "4510" + + topdesk128 = 1 + topdesk13 = 1 + + config128 = 1 + + scalable_coords = 1 .endif .ifdef custom @@ -156,7 +165,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 @@ -219,8 +228,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/ConfigIcon.bf b/configure/ConfigIcon.bf new file mode 100644 index 00000000..df375a37 Binary files /dev/null and b/configure/ConfigIcon.bf differ diff --git a/configure/configure.cfg b/configure/configure.cfg new file mode 100644 index 00000000..8f76c40a --- /dev/null +++ b/configure/configure.cfg @@ -0,0 +1,86 @@ +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__; + REBOOT: define = yes, start = $6000, size = $2000; +} +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; + 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; + 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..875e17cd --- /dev/null +++ b/configure/configure.grc @@ -0,0 +1,11 @@ +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 + structure VLIR +} + +MEMORY { + overlaysize 0x1000 + overlaynums 0,1,2,3,4,5,6 +} diff --git a/configure/configure65.grc b/configure/configure65.grc new file mode 100644 index 00000000..7e643122 --- /dev/null +++ b/configure/configure65.grc @@ -0,0 +1,14 @@ +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 21 11 21 22 54 + mode any + structure VLIR + mode 80only + icon "configure/ConfigIcon.bf" +} + +MEMORY { + overlaysize 0x107F + overlaynums 0,1,2,3,4,5,6,7 +} diff --git a/configure/r0.s b/configure/r0.s new file mode 100644 index 00000000..a778c1b6 --- /dev/null +++ b/configure/r0.s @@ -0,0 +1,2615 @@ +; 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" +.include "diskdrv.inc" + + ;.cpu 6502 + ;.to "r0.bin",plain + ;.sl "r0.labels" + ;.source "inc/labels.inc" + ;.initmem $ea + ;.zone r0 +L3156 = $3156 + +.ifdef config128 +L6216 = $62AD; +.else +L6216 = $6216; +.endif + + ; *=$406 + +;.import L6216 + +.segment "STARTUP" + +.export L043E +.export L0616 +.export L0672 +.export L0739 +.export InitDrive +.export L0911 +.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 InitRAM +.export InitF011 +.export InitF011_1 +.export InitSD81 +.export InitSD71 +.export InitSD +.export InitVirtual +.export InitFloppy + +;.export L043E ; = $043E; fix! +;.export L0616 ; = $0616; fix! +;.export L0672 ; = $0672; fix! +;.export L0739 ; = $0739; fix! +;.export InitDrive ; = $073E; fix! +;.export L0911 ; = $0911; fix! +;.export L0E19 ; = $0E19; fix! +;.export L0FA0 ; = $0FA0; fix! +;.export L0FB3 ; = $0FB3; fix! +.export __STARTUP_RUN__ + +.import V20D9 +.import V2102 +.import V2103 +.import VarImageFileName +.import VarImageFileNames +.import VarImageDriveType +.import V2104 +.import V2105 +.import V2106 +.import V2107 +.import V2108 +.import V2108a +.import V2109 +.import V210A +.import V2150 +.import V212B +.import V212C +.import V212F +.import V2130 +.import UIEntry +.import L180C +.import SetupDrive +.import V20FA +.import V20F2 +.import V20EA +.import CheckDrive +.import V2551 + +; ---------------------------------------------------------------------------- + +; ---------------------------------------------------------------------------- + .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 ... + 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 V2104 ; 0420 8D 04 21 ..! + 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 + .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 V2104 ; 043E AD 04 21 ..! + jsr InitDrive ; 0441 20 3E 07 >. + + 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 + ; 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 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: + ; 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. + jsr L0739 ; 0468 20 39 07 9. + lda #$01 ; 046B A9 01 .. + sta NUMDRV ; 046D 8D 8D 84 ... +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. + lda version + cmp #$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 ` +.endif +; ---------------------------------------------------------------------------- +; 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 .. + 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 UIEntry ; 050B 4C 66 14 Lf. +; ---------------------------------------------------------------------------- +L050E: jmp EnterDeskTop ; 050E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- +configFileClass: +.ifdef config128 +.ifdef mega65 + .byte "65 Config V6.0", 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 + .byte $00 ; 0521 00 . +.endif +; ---------------------------------------------------------------------------- +OpenConfigFile: ldx #$00 ; 0522 A2 00 .. + lda L06AC ; 0524 AD AC 06 ... + bne L0557 ; 0527 D0 2E .. + + 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 .. + + ; found, load it + LoadW r0, V20D9 + 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 ... + ; 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 .. + + ; 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: +.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. + jsr SetDevice ; 0583 20 B0 C2 .. + 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 ..! +.if 0 + 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 ; 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 .. + + ; 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. + 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 .. + + ; 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 ..! + beq L05E7 ; 05DC F0 09 .. + jsr L0739 ; 05DE 20 39 07 9. + lda V2107 ; 05E1 AD 07 21 ..! + jsr L0769 ; 05E4 20 69 07 i. +L05E7: lda V2108 ; 05E7 AD 08 21 ..! + beq L05F7 ; 05EA F0 0B .. + lda #$0A ; 05EC A9 0A .. + jsr InitDrive ; 05EE 20 3E 07 >. + lda V2108 ; 05F1 AD 08 21 ..! + jsr L0769 ; 05F4 20 69 07 i. +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 .. + lda #$08 ; 05FD A9 08 .. + sta V212B ; 05FF 8D 2B 21 .+! + lda V2106 ; 0602 AD 06 21 ..! + sta V212F ; 0605 8D 2F 21 ./! +L0608: jsr InstallDriver ; 0608 20 C8 09 .. + 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 ` +; ---------------------------------------------------------------------------- +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 V2106 ; 064A AD 06 21 ..! + jsr L0672 ; 064D 20 72 06 r. + bne L0671 ; 0650 D0 1F .. + lda V2107 ; 0652 AD 07 21 ..! + jsr L0672 ; 0655 20 72 06 r. + bne L0671 ; 0658 D0 17 .. + 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 .. + 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 + + ; 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 . + 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 .. + 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 ` + + +SetupDefaulDrives: + jsr SetupVirtual + jsr SetupInternalFloppy + jsr SetupSDMountD81 + jsr SetupSDMountD71 + rts + +; 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 #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_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: + 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 . + brk ; 06AE 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 ..! + eor #$01 ; 06B9 49 01 I. + tay ; 06BB A8 . + lda $03FE,y ; 06BC B9 FE 03 ... + ldx V2107 ; 06BF AE 07 21 ..! + jsr L06EB ; 06C2 20 EB 06 .. + 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 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 ... + 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 .. + 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 .. + + ; 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: + ; remember next free bank + sta r0H ; 0704 85 03 .. + lda r2H ; 0706 A5 07 .. + bpl L0711 ; 0708 10 07 .. + + ; init ram drive + lda r0H ; 070A A5 03 .. + sta r0L ; 070C 85 02 .. + + ; 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 .. + 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 .. + + ; ram shadow drive + 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 ` +;rts +; ---------------------------------------------------------------------------- +L0739: lda curDrive ; 0739 AD 89 84 ... + eor #$01 ; 073C 49 01 I. +InitDrive: + ;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 .$ + + 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 .. + 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 V212F ; 0755 8D 2F 21 ./! + jsr InstallDriver ; 0758 20 C8 09 .. +L075B: pla ; 075B 68 h + 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 ... +L0768: rts ; 0768 60 ` +; ---------------------------------------------------------------------------- +L0769: pha ; 0769 48 H + lda #$00 ; 076A A9 00 .. + sta V212C ; 076C 8D 2C 21 .,! + lda curDrive ; 076F AD 89 84 ... + sta V212B ; 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 @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 @4 + jmp InitF011 +@4: cmp #DRV_F011_V + bne L078D + jmp InitVirtual +; ---------------------------------------------------------------------------- +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 ` +; ---------------------------------------------------------------------------- +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 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 L180C ; 07D2 CE 0C 18 ... + rts ; 07D5 60 ` +; ---------------------------------------------------------------------------- +L07D6: lda #$01 ; 07D6 A9 01 .. + sta V212F ; 07D8 8D 2F 21 ./! + jmp InitNewDrive ; 07DB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07DE: rts ; 07DE 60 ` +; ---------------------------------------------------------------------------- +Init1571: +L07DF: lda V212C ; 07DF AD 2C 21 .,! + cmp #$02 ; 07E2 C9 02 .. + beq L07EE ; 07E4 F0 08 .. + lda #$02 ; 07E6 A9 02 .. + sta V212F ; 07E8 8D 2F 21 ./! + jmp InitNewDrive ; 07EB 4C D7 08 L.. +; ---------------------------------------------------------------------------- +L07EE: rts ; 07EE 60 ` +; ---------------------------------------------------------------------------- +Init1581: +L07EF: lda V212C ; 07EF AD 2C 21 .,! + cmp #$03 ; 07F2 C9 03 .. + beq L07FE ; 07F4 F0 08 .. + lda #$03 ; 07F6 A9 03 .. + sta V212F ; 07F8 8D 2F 21 ./! + 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 ./! + jsr InitNewDrive ; 07FB 4C D7 08 L.. + + 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 .. + beq L07FE ; 07F4 F0 08 .. + lda #$06 ; 07F6 A9 03 .. + 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 + 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.. +; ---------------------------------------------------------------------------- +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 .. + 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 ` +; ---------------------------------------------------------------------------- +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 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 L180C ; 081C CE 0C 18 ... +L081F: rts ; 081F 60 ` +; ---------------------------------------------------------------------------- +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 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 L180C ; 083D CE 0C 18 ... +L0840: rts ; 0840 60 ` +; ---------------------------------------------------------------------------- +InitRAM1541: +L0841: lda V212C ; 0841 AD 2C 21 .,! + cmp #$81 ; 0844 C9 81 .. + beq L0872 ; 0846 F0 2A .* + lda #$81 ; 0848 A9 81 .. + sta V212F ; 084A 8D 2F 21 ./! + jsr InstallDriver ; 084D 20 C8 09 .. + inc NUMDRV ; 0850 EE 8D 84 ... + lda #$81 ; 0853 A9 81 .. + jsr L0911 ; 0855 20 11 09 .. + 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 V212B ; 0866 AD 2B 21 .+! + jsr InitDrive ; 0869 20 3E 07 >. + jsr L0A8A ; 086C 20 8A 0A .. + dec L180C ; 086F CE 0C 18 ... +L0872: rts ; 0872 60 ` +; ---------------------------------------------------------------------------- +InitRAM1571: +L0873: lda V212C ; 0873 AD 2C 21 .,! + cmp #$82 ; 0876 C9 82 .. + beq L08A4 ; 0878 F0 2A .* + lda #$82 ; 087A A9 82 .. + sta V212F ; 087C 8D 2F 21 ./! + jsr InstallDriver ; 087F 20 C8 09 .. + inc NUMDRV ; 0882 EE 8D 84 ... + lda #$82 ; 0885 A9 82 .. + jsr L0911 ; 0887 20 11 09 .. + 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 V212B ; 0898 AD 2B 21 .+! + jsr InitDrive ; 089B 20 3E 07 >. + + 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 .. + inc NUMDRV ; 08B4 EE 8D 84 ... + + lda #$83 ; 08B7 A9 83 .. + jsr L0911 ; 08B9 20 11 09 .. + 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 V212B ; 08CA AD 2B 21 .+! + jsr InitDrive ; 08CD 20 3E 07 >. + jsr L0A8A ; 08D0 20 8A 0A .. + dec L180C ; 08D3 CE 0C 18 ... +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 ... +.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 + jsr SetupDrive ; 08F6 20 05 1E .. + lda V212B ; 08F9 AD 2B 21 .+! + 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 ... + sta $03FE,y ; 0908 99 FE 03 ... + 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 + jsr L0977 ; 0912 20 77 09 w. + pla ; 0915 68 h + sta r0L ; 0916 85 02 .. + lda V212C ; 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 V212B ; 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 V2130,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 V2130,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 V2130,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 V2130,y ; 097B 99 30 21 .0! + dey ; 097E 88 . + bpl L097B ; 097F 10 FA .. + lda #$FF ; 0981 A9 FF .. + sta V2130 ; 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 V2130,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 ` +; ---------------------------------------------------------------------------- +; 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 .. + 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 . +InstallDriver: 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 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 .. + 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 ... + + ; 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 + + ldy $848F + + jsr StashRAM + + ; stash driver c driver +L0A18: ldy $8490 ; 0A18 AC 90 84 ... + beq L0A18_D ; 0A1B F0 08 .. + lda #$0A ; 0A1D A9 0A .. + jsr L0A3D ; 0A1F 20 3D 0A =. + jsr StashRAM ; 0A22 20 C8 C2 .. + + ; 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 .. + 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 ~. + + ldy V212F ; 0A25 AC 2F 21 ./! + cpy #$82 + bne @10 +@10: + 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-8,y ; 0A4D B9 66 0A .f. + sta r1L ; 0A50 85 04 .. + lda L0A6A-8,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 ` +; ---------------------------------------------------------------------------- +; 2f00 - ??? +; 3c80 - +; 4a00 - +; 5780 - +; 6500 - +; 7280 - +; 8000 - NO + +L0A64: .byte 0, $80 ; 0A64 80 . + brk ; 0A65 00 . + .byte $80 ; 0A66 80 . + brk ; 0A67 00 . + .byte $80 ; 0A68 80 . + +L0A69: .byte $65, $3C ; 0A69 3C < + .byte $4a ; 0A6A 4A J + .byte $57, $2f, $72 + +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 . + 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 .+! + 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 V2109 ; 0F01 8D 09 21 ..! + rts ; 0F04 60 ` +; ---------------------------------------------------------------------------- +L0F05: + ldy V2109 ; 0F05 AC 09 21 ..! + cpy #$20 ; 0F08 C0 20 . + bcs L0F15 ; 0F0A B0 09 .. + 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 \. + LoadW r0, L0F6E + 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 V210A,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 V2109 ; 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. +L0F6E: + 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 ` +; ---------------------------------------------------------------------------- +.ifdef mega65 + +FAST_FLAGS = $60 ;$70 +CACHE_BIT = $80 + +HRBustCache: + PushW r0 + PushW r1 + +.if 0 + 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 +.endif + 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 + ; + ; 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 .. + sta ramExpSize ; 0FB8 8D C3 88 ... + lda #$02 ; 0FBB A9 02 .. + 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 V2102 ; 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 V2102 ; 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_. +.endif +; ---------------------------------------------------------------------------- + ;*=$1010 +L1010: + LoadW r0, V20FA + 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 .. + LoadW r0, L1079 + jsr StashRAM ; 1031 20 C8 C2 .. + 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 .. + LoadW r0, V20F2 + jsr FetchRAM ; 104E 20 CB C2 .. + pla ; 1051 68 h + sta r3L ; 1052 85 08 .. + LoadW r0, V20FA + 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 .. + bne L1077 ; 1067 D0 0E .. + ldx r3L ; 1069 A6 08 .. + beq L1072 ; 106B F0 05 .. + cmp V20F2,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 V2104 ; 1088 AD 04 21 ..! + jsr InitDrive ; 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 .. +.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 .. + 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 .. + 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 .. + 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 .. +.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 .. + 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 .. +.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 .. + 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 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 V2103 ; 1355 AD 03 21 ..! + jsr SetDevice ; 1358 20 B0 C2 .. + jsr NewDisk ; 135B 20 E1 C1 .. +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 .. + pla ; 136A 68 h + jsr SetDevice ; 136B 20 B0 C2 .. + jmp EnterDeskTop ; 136E 4C 2C C2 L,. +; ---------------------------------------------------------------------------- + ;*=$1371 + ;jmp FetchRAM +;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 + sta CPU_DATA ; 1377 85 01 .. +.endif + 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 .. +.ifdef config128 +.ifdef mega65 + stx CPU_DATA ; 13AE 86 01 .. +.else + nop + nop +.endif +.else + stx CPU_DATA ; 13AE 86 01 .. +.endif + rts ; 13B0 60 ` +; ---------------------------------------------------------------------------- +.segment "STARTUP2" + + ;*=$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..aa85d07e --- /dev/null +++ b/configure/r1.s @@ -0,0 +1,2926 @@ +; 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" +.include "diskdrv.inc" + +.segment "OVERLAY1" + + ;!cpu 6502 + ;!to "r1.bin",plain + ;!sl "r1.labels" + ;!source "inc/labels.inc" + ;!source "inc/r0.inc" + ;*=$13b1 + ;!zone r1 +; ---------------------------------------------------------------------------- +.ifndef mega65 +vdcreg = $d600 +vdcdata = $d601 +.endif + +; fix! +;L043E = $043E; fix! +;L0616 = $0616; fix! +;L0672 = $0672; fix! +;L0739 = $0739; fix! +;InitDrive = $073E; fix! +;L0911 = $0911; fix! +;L0E19 = $0E19; fix! +;L0FA0 = $0FA0; fix! +;L0FB3 = $0FB3; fix! + +.import L043E +.import L0616 +.import L0672 +.import L0739 +.import InitDrive +.import L0911 +.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 +.import InitRAM +.import InitF011 +.import InitF011_1 +.import InitSD81 +.import InitSD71 +.import InitSD +.import InitVirtual +.import InitFloppy + +.export V20D9 +.export V2102 +.export V2103 +.export VarImageFileName +.export VarImageFileNames +.export VarImageDriveType +.export V2104 +.export V2105 +.export V2106 +.export V2107 +.export V2108 +.export V2108a +.export V2109 +.export V210A +.export V212B +.export V212C +.export V212D +.export V212E +.export V212F +.export V2130 +.export V2150 +.export UIEntry +.export L180C +.export SetupDrive +.export V20FA +.export V20F2 +.export V20EA +.export CheckDrive +.export V2551 + +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 + CFG_DOUBLE_W, $136 + CFG_DOUBLE_W +.else + .word $b4, $136 +.endif + +;#1 + .byte $85, $8f +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#2 + .byte $A1, $AB +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#3 + .byte $07 + .byte $62 ; 13C4 62 b +.ifdef config128 + .word $1e+CFG_DOUBLE_W, $a0+CFG_DOUBLE_W +.else + .word $1e, $a0 +.endif + +;#4 + .byte $07 ; 13C9 07 . + .byte $62 ; 13CA 62 b +.ifdef config128 + .word $b4 + CFG_DOUBLE_W, $136 + CFG_DOUBLE_W +.else + .word $b4, $136 +.endif + +;#5 + .byte $69, $c4 +.ifdef config128 + .word $1e + CFG_DOUBLE_W, $a0 + CFG_DOUBLE_W +.else + .word $1e, $a0 +.endif + +;#6 + .byte $17, $21 ; 13D5 17 . +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#7 + .byte $23 ; 13DB 23 # + .byte $2d +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#8 + .byte $2F ; 13E1 2F / + .byte $39 +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#9 . + .byte $3B ; 13E7 3B ; + .byte $45 +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#10 + .byte $47, $51 +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#11 + .byte $53, $5d ; 13F3 53 +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#12 + .byte $17, $21 ; 13F9 17 +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#13 + .byte $23, $2d +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#14 + .byte $2F, $39 ; 1405 2F / +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#15 + .byte $3B, $45 ; 140B 3B ; +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#16 + .byte $47, $51 +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#17 + .byte $53, $5d +.ifdef config128 + .word $011e + CFG_DOUBLE_W, $0130 + CFG_DOUBLE_W +.else + .word $011e, $0130 +.endif + +;#18 + .byte $79, $83 ; 141D 79 y +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#19 + .byte $85, $8f +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#20 + .byte $91, $9b +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#21 + .byte $9d, $a7 +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#22 + .byte $a9, $b3 +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .word $88, $9a +.endif + +;#23 + .byte $b5, $bf +.ifdef config128 + .word $88 + CFG_DOUBLE_W, $9a + CFG_DOUBLE_W +.else + .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 .. + 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 ` +; ---------------------------------------------------------------------------- +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 #>incompKernDlg ; 1475 A2 15 .. + lda #> 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 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 + jsr L2340 ; 1514 20 40 23 @# + + LoadW MenuRight, $15 + LoadW SubMenuRight, $62 + bit graphMode ; 152B 24 3F $? + bpl L1543 ; 152D 10 14 .. + LoadW MenuRight, $1b + LoadW SubMenuRight, $96 +L1543: + +.endif + LoadW r0, IconTable + jsr DoIcons ; 14C8 20 5A C1 Z. + LoadW r0, MenuTable + lda #$00 ; 14D3 A9 00 .. + jsr DoMenu ; 14D5 20 51 C1 Q. + jsr L1590 ; 14D8 20 90 15 .. + LoadW otherPressVec, ConfigOtherPressVec + LoadW RecoverVector, ConfigRecoverVector + rts ; 14EF 60 ` +; ---------------------------------------------------------------------------- +; icon table +IconTable: + 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 .. +.ifndef config128 + ; for GEOS64 skip this if there is not REU + lda ramExpSize ; 14FF AD C3 88 ... + beq L1518 ; 1502 F0 14 .. +.endif + 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 .. +.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 .. + 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 ` +; ---------------------------------------------------------------------------- +incompKernDlg: + .byte $81 + .byte DBTXTSTR + .byte $0c + .byte $20 + .word L1551 + .byte DBTXTSTR + .byte $0c + .byte $30 + .word L1570 + .byte OK + .byte 1 + .byte $48 + .byte NULL +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 +L1570: + .byte $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 + 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 ` +; ---------------------------------------------------------------------------- +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 V212E ; 15DF AD 2E 21 ..! + sta r15H ; 15E2 85 21 .! + lda V212D ; 15E4 AD 2D 21 .-! + sta r15L ; 15E7 85 20 . + ldy #$00 ; 15E9 A0 00 .. + lda (r15L),y ; 15EB B1 20 . + sta V212B ; 15ED 8D 2B 21 .+! + 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 .,! + jsr L161C ; 15FC 4C 1C 16 L.. + rts +; ---------------------------------------------------------------------------- +L15FF: lda V212E ; 15FF AD 2E 21 ..! + sta r15H ; 1602 85 21 .! + lda V212D ; 1604 AD 2D 21 .-! + sta r15L ; 1607 85 20 . + ldy #$00 ; 1609 A0 00 .. + lda (r15L),y ; 160B B1 20 . + sta V212B ; 160D 8D 2B 21 .+! + 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 .,! +L161C: ldy #$01 ; 161C A0 01 .. + 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 . + 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 V212A ; 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 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.. +; ---------------------------------------------------------------------------- +DriveAStr: + .byte $18 ; 1661 18 . + .byte "Drive A" ; 1662 44 72 69 76 65 20 41 Drive A + .byte $00 +DriveBStr: + .byte $18 ; 1669 00 18 .. + .byte "Drive B" ; 166B 44 72 69 76 65 20 42 Drive B + .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 . +DriveDStr: + .byte $18 + .byte "Drive D" + .byte $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 . + 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 ` +; ---------------------------------------------------------------------------- +L16A2: ldy #$03 ; 16A2 A0 03 .. + jsr L15AA ; 16A4 20 AA 15 .. + LoadW r0, DriveAStr + lda #$13 ; 16AF A9 13 .. + sta r1H ; 16B1 85 05 .. +.ifdef config128 + LoadW r11, $4F + CFG_DOUBLE_W +.else + LoadW r11, $4F +.endif + jsr PutString ; 16BB 20 48 C1 H. +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 .. + LoadW r0, DriveBStr + lda #$13 ; 16D9 A9 13 .. + sta r1H ; 16DB 85 05 .. +.ifdef config128 + LoadW r11, $E5 + CFG_DOUBLE_W +.else + LoadW r11, $E5 +.endif + jsr PutString ; 16E5 20 48 C1 H. +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 .. + LoadW r0, DriveCStr + lda #$75 ; 1703 A9 75 .u + sta r1H ; 1705 85 05 .. +.ifdef config128 + LoadW r11, $4F + CFG_DOUBLE_W +.else + LoadW r11, $4F +.endif + jsr PutString ; 170F 20 48 C1 H. +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 .. + 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 ` +; ---------------------------------------------------------------------------- +ConfigOtherPressVec: + 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 ). + 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 ` +; ---------------------------------------------------------------------------- +L180C: brk ; 180C 00 . +L180D: + LoadW V212D, L1B79 + jsr L15FF ; 1817 20 FF 15 .. + rts ; 181A 60 ` +; ---------------------------------------------------------------------------- +L181B: + LoadW V212D, L1B89 + jsr L15FF ; 1825 20 FF 15 d .. + rts ; 1828 60 ` +; ---------------------------------------------------------------------------- +L1829: + LoadW V212D, L1B99 + jsr L15DF ; 1833 20 DF 15 .. + rts ; 1836 60 ` +; ---------------------------------------------------------------------------- +L1829_D: + LoadW V212D, L1B99_D + jsr L15DF ; 1833 20 DF 15 .. + rts ; 1836 60 ` +; ---------------------------------------------------------------------------- +.if 0 +L1873: LoadW r0, RAMExpStr + lda #$75 ; 187B A9 75 .u + sta r1H ; 187D 85 05 .. +.ifdef config128 + LoadW r11, $BE + CFG_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 .. + 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 ` +; ---------------------------------------------------------------------------- +RAMExpStr: + .byte $18 ; 18A5 18 . + .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 .. + 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 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 V2104 ; 18D3 8D 04 21 ..! +L18D6: jmp L043E ; 18D6 4C 3E 04 L>. +; ---------------------------------------------------------------------------- + ldx #>SomeTextDlg ; 18D9 A2 18 .. + lda #InfoDlg ; 18EC A2 18 .. + lda #. + LoadW r0, V20D9 + 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 #>CantSaveDlg ; 19CE A2 19 .. + lda #OptNoDrive + .byte >Opt1541 + .byte >OptShadowed1541 + .byte >OptRAM1541 + .byte >Opt1571 + .byte >Opt1581 + .byte >OptShadowed1581 + .byte >OptRAM1571 + .byte >OptRAM1581 + .byte >OptF011 + .byte >OptF011_1 + .byte >OptSD81 + .byte >OptSD71 + .byte >OptF011_V + .byte >OptSD + .byte >OptFloppy + .byte >OptRAM + + +; 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 + +; 1541 +Opt1541: + .byte $01 + .word L1BCE + .word Init1541 +L1BCE: + .byte "1541" ; 1BCE 31 35 34 31 1541 + .byte $00 ; 1BD2 00 . + +; 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 + +; 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 + +; 1571 +Opt1571: + .byte $02 + .word L1BF9 + .word Init1571 + +L1BF9: + .byte "1571" ; 1BF9 31 35 37 31 1571 + .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 + .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 + +; 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 + +; 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 + .byte 0 ; 1C38 00 . + +; F011 +OptF011: + .byte $04 + .word F011Label + .word InitF011 +F011Label: + .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_1 +F011_1Label: + .byte "External 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 InitVirtual +F011_VLabel: + .byte "Virtual" ; 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 . + +; 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 .. +L1C40: rts ; 1C40 60 ` +; ---------------------------------------------------------------------------- +L1C41: lda V212C ; 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 V212C ; 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 V212C ; 1C6F AD 2C 21 .,! + cmp #$81 ; 1C72 C9 81 .. + beq L1C82 ; 1C74 F0 0C .. + bit V212C + bpl L1C85 + 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 V212C ; 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 ` + +; ---------------------------------------------------------------------------- +CheckF011_1: + lda V212C ; 1C88 AD 2C 21 .,! + 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 + 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 .,! + cmp #DRV_SD_71 + beq L1C96 + cmp #DRV_SD_81 + beq L1C96 + cmp #0 + bne L1C96 +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 + rts + +CheckSD71: lda V212C ; 1C88 AD 2C 21 .,! + cmp #DRV_SD_81 + beq ShowSD71 + cmp #DRV_SD_71 + 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 .. + + ; check if Floppy is already selected + ldy #0 +@1: + lda driveType,y + cmp #DRV_F011_0 + beq NoF011 + 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 ` +; ---------------------------------------------------------------------------- +NoF011: ldy #$00 ; 1C96 A0 00 .. + rts ; 1C98 60 ` + +; ---------------------------------------------------------------------------- +L1C99: lda V212C ; 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 ` +; ---------------------------------------------------------------------------- +.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 .. + 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 + +.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 .. + beq L1CD6 ; 1CC8 F0 0C .. + bit V212C + bpl L1CD9 + 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 V212C ; 1CDC AD 2C 21 .,! + cmp #$83 ; 1CDF C9 83 .. + beq L1CEF ; 1CE1 F0 0C .. + bit V212C + bpl L1CF2 + 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 ` + +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 .,! + beq L1D27 ; 1CF8 F0 2D .- + 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 +L1D08: sta L1D9A ; 1D08 8D 9A 1D ... + ldx #>UnplugDlg ; 1D0B A2 1D .. + lda #. + 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 . +SetupDrive: + lda #$00 ; 1E05 A9 00 .. + sta L1E04 ; 1E07 8D 04 1E ... + lda V212B ; 1E0A AD 2B 21 .+! + cmp #$0A ; 1E0D C9 0A .. + bcc SetupDriveAB ; 1E0F 90 03 .. + jmp SetupDriveC ; 1E11 4C B4 1E L.. +; ---------------------------------------------------------------------------- +SetupDriveAB: lda #$00 ; 1E14 A9 00 .. + sta L1E04 ; 1E16 8D 04 1E ... + + ; 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 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 . + 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 Init ; 1E53 20 C5 1F .. + jsr PurgeTurbo ; 1E56 20 35 C2 5. +L1E59: ldx #>PluginDlg ; 1E59 A2 1F .. + lda #. + lda L1E04 ; 1EE5 AD 04 1E ... + jsr Init ; 1EE8 20 C5 1F .. + jsr PurgeTurbo ; 1EEB 20 35 C2 5. +L1EEE: ldx #>PluginDlg2 ; 1EEE A2 1F .. + lda #. + 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 V2550 ; 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. +; ---------------------------------------------------------------------------- +L203D: + ldx #$04 ; 203D A2 04 .. + jsr L204B ; 203F 20 4B 20 K + LoadW r0, L1A37 + rts ; 204A 60 ` +; ---------------------------------------------------------------------------- +L204B: stx V2550 ; 204B 8E 50 25 .P% + ldx V2550 ; 204E AE 50 25 .P% + jmp L205B ; 2051 4C 5B 20 L[ +; ---------------------------------------------------------------------------- +ConfigRecoverVector: + ldx V2550 ; 2054 AE 50 25 .P% +.ifdef config128 + cpx #$FF ; 20BA E0 FF .. + beq L20C6 ; 20BC F0 08 .. + jsr L20D4 ; 20BE 20 D4 20 . +L20C1: lda #$FF ; 20C1 A9 FF .. + sta V2550 ; 20C3 8D EB 27 ..' +L20C6: +.else + jsr L2060 ; 2057 20 60 20 ` +.endif + rts ; 205A 60 ` +; ---------------------------------------------------------------------------- +.ifdef config128 +L205B: +L20C7: jsr L2241 ; 20C7 20 41 22 A" + jsr L2189 ; 20CA 20 89 21 .! + ldy #$00 ; 20CD A0 00 .. + tya ; 20CF 98 . + 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: +.ifndef mega65 + bit graphMode ; 20DC 24 3F $? + bmi L2115 ; 20DE 30 35 05 +.endif + sta r4H ; 20E0 85 0B .. +.else + +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 . +.endif + 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 . + 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: +.ifndef config128 + inc r1L ; 2087 E6 04 .. + bne L208D ; 2089 D0 02 .. + inc r1H ; 208B E6 05 .. +.endif +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 .. + 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 ` + +.ifdef config128 + +; ---------------------------------------------------------------------------- +.ifndef mega65 +L2115: pha ; 2115 48 H + txa ; 2116 8A . + pha ; 2117 48 H + jsr TempHideMouse ; 2118 20 D7 C2 .. + pla ; 211B 68 h + tax ; 211C AA . + pla ; 211D 68 h + sta r4H ; 211E 85 0B .. + jsr L2241 ; 2120 20 41 22 A" +L2123: ldx r2H ; 2123 A6 07 .. + jsr GetScanLine ; 2125 20 3C C1 <. + lda r4H ; 2128 A5 0B .. + ora #$40 ; 212A 09 40 .@ + sta r4H ; 212C 85 0B .. + lda r2L ; 212E A5 06 .. + clc ; 2130 18 . + adc r5L ; 2131 65 0C e. + sta r5L ; 2133 85 0C .. + bcc L2139 ; 2135 90 02 .. + inc r5H ; 2137 E6 0D .. +L2139: ldy #$00 ; 2139 A0 00 .. + lda r3L ; 213B A5 08 .. + sta r4L ; 213D 85 0A .. +L213F: bit r4H ; 213F 24 0B $. + bpl L2149 ; 2141 10 06 .. + jsr L217B ; 2143 20 7B 21 {! + clv ; 2146 B8 . + bvc L214C ; 2147 50 03 P. +L2149: jsr L2169 ; 2149 20 69 21 i! +L214C: inc r1L ; 214C E6 04 .. + bne L2152 ; 214E D0 02 .. + inc r1H ; 2150 E6 05 .. +L2152: inc r5L ; 2152 E6 0C .. + bne L2158 ; 2154 D0 02 .. + inc r5H ; 2156 E6 0D .. +L2158: lda r4H ; 2158 A5 0B .. + and #$BF ; 215A 29 BF ). + sta r4H ; 215C 85 0B .. + dec r4L ; 215E C6 0A .. + bne L213F ; 2160 D0 DD .. + inc r2H ; 2162 E6 07 .. + dec r3H ; 2164 C6 09 .. + bne L2123 ; 2166 D0 BB .. + rts ; 2168 60 ` +; ---------------------------------------------------------------------------- +L2169: bit r4H ; 2169 24 0B $. + bvc L2173 ; 216B 50 06 P. + jsr L22E1 ; 216D 20 E1 22 ." + clv ; 2170 B8 . + bvc L2176 ; 2171 50 03 P. +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: +;L217B: +;L2189: +;L2241: +;L205B: + +.else + + +; ---------------------------------------------------------------------------- +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: LoadW r1, V2551 + + 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 . +.endif + +.ifdef config128 +.ifndef mega65 +; ---------------------------------------------------------------------------- +L217B: ldy #$00 ; 217B A0 00 .. + lda (r1L),y ; 217D B1 04 .. + bit r4H ; 217F 24 0B $. + bvc L2186 ; 2181 50 03 P. + jmp L226B ; 2183 4C 6B 22 Lk" + +; ---------------------------------------------------------------------------- +L2186: jmp L22BD ; 2186 4C BD 22 L." +.endif +; ---------------------------------------------------------------------------- +L2189: lda r1H ; 2189 A5 05 .. + sta r7H ; 218B 85 11 .. + lda r1L ; 218D A5 04 .. + sta r7L ; 218F 85 10 .. + inc r1L ; 2191 E6 04 .. + bne L2197 ; 2193 D0 02 .. + inc r1H ; 2195 E6 05 .. +L2197: rts ; 2197 60 ` + +; ---------------------------------------------------------------------------- +; uncompress for recovery + +L20A0: +L2198: tya ; 2198 98 . + pha ; 2199 48 H + lda r1H ; 219A A5 05 .. + cmp #$3C ; 219C C9 3C .< + bcs L21FB ; 219E B0 5B .[ + lda (r5L),y ; 21A0 B1 0C .. + tax ; 21A2 AA . + ldy #$00 ; 21A3 A0 00 .. + cpx #$00 ; 21A5 E0 00 .. + bne L21C5 ; 21A7 D0 1C .. + lda (r7L),y ; 21A9 B1 10 .. + bmi L21B1 ; 21AB 30 04 0. + cmp #$7F ; 21AD C9 7F .. + bne L21F4 ; 21AF D0 43 .C +L21B1: lda r1H ; 21B1 A5 05 .. + sta r7H ; 21B3 85 11 .. + lda r1L ; 21B5 A5 04 .. + sta r7L ; 21B7 85 10 .. + inc r1L ; 21B9 E6 04 .. + bne L21BF ; 21BB D0 02 .. + inc r1H ; 21BD E6 05 .. +L21BF: lda #$00 ; 21BF A9 00 .. + sta (r7L),y ; 21C1 91 10 .. + beq L21F4 ; 21C3 F0 2F ./ +L21C5: lda (r7L),y ; 21C5 B1 10 .. + bpl L21D9 ; 21C7 10 10 .. + cmp #$FF ; 21C9 C9 FF .. + beq L21D9 ; 21CB F0 0C .. +L21CD: txa ; 21CD 8A . + sta (r1L),y ; 21CE 91 04 .. + inc r1L ; 21D0 E6 04 .. + bne L21D6 ; 21D2 D0 02 .. + inc r1H ; 21D4 E6 05 .. +L21D6: clv ; 21D6 B8 . + bvc L21F4 ; 21D7 50 1B P. +L21D9: lda r1H ; 21D9 A5 05 .. + sta r7H ; 21DB 85 11 .. + lda r1L ; 21DD A5 04 .. + sta r7L ; 21DF 85 10 .. + inc r1L ; 21E1 E6 04 .. + bne L21E7 ; 21E3 D0 02 .. + inc r1H ; 21E5 E6 05 .. +L21E7: lda #$80 ; 21E7 A9 80 .. + sta (r7L),y ; 21E9 91 10 .. + lda r1H ; 21EB A5 05 .. + cmp #$3C ; 21ED C9 3C .< + bcs L21FB ; 21EF B0 0A .. + clv ; 21F1 B8 . + bvc L21CD ; 21F2 50 D9 P. +L21F4: lda (r7L),y ; 21F4 B1 10 .. + clc ; 21F6 18 . + adc #$01 ; 21F7 69 01 i. + sta (r7L),y ; 21F9 91 10 .. +L21FB: pla ; 21FB 68 h + rts ; 21FC 60 ` + +; ---------------------------------------------------------------------------- +; save foreground area with compress + +L20AC: +L21FD: tya ; 21FD 98 . + pha ; 21FE 48 H +L21FF: ldy #$00 ; 21FF A0 00 .. + lda (r7L),y ; 2201 B1 10 .. + and #$7F ; 2203 29 7F ). + bne L2218 ; 2205 D0 11 .. + lda r1H ; 2207 A5 05 .. + sta r7H ; 2209 85 11 .. + lda r1L ; 220B A5 04 .. + sta r7L ; 220D 85 10 .. + inc r1L ; 220F E6 04 .. + bne L2215 ; 2211 D0 02 .. + inc r1H ; 2213 E6 05 .. +L2215: clv ; 2215 B8 . + bvc L21FF ; 2216 50 E7 P. +L2218: ldx #$00 ; 2218 A2 00 .. + lda r1H ; 221A A5 05 .. + cmp #$3C ; 221C C9 3C .< + beq L223A ; 221E F0 1A .. + lda (r7L),y ; 2220 B1 10 .. + bmi L2228 ; 2222 30 04 0. + lda #$00 ; 2224 A9 00 .. + beq L2232 ; 2226 F0 0A .. +L2228: lda (r1L),y ; 2228 B1 04 .. + pha ; 222A 48 H + inc r1L ; 222B E6 04 .. + bne L2231 ; 222D D0 02 .. + inc r1H ; 222F E6 05 .. +L2231: pla ; 2231 68 h +L2232: tax ; 2232 AA . + lda (r7L),y ; 2233 B1 10 .. + sec ; 2235 38 8 + sbc #$01 ; 2236 E9 01 .. + sta (r7L),y ; 2238 91 10 .. +L223A: pla ; 223A 68 h + tay ; 223B A8 . + txa ; 223C 8A . + sta (r5L),y ; 223D 91 0C .. + tya ; 223F 98 . + rts ; 2240 60 ` + +; ---------------------------------------------------------------------------- +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 .. + sta r1H ; 2249 85 05 .. + lda #$00 ; 224B A9 00 .. + sta r1L ; 224D 85 04 .. + clv ; 224F B8 . + bvc L225A ; 2250 50 08 P. +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 ... + inx ; 2262 E8 . + iny ; 2263 C8 . + cpy #$04 ; 2264 C0 04 .. + bne L225C ; 2266 D0 F4 .. + pla ; 2268 68 h + tax ; 2269 AA . + rts ; 226A 60 ` + +.ifndef mega65 +; ---------------------------------------------------------------------------- +L226B: bit graphMode ; 226B 24 3F $? + bmi L2274 ; 226D 30 05 0. + ldy #$00 ; 226F A0 00 .. + sta (r5L),y ; 2271 91 0C .. + rts ; 2273 60 ` + +; ---------------------------------------------------------------------------- +L2274: stx L22A3 ; 2274 8E A3 22 .." + ldx #$12 ; 2277 A2 12 .. + stx vdcreg ; 2279 8E 00 D6 ... +L227C: bit vdcreg ; 227C 2C 00 D6 ,.. + bpl L227C ; 227F 10 FB .. + ldx r5H ; 2281 A6 0D .. + stx vdcdata ; 2283 8E 01 D6 ... + ldx #$13 ; 2286 A2 13 .. + stx vdcreg ; 2288 8E 00 D6 ... +L228B: bit vdcreg ; 228B 2C 00 D6 ,.. + bpl L228B ; 228E 10 FB .. + ldx r5L ; 2290 A6 0C .. + stx vdcdata ; 2292 8E 01 D6 ... + ldx #$1F ; 2295 A2 1F .. + stx vdcreg ; 2297 8E 00 D6 ... +L229A: bit vdcreg ; 229A 2C 00 D6 ,.. + bpl L229A ; 229D 10 FB .. + sta vdcdata ; 229F 8D 01 D6 ... + .byte $A2 ; 22A2 A2 . +L22A3: brk ; 22A3 00 . + rts ; 22A4 60 ` + +; ---------------------------------------------------------------------------- + stx vdcreg ; 22A5 8E 00 D6 ... +L22A8: bit vdcreg ; 22A8 2C 00 D6 ,.. + bpl L22A8 ; 22AB 10 FB .. + sta vdcdata ; 22AD 8D 01 D6 ... + rts ; 22B0 60 ` + +; ---------------------------------------------------------------------------- + stx vdcreg ; 22B1 8E 00 D6 ... +L22B4: bit vdcreg ; 22B4 2C 00 D6 ,.. + bpl L22B4 ; 22B7 10 FB .. + lda vdcdata ; 22B9 AD 01 D6 ... + rts ; 22BC 60 ` + +; ---------------------------------------------------------------------------- +L22BD: bit graphMode ; 22BD 24 3F $? + bmi L22C6 ; 22BF 30 05 0. + ldy #$00 ; 22C1 A0 00 .. + sta (r5L),y ; 22C3 91 0C .. + rts ; 22C5 60 ` + +; ---------------------------------------------------------------------------- +L22C6: bit vdcreg ; 22C6 2C 00 D6 ,.. + bpl L22C6 ; 22C9 10 FB .. + sta vdcdata ; 22CB 8D 01 D6 ... + rts ; 22CE 60 ` + +; ---------------------------------------------------------------------------- +L22CF: bit graphMode ; 22CF 24 3F $? + bmi L22D8 ; 22D1 30 05 0. + ldy #$00 ; 22D3 A0 00 .. + lda (r5L),y ; 22D5 B1 0C .. + rts ; 22D7 60 ` + +; ---------------------------------------------------------------------------- +L22D8: bit vdcreg ; 22D8 2C 00 D6 ,.. + bpl L22D8 ; 22DB 10 FB .. + lda vdcdata ; 22DD AD 01 D6 ... + rts ; 22E0 60 ` + +; ---------------------------------------------------------------------------- +L22E1: bit graphMode ; 22E1 24 3F $? + bmi L22EA ; 22E3 30 05 0. + ldy #$00 ; 22E5 A0 00 .. + lda (r5L),y ; 22E7 B1 0C .. + rts ; 22E9 60 ` + +; ---------------------------------------------------------------------------- +L22EA: stx L233B ; 22EA 8E 3B 23 .;# + ldx #$AD ; 22ED A2 AD .. + bne L230F ; 22EF D0 1E .. + bit graphMode ; 22F1 24 3F $? + bmi L22FA ; 22F3 30 05 0. + ldy #$00 ; 22F5 A0 00 .. + ora (r5L),y ; 22F7 11 0C .. + rts ; 22F9 60 ` + +; ---------------------------------------------------------------------------- +L22FA: stx L233B ; 22FA 8E 3B 23 .;# + ldx #$0D ; 22FD A2 0D .. + bne L230F ; 22FF D0 0E .. + bit graphMode ; 2301 24 3F $? + bmi L230A ; 2303 30 05 0. + ldy #$00 ; 2305 A0 00 .. + and (r5L),y ; 2307 31 0C 1. + rts ; 2309 60 ` + +; ---------------------------------------------------------------------------- +L230A: stx L233B ; 230A 8E 3B 23 .;# + ldx #$2D ; 230D A2 2D .- +L230F: stx L233C ; 230F 8E 3C 23 .<# + ldx #$12 ; 2312 A2 12 .. + stx vdcreg ; 2314 8E 00 D6 ... +L2317: bit vdcreg ; 2317 2C 00 D6 ,.. + bpl L2317 ; 231A 10 FB .. + ldx r5H ; 231C A6 0D .. + stx vdcdata ; 231E 8E 01 D6 ... + ldx #$13 ; 2321 A2 13 .. + stx vdcreg ; 2323 8E 00 D6 ... +L2326: bit vdcreg ; 2326 2C 00 D6 ,.. + bpl L2326 ; 2329 10 FB .. + ldx r5L ; 232B A6 0C .. + stx vdcdata ; 232D 8E 01 D6 ... + ldx #$1F ; 2330 A2 1F .. + stx vdcreg ; 2332 8E 00 D6 ... +L2335: bit vdcreg ; 2335 2C 00 D6 ,.. + bpl L2335 ; 2338 10 FB .. + .byte $A2 ; 233A A2 . +L233B: brk ; 233B 00 . +L233C: lda vdcdata ; 233C AD 01 D6 ... + rts ; 233F 60 ` + +.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 .. +L2346: lda L235C,y ; 2346 B9 5C 23 .\# + sta L236C,y ; 2349 99 6C 23 .l# + dey ; 234C 88 . + bpl L2346 ; 234D 10 F7 .. + rts ; 234F 60 ` + +; ---------------------------------------------------------------------------- +L2350: ldy #$07 ; 2350 A0 07 .. +L2352: lda L2364,y ; 2352 B9 64 23 .d# + sta L236C,y ; 2355 99 6C 23 .l# + 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 .., + .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 + brk ; 2368 00 . + asl $2C1C ; 2369 0E 1C 2C .., +L236C: php ; 236C 08 . + jsr L6819 ; 236D 20 19 68 .h + brk ; 2370 00 . + asl $2C0E ; 2371 0E 0E 2C .., +.endif + + +;L2340: + +VarStart: +V20D9 = VarStart +V20F2 = V20D9 + 25 +V20FA = V20D9 + 33 +V20EA = V20D9 + 17 +V2102 = V20D9 + 17 + 24 +V2103 = V2102 + 1 + +VarImageFileName = V2103 + 1 + +V2104 = VarImageFileName + 64 +V2105 = V2104 + 1 ;+ 35 + 1 +V2106 = V2105 + 1 +V2107 = V2106 + 1 +V2108 = V2107 + 1 +V2108a = V2108 + 1 +V2109 = V2108a + 1 +V210A = V2109 + 1 +V212A = V210A + 1 + 30 + 1 +V212B = V212A + 1 +V212C = V212B + 1 +V212D = V212C + 1 +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 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..e03fdb28 --- /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..1f9928d6 --- /dev/null +++ b/configure/r5.s @@ -0,0 +1,6 @@ +.SEGMENT "OVERLAY5" +.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 new file mode 100644 index 00000000..9ff36671 --- /dev/null +++ b/configure/r6.s @@ -0,0 +1,10 @@ +.SEGMENT "OVERLAY6" +.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..d2eba0dd --- /dev/null +++ b/drv/_drv1581_21hd.s @@ -0,0 +1,2146 @@ +; 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 nmivec+1 + lda #D_NMIHandler sta nmivec+1 lda #EnterCommand lda #Drv_ReadSec lda #D_IRQHandler sta irqvec+1 +.if .defined(config128) & (!.defined(mega65)) + sta nmivec+1 +.endif lda #D_NMIHandler sta nmivec+1 lda #EnterCommand lda #Drv_NewDisk @@ -1119,16 +1205,27 @@ NewDsk2: __ReadBlock: _ReadLink: jsr CheckParams - bcc RdLink1 + bcc RdLink1_ +.if .defined(config128) & (!.defined(mega65)) + 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_: +.if .defined(config128) & (!.defined(mega65)) + txa + bne RdLink1 + jsr DoCacheRead +.endif + RdLink1: ldy #0 rts @@ -1175,7 +1272,11 @@ VWrBlock1: cpx #0 bne VWrBlock2 tax +.ifdef config128 + beq VWrBlock3_ +.else beq VWrBlock3 +.endif ldx #$25 VWrBlock2: dec tryCount @@ -1192,6 +1293,11 @@ VWrBlock2: VWrBlock3: rts +VWrBlock3_: +.if .defined(config128) & (!.defined(mega65)) + 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 #" ; 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 #. +_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 +.if (!.defined(config128)) || (.defined(mega65)) + 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 .. +.endif + 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. + 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 ... + lda #$7F ; 9502 A9 7F .. + sta grirq ; 9504 8D 19 D0 ... + sta $DC0D ; 9507 8D 0D DC ... + sta $DD0D ; 950A 8D 0D DD ... + LoadW $0314, Interrupt +.if .defined(config128) && (!.defined(mega65)) + LoadW $0318, Interrupt +.else + LoadW $0318, InterruptNMI +.endif + 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 ` + +; ---------------------------------------------------------------------------- +Interrupt: +.if .defined(config128) && (!.defined(mega65)) + pla + sta $ff00 +.endif + pla ; 954F 68 h + tay ; 9550 A8 . + pla ; 9551 68 h + tax ; 9552 AA . + pla ; 9553 68 h +InterruptNMI: + 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 #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 + 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.. + + 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 + 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 + pha + tay ; 964B A8 . + jsr DoRAMOp ; 964C 20 D4 C2 .. + 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 + 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 . +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 + ; 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/drv/drvf011.s b/drv/drvf011.s index 80a567a6..14ee4716 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 @@ -86,6 +101,7 @@ _ReadBuff: __GetBlock: JSR InitForIO JSR ReadBlock + JSR DoneWithIO TXA @@ -145,7 +161,6 @@ CheckParams: JSR DoCacheVerify BEQ CheckParams_2 CheckParams_1: - LDA #0 ;90dc STA errCount LDX #INV_TRACK @@ -165,6 +180,10 @@ __OpenDisk: ;90ba STA tmpDriveType AND #%10111111 STA _driveType,y + + lda #128 + sta curtrk + JSR NewDisk bnex OpenDsk1 JSR GetDirHead @@ -286,7 +305,8 @@ SetCurDHVec: LoadW r5, curDirHead ;9230 RTS -_Get1stDirEntry: ;9239 +_Get1stDirEntry: + ;9239 JSR SetDirHead_3 INC r1H LoadB borderFlag, 0 @@ -620,20 +640,48 @@ __InitForIO: ;95c6 PLA 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 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 #$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 ;write enable f011 drive one + ora #$24 + sta $d68b + + jsr HyperRestore + +@3: + ;bra @3 +.endif +@1b: RTS + +D_IRQHandler: +.if .defined(config128) &(!.defined(mega65)) + pla + sta $ff00 +.endif + pla + tay + pla + tax + pla +D_NMIHandler: + rti __DoneWithIO: SEI + ldy curType + cpy #DRV_F011_1 + beq @1a + cpy #DRV_F011_0 + bne @1 +@1a: + ;jsr _WaitReady + lda control_store + and #%10011111 + jsr _ControlReg + ;jsr _MotorDelay + ;lda #128 + ;sta curtrk +@1: LDA tmpclkreg STA clkreg LDA tmpmobenble @@ -667,52 +788,410 @@ __DoneWithIO: LDA cia2base+13 LDA tmpgrirqen STA grirqen +;.ifndef mega65 + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + lda $d031 + ora #$40 + sta $d031 +;.endif +;.ifndef mega65 LDA tmpCPU_DATA + cmp #RAM_64K + bne @2 + lda #IO_IN +@2: STA CPU_DATA + LoadB CPU_DATA, IO_IN +;.endif LDA tmpPS PHA PLP RTS +_EnsureImageMounted: + ; 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 @6000 + + ; 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 + and #%00100000 + bne @5002 ; drive 0 is swapped, so it is external + + ; drive 0 is internal floppy + cpy #DRV_F011_0 + bne @6000 + + bra @9002 + +@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 ; branch if unmounted + and #$01 + beq @6000 + + + LoadB mountDrive, 0 + + ; check if expected mount + ; check if something already has been mounted + lda remountNeeded + bmi @7000 + + 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 + bra @9010 + +@6002: + ; drive 1 not virual, check floppy + lda $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: + + lda $D689 + and #%00100000 + bne @6003 ; drive 1 is swapped, so it is internal + + ; drive 1 is external floppy + cpy #DRV_F011_1 + bne @7000 + + bra @9010 + +@6003: + ; drive 1 is internal floppy + cpy #DRV_F011_0 + bne @7000 + + bra @9010 + +@6011: + ; drive 1 is sd mount + inc mountCount + cpy #DRV_SD_81 + bne @7000 + + lda $D68B + and #$02 + beq @7000 + + LoadB mountDrive, 1 + + ; check if expected mount + ; check if something already has been mounted + lda remountNeeded + bmi @7000 + + ldy #3 +@6007: + lda $D690,y + cmp currentImageCluster,y + bne @6091 + dey + bpl @6007 +@9010: + lda #1 +@9000: + sta mountDrive + jmp @1b + +@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 + jmp @1b + + + ; failed to init a proper drive +@7004: + LoadB imageMounted, STATE_FAILED + ldx #NO_SYNC + sec + rts + +@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 + ;; 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 + 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 + ora #$24 + sta $d68b + + ; remember cluster + ldy #0 + sty remountNeeded + ldx #0 + lda mountDrive + cmp #0 + beq @8003 + ldx #4 +@8003: + 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 + + lda control_store + and #$FE + ora mountDrive + sta $D080 + sta control_store +@1: + clc + rts + _ReadLink: ;98cf __ReadBlock: ;98e4 - JSR CheckParams_1 - BCC _ReadBlockEnd + JSR CheckParams_1 + bcs @1 + jmp _ReadBlockEnd +@1: bbrf 6, curType, _ReadBlockCont1 JSR DoCacheRead - BNE _ReadBlockEnd + BEQ @1b + jmp _ReadBlockEnd +@1b: _ReadBlockCont1: ; Read sector from disk JSR _SetOperation ; set - BCS @1 - LDA #$01 - STA $D081 + BCC @1c +@1d: + jmp _ReadBlockEnd +@1c: + jsr _WaitReady + lda #$01 + sta $D081 + jsr _WaitReady LDA #$40 STA $D081 + jsr __waitAbit + +.if USE_BLOCK_DMA + jsr _WaitReady +.endif @3: LDA $D082 AND #$10 BNE @2 +.ifndef USE_BLOCK_DMA LDA $D083 BPL @3 +.endif + bra @1a @2: -@1: + sec + jmp _ReadBlockEnd +@1a: + +.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 _ReadByte + JSR _ReadByteSlow INY BNE @5 +.endif @4: +.ifdef USE_BLOCK_DMA + ; get first half + LoadB dmalist_from+1, $60 +@do_dma: + lda #>dmalist + ldy #= 20 LDA #$00 ROL - EOR #1 + ;EOR #1 STA $D086 ; side - EOR #1 + ;EOR #1 BEQ @1 LDA #$14 @1: @@ -793,9 +1301,192 @@ _SetOperation: ROR STA evenFlag + lda curType + cmp #DRV_F011_0 + beq @real + cmp #DRV_F011_1 + bne @2 + +@real: + 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 #$01 + bne @step +@6: + ; seek the Track + ldx #0 + lda curtrk + bpl @1 + lda #$10 ; stin + +@3: + lsr $D082 ; stata + bcs @2 + jsr _ExecCommand + inx + cpx #100 ; if drive not present + ; seeking 100 should not find + ; track 0 + bne @3 + ldx #DEV_NOT_FOUND + bra @err +@2: + jsr _SettleHead + lda #0 + sta curtrk +@1: + clc + rts +@step: + ; using dskchg/rdy to detect inserted disk + ; if unready step may force it to enter ready + ; otherwise no disc is inserted + lda #128 + sta curtrk + lda #$10 ; stin + jsr _ExecCommand + + LDX #$21 ; "no formated disk" + lda $D083 ;statb + and #$01 + beq @6 +@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 + bra @5 +@1: + tya + beq @2 + jsr _SettleHead +@2: + rts + +_ControlReg: + and #$FE + pha + ;jsr _CheckDC +.if 0 + lda curType + cmp #DRV_F011_V + beq @4 + lda #3 + bra @5 +@4: + lda #2 +@5: + tsb $D080 ; control +.endif + jsr _WaitReady + + lda curType + cmp #DRV_F011_V + beq @2 + pla + ora #1 + bra @3 +@2: + pla +@3: + 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 + 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: @@ -827,6 +1518,16 @@ _DriveReady: SEC RTS +__waitAbit: + ldy #$28 + ldx #0 +@aa: + DEX + bne @aa + dey + bne @aa + jmp _WaitReady + __WriteBlock: ;9960 JSR CheckParams BCC _WriteBlockEnd @@ -837,45 +1538,58 @@ __WriteBlock: ;9960 JSR _SetOperation ; set track, side, sector BCS _WriteBlockEnd + ldx #WR_PR_ON JSR _DriveReady ; drive ready, not wrote protect BCS _WriteBlockEnd - LDA #$40 + lda #$01 + sta $D081 + jsr _WaitReady + + LDA #$46 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 + + lda $D080 + LDY evenFlag + BEQ @111 + ora #%00010000 ; second: set F011C's 'swap' flag + bra @112 +@111: and #%11101111 ; first: clear F011C's 'swap' flag [910417] +@112: + sta $D080 ; (but don't affect control_store!) + jsr _WaitReady + + ldy #0 @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 $D080 + and #%11101111 ; Reset chip buffer pointers + sta $D080 ; control + lda #$01 + sta $D081 + LDA #$80 JSR _ExecCommand ; write sector + JSR _CheckResult ; Test wether read or write succeed? + ; 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? - +.if 1 + ;LDA #$40 ; read command + ;JSR _ExecCommand ; execute FDC command + ;JSR _CheckResult ; Test wether read or write succeed? +.endif LDX #0 _WriteBlockEnd: @@ -887,6 +1601,15 @@ __VerWriteBlock: ;998f LDX #0 bbrf 6, curType, VWrBlock3 JMP DoCacheWrite + +_DoDMA: + sta $d701 + lda #0 + sta $d702 + sta $d704 ; enhanced bank + sty $d705 + ; fallthrough + VWrBlock3: RTS ;9886 @@ -895,6 +1618,11 @@ __ChangeDiskDevice: 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: @@ -1006,6 +1734,102 @@ E9C4C: BNE E9C4C RTS +HyperSave: + ldx #0 +@1: + lda $CE00,x + sta HyperBuffer, x + inx + bne @1 + rts + +HyperRestore: + ldx #0 +@1: + lda HyperBuffer, x + sta $CE00,x + inx + bne @1 + rts + +imageMounted: + .byte 0 ; TRUE (!= 0) if mount + ; has been resolved after + ; InitForIO or change + ; of image/cluster configuration + +_SetImageFile: + ldx #r0 + LoadW r1, currentImageName + ldy #r1 + jsr CopyString + LoadW currentImageCluster, $FFFF + LoadW currentImageCluster+2, $FFFF + sta remountNeeded + LoadB imageMounted, 0 + jmp _SaveDriver + +_SetImageCluster: + MoveW r0, currentImageCluster + MoveW r1, currentImageCluster+2 + LoadB imageMounted, 0 + lda #0 + sta remountNeeded + sta currentImageName + jmp _SaveDriver + +_GetImageFile: + LoadW r0, currentImageName + rts + +driverRAMStartLow: + .byte <($8300) + .byte <($8300+DISK_DRV_LGH) + .byte <($8300+DISK_DRV_LGH*2) + .byte <($8300+DISK_DRV_LGH*3) +driverRAMStartHigh: + .byte >($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: + .repeat 64 + .byte 0 + .endrep +mountDrive: + .byte 0 +mountCount: + .byte 0 +remountNeeded: + .byte $FF +HyperBuffer: + .repeat 256 + .byte 0 + .endrep + tmpclkreg: .byte 0 ;9c55 tmpPS: @@ -1028,7 +1852,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 diff --git a/drv/drvf0110.s b/drv/drvf0110.s new file mode 100644 index 00000000..55a59a40 --- /dev/null +++ b/drv/drvf0110.s @@ -0,0 +1,1285 @@ + +;GEOS F1011 disk driver +;reassembled by Maciej 'YTM/Elysium' Witkowiak +;31.08-3.09.2001 +;ported 1581 to F011 for MEGA65 compatiblity +;05.08.2016 - 08.08.2016 + + ;*=DISK_BASE + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "config.inc" +.include "kernal.inc" +.include "jumptab.inc" +.include "c64.inc" + + +; this module is always built with the mega65 variant, so 4510 cpu supported enabled + +.segment "drvf011" + +DriveAddy = $0300 + +dir3Head = $9c80 + +_InitForIO: .word __InitForIO ;9000 +_DoneWithIO: .word __DoneWithIO ;9002 +_ExitTurbo: .word __ExitTurbo ;9004 +_PurgeTurbo: .word __PurgeTurbo ;9006 +_EnterTurbo: .word __EnterTurbo ;9008 +_ChangeDiskDevice: .word __ChangeDiskDevice ;900a +_NewDisk: .word __NewDisk ;900c +_ReadBlock: .word __ReadBlock ;900e +_WriteBlock: .word __WriteBlock ;9010 +_VerWriteBlock: .word __VerWriteBlock ;9012 +_OpenDisk: .word __OpenDisk ;9014 +_GetBlock: .word __GetBlock ;9016 +_PutBlock: .word __PutBlock ;9018 +_GetDirHead: .word __GetDirHead ;901a +_PutDirHead: .word __PutDirHead ;901c +_GetFreeDirBlk: .word __GetFreeDirBlk ;901e +_CalcBlksFree: .word __CalcBlksFree ;9020 +_FreeBlock: .word __FreeBlock ;9022 +_SetNextFree: .word __SetNextFree ;9024 +_FindBAMBit: .word __FindBAMBit ;9026 +_NxtBlkAlloc: .word __NxtBlkAlloc ;9028 +_BlkAlloc: .word __BlkAlloc ;902a +_ChkDkGEOS: .word __ChkDkGEOS ;902c +_SetGEOSDisk: .word __SetGEOSDisk ;902e + +Get1stDirEntry: JMP _Get1stDirEntry ;9030 +GetNxtDirEntry: JMP _GetNxtDirEntry ;9033 +GetBorder: JMP _GetBorder ;9036 +AddDirBlock: JMP _AddDirBlock ;9039 +ReadBuff: JMP _ReadBuff ;903c +WriteBuff: JMP _WriteBuff ;903f + JMP __I9042 ;9042 + JMP GetDOSError ;9045 +AllocateBlock: JMP _AllocateBlock ;9048 +ReadLink: JMP _ReadLink ;904b + +E904E: .byte $03 ;904e + +; ============================================================================== + +evenFlag: .byte 0 + +; ============================================================================== + +__GetDirHead: + JSR SetDirHead_1 ;904f + JSR __GetBlock + BNE GDH_0 + JSR SetDirHead_2 + JSR __GetBlock + BNE GDH_0 + JSR SetDirHead_3 + BNE __GetBlock +GDH_0: + RTS ;9064 + +_ReadBuff: + LoadW r4, diskBlkBuf ;9065 + +__GetBlock: + JSR InitForIO + JSR ReadBlock + + JSR DoneWithIO + + TXA + RTS + +__PutDirHead: ;907d + JSR SetDirHead_1 + JSR __PutBlock + BNE PDH_0 + JSR SetDirHead_2 + JSR __PutBlock + BNE PDH_0 + JSR SetDirHead_3 + BNE __PutBlock +PDH_0: + RTS ;9092 + +_WriteBuff: + LoadW r4, diskBlkBuf ;9093 +__PutBlock: + JSR InitForIO + JSR WriteBlock + bnex PutBlk0 + JSR VerWriteBlock + +PutBlk0: + JSR DoneWithIO ;90ac + + TXA + RTS + +SetDirHead_1: + LDX #>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 + 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 + 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: + 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/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/const.inc b/inc/const.inc old mode 100755 new mode 100644 index f7abe744..ff499ca9 --- 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 @@ -88,11 +96,9 @@ GRBANK2 = %01 GRBANK3 = %00 ; screen -VIC_X_POS_OFF = 24 -VIC_Y_POS_OFF = 50 SC_BYTE_WIDTH = 40 SC_PIX_HEIGHT = 200 -SC_PIX_WIDTH = 320 +SC_PIX_WIDTH = 720 SC_SIZE = 8000 ; 128 screen size constants SCREENBYTEWIDTH = 80 @@ -437,3 +443,17 @@ ARROW = 0 ; pass this to SetMsePic GR_40 = 0 ; use these two to test GR_80 = $80 ; graphMode + +; high resolution +HIGH_Y_MASK = %00011111 + +SC_FROM_END = %111100000000 +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/inc/diskdrv.inc b/inc/diskdrv.inc old mode 100755 new mode 100644 index 96980395..b8ac57c9 --- 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/inc/geosmac.inc b/inc/geosmac.inc old mode 100755 new mode 100644 index e75f4c42..238f1b7d --- 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 @@ -155,7 +180,7 @@ CmpB source+0, dest+0 @j: .endmacro - + .macro CmpWI source, immed .local @j CmpBI source+1, >(immed) @@ -191,6 +216,11 @@ .endmacro .endif +.macro bra_ addr + clv + bvc addr +.endmacro + .macro smb bitN, dest pha lda #1 << bitN @@ -318,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." @@ -344,6 +383,26 @@ PopB config .endmacro .else +.ifdef mega65 +.macro START_IO +ASSERT_NOT_BELOW_IO + LoadB CPU_DATA, IO_IN +.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 @@ -376,3 +435,36 @@ 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 ble addr + beq addr + bcc addr +.endmacro + +.ifdef scalable_coords + +.macro ByteCY xc, yc + .byte ( 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 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; +} diff --git a/input/mse1531.cfg b/input/megaphn.cfg similarity index 66% rename from input/mse1531.cfg rename to input/megaphn.cfg index 60433c7b..61a1018f 100644 --- a/input/mse1531.cfg +++ b/input/megaphn.cfg @@ -3,5 +3,5 @@ MEMORY { } SEGMENTS { - mse1531: load = MOUSE_BASE, type = ro; + 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 diff --git a/input/mse1351.cfg b/input/mse1351.cfg new file mode 100644 index 00000000..b88b5149 --- /dev/null +++ b/input/mse1351.cfg @@ -0,0 +1,7 @@ +MEMORY { + MOUSE_BASE: start = $FE80, size = $0180, file = %O; +} + +SEGMENTS { + 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 88% rename from input/mse1531.s rename to input/mse1351.s index 3a337408..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 @@ -106,14 +111,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 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/128k/swapdiskdriver.s b/kernal/128k/swapdiskdriver.s index bff0fffd..64f3108d 100644 --- a/kernal/128k/swapdiskdriver.s +++ b/kernal/128k/swapdiskdriver.s @@ -14,6 +14,22 @@ .global _SwapDiskDriver _SwapDiskDriver: +.if 0 +.ifdef mega65 + ; use DMAgic for swapping memory + START_IO + + lda #0 + sta $d702 + lda #>swapdddmalist + sta $d701 + lda #_DrawLine, >_DrawPoint, >_TestPoint, >_GraphicsString, >_ImprintRectangle, >_RecoverRectangle, >_InvertRectangle, >_Rectangle, >_RecoverLine diff --git a/kernal/c65/map.s b/kernal/c65/map.s new file mode 100644 index 00000000..d0c23196 --- /dev/null +++ b/kernal/c65/map.s @@ -0,0 +1,412 @@ +; GEOS KERNAL by Berkeley Softworks +; reverse engineered by Michael Steil, Maciej Witkowiak, Falk Rehwagen +; +; C65 memory mapping utils +; +; GEOS for C65 maps 2 memory areas: +; 4000-6000 (Low) Temporarily maps code/data to be used by the kernel (underlay from A000-C000) +; A000-C000 (High) To map to video memory for for and background screen +; +; Depending of how often this will be used, we migt make it macros later on + +.include "const.inc" +.include "geossym.inc" +.include "geosmac.inc" +.include "config.inc" +.include "kernal.inc" +.include "c64.inc" + +.segment "map" + +.global _MapLow +.global _MapHigh +.global _MNLP_DeskAcc + +.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 _MNLP + +.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 +.import __CRC +.import _SetNewMode +.import _GetRealSize +.import _EndScanLine +.import _IsMseInRegion +.import _ProcessMouseInt +.import _SetMsePic + +.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 +.global _map__CRC +.global _map_SetNewMode +.global _map_GetRealSize +.global _map_IsMseInRegion +.global _map_SetMsePic + +.global MapUnderlay +.global UnmapUnderlay + + +;--------------------------------------------------------------- +; MapHigh +; +; 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 #$80 + beq @0 + pha + lda countHighMap + cmp #0 + beq @2 +@1: + jmp @1 +@2: pla + +@0: + sta highMap + stx highMapBnk + lda countHighMap + sta $8895 + jsr ApplyMapping +@done: + rts + + +;--------------------------------------------------------------- +; MapLow +; +; 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: + rts + + +ApplyMapping: + + ; A low offset + ; Y high offest + ; X low map/offset high + ; Z high map/offset hight + + ; config High + lda highMap + asl + pha + lda highMapBnk + rol + ora #$20 + taz + pla + tay + + ; config Low + lda lowMap + asl + pha + lda lowMapBnk + rol + ora #$80 + tax + pla + + map + eom + + rts + +_map_IsMseInRegion: + jsr MapUnderlay + jsr _IsMseInRegion + bra __unmap2 +_map_FollowChain: + jsr MapUnderlay + jsr _FollowChain +__unmap2: + jmp UnmapUnderlay +_map_FindFTypes: + jsr MapUnderlay + jsr _FindFTypes + bra __unmap2 +_map_FindFile: + jsr MapUnderlay + jsr _FindFile + bra __unmap2 +_map_SetDevice: + jsr MapUnderlay + jsr _SetDevice + bra __unmap2 +_map_GetFHdrInfo: + jsr MapUnderlay + jsr _GetFHdrInfo + jmp UnmapUnderlay +_map_LdDeskAcc: + jsr MapUnderlay + jsr _LdDeskAcc + jmp UnmapUnderlay +_MNLP_DeskAcc: + jsr UnmapUnderlay + jmp _MNLP +_map_RstrAppl: + jsr MapUnderlay + 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 MapUnderlay + ;jsr _LdApplic + ;jmp UnmapUnderlay +_map_SaveFile: + jsr MapUnderlay + jsr _SaveFile + jmp UnmapUnderlay +_map_SetGDirEntry: + jsr MapUnderlay + jsr _SetGDirEntry + jmp UnmapUnderlay +_map_BldGDirEntry: + jsr MapUnderlay + jsr _BldGDirEntry + jmp UnmapUnderlay +_map_DeleteFile: + jsr MapUnderlay + jsr _DeleteFile + bra __unmap +_map_FreeFile: + jsr MapUnderlay + jsr _FreeFile + bra __unmap +_map_FastDelFile: + jsr MapUnderlay + jsr _FastDelFile + bra __unmap +_map_RenameFile: + jsr MapUnderlay + jsr _RenameFile + bra __unmap +_map_OpenRecordFile: + jsr MapUnderlay + jsr _OpenRecordFile + bra __unmap +_map_CloseRecordFile: + jsr MapUnderlay + jsr _CloseRecordFile + bra __unmap +_map_UpdateRecordFile: + jsr MapUnderlay + jsr _UpdateRecordFile + bra __unmap +_map_NextRecord: + jsr MapUnderlay + jsr _NextRecord + bra __unmap +_map_PreviousRecord: + jsr MapUnderlay + jsr _PreviousRecord + bra __unmap +_map_PointRecord: + jsr MapUnderlay + jsr _PointRecord + bra __unmap +_map_DeleteRecord: + jsr MapUnderlay + jsr _DeleteRecord + bra __unmap +_map_InsertRecord: + jsr MapUnderlay + jsr _InsertRecord + bra __unmap +_map_AppendRecord: + jsr MapUnderlay + jsr _AppendRecord + bra __unmap +_map_ReadRecord: + jsr MapUnderlay + jsr _ReadRecord + bra __unmap +_map_WriteRecord: + jsr MapUnderlay + jsr _WriteRecord + bra __unmap +_map_ReadByte: + jsr MapUnderlay + jsr _ReadByte + bra __unmap +_map__CRC: + jsr MapUnderlay + jsr __CRC +__unmap: + jmp UnmapUnderlay +_map_SetNewMode: + jsr MapUnderlay + jsr _SetNewMode + jsr UnmapUnderlay + jmp _EndScanLine +_map_GetRealSize: + jsr MapUnderlay + jsr _GetRealSize + bra __unmap +_map_SetMsePic: + jsr MapUnderlay + jsr _SetMsePic + bra __unmap + +MapUnderlay: + pha + txa + pha + tya + pha + tza + pha + lda countHighMap + bne @1 + lda highMap + sta lastHighMap + lda highMapBnk + sta lastHighMapBnk + lda #$80 + ldx #0 + jsr _MapHigh + jmp @2 +@1: lda highMap + cmp #$80 + beq @2 +@3: + brk + ;jmp @3 +@2: + inc countHighMap + bra mapEnd + +UnmapUnderlay: + pha + txa + pha + tya + pha + tza + pha + dec countHighMap + bne @1 + lda lastHighMap + ldx lastHighMapBnk + jsr _MapHigh + lda #$00 + sta lastHighMap + jmp @2 +@1: + lda highMap + cmp #$80 + beq @2 +@3: + jmp @3 + +@2: +mapEnd: + pla + taz + pla + tay + pla + tax + pla + rts diff --git a/kernal/conio/conio1.s b/kernal/conio/conio1.s index 9f6d8f92..cfde0d90 100644 --- a/kernal/conio/conio1.s +++ b/kernal/conio/conio1.s @@ -10,7 +10,7 @@ .include "kernal.inc" .include "c64.inc" -.import _GetRealSize +.import GetRealSize .import FontPutChar .import DoESC_RULER .import _GraphicsString @@ -19,18 +19,38 @@ .import Ddec .import CallRoutine .import NormalizeX +.import NormalizeY .global DoBACKSPC .global _PutChar +.ifdef mega65 +.global _PutChar2 +.endif .global _SmallPutChar .segment "conio1" +.ifdef mega65 _PutChar: -.ifdef bsw128 + 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 jsr NormalizeX + ldx #r11 + ldy #r1H + jsr NormalizeY pla .endif cmp #$20 @@ -45,7 +65,7 @@ _PutChar: ldy r11L sty r13L ldx currentMode - jsr _GetRealSize + jsr GetRealSize dey tya add r13L @@ -53,13 +73,19 @@ _PutChar: bcc @2 inc r13H @2: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) + ldx #rightMargin + ldy #windowBottom + jsr NormalizeY ldx #rightMargin jsr NormalizeX .endif CmpW rightMargin, r13 bcc @5 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) + ldx #leftMargin + ldy #windowTop + jsr NormalizeY ldx #leftMargin jsr NormalizeX .endif @@ -194,7 +220,7 @@ DoPLAINTEXT: DoBACKSPC: ldx currentMode - jsr _GetRealSize + jsr GetRealSize sty PrvCharWidth DoBACKSPACE: SubB PrvCharWidth, r11L diff --git a/kernal/conio/conio3a.s b/kernal/conio/conio3a.s index 30a72a36..f82fd392 100644 --- a/kernal/conio/conio3a.s +++ b/kernal/conio/conio3a.s @@ -11,18 +11,33 @@ .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 -@2: rts - +@1: bra @3 +@2: +.ifdef mega65 + PopB CPU_DATA +.endif + rts diff --git a/kernal/conio/conio3b.s b/kernal/conio/conio3b.s index 3b34642b..c547ddc3 100644 --- a/kernal/conio/conio3b.s +++ b/kernal/conio/conio3b.s @@ -22,6 +22,9 @@ .ifdef bsw128 .import BSWFont80 .endif +.ifdef mega65 +.import BSWFont80 +.endif .ifdef bsw128 ; XXX back bank, yet var lives on front bank! @@ -37,15 +40,21 @@ PrvCharWidth = $880D .segment "conio3b" _UseSystemFont: -.ifdef bsw128 - bbsf 7, graphMode, @X +.if .defined(bsw128) || .defined(mega65) + lda graphMode + bmi @X + cmp #$41 + beq @X LoadW r0, BSWFont bra _LoadCharSet @X: LoadW r0, BSWFont80 .else LoadW r0, BSWFont .endif + _LoadCharSet: + ldx CPU_DATA + LoadB CPU_DATA, RAM_64K ldy #0 @1: lda (r0),y sta baselineOffset,y @@ -63,6 +72,7 @@ _LoadCharSet: sta SerialHiCompare @2: .endif + stx CPU_DATA rts _GetCharWidth: @@ -84,14 +94,22 @@ 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 rts .endif - diff --git a/kernal/conio/conio4.s b/kernal/conio/conio4.s index 71bb03c1..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 @@ -38,9 +39,11 @@ PutString = _PutString .segment "conio4" _GetString: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX + ldy #r1H + jsr NormalizeY .endif MoveW r0, string MoveB r1L, stringMargCtrl diff --git a/kernal/conio/conio6.s b/kernal/conio/conio6.s index 09206293..7235024f 100644 --- a/kernal/conio/conio6.s +++ b/kernal/conio/conio6.s @@ -11,7 +11,11 @@ .include "c64.inc" .import _PutChar -.import _GetRealSize +.ifdef mega65 +.import _PutChar2 +.endif + +.import GetRealSize .import NormalizeX @@ -53,7 +57,7 @@ CalcDecimal: ldx r3L sta Z45,x ldx currentMode - jsr _GetRealSize + jsr GetRealSize tya add r3H sta r3H @@ -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 @@ -96,7 +106,7 @@ _PutDecimal: lda r2L .endif and #$3f -.ifndef bsw128 +.if (!.defined(bsw128)) & (!.defined(mega65)) sub r3H .endif add r11L @@ -104,7 +114,7 @@ _PutDecimal: bcc @X inc r11H @X: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX SubB r3H, r11L @@ -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/debug/main.s b/kernal/debug/main.s new file mode 100644 index 00000000..96af2e59 --- /dev/null +++ b/kernal/debug/main.s @@ -0,0 +1,2410 @@ +; 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 + +TRACE_MODE = 0 +SSTEP_MODE = $80 + +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 +saveR0: + .word 0 +saveR1: + .word 0 +saveR2: + .word 0 +saveR3: + .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 +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 +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 + + + ; 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 + lda #0 + sta u_cl_h + + PushB CPU_DATA + LoadB CPU_DATA, IO_IN + + PushW r0 + MoveW r0, saveR0 + PushW r1 + MoveW r1, saveR1 + PushW r2 + MoveW r2, saveR2 + PushW r3 + MoveW r3, saveR3 + + jsr ResetSingleStep + jsr UpdatePCBreakpoint + + lda initialized + 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: + jsr Prompt + + ; handle the entry + jsr ProcessPrompt + + bcc @HOHO + + ; GO situation + + jsr ExitConsole + + ; restore breakpoint at current PC + jsr RestorePCBreakpoint + + PopW r3 + PopW r2 + PopW r1 + PopW r0 + + PopB CPU_DATA + + MoveW saveIRQ_VECTOR, IRQ_VECTOR + + rts + +welcome: .byte "SuperDebugger V6.0",13,"(C) 2019-20 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 + + PushB CPU_DATA + LoadB CPU_DATA, IO_IN + ldx #0 +@2: + lda r0,x + pha + inx + cpx #32 + bne @2 + + + jsr _DoKeyboardScan + + lda #1 + sta $D019 + + lda cursorCount + beq @7 + ldx #0 + dec cursorCount +@7: + ldx #31 +@6: + pla + sta r0,x + dex + bpl @6 + + PopB CPU_DATA + 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 + +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 + ; 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 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 + tax + iny + lda (r0), y ; get jmp address high + sta r0H + stx r0L + + jmp @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: + cmp #$90 ; BCC + bne @4a + + ldy stackPointer + lda $105+STACK_OFFSET, y + and #1 + beq @3c + lda #$90 + jmp @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 +@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 + + 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 @4d2 + ldy stackPointer + lda $105+STACK_OFFSET, y + and #$02 + beq @3c ; it is zero/equal, branch off + 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 + +@3b: + jsr DebugOpcode_GetLen + + clc + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H +@2: + MoveW r0, r1 + + + jsr ExitConsole + jsr SetupSingleStep + jsr EnterConsole + + 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 + + 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' + 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 +@1: + LoadW r0, syntaxError + jsr PutString + clc + rts +@3: + jmp PrintBreakpoints +@4: + LoadW r0, promptBuf + LoadW r1, stackCommand + jsr StrBeginsWith + beq @4b + + LoadW r0, promptBuf + LoadW r1, setbCommand + jsr StrBeginsWith + beq @4d + + ; assume single step 's' + jmp ProcessSingleStep + +@4d: + clc + tya + adc r0L + sta r0L + lda r0H + adc #0 + sta r0H + + jsr EvalAddrExpr + bcs @1 + jsr ExitConsole + jsr SetBreakpoint + jsr EnterConsole + + clc + rts +@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 + 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 + MoveB r2L, u_cl_h +@6c: + MoveW u_cl, r0 + MoveB u_cl_h, r2L + + ldx #0 +@6b: + txa + pha + jsr DebugOpcode_Print + pla + tax + inx + cpx #20 + bne @6b + + MoveW r0, u_cl + MoveB r2L, u_cl_h + + 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 + MoveB r2L, u_cl_h +@6c: + MoveW u_cl, r0 + + lda #'$' + jsr PutChar + MoveB u_cl_h, r2L + lda r2L + jsr PrintByteHex + lda r0H + jsr PrintByteHex + lda r0L + jsr PrintByteHex + lda #' ' + jsr PutChar + MoveB u_cl_h, r2L + + ldx #0 +@6b: + txa + pha + tay + ;lda (r0), y + jsr GetByteLong + jsr PrintByteHex + lda #' ' + jsr PutChar + pla + tax + inx + cpx #20 + bne @6b + + lda #13 + jsr PutChar + + MoveW r0, u_cl + MoveB r2L, u_cl_h + 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: + 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 + 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 + + lda $D05D + and #%01111111 + sta $D05D + + 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 + + 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 + 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: + sec + rts + +EvalHexWord: + LoadW r1, 0 + LoadB r2L, 0 +@2: + lda (r0), y + beq @5 + cmp #$30 + beq @7 + bcc @1 +@7: + cmp #$3a + bcs @3 + sec + sbc #$30 +@4: + and #%00001111 + 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 + 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 + +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 + +singleStep: + .byte "Single Step!", 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 +stackCommand: + .byte "stack", 0 + .byte "sup!" +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 + jsr GetByte + 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 GetByte + jsr PrintByteHex + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + + jmp @done +@2: + cmp #IMM + bne @3 + + lda #'#' + jsr PutChar + lda #'$' + jsr PutChar + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + jmp @done +@3: + cmp #ZP + bne @4 + + lda #'$' + jsr PutChar + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + + jmp @done + +@4: + cmp #ZPX + bne @5 + + lda #'$' + jsr PutChar + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'X' + jsr PutChar + + jmp @done + +@5: + cmp #ZPY + bne @6 + + lda #'$' + jsr PutChar + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'Y' + jsr PutChar + + jmp @done +@6: + cmp #ABSY + bne @7 + + lda #'$' + jsr PutChar + + ldy #2 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'Y' + jsr PutChar + + jmp @done + +@7: + cmp #ABSX + bne @8 + + lda #'$' + jsr PutChar + + ldy #2 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + + ldy #1 + ;lda (r0), Y + jsr GetByte + jsr PrintByteHex + lda #',' + jsr PutChar + lda #'X' + jsr PutChar + + bra @done +@8: + cmp #BREL + bne @9 + + jsr DebugOpcode_PrintBREL + 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: + cmp #IND + bne @11 + jsr DebugOpcode_PrintIND + bra @done +@11: + +@done: + lda #13 + jsr PutChar + + pla + jsr DebugOpcode_GetLen + + clc + adc r0L + sta r0L + lda r0H + 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: + LoadB r2L, 0 + +GetByteLong: + PushW r0 + PushB r2L + clc + tya + adc r0L + sta r0L + 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 + jmp @3 +@a1: + CmpWI r0, r0+1 + bne @a2 + lda saveR0+1 + 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: + 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 + jmp @3 + +@1: + iny + iny + 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 + CmpWI r0, $6000 + bcc @b5 + CmpWI r0, $8000 + beq @b5 + bcs @b5 +@b7: + PushW r0 + PushW r1 + + lda r0L + sec + sbc #$00 + sta r0L + lda r0H + sbc #$00 + sta r0H + lda #0 + sta r1L + lda #0 + sta r1H + + LDZ #0 + EOM + lda (r0L), Z + tay + + PopW r1 + PopW r0 + + tya + + 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 + +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 + +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/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/dlgbox/dlgbox1c.s b/kernal/dlgbox/dlgbox1c.s index 25dfbc02..7bf4efcb 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 @@ -64,6 +74,7 @@ DlgBoxPrep2: .endif DrawDlgBox: + LoadB dispBufferOn, ST_WR_FORE | ST_WRGS_FORE ldy #0 lda (DBoxDesc),y @@ -80,6 +91,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 @@ -121,18 +134,36 @@ DrwDlgSpd1: jsr SetPattern sec jsr CalcDialogCoords -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) + 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 -@1: lda #0 +@1: + + lda #0 jsr SetPattern clc jsr CalcDialogCoords + bbrf 6, graphMode, @11 + lda rightMargin+1 + and #%11110000 + sta rightMargin + lda r4H + and #%00001111 + ora rightMargin + sta rightMargin+1 + MoveB r4L, rightMargin + bra @12 +@11: MoveW r4, rightMargin +@12: jsr Rectangle .ifndef wheels_size_and_speed ; redundant clc @@ -171,9 +202,23 @@ CalcDialogCoords: PushW DBoxDesc ldy #0 lda (DBoxDesc),y - bpl @2 + bpl @2c LoadW DBoxDesc, DBDefinedPos-1 -@2: ldx #0 + ldy graphMode + bbrf 6, graphMode, @2 + LoadW DBoxDesc, DBDefinedPosScalable-1 +@2c: + ldy graphMode + bmi @2d + cpy #$41 + bne @2b +@2d: + ldy #$80 + bra @2 +@2b: + ldy #0 +@2: sty L8871 + ldx #0 ldy #1 @3: lda (DBoxDesc),y clc @@ -190,7 +235,7 @@ CalcDialogCoords: iny inx lda (DBoxDesc),y - bcc @5 + ;bcc @5 adc #0 @5: sta r2L,x iny @@ -201,7 +246,7 @@ CalcDialogCoords: rts DBDefinedPos: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) MSB = DOUBLE_W .else MSB = 0 @@ -211,6 +256,12 @@ MSB = 0 .word MSB | DEF_DB_LEFT .word MSB | DEF_DB_RIGHT +DBDefinedPosScalable: + 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 jsr Dialog_1 @@ -225,9 +276,10 @@ Dialog_2: START_IO_128 START_IO LoadW r4, dlgBoxRamBuf + jsr MapUnderlay jsr DialogRestore + jsr UnmapUnderlay END_IO_128 END_IO rts .endif - diff --git a/kernal/dlgbox/dlgbox1d.s b/kernal/dlgbox/dlgbox1d.s index ba4c1e42..04e82ab2 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 @@ -162,10 +166,12 @@ DBDoIcons: adc #>DBDefIconsTab sta r5H jsr DBIconsHelp1 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) 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 @@ -188,20 +194,65 @@ 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) + bbsf 6, graphMode, @2 + 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 @@ -220,8 +271,11 @@ DBIconsHelp2: cpy #2 bne @2 lda r3L -.ifdef bsw128 - ora L8871 +.if .defined(bsw128) || .defined(mega65) + bit L8871 + bpl @2b + asl r3L +@2b: .endif @2: cpy #3 bne @3 @@ -232,4 +286,3 @@ DBIconsHelp2: cpy #8 bne @1 @4: rts - 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 064f6059..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: -.ifdef bsw128 - lda r0H - ora L8871 - sta r0H +.if .defined(bsw128) || .defined(mega65) + ; 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 - 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/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/files/files6c.s b/kernal/files/files6c.s index 37fa0b19..0a82d309 100644 --- a/kernal/files/files6c.s +++ b/kernal/files/files6c.s @@ -17,6 +17,9 @@ .import _SwapDiskDriver .import CheckAppCompat .endif +.ifdef mega65 +.import _SwapDiskDriver +.endif .import GetBlock .import FetchRAM @@ -174,6 +177,8 @@ IsDeviceValid: bcc @1 cmp #12 bcs @1 + lda curType + beq @1 jsr ExitTurbo @1: PopB curDevice @2: cmp #8 @@ -183,13 +188,14 @@ IsDeviceValid: tay lda _driveType,y sta curType -.ifdef bsw128 + ;beq @7 +.if .defined(bsw128) ldx curDrive .endif cpy curDrive beq @3 sty curDrive -.ifdef bsw128 +.if .defined(bsw128) bbrf 6, sysRAMFlg, @4 .else bbrf 6, sysRAMFlg, @3 @@ -203,14 +209,16 @@ IsDeviceValid: jsr PrepForFetch @3: ldx #NULL rts -.ifdef bsw128 +.if .defined(bsw128) @4: txa eor curDrive and #1 beq @5 - jsr _SwapDiskDriver + ;jsr _SwapDiskDriver @5: ldx #$00 rts +@7: ldx #DEV_NOT_FOUND + rts .endif PrepForFetch: @@ -338,4 +346,3 @@ GetHeaderFileName: rts @3: ldy #$ff @4: rts - diff --git a/kernal/fonts/fonts2.s b/kernal/fonts/fonts2.s index 197acd9a..55432c91 100644 --- a/kernal/fonts/fonts2.s +++ b/kernal/fonts/fonts2.s @@ -48,11 +48,15 @@ PrvCharWidth = $880D .import GetScanLine .import GetRealSize .endif +.import _GetScanLine_HR +.import _EndScanLine .global Font_9 .global FontPutChar .global _GetRealSize +.import screenNextLine + .segment "fonts2" ;--------------------------------------------------------------- @@ -68,7 +72,9 @@ PrvCharWidth = $880D ; a baseline offset ; Destroyed: nothing ;--------------------------------------------------------------- + .ifndef wheels ; moved +.ifndef mega65 _GetRealSize: subv 32 _GetRealSize2: @@ -115,6 +121,7 @@ _GetRealSize2: rts .endif ; bsw128 .endif +.endif Font_1: ldy r1H @@ -212,12 +219,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 @@ -274,15 +298,41 @@ Font_tabH: .hibytes Font_tab Font_2: - ldx r1H + lda r1H + pha + lda r11H + lsr + lsr + lsr + lsr + ldx #5 +@11: + asl r1H + rol + dex + bne @11 + tay + pla + sta r1H + and #$07 + ora #$f8 + tax + + ;ldx r1H .ifdef bsw128 - jsr _GetScanLine + jsr _GetScanLine_HR .else - jsr GetScanLine + 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 @@ -292,12 +342,31 @@ Font_2: @3: pha and #%11111000 sta r4L + sty leftMargin+1 .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 - bne @4 - cmp #$c0 + beq @5 + dex + inc r5H + inc r6H + bra @4 +@5: +.else + cpx #0 + bne @4 ; jump if above 255 + cmp #$c0 ; below bcc @6 @4: subv $80 pha @@ -308,6 +377,7 @@ Font_2: inc r6H @5: pla @6: sta r1L +.endif .ifdef bsw128 bra @LE333 @LE319: ldy #$00 @@ -327,8 +397,9 @@ Font_2: inc r6H .endif @LE333: -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) lda FontTVar2+1 + and #%00001111 lsr a sta r7L lda FontTVar2 @@ -347,7 +418,9 @@ Font_2: ror a lsr a .else - MoveB FontTVar2+1, r3L + lda FontTVar2+1 + and #%00001111 + sta r3L lsr r3L lda FontTVar2 ror @@ -379,12 +452,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 @@ -424,7 +505,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 - lda #1 - ldx #>(SCREENPIXELWIDTH-1) - ldy #<(SCREENPIXELWIDTH-1) -@1: sta clkreg - stx $38 - sty rightMargin + ;LoadB L8890, $ff +.ifdef bsw128 + ;lda #1 +.endif + ;ldx #>(SCREENPIXELWIDTH-1) + ;ldy #<(SCREENPIXELWIDTH-1) +@1: +.ifdef bsw128 + sta clkreg ; D030 +.endif + ;stx rightMargin+1 + ;sty rightMargin jmp UseSystemFont + +.ifdef mega65 + +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 + 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 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 + ; 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 + + jsr i_MoveData +@colSrc: + .word 0 + .word ColTab + .word 16 + + jsr i_MoveData +@rowSrc: + .word 0 + .word RowTab + .word 16 + + 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, 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: + .byte $09, $09, $09, $09 +vmiSideBorder: + .word 78 | $8000, 80 | $8000, 80 | $8000, 39 | $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, 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: + .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 + +;--------------------------------------------------------------- +; 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 + +;--------------------------------------------------------------- +; 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 b07e4511..dd387a94 100644 --- a/kernal/graph/normalize.s +++ b/kernal/graph/normalize.s @@ -11,30 +11,179 @@ .include "c64.inc" .global _NormalizeX +.ifdef mega65 +.global UncompactXY +.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 +@10: + lda zpage+1,x + bpl @4 + + lda zpage+1,x + pha + and #$0F + sta zpage+1,x + pla + lsr + lsr + lsr + 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 #$F0 + plx + ora zpage+1,x + sta zpage+1,x + +@4: + rts + +.endif + _NormalizeX: - lda zpage+1,x - bpl @2 + bbrf 6, graphMode, @10 + + ; extended mode, scalable coordinates + lda zpage+1,x + and #%00001000 + cmp #%00001000 ; from end? + bne @5 + + tya + pha + ; 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 + 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 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 -@4: rts +@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 diff --git a/kernal/graph/point.s b/kernal/graph/point.s index 15a500f6..06fba249 100644 --- a/kernal/graph/point.s +++ b/kernal/graph/point.s @@ -12,11 +12,15 @@ .import BitMaskPow2Rev .import _GetScanLine +.if .defined(bsw128) || .defined(mega65) +.import _TempHideMouse +.import _HorizontalLine +.import __io_HorizontalLine +.endif + .ifdef bsw128 .import _Dabs -.import _TempHideMouse .import _DShiftLeft -.import _HorizontalLine .else .import Dabs .endif @@ -28,6 +32,8 @@ .import LF4A7 .import GetLeftXAddress .import _NormalizeX +.import UncompactXY +.import _GetScanLine_HR .global _TestPoint .global _DrawPoint @@ -51,35 +57,77 @@ ;--------------------------------------------------------------- _DrawLine: php -.ifdef bsw128 - bmi @Y - lda r11L - cmp r11H - bne @Y - lda #$FF - plp - bcs @X - lda #0 -@X: jmp _HorizontalLine -@Y: ldx #r3 +.if .defined(bsw128) || .defined(mega65) + ldx #r3 jsr _NormalizeX ldx #r4 jsr _NormalizeX .endif - LoadB r7H, 0 - lda r11H + ; + 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: + plp +.ifdef mega65 + jmp __io_HorizontalLine +.else + jmp _HorizontalLine +.endif + +@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 @@ -219,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 - bcc @5 - LoadB r13L, 1 -@5: plp +@4: CmpW r11, r14 + bcs @5 + LoadW r13, 1 +@5: jsr @99 + plp php + pha jsr _DrawPoint - CmpW r3, r4 + PopB r3H + jsr CmpWR3R4 bcs @8 inc r3L bne @6 @@ -247,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 @@ -273,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 @@ -300,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 @@ -312,23 +382,46 @@ _DrawLine: ;--------------------------------------------------------------- _DrawPoint: php +.if .defined(bsw128) || .defined(mega65) .ifdef bsw128 jsr _TempHideMouse +.endif ldx #r3 jsr _NormalizeX .endif + +.ifdef mega65 +.else ldx r11L - jsr _GetScanLine +.endif + jsr _GetScanLine_HR .ifdef bsw128 bbsf 7, graphMode, DrwPoi80 .endif +.ifdef mega65 + lda r3H + and #%00001111 + tay +.endif +.ifdef mega65 +@1c: + beq @1b + inc r5H + inc r6H + dey + bra @1c + +@1b: lda r3L and #%11111000 + tay +.else tay lda r3H beq @1 inc r5H inc r6H +.endif @1: lda r3L and #%00000111 tax @@ -389,8 +482,10 @@ DrwPointTemp: ; Destroyed: a, x, y, r5, r6 ;--------------------------------------------------------------- _TestPoint: +.if .defined(bsw128) || .defined(mega65) .ifdef bsw128 jsr _TempHideMouse +.endif ldx #r3 jsr _NormalizeX .endif @@ -427,6 +522,7 @@ TestPoi80: rts LF29F: clc rts +.endif CmpWR3R4: lda r3H @@ -435,4 +531,3 @@ CmpWR3R4: lda r3L cmp r4L LF2AB: rts -.endif diff --git a/kernal/graph/rect.s b/kernal/graph/rect.s index cafdb886..753264c0 100644 --- a/kernal/graph/rect.s +++ b/kernal/graph/rect.s @@ -15,12 +15,15 @@ .import _RecoverLine .import _VerticalLine .import ImprintLine +.import UncompactXY +.import _NormalizeY .global _Rectangle .global _InvertRectangle .global _RecoverRectangle .global _ImprintRectangle .global _FrameRectangle +.global _EndScanLine .segment "graph2c" @@ -35,8 +38,17 @@ ; Destroyed: a, x, y, r5 - r8, r11 ;--------------------------------------------------------------- _Rectangle: + PushW r2 + PushW r3 + PushW r4 + ;PushB r5H + + jsr _NormRect + MoveB r2L, r11L -@1: lda r11L + +@1: + lda r11L and #$07 tay .ifdef bsw128 @@ -52,10 +64,37 @@ _Rectangle: txa .endif jsr _HorizontalLine - lda r11L - inc r11L + lda r11L cmp r2H - bne @1 + bne @3_ + + lda r4H + and #$F0 + sta r5H + lda r3H + and #$F0 + cmp r5H + beq @3 +@3_: + ;lda r11L + inc r11L + bne @2 + + lda r3H + add #16 + sta r3H + ;cmp r4H + ;bcc @3 +@2: + bra @1 + +@3: + ;PopB r5H +rectEnd: + PopW r4 + PopW r3 +rectEnd2: + PopW r2 rts ;--------------------------------------------------------------- @@ -69,13 +108,46 @@ _Rectangle: ; Destroyed: a, x, y, r5 - r8 ;--------------------------------------------------------------- _InvertRectangle: - MoveB r2L, r11L -@1: jsr _InvertLine - lda r11L - inc r11L - cmp r2H - bne @1 - rts + PushW r2 + PushB r3H + PushB r4H + ;PushB r5H + + jsr _NormRect + + 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 + bra rectEnd2 .segment "graph2e" @@ -96,7 +168,7 @@ _RecoverRectangle: inc r11L cmp r2H bne @1 - rts + jmp _EndScanLine .segment "graph2g" @@ -117,10 +189,18 @@ _ImprintRectangle: inc r11L cmp r2H bne @1 - rts + jmp _EndScanLine .segment "graph2i1" +_NormRect: + ldx #r3 + ldy #r2L + jsr _NormalizeY + ldx #r4 + ldy #r2H + jmp _NormalizeY + ;--------------------------------------------------------------- ; FrameRectangle $C127 ; @@ -133,21 +213,49 @@ _ImprintRectangle: ; Destroyed: a, x, y, r5 - r9, r11 ;--------------------------------------------------------------- _FrameRectangle: - sta r9H - ldy r2L - sty r11L - 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 - rts + sta r9H + + jsr _NormRect + ;PushB r5H + + PushW r2 + PushW r3 + PushW r4 + + 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 1bed3fe8..da6cd11c 100644 --- a/kernal/graph/scanline.s +++ b/kernal/graph/scanline.s @@ -11,20 +11,124 @@ .include "c64.inc" .global _GetScanLine +.global _GetScanLineExt +.ifdef mega65 +.global InitScanLineTab +.global LineTabH +.global LineTabL +.global _GetScanLine_HR +.global _EndScanLine +.endif .segment "graph2n" +.ifdef mega65 +; C65/M65 bank 1 addresses +SCREEN_BASE65 = $0000 +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. + +_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 + lda #$00 + tax + jsr _MapHigh + ;ldx #$00 + ;lda #$80 + + lda #$00 + tax + jsr _MapLow + pla + tax +@1: + rts + +;--------------------------------------------------------------- +; 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 ; ; 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 ;--------------------------------------------------------------- _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 jmp GSC80 @@ -35,8 +139,25 @@ _GetScanLine: .ifndef wheels_size_and_speed pha .endif +.ifdef mega65 + ;and #%11111000 + cmp #%11111000 + bcc @_1 ; branch if not high res + + ; we are in high res mode + ;txa and #%00000111 - sta r6H + sta r6H ; card inline offset + + tya + ; card line in A now + bra @_2 +@_1: + ; we are in standard (non-hig-res mode) + ;txa +.endif + and #%00000111 + sta r6H ; card inline offset .ifdef wheels_size_and_speed txa .else @@ -45,80 +166,410 @@ _GetScanLine: lsr lsr lsr - tax - bbrf 7, dispBufferOn, @2 ; ST_WR_FORE -.ifdef bsw128 - bvs @1 -.else - bbsf 6, dispBufferOn, @1 ; ST_WR_BACK + + ; 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 +@X: +.endif + tax ; scan line in cards in x now + lda LineTabL,x ora r6H sta r5L -.ifdef wheels_size_and_speed sta r6L -.endif lda LineTabH,x sta r5H + sta r6H + + tya + pha + 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 + + +.ifdef bsw128 + bvs @1 +.else + bbrf 6, dispBufferOn, @3 ; ST_WR_BACK +.endif + jmp @1 +@3: +; +; foreground only +; .ifdef bsw128 jmp GSC80_6 .else -.ifdef wheels_size_and_speed - sta r6H + +.ifdef mega65 + ; map foregroud and translate ptrs + ;tya + ;pha + ;tza + ;pha + + ; a/x lower, y/z highter + lda r5H + ldx #2 + add #$60 ; add the base address + bcc @Y2 + clc + ;ror + bra @Y1 + +@Y2: + dex ;ldx #1 + sec + ;ror +@Y1: + ror + jsr _MapHigh + + lda r5H + and #%00000001 + add #$a0 + sta r5H + bra gslend .else - MoveW r5, r6 -.endif + pla tax + PopB CPU_DATA rts .endif -@1: lda LineTabL,x - ora r6H - sta r5L - sta r6L - lda LineTabH,x - sta r5H - subv >(SCREEN_BASE-BACK_SCR_BASE) - sta r6H - pla - tax - rts +.endif + +; +; background only +; @2: .ifdef bsw128 - bvc @3 + jmp GSC80_6 .else - bbrf 6, dispBufferOn, @3 ; ST_WR_BACK + +.ifdef mega65 +; map foregroud and translate ptrs + ;tya + ;pha + ;tza + ;pha + +; a/x lower, y/z highter + LDX #0 + lda r5H + add #$60 + bcs @Y2__ + sec + ;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 + inx ;ldx #1 ; map bank offset +@Y1__: + ror + 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 + tax + rts .endif - lda LineTabL,x - ora r6H - sta r6L -.ifdef wheels_size_and_speed - sta r5L .endif - lda LineTabH,x - subv >(SCREEN_BASE-BACK_SCR_BASE) - sta r6H -.ifdef bsw128 - jmp GSC80_5 -.else -.ifdef wheels_size_and_speed - sta r5H + + +; +; background and foreground +; + +@1: +.ifdef mega65 + ; map foregroud and translate ptrs + ;tya + ;pha + ;tza + ;pha + + ; a/x lower, y/z highter + lda r5H + pha + + ldx #1 + add #$60 + bcc @Y2_ + clc + ;ror + inx ;ldx #2 + bra @Y1_ + +@Y2_: + sec + ;ror + ;ldx #1 +@Y1_: + ror + jsr _MapHigh + + ;sub #$40 + ;lsr + pla + add #$60 + bcs @Y2___ + sec + ;ror + ldx #0 + bra @Y1___ + +@Y2___: + clc + ;ror + ldx #1 +@Y1___: + ror + ldz #$40 +gslend2: + stz r6H + jsr _MapLow + + lda r5H + and #%00000001 + 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: + sta r6H + + pla + taz + pla + tay + + pla + tax + PopB CPU_DATA + rts .else - MoveW r6, r5 -.endif + pla tax rts .endif -@3: LoadB r5L, <$AF00 - sta r6L - LoadB r5H, >$AF00 - sta r6H + + +.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 -.ifdef bsw128 GSC80: txa pha @@ -176,11 +627,36 @@ GSC80_6: rts .endif + + + .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 +.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 + .repeat 128 + .byte 0 + .endrep +LineTabH: + ;.hibytes LineTab + .repeat 128 + .byte 0 + .endrep + + + +.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/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/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 851db820..11fc672c 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 @@ -89,17 +93,129 @@ 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 #$a5 + + lda #C65_VIC_INIT1 + sta $d02f + lda #C65_VIC_INIT2 + sta $d02f + + ; enable 800x600 mode + ; 1. Set horizontal border width +.if 0 + LDA #39 + STA $D05C + LDA #$00 + STA $D05D + LDA #1 + sta $D076 + + lda #$c9 + sta grcntrl2 + + ; 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, 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 + + ; 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 + + lda #<74 + sta $d048 + lda #>74 + sta $d049 + lda #<554 + sta $D04A + lda #>554 + sta $d04b + + lda #<74 + sta $d04e + lda #>74 + sta $d04f +.endif +.else + lda #C65_VIC_INIT1 sta $d02f - lda #$96 + lda #C65_VIC_INIT2 sta $d02f - lda #$40 ; 3.5Mhz + ; enable bitplanes + + + lda #$D0 ; 3.5Mhz, H640, bitplanes + ;lda #$90 ; 3.5Mhz, H640, bitplanes + bbsf 7, graphMode, @11 + lda #$50 + ;lda #$10 +@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 + + ; bitplane data @$14000 + lda #$04 + sta $d034 + + lda #$33 + sta $d102 + sta $d202 + sta $d302 + lda #$bb + sta $d100 + sta $d200 + sta $d300 +.endif + .endif .if .defined(wheels) || .defined(removeToBASIC) @@ -114,8 +230,9 @@ 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/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..f70540cd 100644 --- a/kernal/icon/icon2.s +++ b/kernal/icon/icon2.s @@ -122,31 +122,34 @@ FindClkIcon: lda (IconDescVec),y iny ora (IconDescVec),y - beq @2 + bne @22 + jmp @2 +@22: iny lda mouseXPos+1 + and #%00001111 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 + jsr LFCCC_ sta L888F pla .endif sec -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) sbc L888F .else sbc (IconDescVec),y @@ -154,7 +157,7 @@ FindClkIcon: bcc @2 iny iny -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) pha lda (IconDescVec),y jsr LFCCC @@ -166,22 +169,75 @@ FindClkIcon: .endif bcs @2 dey + LoadB L8890, 0 + dey + lda (IconDescVec),y + bpl @11 + + + iny + ; in GEOS6 scalable mode + lda (IconDescVec),y + bbrf 6, graphMode, @111 + 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 + bra @111 +@11: + iny + lda (IconDescVec),y + +@111: + 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: + + sec rts CalcIconCoords: @@ -196,18 +252,18 @@ CalcIconCoords: sta r2L dey lda (IconDescVec),y -.ifdef bsw128 - jsr LFCCC +.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,8 +285,14 @@ CalcIconCoords: rts .endif -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) LFCCC: pha + lda graphMode + cmp #$41 + beq LFCCC_2a + pla +LFCCC2: + pha and #DOUBLE_B bpl @1 pla @@ -241,5 +303,33 @@ LFCCC: pha @3: rts @1: pla rts +LFCCC_2a: + pla + asl + rts .endif +.if .defined(bsw128) || .defined(mega65) +LFCCC_: + bbrf 6, graphMode, LFCCC + pha + and #%11000000 + + bpl @1 + cmp #%11000000 + bne @2 + + pla + ; x negative case + clc + adc scrFullCardsX +@3: + bra LFCCC +@2: + pla + and #%01111111 + bra @3 +@1: + pla + bra @3 +.endif diff --git a/kernal/init/init1.s b/kernal/init/init1.s index cd6e6103..f53588ea 100644 --- a/kernal/init/init1.s +++ b/kernal/init/init1.s @@ -19,23 +19,45 @@ .ifdef bsw128 .global _InitMachine2 .endif +.ifdef mega65 +.import MapUnderlay +.import UnmapUnderlay +.endif +.import dtLoad .segment "init1" _InitMachine: +.ifdef mega65 + jsr MapUnderlay +.endif jsr _DoFirstInitIO -.ifdef bsw128 +.ifdef mega65 + jsr UnmapUnderlay +.endif +.if .defined(bsw128) || .defined(mega65) .import SetRightMargin -.import SetNewMode0 +.import SetNewMode _InitMachine2: jsr InitGEOEnv - jmp SetNewMode0 + jmp SetNewMode .endif InitGEOEnv: LoadW r0, InitRamTab -.ifdef bsw128 - jsr _InitRam +.if .defined(bsw128) || .defined(mega65) +.ifdef mega65 + 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 .ifdef wheels .assert * = _InitRam, error, "Code must run into _InitRam" @@ -43,4 +65,3 @@ InitGEOEnv: jmp _InitRam .endif .endif - diff --git a/kernal/init/init2.s b/kernal/init/init2.s index 1e4fc4b7..745f9a9c 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,9 +45,12 @@ ; Pass: nothing ; Destroyed: a, y, r0 - r2l ;--------------------------------------------------------------- -_FirstInit: +_FirstInit2: sei cld +.ifdef mega65 + LoadB screencolors, $BF +.endif .ifdef bsw128 LoadB screencolors, $BF sta @1 @@ -64,6 +77,7 @@ _FirstInit: .import sysScrnColors MoveB sysScrnColors, screencolors .else +.ifndef mega65 .ifndef bsw128 LoadB screencolors, (DKGREY << 4)+LTGREY sta @1 @@ -72,12 +86,41 @@ _FirstInit: .word 1000 .word COLOR_MATRIX @1: .byte (DKGREY << 4)+LTGREY +.endif START_IO_X 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 + ; the background (in blue) 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 +135,8 @@ _FirstInit: sta mousePicData-1,x dex bne @3 +.endif + .ifdef wheels .import sysMob0Clr .import sysExtClr diff --git a/kernal/init/init4.s b/kernal/init/init4.s index 54a5fdeb..9deff06a 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 @@ -27,10 +31,12 @@ InitRamTab: .byte ST_WR_FORE | ST_WR_BACK ; dispBufferOn .byte 0 ; mouseOn .word mousePicData ; msePicPtr - .byte 0 ; windowTop - .byte SC_PIX_HEIGHT-1 ; windowBottom - .word 0 ; leftMargin - .word SC_PIX_WIDTH-1 ; 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 @@ -46,7 +52,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 diff --git a/kernal/irq/irq.s b/kernal/irq/irq.s index e4edb703..e8193058 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 @@ -151,8 +160,12 @@ _IRQHandler: pla tax lda tempIRQAcc -_NMIHandler: rti +_NMIHandler: + cld + sta tempIRQAcc + pla + jmp (BRKVector) .endif .ifdef use2MHz diff --git a/kernal/jumptab/jumptab.s b/kernal/jumptab/jumptab.s index 0ed52209..f994090a 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 @@ -154,8 +128,6 @@ ; ... .import __IsMseInRegion -.import __CRC -.import __GetRandom .import __DSdiv .import __Ddiv .import __DMult @@ -168,7 +140,7 @@ .import _ImprintRectangle .import _BitmapUp .import _TestPoint -.import _GetScanLine +.import _GetScanLineExt .import _DrawPoint .import _DrawLine .import _RecoverRectangle @@ -186,7 +158,6 @@ .import _InitTextPrompt .import _GetString .import _UseSystemFont -.import _BldGDirEntry .import _GetRealSize .import _ColorRectangle .import _ColorCard @@ -200,8 +171,72 @@ .import _SetMsePic .import _TempHideMouse .import _NormalizeX +.ifdef mega65 +.import _NormalizeY +.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 +.import _map__CRC +.import _map_SetNewMode +.import _map_GetRealSize +.import _map_IsMseInRegion +.import _map_SetMsePic +.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 +.import __CRC +.endif - +.import _GetRandom .global InterruptMain .global InitProcesses .global RestartProcess @@ -295,8 +330,8 @@ .global CRC .global LdFile .global EnterTurbo -.global LdDeskAcc .global ReadBlock +.global LdDeskAcc .global LdApplic .global WriteBlock .global VerWriteBlock @@ -364,12 +399,17 @@ .global SwapRAM .global VerifyRAM .global DoRAMOp +.global SetNewMode + +.if .defined(bsw128) || .defined(mega65) +.global NormalizeX +.global NormalizeY +.endif .ifdef bsw128 .global TempHideMouse .global SetMsePic .global SetNewMode -.global NormalizeX .global MoveBData .global SwapBData .global VerifyBData @@ -381,6 +421,23 @@ .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_DrawLine +.import __io_DrawPoint +.import __io_TestPoint +.endif + .ifdef wheels .global InitMachine .global GEOSOptimize @@ -417,33 +474,69 @@ 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 + jmp __io_DrawLine DrawPoint: - jmp _DrawPoint + jmp __io_DrawPoint GraphicsString: +.ifdef mega65 + jmp __io_GraphicsString +.else jmp _GraphicsString +.endif SetPattern: jmp _SetPattern GetScanLine: - jmp _GetScanLine + jmp _GetScanLineExt TestPoint: - jmp _TestPoint + jmp __io_TestPoint BitmapUp: jmp _BitmapUp PutChar: @@ -491,7 +584,7 @@ InitRam: PutDecimal: jmp _PutDecimal GetRandom: - jmp __GetRandom + jmp _GetRandom MouseUp: jmp _MouseUp MouseOff: @@ -519,7 +612,11 @@ i_BitmapUp: i_PutString: jmp _i_PutString GetRealSize: +.ifdef mega65 + jmp _map_GetRealSize +.else jmp _GetRealSize +.endif i_FillRam: jmp _i_FillRam i_MoveData: @@ -563,11 +660,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: @@ -579,31 +688,59 @@ 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: +.ifdef mega65 + jmp _map__CRC +.else jmp __CRC +.endif LdFile: jmp _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: @@ -613,15 +750,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: @@ -629,13 +782,21 @@ PutDirHead: NxtBlkAlloc: jmp (_NxtBlkAlloc) ImprintRectangle: +.ifdef mega65 + jmp __io_ImprintRectangle +.else jmp _ImprintRectangle +.endif i_ImprintRectangle: jmp _i_ImprintRectangle DoDlgBox: jmp _DoDlgBox RenameFile: +.ifdef mega65 + jmp _map_RenameFile +.else jmp _RenameFile +.endif InitForIO: jmp (_InitForIO) DoneWithIO: @@ -653,29 +814,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: @@ -693,11 +898,19 @@ BitmapClip: FindBAMBit: jmp (_FindBAMBit) SetDevice: +.ifdef mega65 + jmp _map_SetDevice +.else jmp _SetDevice +.endif IsMseInRegion: - jmp __IsMseInRegion + jmp _map_IsMseInRegion ReadByte: +.ifdef mega65 + jmp _map_ReadByte +.else jmp _ReadByte +.endif FreeBlock: jmp (_FreeBlock) ChangeDiskDevice: @@ -782,6 +995,51 @@ ColorCard: ColorRectangle: jmp _ColorRectangle +.elseif .defined(mega65) + +.macro UNIMPLEMENTED + brk + nop + nop +.endmacro + +.macro UNIMPLEMENTED_NO_ACTION + rts + nop + nop +.endmacro + +; C128 syscalls +TempHideMouse: + UNIMPLEMENTED_NO_ACTION +SetMsePic: + jmp _map_SetMsePic +SetNewMode: +.import _SetNewMode + jmp _map_SetNewMode +NormalizeX: + jmp _NormalizeX +MoveBData: + jmp _MoveBData +SwapBData: + UNIMPLEMENTED +VerifyBData: + UNIMPLEMENTED +DoBOp: + UNIMPLEMENTED +AccessCache: + UNIMPLEMENTED +HideOnlyMouse: + UNIMPLEMENTED_NO_ACTION +SetColorMode: + UNIMPLEMENTED +ColorCard: + UNIMPLEMENTED +ColorRectangle: + UNIMPLEMENTED +NormalizeY: ;$C2FE + jmp _NormalizeY + .elseif .defined(wheels) .macro UNIMPLEMENTED @@ -830,7 +1088,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 3e8262b0..ee9d2b7b 100644 --- a/kernal/kernal_mega65.cfg +++ b/kernal/kernal_mega65.cfg @@ -1,9 +1,11 @@ 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; + #PADDING2: start = $A000, size = $1F40, fill = yes, file = %O; + #ICONS: start = $BF40, size = $00C0, 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; @@ -17,24 +19,51 @@ 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; 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; + sprites: load = LOKERNAL, type = ro; + misc: load = LOKERNAL, type = ro; - # icons: $BF40-$BFFF - mouseptr: load = ICONS, type = ro; - dlgbox2: load = ICONS, type = ro; + # icons: $a000-$BFFF + 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; + tobasic2: load = UNDERLAY, type = ro; + math2: 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; + init4: load = UNDERLAY, type = ro; + 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; + 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; # ... - tobasic2: load = KERNALHDR, type = ro; mainloop1: load = KERNALHDR, type = ro; files2: load = KERNALHDR, type = ro; load1a: load = KERNALHDR, type = ro; @@ -44,6 +73,12 @@ SEGMENTS { jumptab: load = KERNAL, type = ro; # 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; ramexp2: load = KERNAL, type = ro; mainloop3: load = KERNAL, type = ro; bitmask1: load = KERNAL, type = ro; @@ -51,108 +86,109 @@ 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; - 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; + #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; memory1a: load = KERNAL, type = ro; memory1b: load = KERNAL, type = ro; - misc: load = KERNAL, type = ro; - hw3: load = KERNAL, type = ro; + #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; - 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; process1: load = KERNAL, type = ro; process2: load = KERNAL, type = ro; process3a: load = KERNAL, type = ro; process3aa: load = KERNAL, type = ro; process3b: load = KERNAL, type = ro; process3c: load = KERNAL, type = ro; - sprites: load = KERNAL, type = ro; + #graph1: load = KERNAL, type = ro; math1a1: load = KERNAL, type = ro; math1a2: load = KERNAL, type = ro; 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; - panic2: load = KERNAL, type = ro; - panic3: load = KERNAL, type = ro; - serial2: load = KERNAL, type = ro; - patterns: load = KERNAL, type = ro; - bswfont: load = KERNAL, type = ro; + #panic2: load = KERNAL, type = ro; + #panic3: 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; - init4: 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; + graph2c: load = KERNAL, type = ro; + graph2e: load = KERNAL, type = ro; + graph2g: load = KERNAL, type = ro; + graph2p: load = KERNAL, type = ro; + graph2i1: load = KERNAL, type = ro; + graph2k: load = KERNAL, type = ro; + graph2l1: load = KERNAL, type = ro; + graph2m: load = KERNAL, type = ro; + graph2o: load = KERNAL, type = ro; + bswfont: load = KERNAL, type = ro; + bswfont80: 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; fonts3: load = KERNAL, type = ro; fonts4: load = KERNAL, type = ro; 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; + 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; - math2: load = KERNAL, type = ro; - graph4: load = KERNAL, type = ro; - mouse2: 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; 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; 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; 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/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/load/deskacc.s b/kernal/load/deskacc.s index 88fbf528..83fda00b 100644 --- a/kernal/load/deskacc.s +++ b/kernal/load/deskacc.s @@ -9,24 +9,21 @@ .include "config.inc" .include "kernal.inc" .include "c64.inc" +.include "jumptab.inc" .import Dialog_2 .import _MNLP +.import _MNLP_DeskAcc .import DeskAccSP .import DeskAccPC .import InitGEOEnv .import DlgBoxPrep .import GetStartHAddr -.import MoveBData -.import UseSystemFont -.import ReadFile -.import GetFHdrInfo - -.ifndef bsw128 -.import FastDelFile -.import GetFile +.ifdef mega65 +.import CheckAppCompat .endif + .import A885D .ifdef wheels @@ -117,6 +114,16 @@ tmp3: .byte 0 MoveB r10L, A885D jsr GetFHdrInfo bnex LDAcc1 +.ifdef mega65 + jsr CheckAppCompat + bne LDAcc1 +.endif +.ifdef mega65 + PushW r1 + jsr SaveSwapFile + PopW r1 + bnex LDAcc1 +.else .ifdef useRamExp ; swap to other bank PushW r1 @@ -138,6 +145,7 @@ tmp3: .byte 0 jsr SaveSwapFile PopW r1 bnex LDAcc1 +.endif .endif jsr GetStartHAddr lda #$ff @@ -154,10 +162,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: @@ -183,7 +192,7 @@ _RstrAppl: PushW DeskAccPC rts .else -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ; restore from back RAM ldy #0 sty r3L @@ -245,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 @@ -253,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/kernal/load/load1a.s b/kernal/load/load1a.s index e90f07d4..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 @@ -54,8 +55,20 @@ _EnterDeskTop: stx firstBoot .endif txs - jsr ClrScr jsr _InitMachine +; ldx #$41 +; lda graphMode +; bmi @2 +; ;asl +; ;bmi @1 +; ;dex +;@2: +; stx graphMode +@1: + jsr ClrScr + ldx #$00 + lda #$00 + jsr _MapLow .ifdef useRamExp MoveW DeskTopStart, r0 MoveB DeskTopLgh, r2H @@ -138,9 +151,8 @@ _StartAppl: lda r7L .ifdef bsw128 jsr CallRoutine - cli + cli jmp MainLoop .else jmp _MNLP .endif - 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/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/mainloop/mainloop1.s b/kernal/mainloop/mainloop1.s index 3308000f..60c413d1 100644 --- a/kernal/mainloop/mainloop1.s +++ b/kernal/mainloop/mainloop1.s @@ -28,6 +28,12 @@ .segment "mainloop1" _MainLoop: + ldx CPU_DATA + cpx #$30 + bne @2 + ldx #IO_IN + stx CPU_DATA +@2: .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/mainloop2.s b/kernal/mainloop/mainloop2.s index 122f4c26..b4f4ac78 100644 --- a/kernal/mainloop/mainloop2.s +++ b/kernal/mainloop/mainloop2.s @@ -13,16 +13,26 @@ .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 #$00 + lda #$00 + ;ldx #$02 + ;lda #$50 + jsr _MapLow + jmp _MainLoop .endif diff --git a/kernal/mainloop/mainloop3.s b/kernal/mainloop/mainloop3.s index 7562dc8a..61595035 100644 --- a/kernal/mainloop/mainloop3.s +++ b/kernal/mainloop/mainloop3.s @@ -10,7 +10,7 @@ .include "kernal.inc" .include "c64.inc" -.import __GetRandom +.import _GetRandom .import ProcessCursor .import __ProcessDelays .import __ProcessTimers @@ -30,4 +30,4 @@ _InterruptMain: jsr __ProcessTimers jsr __ProcessDelays jsr ProcessCursor - jmp __GetRandom + jmp _GetRandom 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/memory/memory2.s b/kernal/memory/memory2.s index 9e32a1f3..cb7d0272 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 @@ -135,7 +134,8 @@ _MoveData: PushB r3L .ifdef REUPresent lda sysRAMFlg - bpl @1 + bra @1 + ;bpl @1 .ifdef bsw128 lda r2H cmp #>$3800 @@ -266,10 +266,9 @@ _CmpFString: beqx @1 dex bne @1 -.ifdef wheels +.ifdef wheels_size txa .else lda #0 .endif @3: rts - diff --git a/kernal/menu/menu1.s b/kernal/menu/menu1.s index 53ef8893..30337a33 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 ;--------------------------------------------------------------- @@ -318,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 @@ -350,4 +360,3 @@ Menu_2: PopW leftMargin PopW r10 rts - 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/mouse/mouse1.s b/kernal/mouse/mouse1.s index 6f40752b..178fea48 100644 --- a/kernal/mouse/mouse1.s +++ b/kernal/mouse/mouse1.s @@ -11,43 +11,96 @@ .include "c64.inc" .import NormalizeX +.import NormalizeY .global _IsMseInRegion +.global UncompactXY .segment "mouse1" _IsMseInRegion: -.ifdef bsw128 txa pha +.if .defined(bsw128) || .defined(mega65) ldx #r3 jsr NormalizeX + ldy #r2L + jsr NormalizeY ldx #r4 jsr NormalizeX - pla - tax + ldy #r2H + jsr NormalizeY .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/mouse2.s b/kernal/mouse/mouse2.s index 4509fce9..5e65f69f 100644 --- a/kernal/mouse/mouse2.s +++ b/kernal/mouse/mouse2.s @@ -30,25 +30,101 @@ .ifndef bsw128 .import EnablSprite .endif +.ifdef mega65 +.import UncompactXY +.import i_FillRam +.import i_MoveData +.endif .global _MouseOff .global _StartMouseMode .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 ora r11H beq @1 -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) ldx #r11 jsr NormalizeX .endif @@ -78,10 +154,16 @@ _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. - ; 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 @@ -89,29 +171,61 @@ 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 jsr CheckMsePos + 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 -@1: rts + + jmp _ProcessMouseInt +@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 +237,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 +246,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 +283,8 @@ CheckMsePos: bcc @B beq @B @A: smbf OFFMENU_BIT, faultData -@B: rts +@B: + rts .ifdef wheels ; this got moved :( .import ScreenDimensions @@ -243,3 +370,8 @@ DoMouseFault: @2: jsr _DoPreviousMenu @3: rts +VDCPointer: + .byte $f0 + .repeat 23 + .byte 0 + .endrep \ No newline at end of file diff --git a/kernal/mouse/mouse3.s b/kernal/mouse/mouse3.s index e4a67604..25021350 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 @@ -21,7 +24,9 @@ ResetMseRegion: sta mouseLeft sta mouseLeft+1 sta mouseTop -.ifdef bsw128 +.if .defined(bsw128) || .defined(mega65) + +.if 0 LoadB mouseBottom, SC_PIX_HEIGHT-1 bbsf 7, graphMode, @2 LoadW mouseRight, SC_PIX_WIDTH-1 @@ -29,10 +34,19 @@ ResetMseRegion: LoadW mouseRight, SCREENPIXELWIDTH-1 @1: rts @2: LoadW mouseRight, SCREENPIXELWIDTH-1 +.endif + 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 .endif rts .endif - diff --git a/kernal/panic/panic.s b/kernal/panic/panic.s index 9ebe4bdf..40a66338 100644 --- a/kernal/panic/panic.s +++ b/kernal/panic/panic.s @@ -14,6 +14,10 @@ .import DoDlgBox .import Ddec .import EnterDeskTop +.import UnmapUnderlay +.import DebugMain +.import _MapLow +.import tempIRQAcc ; syscall .global _Panic @@ -80,7 +84,7 @@ SwapMemory: SwapRAMArgs: .word DISK_BASE ; CBM addr - .word $c000 ; REU addr + .word dum$c000 ; REU addr .word 0 ; count .byte 0 ; REU bank @@ -91,7 +95,7 @@ StackPtr: .byte 0, 0, 0 ; PADDING -.else +.else ; gateway ;--------------------------------------------------------------- ; Panic $C2C2 ; @@ -99,6 +103,48 @@ 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 #$80 + ldx #0 + jsr _MapLow + + ; unmap to $6000 + jsr DebugMain + + pla + tax + pla + jsr _MapLow + + pla + taz + pla + tay + pla + tax + pla + + rti + +.else ; debugger + inc $d020 + bra _Panic .ifdef wheels sec pla @@ -106,7 +152,16 @@ _Panic: tay pla sbc #0 -.else +.else ; wheels +.ifdef mega65 + ;LoadB CPU_DATA, IO_IN +@13: + ;lda countHighMap + ;beq @12 + ;jsr UnmapUnderlay + ;bra @13 +@12: +.endif ; mega65 .ifdef bsw128 pla pla @@ -116,37 +171,37 @@ _Panic: pla pla pla -.endif - PopW r0 +.endif ; bsw128 + ;PopW r0 .ifdef bsw128 ldx #r0 jsr Ddec ldx #r0 jsr Ddec -.else +.else ; bsw128 SubVW 2, r0 -.endif - lda r0H -.endif - ldx #0 +.endif ; bsw128 + ;lda r0H +.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 -@1: pha - lsr - lsr - lsr - lsr - jsr @2 +.endif ; wheels +@1: ;pha + ;lsr + ;lsr + ;lsr + ;lsr + ;jsr @2 inx pla and #%00001111 @@ -160,7 +215,6 @@ _Panic: @3: addv '0'+7 @4: sta _PanicAddr,x rts - .segment "panic2" _PanicDB_DT: @@ -169,15 +223,15 @@ _PanicDB_DT: .word _PanicDB_Str .ifdef wheels .byte DBSYSOPV -.endif +.endif ; wheels .byte NULL .segment "panic3" _PanicDB_Str: - .byte BOLDON + ;.byte BOLDON .ifdef wheels_size - .byte "Error near " + ;.byte "" .else .byte "System error near " .endif @@ -187,3 +241,5 @@ _PanicDB_Str: _PanicAddr: .byte "xxxx" .byte NULL + +.endif ; debugger diff --git a/kernal/reu/reu.s b/kernal/reu/reu.s index 8407e81d..331b41e0 100644 --- a/kernal/reu/reu.s +++ b/kernal/reu/reu.s @@ -19,6 +19,201 @@ .segment "reu" +.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 + 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 + + START_IO_X + + lda #>opddmalist + ldy #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 diff --git a/kernal/time/time1.s b/kernal/time/time1.s index 704945da..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 @@ -142,6 +143,8 @@ ConvertBCD: @2: rts DoClockAlarm: +; TODO, bring back to life in the underlay +.if 0 lda alarmWarnFlag bne @3 .ifdef bsw128 @@ -167,5 +170,6 @@ DoClockAlarm: lda #$1e sta alarmWarnFlag dec alarmSetFlag -@3: rts - +@3: + 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/kernal/vars/vars.s b/kernal/vars/vars.s index ecb46188..0f45cf77 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,14 @@ .global TempCurDrive .global scr_mobx +.global screenCardsX +.global scrFullCardsX +.global screenMaxX +.global screenMaxY +.global spriteXPosOff +.global spriteYPosOff +.global screenNextLine + .segment "vars" menuOptNumber: .byte 0 @@ -147,7 +156,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 @@ -169,3 +178,12 @@ KbdDBncTab: .res 8, 0 .res 3, 0 KbdDMltTab: .res 20, 0 .endif + +screenCardsX: .word 40 +scrFullCardsX: .word 40 +screenMaxX: .word 319 +screenNextLine: .word 312 +screenMaxY: .word 199 +spriteXPosOff: .word 25 +spriteYPosOff: .word 50 + diff --git a/loader/loader.s b/loader/loader.s index 7775ed81..ec52ffc0 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" @@ -32,6 +35,7 @@ next: .WORD 0 .CODE .PROC main + SEI CLD LDA #0 @@ -44,29 +48,135 @@ 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 + sta $02 + lda #$01 + sta $03 + lda #$01 + sta $04 + lda #$00 + sta $05 + + lda #$18 + LDZ #3 + EOM + sta ($02), Z + lda #$19 + 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 - STA $D02F - LDA #$96 - 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 + ; Various VIC register stuffs STZ $D030 ; turn ROM mappings / etc OFF + STZ $D031 STZ $D019 ; disable VIC interrupts STZ $D01A + +; 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 + lda #$40 + sta $d031 + + ; force 1351 emulation + ;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. + ; 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 #<$e000 + STA $FB + LDA #>$e000 + STA $FC + LDA #<4 + STA $FD + LDA #>4 + 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 JSR uncruncher - STZ 53280 - STZ 53281 + ;STZ 53280 + ;STZ 53281 + JMP $5000 + +; ======================== .ENDPROC 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 @@ +ÌÏØccc \ 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 @@ +ÌcccÌcccÀ \ 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 @@ +ÌccÀ \ 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 @@ +ÌcccccccÀ \ No newline at end of file diff --git a/mount/main.s b/mount/main.s new file mode 100644 index 00000000..4af0e3fe --- /dev/null +++ b/mount/main.s @@ -0,0 +1,1167 @@ +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.include "geosmac.inc" +.include "diskdrv.inc" + + +.export __STARTUP_RUN__ +.export EndOfCode + +.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 + .endrep + +__STARTUP_RUN__: + LoadW r0, EndOfCode + + lda firstBoot + cmp #$FF + 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 + + +serialText: + .byte BOLDON, "No mountable drive configured.", NULL +NoDriveDialog: + .byte $81 ; standard dialog, light bachground + + .byte OK + .byte 17, 70 + + .byte DBTXTSTR, 10,20 + .word serialText + + .byte NULL + +SelectDialog: + .byte $81 ; standard dialog, light bachground + + .byte OK + .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 + +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 + +driveText: + .byte BOLDON, "Drive " +driveLetter: + .byte "A:", PLAINTEXT, NULL +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: + MoveW SelectionX, r3 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY + + MoveW r3, r4 + AddVW 124, r4 + lda graphMode + cmp #$41 + bne @100 + AddVW 124, r4 +@100: + clc + lda r2L + adc #88 + sta r2H + bcc @10 + clc + lda r4H + adc #16 + sta r4H +@10: + jsr IsMseInRegion + cmp #$FF + beq @1a + jmp @1 +@1a: + PushW r2 + PushW r3 + PushW r4 + + lda r2L + 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 + + lda topIndex + beq @3a + dec topIndex + + 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 + AddVW 16, r4 + lda graphMode + cmp #$41 + bne @201 + AddVW 16, r3 + AddVW 16, r4 +@201: + jsr IsMseInRegion + cmp #$FF + bne @4 + + lda topIndex + clc + adc #6 + cmp entryCount + bcs @4a + inc topIndex + + MoveW SelectionX, r3 + MoveB SelectionY, r2L + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY + 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 + 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 + cmp #$FF + bne @2 + + ; clicked in line + lda r13L + clc + adc topIndex + sta selectedEntry + + MoveW SelectionX, r3 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY + jsr DrawSelectionBox + rts +@2: + clc + 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 + +@1: + rts + +DrawDialog: + + ;jsr TestSomething + + jsr OpenDir + + sta fileDesc + LoadB entryCount, 0 + LoadW r1, $2000 + LoadW r2, $1F00 +@next: + lda fileDesc + jsr ReadDir + bcc @ok + jmp @end + lda entryCount + brk + + lda fileDesc + 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 + MoveB SelectionY, r2L + + ldx #r3 + jsr NormalizeX + ldy #r2L + jsr NormalizeY + jsr DrawSelectionBox + + ldx fileDesc + jsr CloseDir + + 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 + 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 + +testName: + .byte "Testname", NULL + +DrawSelectionBox: + MoveW r3, r4 + AddVW 124, r4 + lda graphMode + cmp #$41 + bne @100 + AddVW 124, r4 +@100: + + clc + lda r2L + adc #88 + sta r2H + 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: + 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 + adc #15 + sta r3H + + SubVW 16, r4 + lda #%11111111 + jsr VerticalLine + + SubVW 16, r4 + lda #%11111111 + jsr VerticalLine +.endif + PopW r4 + PopW r3 + PopW r2 + +.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 + 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 + 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 + bne @loop +.endif +@2: + rts + +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 + bcc @20 + clc + lda r11H + adc #16 + sta r11H +@20: + jsr GetEntryString + + jsr PutString + PopW r4 + PopW r3 + PopW r2 + PopB r13L + 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: + .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 + 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 + + ; 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: + pha + + ;; First, clear out the dirent + ldx #64+1+11+4+4 + lda #0 +@l1: sta DirEntry,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 + ;tax + ldy #>DirEntry ; write dirent to DirEntry + + lda #$14 + STA $D640 + NOP + + bcs @readDirSuccess + + ;; Return end of directory + lda #$00 + ldx #$00 + sec + RTS + +@readDirSuccess: + ;; Copy file name + ldy #0 +@l2: lda DirEntry,y + sta (r1),y + beq @eofile + iny + cpy #63 + bne @l2 + lda #$00 + 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 + 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 + 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 + +IconA: + .incbin "mount/IconA.map" +IconB: + .incbin "mount/IconB.map" +IconC: + .incbin "mount/IconC.map" +IconD: + .incbin "mount/IconD.map" + +EndOfCode: + .byte 0 diff --git a/mount/mount.grc b/mount/mount.grc new file mode 100644 index 00000000..c73aa06b --- /dev/null +++ b/mount/mount.grc @@ -0,0 +1,9 @@ +HEADER AUTO_EXEC "MEGA MOUNT" "MEGA Mount" "V1.0" { + author "Falk Rehwagen" + 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 21 11 21 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 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/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/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 new file mode 100644 index 00000000..a4cdad01 --- /dev/null +++ b/space/main.s @@ -0,0 +1,1640 @@ +.include "const.inc" +.include "geossym.inc" +.include "geossym2.inc" +.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__: +.if 0 + ;jsr CountMissingFiles ; -> r0 + + ;brk + ;lda #$43 + + LoadW r0, CheckDialog + jsr DoDlgBox + + lda r0L + cmp #OK + bne @10 + + ;jsr eth_init + + jsr prepare_network +.endif + 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 + + .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 "(11/21/21, BETA)", NULL +coreInfo: + .byte "M65 Core: master@009727e, build 4", NULL +warranties: + .byte "M65 ROM version: V920254", NULL +warranties2: + .byte BOLDON, "Use with care, no warranties!", PLAINTEXT, NULL +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: diff --git a/space/space.grc b/space/space.grc new file mode 100644 index 00000000..6a08ebb4 --- /dev/null +++ b/space/space.grc @@ -0,0 +1,9 @@ +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 11 21 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/tmp2.bin b/tmp2.bin new file mode 100644 index 00000000..d14dbe8b Binary files /dev/null and b/tmp2.bin differ diff --git a/topdesk/BitMap.bf b/topdesk/BitMap.bf new file mode 100644 index 00000000..0a735c60 Binary files /dev/null and b/topdesk/BitMap.bf differ diff --git a/topdesk/C64Icon.bf b/topdesk/C64Icon.bf new file mode 100644 index 00000000..e17e22cc Binary files /dev/null and b/topdesk/C64Icon.bf differ diff --git a/topdesk/CloseMap.map b/topdesk/CloseMap.map new file mode 100644 index 00000000..e5e332d0 Binary files /dev/null and b/topdesk/CloseMap.map differ diff --git a/topdesk/DeskInclude/CopyFile.inc b/topdesk/DeskInclude/CopyFile.inc new file mode 100644 index 00000000..7ccbe185 --- /dev/null +++ b/topdesk/DeskInclude/CopyFile.inc @@ -0,0 +1,552 @@ +; 12.8.91 Kn: Fehler bei leeren VLIR-Files behoben (S. 3/4) +; CopyFile (20.06.1991) dient zum kopieren/duplizieren von Files +; Par: DestinationDir: Nummer des Zieldirectories +; Achtung: Es findet keine Abfrage statt, ob Dir vorhanden ist. +; CopyMemLow,CopyMemHigh: freier Speicher +; r10: Zeiger auf SourceDisk +; r11: Zeiger auf DestinationDisk +; r12: Zeiger auf SourceName +; r13: Zeiger auf DestinationName +; r10=r11 f}r Duplicate, r12=r13 f}r CopyFile +; Ret: x: Fehlernummer +; Des: a,y,r0-r10L,r14-r15,diskBlkBuf,fileHeader,curDirHead,fileTrScBuf,dirEntryBuf + +dir3Head = $9c80 +SearchDrive: .byte 0 ;Offset der zu suchenden Disk (s. Search_Turbo) +Flag1581: .byte 0 ;Flag, ob dir3Head gerettet werden mu~ +DestinationDir: .byte 0 + +CopyFile: MoveW_ r10,r6 + jsr SearchDisk + txa + beq @01 +@err: rts +@01: MoveW_ r12,r6 + jsr FindFile + txa + bne @err + jsr EnterTurbo + jsr InitForIO + LoadB r9L,0 + sta r4L + lda dirEntryBuf+22 + beq CopySeq ;=>non 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 +.ifdef lang_de +@t1: .byte BOLDON,"ist bereits vorhanden.",0 +@t2: .byte "Soll die Datei }berschrieben",0 +@t3: .byte "werden ?",PLAINTEXT,0 +.else +@t1: .byte BOLDON,"is already present.",0 +@t2: .byte "Replace file?",0 +@t3: .byte PLAINTEXT,0 +.endif + +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 +.ifdef lang_de +@t1: .byte BOLDON,"ist bereits vorhanden",0 +@t2: .byte "und schreibgesch}tzt.",PLAINTEXT,0 +.else +@t1: .byte BOLDON,"is already present",0 +@t2: .byte "and write protected.",PLAINTEXT,0 +.endif + +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: + +.ifdef topdesk13 + lda SureFlag + beq @notsure + jmp @delete +.endif + +@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..d9cd2c50 --- /dev/null +++ b/topdesk/DeskInclude/DiskCopy.inc @@ -0,0 +1,559 @@ +;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 +.ifdef lang_de +@IDD_t1: .byte BOLDON,"Zieldiskette ausw{hlen:",0 +@IDD_t2: .byte "Startdiskette",0 +@IDD_t3: .byte "Zieldiskette",PLAINTEXT,0 +@IDD_t4: .byte "Verify",0 +.else +@IDD_t1: .byte BOLDON,"Select target disk:",0 +@IDD_t2: .byte "Source disk",0 +@IDD_t3: .byte "Target disk",PLAINTEXT,0 +@IDD_t4: .byte "Verify",0 +.endif +@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 +.ifdef lang_de +@t1: .byte "Die Zieldiskette darf keine ",0 +@t2: .byte "System- oder Hauptdiskette",0 +@t3: .byte "sein.",0 +.else +@t1: .byte "The target disk cannot be ",0 +@t2: .byte "a System- or Bootdisk",0 +@t3: .byte " ",0 +.endif + +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 +.ifdef lang_de +@IZD_t1: .byte BOLDON,"Bitte Zieldisk in Laufwerk " +@IZD_Dr: .byte "A",0 +@IZD_t2: .byte "einlegen.",PLAINTEXT,0 +.else +@IZD_t1: .byte BOLDON,"Please insert target disk in drive " +@IZD_Dr: .byte "A",0 +@IZD_t2: .byte PLAINTEXT,0 +.endif +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 + jsr InvertRectangle +@10: rts +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 + 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 +.ifdef topdesk128 + .byte 0,0,6+$80,16 +.else + .byte 0,0,6,16 +.endif + .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..1c26c734 --- /dev/null +++ b/topdesk/DeskInclude/EditText.inc @@ -0,0 +1,505 @@ +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 +.ifdef topdesk128 + 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 +@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 + inc $D020 + MoveW_ mouseXPos,r11 + MoveB mouseYPos,r1H +SetTextPtr: jsr TextPosition + bcc @20 + ldx ActualCharacter + beq @20 + 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 + 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_norm,r11 + lda r11H + and #$0F + sta r11H + 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_norm + bcc @50 + MoveW_ PositionXR_norm, r11 +@50: lda PositionXR+1 + and #$F0 + ora r11H + sta r11H + 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_norm,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_norm ;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, 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 r3H + + ldy #0 +@10: sec + sbc #10 + bcc @20 + iny + bne @10 +@20: sty r3H + + ; y is the line number + 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 +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 +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..6dd489c5 --- /dev/null +++ b/topdesk/DeskInclude/SearchDisk.inc @@ -0,0 +1,216 @@ +; 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 +.ifdef lang_de +@t1: .byte $18,"Bitte legen Sie die Disk",$1b,NULL +@t2: .byte $18,"ein.",$1b,NULL +.else +@t1: .byte $18,"Please insert disk",$1b,NULL +@t2: .byte $18," ",$1b,NULL +.endif + +@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 #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 + 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..51090313 --- /dev/null +++ b/topdesk/DeskInclude/Validate+Undelet.inc @@ -0,0 +1,460 @@ +;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 ;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 + 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 #(SC_FROM_END|((-4*8)& $FF))) + .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 + 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 +.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 + 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 + +.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 + 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 +.ifdef topdesk128 + ldx #r11 + jsr NormalizeX +.endif + 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 + +.ifdef topdesk128 +.ifdef scalable_coords +ClxL = SC_FROM_END | ((-79) & %0000000011111111) +ClxR = SC_FROM_END | 0 +.else +;ClxL = 240 + DOUBLE_W +;ClxR = 319 + DOUBLE_W +ClxL = 240 +ClxR = 319 +.endif +.else +ClxL = 240 +ClxR = 319 +.endif +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, SC_FROM_END | -1 + ;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 +.ifdef topdesk128 + .word 0 +DispMenuRight: + .word 214 +.else + .word 0,MAIN_RIGHT +.endif + 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 +.ifdef lang_de +@t1: .byte PLAINTEXT," wird kopiert",0 +@t2: .byte PLAINTEXT," wird gel|scht",0 +.else +@t1: .byte PLAINTEXT," beeing copied",0 +@t2: .byte PLAINTEXT," beeing deleted",0 +.endif + +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 +.ifdef lang_de +@t1: .byte "Die Datei ",0 +@t2: .byte "ist schreibgesch}tzt",0 +@t3: .byte "und kann nicht gel|scht",0 +@t4: .byte "werden.",0 +.else +@t1: .byte "The file ",0 +@t2: .byte "is write protected",0 +@t3: .byte "and cannot be deleted.",0 +@t4: .byte " ",0 +.endif + +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 +.ifdef lang_de +@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 +.else +@t1: .byte BOLDON,"Attention!",PLAINTEXT,0 +@t2: .byte "function aborted due to",0 +@t3: .byte "disk error $" +@nr: .byte "..",0 +@t4: .byte "on drive " +@dr: .byte ".",0 +.endif +@db2: .byte $81 + .byte $0b,$10,$10 + .word @t1b + .byte $0b,$10,$20 + .word @t2b + .byte OK,17,72,0 +.ifdef lang_de +@t1b: .byte BOLDON,"Fehler!",0 +@t2b: .byte "Doppelseitige Disk in 1541.",0 +.else +@t1b: .byte BOLDON,"Error!",0 +@t2b: .byte "Double sided disk in 1541.",0 +.endif + +@errtab: .byte $21,FILE_EXISTS,3,10 +@tab: .word @et1,@et2,@et3,@et4 +.ifdef lang_de +@et1: .byte "keine formatierte Diskette",0 +@et2: .byte "Name bereits vergeben",0 +@et3: .byte "Diskette voll",0 +@et4: .byte "unpassende Dateistruktur",0 +.else +@et1: .byte "No formatted disk",0 +@et2: .byte "Name already in use",0 +@et3: .byte "Disk full",0 +@et4: .byte "incorrect file structure",0 +.endif +@notext: .byte 0 +GenTab: .byte 0,0,0,0 +.ifdef topdesk128 +GenData: .word GenTab,DARecSpace +.else +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 +MySubMenu: LoadW___ GenData+2,DARecSpace +.else +MySubMenu: LoadW___ GenData+2,$7f80 +.endif +MySub2: +.ifdef topdesk128 + LoadB MyCurRec, 0 +.endif + pla + clc + adc #1 + sta @r0 + sta r0L + pla + adc #0 + sta @r0+1 + sta r0H +.ifdef topdesk128 + jsr MoveShortCuts +.endif + 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 +.ifdef topdesk128 + jsr HideOnlyMouse +.endif + ldy #01 + lda (r0),y + sta r2L +@05: tax + jsr GetScanLine + ldy #00 + lda (r0),y + sta r2H +@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 +@14: lda r3L + beq @15 +.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 +@15: sty r3H + ldy #00 + lda (r1),y + ldy r3H +.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 + ldy #2 + lda r2H + cmp (r0),y + bne @10 + inc r2L + lda r2L + ldy #3 + cmp (r0),y + bne @05 + 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 +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..60abca68 --- /dev/null +++ b/topdesk/Include/SubDir.src.inc @@ -0,0 +1,1194 @@ +; 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: +.ifdef topdesk13 + MoveW_ r3,@r3 ; Kn 22.9.91 +.endif +@10: +.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 + 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 +.ifdef topdesk13 + cpx #$50 ; Kn 22.9.91 + bne @125 + jmp @10 +@125: +.endif + 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 +.ifdef topdesk13 + @r3: .word 0 ; Kn 22.9.91 +.endif +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 + +.ifdef topdesk13 + 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 +.ifndef topdesk13 + ldy curDrive + lda driveType,y + sta curType +.endif + jmp @RAM +@NoRAM: + lda r0L + jsr ChangeDiskDevice +@RAM: ldy curDrive + pla + sta driveType-8,y +.ifdef topdesk13 + sta curType +.endif + 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: +.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 + 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 +.endif + 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 +; 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 > 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 + rts + +ChangeDiskFlag: + .byte $ff diff --git a/topdesk/Include/Symbol/CiMac.inc b/topdesk/Include/Symbol/CiMac.inc new file mode 100644 index 00000000..7734d248 --- /dev/null +++ b/topdesk/Include/Symbol/CiMac.inc @@ -0,0 +1,62 @@ + +;.macro DecW addr +; .local @10 +; dec addr +; lda addr +; cmp #$ff +; bne @10 +; dec addr+1 +;@10: +;.endmacro + + +;.macro IncW addr +; inc addr +; bne @10 +; inc addr+1 +;@10: +;.endmacro + +; AddSW +; Addiert inhalt einer Adresse (Byte) +; zu einem Wortwert +; + +.macro AddSW source, dest + AddB source+0, dest+0 + lda dest+1 + adc #$00 + sta dest+1 +.endmacro + +.macro SubSW source, dest + SubB source+0, dest+0 + lda dest+1 + sbc #$00 + sta dest+1 +.endmacro + + +.macro AddvW data, dest + .local @10 + lda #data + clc + adc dest + sta dest + bcc @10 + inc dest+1 +@10: +.endmacro + +.macro LoadWr0 data + lda #<(data) + ldx #>(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..997d066c --- /dev/null +++ b/topdesk/Include/Symbol/Sym128.erg.inc @@ -0,0 +1,18 @@ +; 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 + +NormalizeY = $c2fe 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..460682d1 --- /dev/null +++ b/topdesk/Include/Symbol/TopSym.inc @@ -0,0 +1,405 @@ +; 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 + +SC_FROM_END = %111100000000 +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 new file mode 100644 index 00000000..5a354288 --- /dev/null +++ b/topdesk/Main/DeskTop.main.s @@ -0,0 +1,3829 @@ +; 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__ + +.ifdef topdesk128 +.global TypTab +.global SchmalFlag +.endif + + +__STARTUP_RUN__: +Start: +.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 + + 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 + +.ifdef topdesk13 + @t: .byte "SURE",$0d +.endif + +Loadr0AX: sta r0L + stx r0H + rts + +MoveWr0r1: MoveW_ r0,r1 + rts +MoveWr1r0: MoveW_ r1,r0 + rts +OpenDiskFlag: .byte 0 +DiskDriverFlag: .byte 0 + +NewSetDevice: +.ifdef topdesk128 + jmp SetDevice +.else + 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 +.endif + +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 +.ifdef topdesk128 + .byte 21 +.endif +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: + ;brk + nop + 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 +.ifdef topdesk13 +SureFlag: .byte 0 +.endif + +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 +.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 + cmp #$41 + bne @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,-4|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 + wb GraphIndex, 8 +.ifdef lang_de + ww HauptMenu+4,214 +.else + ww HauptMenu+4,182 +.endif +.ifdef lang_de + ww DispMenuRight,214 +.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 +.ifdef lang_de + ww Anzeige_Menue+2+3,57 +.else + ww Anzeige_Menue+2+3,48 +.endif +.ifdef lang_de + ww Anzeige_Menue+4+3,170 +.else + ww Anzeige_Menue+4+3,161 +.endif +.ifdef lang_de + ww Disk_Menue+2+3,98 +.else + ww Disk_Menue+2+3,79 +.endif +.ifdef lang_de + ww Disk_Menue+4+3,180 +.else + ww Disk_Menue+4+3,161 +.endif +.ifdef lang_de + ww WindowMenue+2+3,137 +.else + ww WindowMenue+2+3,103 +.endif +.ifdef lang_de + ww WindowMenue+4+3,256 +.else + ww WindowMenue+4+3,222 +.endif +.ifdef lang_de + ww Speziell_Menue+2+15,174 +.else + ww Speziell_Menue+2+15,145 +.endif +.ifdef lang_de + ww Speziell_Menue+4+15,267 +.else + ww Speziell_Menue+4+15,238 +.endif + .word 0 + +@tab2: + wb IconTab+6,-4|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 +.else + wb GraphIndex,1 +.endif +.ifdef lang_de + ww HauptMenu+4,286 +.else + ww HauptMenu+4,237 +.endif +.ifdef lang_de + ww DispMenuRight,286 +.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 +.else + ww Datei_Menue+2+3,37 +.endif +.ifdef lang_de + ww Datei_Menue+4+3,145 +.else + ww Datei_Menue+4+3,149 +.endif +.ifdef lang_de + ww Anzeige_Menue+2+3,73 +.else + ww Anzeige_Menue+2+3,63 +.endif +.ifdef lang_de + ww Anzeige_Menue+4+3,224 +.else + ww Anzeige_Menue+4+3,214 +.endif +.ifdef lang_de + ww Disk_Menue+2+3,127 +.else + ww Disk_Menue+2+3,103 +.endif +.ifdef lang_de + ww Disk_Menue+4+3,234 +.else + ww Disk_Menue+4+3,213 +.endif +.ifdef lang_de + ww WindowMenue+2+3,177+7 +.else + ww WindowMenue+2+3,134 +.endif +.ifdef lang_de + ww WindowMenue+4+3,332+7 +.else + ww WindowMenue+4+3,293 +.endif +.ifdef lang_de + ww Speziell_Menue+2+15,226+8 +.else + ww Speziell_Menue+2+15,189 +.endif +.ifdef lang_de + ww Speziell_Menue+4+15,346+8 +.else + ww Speziell_Menue+4+15,314 +.endif + .word 0 +.endif + + + +STARTA_X = -4 | 128 +STARTA_Y = 4 +STARTB_X = -4 | 128 +STARTB_Y = 8 +STARTC_X = -4 | 128 +STARTC_Y = 12 +STARTD_X = -4 | 128 +STARTD_Y = 16 + +IconTab: +.ifdef topdesk128 + .byte 0,0,0,0 ; Anzahl wird berechnet + .word TrashMap + .byte -4|128,-4,TrashX+DOUBLE_B,TrashY + .word TrashService + .word PrintMap + .byte 2|128,-4,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 -4|128,-4,TrashX,TrashY + .word TrashService + .word PrintMap + .byte 2|128,-4,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 +.endif + +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 +.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: +.ifdef mega65 + lda $d01d + and #%11111011 + sta $d01d +.else + lda $d01d + ora #%100 + sta $d01d +.endif +@gend: +.endif + 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 + + jsr OpenNext + + rts + +@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 +.ifdef topdesk128 + LoadB r3L,2 +.else + LoadB r3L,1 +.endif + 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 +.ifdef lang_de +@t2: .byte "Datei",NULL +.else +@t2: .byte "file",NULL +.endif +.ifdef lang_de +@t3: .byte "Anzeige",NULL +.else +@t3: .byte "show",NULL +.endif +.ifdef lang_de +@t4: .byte "Diskette",NULL +.else +@t4: .byte "disk",NULL +.endif +.ifdef lang_de +@t5: .byte "Speziell",NULL +.else +@t5: .byte "special",NULL +.endif +.ifdef lang_de +@t6: .byte "Fenster",NULL +.else +@t6: .byte "window",NULL +.endif + +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 +.ifdef lang_de +@t1: .byte "Umbenennen",GOTOX +.else +@t1: .byte "rename",GOTOX +.endif + .word DISKRIGHT-20 + .byte 128,BOLDON,"N",PLAINTEXT,0 +.ifdef lang_de +@t2: .byte "L|schen",GOTOX +.else +@t2: .byte "erase",GOTOX +.endif + .word DISKRIGHT-20 + .byte 128,BOLDON,"E",PLAINTEXT,0 +.ifdef lang_de +@t3: .byte "Formatieren",GOTOX +.else +@t3: .byte "format",GOTOX +.endif + .word DISKRIGHT-20 + .byte 128,BOLDON,"F",PLAINTEXT,0 +.ifdef lang_de +@t4: .byte "Kopieren",GOTOX +.else +@t4: .byte "copy",GOTOX +.endif + .word DISKRIGHT-20 + .byte 128,BOLDON,"K",PLAINTEXT,0 +.ifdef lang_de +@t5: .byte "Aufr{umen",GOTOX +.else +@t5: .byte "validate",GOTOX +.endif + .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 +.ifdef lang_de +@t1: .byte "\ffnen",GOTOX +.else +@t1: .byte "open",GOTOX +.endif + .word DATEIRIGHT-22 + .byte 128,BOLDON,"Z",PLAINTEXT,0 +.ifdef lang_de +@t2: .byte "Duplizieren",GOTOX +.else +@t2: .byte "duplicate",GOTOX +.endif + .word DATEIRIGHT-22 + .byte 128,BOLDON,"H",PLAINTEXT,0 +.ifdef lang_de +@t3: .byte "Umbenennen",GOTOX +.else +@t3: .byte "rename",GOTOX +.endif + .word DATEIRIGHT-22 + .byte 128,BOLDON,"M",PLAINTEXT,0 +.ifdef lang_de +@t4: .byte "Info",GOTOX +.else +@t4: .byte "info",GOTOX +.endif + .word DATEIRIGHT-22 + .byte 128,BOLDON,"Q",PLAINTEXT,0 +.ifdef lang_de +@t5: .byte "Drucken",GOTOX +.else +@t5: .byte "print",GOTOX +.endif + .word DATEIRIGHT-22 + .byte 128,BOLDON,"P",PLAINTEXT,0 +.ifdef lang_de +@t6: .byte "L|schen",GOTOX +.else +@t6: .byte "delete",GOTOX +.endif + .word DATEIRIGHT-22 + .byte 128,BOLDON,"D",PLAINTEXT,0 +.ifdef lang_de +@t7: .byte "Vorsortieren",GOTOX +.else +@t7: .byte "presort",GOTOX +.endif + .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 + mpt @t4,$00,@rout + mpt @t5,$00,@rout + mpt KBytesFlag,$00,@rout2 + mpt @t7,$00,@rout3 +.ifdef topdesk128 + mpt SchmalFlag,$00,SwapSchmal +.endif +.ifdef lang_de +@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 +.else +@t1: .byte "* icons",0 +@t2: .byte " by name",0 +@t3: .byte " by date",0 +@t4: .byte " by size",0 +@t5: .byte " by types",0 +@t7: .byte "* in KBytes",0 +.endif +@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 + +.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 + +.ifdef lang_de +KBytesFlag: .byte " in Bl|cken",0 +.else +KBytesFlag: .byte " in blocks",0 +.endif +.ifdef topdesk128 +.ifdef lang_de +SchmalFlag: .byte " schmale Anzeige",GOTOX +.else +SchmalFlag: .byte " smal display",GOTOX +.endif + .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 + .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 +.ifdef lang_de +@t1: .byte "plazieren",GOTOX +.else +@t1: .byte "place",GOTOX +.endif + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"S",PLAINTEXT,0 +.ifdef lang_de +@t2: .byte "alle schlie~en",GOTOX +.else +@t2: .byte "close all",GOTOX +.endif + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"C",PLAINTEXT,0 +.ifdef lang_de +@t3: .byte "Inhalt anw{hlen",GOTOX +.else +@t3: .byte "select contents",GOTOX +.endif + .word WINWDOWRIGHT-22 + .byte 128,BOLDON,"W",PLAINTEXT,0 +.ifdef lang_de +@t4: .byte "Ausschnitt anw{hlen",GOTOX +.else +@t4: .byte "select certain files",GOTOX +.endif + .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 $84 + 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 +.ifdef lang_de +@t1: .byte "Neuer Ordner",GOTOX +.else +@t1: .byte "new folder",GOTOX +.endif + .word SPCRIGHT-20 + .byte 128,BOLDON,"O",PLAINTEXT,0 +.ifdef lang_de +@t2: .byte "Uhr stellen",GOTOX +.else +@t2: .byte "set clock",GOTOX +.endif + .word SPCRIGHT-20 + .byte 128,BOLDON,"A",PLAINTEXT,0 +.ifdef lang_de +@t3: .byte PLAINTEXT,"RamDeskTop",GOTOX +.else +@t3: .byte PLAINTEXT,"RamDeskTop",GOTOX +.endif + .word SPCRIGHT-20 + .byte 128,BOLDON,"L",PLAINTEXT,0 +.ifdef lang_de +@t4: .byte "Reset",GOTOX +.else +@t4: .byte "reset",GOTOX +.endif + .word SPCRIGHT-20 + .byte 128,BOLDON,"R",PLAINTEXT,0 +@t5: .byte "Basic",0 +;@t2: .byte "Ordner entleeren",0 +;@t4: .byte "Arbeit sichern",0 +.ifdef lang_de +AutoSwapFlag: .byte " autom. Tauschen",0 +.else +AutoSwapFlag: .byte " automatic swap",0 +.endif +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 +.ifdef topdesk128 + lda #2 +.else + lda #1 +.endif + 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 +.ifdef lang_de +@t1: .byte "Kein DeskTop auf den",0 +@t2: .byte "RAM-Disks A und B!",0 +.else +@t1: .byte "DeskTop not present on",0 +@t2: .byte "RAM-Disks A or B!",0 +.endif + +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 +.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 + .word 0,319 +.else + .word 0,319 +.endif +.endif + jsr MaxTextWin + + jsr DoHauptMenu + lda #0 + jsr SetPattern + jsr i_Rectangle +.ifdef topdesk128 +; .word 221+DOUBLE_W,237+DOUBLE_W + ;.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 + jsr FrameRectangle + jmp InitClock + +mode_Menue: + ldx #40 + ldy #8 +@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 + 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 " 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 +@10: + jsr GotoFirstMenu + + lda graphMode + sta oldGraphMode + jsr SetNewMode + jsr SetMyNewMode + jsr SetColor + jsr RedrawHead + jsr DispMultiCount + ;jsr SwitchWin + jmp RedrawAll +@11: + jmp GotoFirstMenu + + +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 +.ifdef topdesk128 + mpt SwitchText,DYN_SUB_MENU, mode_Menue +.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 + 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 +.ifdef topdesk128 +SwitchText: .byte "switch mode",0 +.endif + +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 +.ifdef topdesk128 + adc #02; Men}punktanzahl ermitteln +.else + adc #01; Men}punktanzahl ermitteln +.endif + 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 +.ifdef topdesk128 + dex ; minus "switch" +.endif + 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 + MoveB oldGraphMode, graphMode + jsr SetNewMode +.ifdef topdesk128 + jsr SetMyNewMode +.else + lda c128Flag + bpl @04 + lda graphMode + bpl @04 + eor #$80 + sta graphMode + jsr SetNewMode +.endif +@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' +.ifdef topdesk128 + ShortCutKey 'g' +.endif + .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 +.ifdef topdesk128 + .word SwapSchmal +.endif +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 + +.ifdef 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 +@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 +.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 + + +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 + ;@HOHO: + ;inc $d020 + ;jmp @HOHO + pla + tax + jsr OpenWindow + jsr GetPrefs + lda DiskDriverFlag + bpl OpenNext10 + lda MyCurRec + cmp #1 + bne OpenNext10 + jsr GetDiskDrivers +OpenNext10: rts + +.ifndef topdesk128 +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 + + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX + + rts +@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 + +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 + +.ifndef 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 + bcs @1 + + lda r3H + sub #16 + sta r3H + lda a5H + sub #16 + sta a5H +@1: + AddVW__ 6,r3 + rts + +.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 + +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 + + lda r4H + and #%11110000 + sta r0L + sta r0H + + lda r2H + clc + adc #2 + sta r2L + bcc @11 + lda r0L + add #16 + sta r0L + sta r0H +@11: + clc + adc #8 + sta r2H + bcc @12 + lda r0H + add #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 + sta r11L + lda r3H + adc #00 + sta r11H + + lda r2L + add #7 + sta r1H + bcc @13 + lda r11H + add #16 + sta r11H +@13: + ;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 +.ifdef lang_de +@t1: .byte " Bl|cke",0 +@t2: .byte " KBytes",0 +@t3: .byte " belegt ",0 +@t4: .byte " frei ",0 +.else +@t1: .byte " blocks",0 +@t2: .byte " KBytes",0 +@t3: .byte " used ",0 +@t4: .byte " free ",0 +.endif + +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: +.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 + cmp #$41 ; TODO we should not assume that the $41 is + ; the squashed mode + bne @40 + jsr UseSystemFont +@40: +.endif + dec a7L +@loop: ldx a7L + lda @data,x + sta r1H +.ifdef topdesk128 + +.ifdef scalable_coords + LoadW___ r11,(SC_FROM_END | (-32 & $FF)) + ;LoadW___ r11,272+16 +.else + LoadW___ r11,272+16+DOUBLE_W +.endif +.else + LoadW___ r11,272+16 +.endif + jsr PutDrive + dec a7L + bpl @loop + jsr i_PutString +.ifdef scalable_coords + WordCX 5, SC_FROM_END | (-6 & $FF) + ByteCY 5, SC_FROM_END | (-6 & $FF) + .byte NULL +.else +.ifdef topdesk128 +; .word 5 +DOUBLE_W + .word 5 + .byte 198,0 +.else + .word 5 + .byte 196,0 +.endif +.endif + 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 + + 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 + bne @10 + LoadB @ty,'4' + bne @30 +@10: dey + bne @20 + LoadB @ty,'7' + bne @30 + dey + bne @30 +@20: LoadB @ty,'8' +@30: pla + tax + pha + + lda driveType,x + bpl @40 + lda #PLAINTEXT + sta @nr + sta @nr+1 + LoadW___ r0, @dr +@52: + SubVW_ 10,r11L ; nur low, da immer noch }ber 256 + bra @50 +@51: sty r0L + stx r0H + ;ldx #r11 + ;jsr NormalizeX + SubVW_ 7, r11 + bra @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 + +@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 + 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 +.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 + 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 +.ifdef lang_de +@t1: .byte BOLDON,"Diese Operation kann nicht",0 +@t2: .byte "mit Multi-File ausgef}hrt",0 +@t3: .byte "werden",0 +.else +@t1: .byte BOLDON,"This function can not be",0 +@t2: .byte "carried out under",0 +@t3: .byte "Multi-File",0 +.endif + +;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: +.ifdef topdesk128 + LoadB r3L,2 +.else + LoadB r3L,1 +.endif + MoveW_ a2,r4 + lda MultiCount + cmp #1 + beq @p20a + LoadW___ r4,MultiFileIcon+1 +@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 + ; unclear why this call is here? + ;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 + bra @qend +@q80: +.ifdef mega65 + lda $d01d + and #%11111011 +.else + lda SchmalFlag + cmp #'*' + beq @q40 + lda $d01d + ora #%100 +.endif +@qend: + sta $d01d +.endif + jsr DoneWithIO + rts + +OpenFile: + PushB graphMode + jsr ClearMultiFile2 + jsr MaxTextWin +@04: jsr GetAktlDisk + bcc @05 + jmp @100 +@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 + bne @w10b + jmp @w10 +@w10b: + 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 +@100: + PopB graphMode + jsr SetNewMode + rts +@w09: ldx activeWindow + jsr GetSubDirXList + jsr UpperDir + LoadB OpenNextNr+1,0 + bra @100 +@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: + PopB graphMode + jsr SetNewMode + jsr SetColor + jsr RedrawHead + jsr RedrawAll + rts +@15: cmp #14 ; INCOMPATIBLE + bne @16b + jsr StashMain + jsr TestTopDesk + bcc @18b + jmp @18 +@18b: + 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 +@16b2: + lda #0 + ldx graphMode + cpx #$40 + bne @04b +@04b2: + sta graphMode + jsr SetNewMode + jmp @04 + +@16c: cmp #20 ; force col80 + bne @16d +@16c2: + lda #$80 + 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 + beq @16b2 +@16e: + bra @16c2 +@16: + cpx #15 + bne @17 + jsr SetNumDrives + jsr MaxTextWin + LoadWr0 @db + jsr NewDoDlgBox + bra @200 +@17: cpx #16 + bne @18 + jsr SetNumDrives + jsr MaxTextWin + LoadWr0 @db2 + jsr NewDoDlgBox + bra @200 +@18: ; bei x=18 ist auf RAM A und B kein DeskTop gewesen! + jsr SetNumDrives +@200: + jmp @100 +@db: .byte $81 + .byte $0b,$10,$10 + .word @t1 + .byte $0b,$10,$20 + .word @t2 + .byte OK,17,72,NULL +.ifdef lang_de +@t1: .byte "Dieses Programm ist nur",0 +@t2: .byte "unter GEOS 64 lauff{hig.",0 +.else +@t1: .byte "This programme only works",0 +@t2: .byte "together with GEOS 64.",0 +.endif +@db2: .byte $81 + .byte $0b,$10,$10 + .word @t1b + .byte $0b,$10,$20 + .word @t2b + .byte OK,17,72,NULL +.ifdef lang_de +@t1b: .byte "Programmstart von Laufwerk",0 +@t2b: .byte "C bzw. D nicht m|glich.",0 +.else +@t1b: .byte "A Programme start from either drive",0 +@t2b: .byte "C or D is not possible.",0 +.endif +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 + +.ifndef 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,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 +.endif + +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 +.ifdef topdesk128 + lda #2 +.else + lda #1 +.endif + 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 +.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.sub.s b/topdesk/Main/DeskTop.sub.s new file mode 100644 index 00000000..7124a78f --- /dev/null +++ b/topdesk/Main/DeskTop.sub.s @@ -0,0 +1,353 @@ +; 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 +.ifdef lang_de +@t1: .byte "Inhalt von",NULL +@t2: .byte "l|schen?",NULL +.else +@t1: .byte "Erase contents of",NULL +@t2: .byte "?",NULL +.endif + +.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..c1dfbd83 --- /dev/null +++ b/topdesk/Main/DeskTop.sub2.s @@ -0,0 +1,246 @@ +.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 +.ifdef topdesk128 +; .word 54+DOUBLE_W,265+DOUBLE_W +; .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 + .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 +.ifdef lang_de +@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 6.0",0 +@t2: .byte "written by",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 +.endif + +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 +.ifdef lang_de +@t1: .byte "Neuen Filenamen eingeben:",0 +@t2: .byte 0,"Name schon vergeben!",PLAINTEXT,0 +.else +@t1: .byte "Enter new file name:",0 +@t2: .byte 0,"Name already in use!",PLAINTEXT,0 +.endif + +ModEnde: +DuplCopyMem = >(ModEnde+$100) diff --git a/topdesk/Main/DeskTop.sub3.s b/topdesk/Main/DeskTop.sub3.s new file mode 100644 index 00000000..1e7dd050 --- /dev/null +++ b/topdesk/Main/DeskTop.sub3.s @@ -0,0 +1,758 @@ +.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 +.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 + 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..dcfcaa71 --- /dev/null +++ b/topdesk/Main/DeskTop.sub4.s @@ -0,0 +1,412 @@ +.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 + +.ifdef topdesk128 +.global TypTab +.endif + +SubDir2List = SubDir1List + 64 +SubDir3List = SubDir2List + 64 +SubDir4List = SubDir3List+ 64 +MultiFileTab = SubDir4List+64 +Name = MultiFileTab + 145 + +; FileBox-Position: +FIB_OBEN = 40 +FIB_UNTEN = 180 +.ifdef topdesk128 +;FIB_LINKS = 70+DOUBLE_W +;FIB_RECHTS = 250+DOUBLE_W +FIB_LINKS = 70 +FIB_RECHTS = 250 +.else +FIB_LINKS = 70 +FIB_RECHTS = 250 +.endif +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 graphMode + cmp #$41 + bne @2 + lsr r1L +@2: + 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 +.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 + 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 + 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 +.ifdef lang_de +@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 +.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,(%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 + 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 +.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,(%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 + 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 + 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 + 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 + 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 + beq @l10 + jsr InvertRectangle +@l10: rts +@Check: lda mouseData + bne @c05 + rts +@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 + 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 + +.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 +@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 +.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: +.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..c4c1bbcd --- /dev/null +++ b/topdesk/Main/DeskTop.sub5.s @@ -0,0 +1,561 @@ +.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 +.ifdef topdesk128 +.global SchmalFlag +.endif + +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 + bcc @09 + clc + lda a4H + adc #16 + sta a4H + clc + lda a5H + adc #16 + sta a5H + +@09: + 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 + bcc @009 + lda r4H + add #16 + sta r4H +@009: + jsr GetClipRec +.if 0 +.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 +.endif + jsr CutRec + bcs @005 + MoveW_ a2,r0 + MoveW_ a4,r10 + LoadB r13L,3 ; Breite immer 3 + LoadB r13H,21 ; H|he immer 21 +.if 0 +.ifdef topdesk128 + lda SchmalFlag + cmp #'*' + beq @sc20 + lda r10H + ora #$80 + sta r10H + LoadB r13L, $83 +@sc20: +.endif +.endif + ldx a3H + 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 +@005: + lda a4L + clc + adc #12 + sta r11L + lda a4H + adc #00 + sta r11H +.if 0 +.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 +.endif + 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 +.ifdef topdesk128 + adc @scy +.else + adc #27 +.endif + sta r1H + bcc @19 + clc + lda r11H + adc #16 + sta r11H +@19: + lda r11L + sta r3L + clc + adc r4L + sta r4L + lda r11H + 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 + 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 + 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 +@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 + jsr DispMarking +@e10: jsr UseSystemFont + ldx #0 + rts +@sub1: lda a5L + clc + adc #30 + sta a4L + 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 + 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 +.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 + 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 + bcc @10b + lda r11H + add #16 + sta r11H +@10b: + 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 + + lda r3L + clc + adc #23 + sta r4L + lda r3H + adc #00 + sta r4H + ; Jetzt steht in r4 die rechte x-Koordinate + +.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 +.endif +@sc10: + 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 + 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..5b609904 --- /dev/null +++ b/topdesk/Main/DeskTop.sub6.s @@ -0,0 +1,634 @@ +.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 + +.ifdef topdesk128 +.global TypTab +.endif + +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 +.ifdef topdesk128 +@ssub: + sta r11L +; LoadB r11H, >DOUBLE_W + LoadB r11H, >0 + 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 + sta r11L + lda a3H + adc #0 + sta r11H +.endif + ldy #4 + lda (a6),y + asl + tax + lda TypTab,x + sta r0L + lda TypTab+1,x + sta r0H + jsr NewPutString +.ifdef topdesk128 + lda #170 + jsr @ssub +.else + lda a3L + clc + adc #170 + sta r11L + lda a3H + adc #0 + sta r11H +.endif + 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 +.ifdef topdesk128 + lda #203 + jsr @ssub +.else + lda a3L + clc + adc #203 + sta r11L + lda a3H + adc #0 + sta r11H +.endif + 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 +.ifdef topdesk128 + lda #225 + jsr @ssub +.else + lda a3L + clc + adc #225 + sta r11L + lda a3H + adc #0 + sta r11H +.endif + 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 +.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 +@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 +.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 + ; 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..ae8c0db2 --- /dev/null +++ b/topdesk/Main/DeskTop.sub7.s @@ -0,0 +1,689 @@ +.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 + ldx #0 +@rts: rts +@Prnt8: + lda c128Flag + bpl @Prnt8a + jsr DA1 +.ifndef mega65 + 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 +.endif +@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 +.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 + sta r10L + jmp GetFile + +StashDrivers: + rts + 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: +.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 + 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 +.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 + 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 +.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 + 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 +.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 ".",0 +@t3: .byte "and enter name:",0 +.endif +@icontab: .word @icon1,@icon2,@icon3,@icon4 +@icon1: .word IconA,0 + .byte 128|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 +.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: +.incbin "topdesk/IconB.map" +IconC: +.incbin "topdesk/IconC.map" +IconD: +.incbin "topdesk/IconD.map" + +.ifdef topdesk128 +ICON_X = 2+DOUBLE_B +.else +ICON_X = 2 +.endif +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 + +.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 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..dc99d7c0 --- /dev/null +++ b/topdesk/Main/DeskTop.sub9.s @@ -0,0 +1,467 @@ +.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 +.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 + 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..2c18f566 --- /dev/null +++ b/topdesk/Main/DeskWindows.akt.inc @@ -0,0 +1,2928 @@ +; 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 +.ifdef topdesk128 +.ifdef topdesk13 +.ifdef mega65 +MyClass: .byte "TopDesk65 V6.0",0 +.else +MyClass: .byte "TopDesk128 V1.3",0 +.endif +.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 + +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 +.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 + 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 + +.ifdef topdesk128 +RightMax: .word 639 +GraphIndex: .byte 1 +.endif + +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 + lda #1 + sta cutDebug + jsr CutRec + + php + MoveW r2, $88ee + MoveW r3, $88ee+2 + MoveW r4, $88ee+4 + plp + + bcc @n10 + lda #0 + sta cutDebug + rts +@n10: +lda #0 +sta cutDebug + + + 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 + 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 + 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 + 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 + 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 SC_FROM_END|0, SC_FROM_END|0 + WordCX 0, 0 + WordCX SC_FROM_END|0, SC_FROM_END|0 +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: + lda a5H + and #%11110000 + 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 + sbc #1+BREITEX*2 + 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 + 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 +.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) + 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 r3H + tay + and #%00001111 + sta r3H + lda mouseXPos + sec + sbc r3L + sta moveKoords+7 + lda mouseXPos+1 + and #%00001111 + sbc r3H + and #%00001111 + sta moveKoords+8 + + 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_ screenMaxX, 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 + adc #Grenze_oben + sta mouseTop + + ; unterer Rand = 199 - (yu-yo) + MausYOffSet + ; = 199 - yu + yo + MausYOffSet + MoveW screenMaxY, r12 + + 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 r3H + sta r12H + clc + lda r12L + adc moveKoords + sta r12L + lda r12H + adc r3L + sta r12H + + lda mouseRight + 1 + and #%00001111 + sta mouseRight + 1 + + clc + 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 +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 mouseXPos,@mx + bne @20 ; >ja + lda mouseYPos + cmp @my + bne @20 ; >nein + jmp @30 +@20: ldy #05 ; Altes Rechteck l|schen +@25: lda moveKoords,y + sta r2,y + 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 + lda r12H + sbc r12L + sta r0L + + lda r2L + clc + adc r2H ; aus h mach yu + sta r2H + 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 + sta moveKoords,y + dey + bpl @27 + jsr InvFrame + + MoveW_ mouseXPos,@mx + MoveB mouseYPos,@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,mouseXPos ; mouseX + MoveB r2H,mouseYPos ; mouseY + ; oberer Rand = yo + 40 + lda r2L + clc + adc #40 + sta mouseTop + sta r2H + ; unterer Rand und rechter Rand auf Maximum +.ifdef topdesk128 + MoveW screenMaxX, mouseRight +.else + LoadW___ mouseRight,319 +.endif + MoveB screenMaxY, mouseBottom + lda screenMaxY + 1 + asl + asl + asl + asl + ora mouseRight + 1 + sta mouseRight + 1 + + ; linker Rand = ml + 40 + lda moveKoords+2 + clc + adc #40 + sta mouseLeft + lda moveKoords+3 + adc #00 + sta mouseLeft+1 + MoveB mouseYPos,r2H + sta moveKoords+1 + lda mouseXPos + sta moveKoords+4 + sta r4L + lda mouseXPos+1 + 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 mouseXPos,@mx + bne @20 ; >ja + lda mouseYPos + 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_ mouseXPos,r4 + MoveB mouseYPos,r2H + + 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 + 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 +.ifdef topdesk128 + ldy #03 +.else + ldy #05 +.endif +@29: lda @d,y + sta mouseTop,y + dey + bpl @29 +.ifdef topdesk128 + MoveW_ screenMaxX, mouseRight + MoveB screenMaxY, mouseBottom + lda screenMaxY + asl + asl + asl + asl + ora mouseRight+1 + sta mouseRight+1 +.endif + 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,$4b +.ifdef topdesk128 + .byte 0, 0 +.else + .word 0,319 +.endif +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 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 +@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 +cutDebug: .byte 0 +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 + + 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 + MoveB r6L, r3L + lda r6H + and #%00001111 + sta r3H +@10: ; r2L = MAX (r2L,r5L) + lda r5L + sec + sbc r2L + 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 + MoveB r7L, r4L + lda r7H + and #%00001111 + sta r4H +@30: ; r2H = MIN (r2H,r5H) + lda r5H + sec + sbc r2H + 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? + 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 +.ifdef topdesk128 +@off80: .byte 0 +.endif +@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 +.ifdef topdesk128 + sta r4L + lda @off80 + sta r3L +.else + 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: + ldx r13L + + lda leftMargin+1 + lsr + lsr + lsr + lsr + sta r13L + + sec + lda r2L + sbc windowTop + lda r2H + sbc r13L + bmi @02 ; >nein + + lda rightMargin+1 + lsr + lsr + lsr + lsr + sta r13L + + sec ; Zeile }ber windowBottom + lda r2L + sbc windowBottom + lda r2H + sbc r13L + bmi @03 ; >ja +; LoadB r13H,1 ; Anzeige anbrechen +@02: LoadB winOutFlag,1 ; Zeile nicht anzeigen +@03: stx r13L + PushW r13 + PushB r14L + PushB r15L + 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: +.ifdef topdesk128 + 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 + 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: +.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 + 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 +.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: +.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 + eor #%111 + tax + lda r14L + and BitMaske1,x + 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 +@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 + + 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 + asl + rol r10H + asl + rol r10H + asl + rol r10H + ldy r10H + tax + + lda r10L + 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 + 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 + rol r10H + asl r10L + rol r10H + jsr DrawMap ; Bitmap darstellen + dec @num + beq @11 + jmp @20 ; und mit n{chstem Icon weitermachen +@11: + 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 +.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 + 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 +.ifdef topdesk128 + .word 0 +.else + .word 0,270 +.endif +.ifdef topdesk128 +@wx: .word 270*2 +.endif +@w2: .byte 50,150 + .word 100,219 + +NewPutString: +@11: +.ifdef topdesk128 + ldx #r11 + jsr NormalizeX + ldx #r11 + ldy #r1H + jsr NormalizeY +.endif + 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 @11 +@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 + +.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 +@loop: lda LastRec,y + sta r2L,y + dey + bpl @loop +Recover: lda c128Flag + bpl @10 + ldx #r3 + jsr NormalizeX + ldx #r4 + jsr NormalizeX +@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 + cmp #$41 + bne @z40 + tya + clc + adc r4L + sta r4L + lda #0 + adc r4H + sta r4H +@z40: +.endif + 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 +.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 + 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 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 00000000..1f7ce117 Binary files /dev/null and b/topdesk/MultiFileIcon.bf differ diff --git a/topdesk/PrintMap.bf b/topdesk/PrintMap.bf new file mode 100644 index 00000000..dc754067 Binary files /dev/null and b/topdesk/PrintMap.bf differ 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 00000000..b68dff6a Binary files /dev/null and b/topdesk/Temp.bf differ diff --git a/topdesk/TextSprite.bf b/topdesk/TextSprite.bf new file mode 100644 index 00000000..7df39582 Binary files /dev/null and b/topdesk/TextSprite.bf differ diff --git a/topdesk/TopDeskIcon.bf b/topdesk/TopDeskIcon.bf new file mode 100644 index 00000000..298598a1 Binary files /dev/null and b/topdesk/TopDeskIcon.bf differ diff --git a/topdesk/TrashMap.bf b/topdesk/TrashMap.bf new file mode 100644 index 00000000..f09cab08 Binary files /dev/null and b/topdesk/TrashMap.bf differ diff --git a/topdesk/WinInclude/InvFrame.inc b/topdesk/WinInclude/InvFrame.inc new file mode 100644 index 00000000..cc6a9250 --- /dev/null +++ b/topdesk/WinInclude/InvFrame.inc @@ -0,0 +1,165 @@ +InvFrame: + ; Parameter: r2-r4 Akku: Muster + ; Zur}ck: ---- + ; Zerst|rt: r0,r1,r5-r7,a,x,y + 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 + 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 + lda r4H + and #%11110000 + ora r3H + sta r3H + jsr InvertLine + PopB r3H + PopW r11 + PopW r8 + rts + +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 + + ;ldx r0L + jsr GetScanLine ; Card + + lda r3L + and #%11111000 + clc + adc r5L + sta r6L + lda r3H + and #%00001111 + adc r5H + sta r6H ; card address in r3 -> r6 + + lda r4L + and #%11111000 + clc + adc r5L + sta r5L + lda r4H + and #%00001111 + adc r5H + sta r5H ; card address in r4 -> r5 +@cardLoop: + ldy #0 + lda (r6),y + eor r1L + sta (r6),y + lda (r5),y + eor r1H + sta (r5),y + + lda r2H + cmp r0L + beq @end +@next: + inc r0L + bne @noover + clc + lda r0H + adc #16 + sta r0H +@noover: + inc r5L + inc r6L + + ; end of card + lda r5L + and #%00000111 + bne @cardLoop + + ; end of card we need to advance + ; by one scan line + bra @loop +@end: + lda r4H + and #%11110000 + cmp r0H + bne @next + + rts + +Masken: .byte 128,64,32,16,8,4,2,1 + +SetReg: stx $d600 +@wait: bit $d600 + bpl @wait + sta $d601 + rts +GetReg: stx $d600 +@wait: bit $d600 + bpl @wait + lda $d601 + rts + + \ No newline at end of file diff --git a/topdesk/WinInclude/SpeedFrame.inc b/topdesk/WinInclude/SpeedFrame.inc new file mode 100644 index 00000000..93a8b072 --- /dev/null +++ b/topdesk/WinInclude/SpeedFrame.inc @@ -0,0 +1,275 @@ +Schrw = 15 + +;SpeedFrame +;Par: r2L - y-oben +; r2H - y-unten +; r3 - x-links +; r4 - x-rechts +; r10L - Ziely-oben (r5L) +; r10H - Ziely-unten (r5H) +; r11 - Zielx-links (r6) +; r12 - Zielx-rechts (r7) +;Des: r0 bis r13 +SpeedFrame: +.ifdef topdesk128 +.ifndef mega65 + lda graphMode + bpl @z40 + rts +.endif +@z40: +.endif + + ; **** Verschiebung von r5-r7 nach r10-r12 + ldx #5 +@e10: lda r5L,x + sta r10L,x + dex + bpl @e10 + + ; **** + ; 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 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 + sta r11L,y + lda r11H,y + sbc r3H,y + sta r11H,y + 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 + inx + inx + cpx #r14 + bcc @30 + + ldx #0 +@40: lda r2,x + pha + inx + cpx #6 + bcc @40 + jsr @60 + ldx #5 +@50: pla + sta r2,x + dex + bpl @50 +@60: LoadB r8L,Schrw +@100: jsr InvFrame + + ; 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 + 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 + and #$0F + sta r3H,y + txa + ora r3H,y + sta r3H,y + dey + dey + bpl @120 + + lda dblClickCount + bne @w1 + LoadB dblClickCount, 1 +@w1: lda dblClickCount + bne @w1 + dec r8L + beq @100a + jmp @100 +@100a: + rts diff --git a/topdesk/topdesk.cfg b/topdesk/topdesk.cfg new file mode 100644 index 00000000..420709f4 --- /dev/null +++ b/topdesk/topdesk.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 = $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/topdesk.grc b/topdesk/topdesk.grc new file mode 100644 index 00000000..8938352e --- /dev/null +++ b/topdesk/topdesk.grc @@ -0,0 +1,11 @@ +HEADER APPLICATION "DESK TOP" "TopDesk" "V1.2" { + 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 +} diff --git a/topdesk/topdesk65.grc b/topdesk/topdesk65.grc new file mode 100644 index 00000000..68dd08d2 --- /dev/null +++ b/topdesk/topdesk65.grc @@ -0,0 +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 +} diff --git a/topdesk/university6.fnt b/topdesk/university6.fnt new file mode 100644 index 00000000..5567981c Binary files /dev/null and b/topdesk/university6.fnt differ