Mercurial > hg > Members > kono > nitros9-code
changeset 2872:dbc6d0647ac4
Rename various dw3 files to dw
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Sun, 24 Nov 2013 12:07:31 +0100 |
parents | 5f54794048cb |
children | 46c80d4b0de1 |
files | level1/coco/bootlists/dw.bl level1/coco/bootlists/dw3.bl level1/coco/bootlists/dw3_coco1.bl level1/coco/bootlists/dw_coco1.bl level1/coco/scripts/mb.dw level1/coco/scripts/mb.dw3 level1/coco/scripts/mb.dw3_coco1 level1/coco/scripts/mb.dw_coco1 level1/modules/boot_dw.asm level1/modules/boot_dw3.asm level1/modules/clock2_dw.asm level1/modules/clock2_dw3.asm level1/modules/dw.asm level1/modules/dw3.asm level1/modules/dw3mess.asm level1/modules/dwmess.asm level1/modules/rbdw.asm level1/modules/rbdw3.asm level2/coco3/bootlists/dw.bl level2/coco3/bootlists/dw3.bl level2/coco3/scripts/mb.dw level2/coco3/scripts/mb.dw3 level2/coco3_6309/bootlists/dw.bl level2/coco3_6309/bootlists/dw3.bl level2/coco3_6309/scripts/mb.dw level2/coco3_6309/scripts/mb.dw3 |
diffstat | 26 files changed, 2948 insertions(+), 2948 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/coco/bootlists/dw.bl Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,191 @@ +*************************************** +* NitrOS-9 Level 1 CoCo Bootlist +* +* $Id$ +* +* This bootlist is presented as an example for creating custom bootfiles. +* A module may be excluded from the bootfile if an asterisk (*) is the +* first character of the line. +* +*************************************** +* Kernel/System Section +* +* These modules are mandatory. +../MODULES/SYSMODS/ioman +* +*************************************** +* CDF Section (HawkSoft) +* +*../MODULES/CDF/cdf.mn +* +* CDF descriptors - select as needed +* SCSI descriptors (IDs 0-6) +*../MODULES/CDF/sc0.dd +*../MODULES/CDF/sc1.dd +*../MODULES/CDF/sc2.dd +*../MODULES/CDF/sc3.dd +*../MODULES/CDF/sc4.dd +*../MODULES/CDF/sc5.dd +*../MODULES/CDF/sc6.dd +* IDE descriptors (master/slave) +*../MODULES/CDF/ic0.dd +*../MODULES/CDF/ic1.dd +* +*************************************** +* RBF Section +* +../MODULES/RBF/rbf.mn +* +* DriveWire 3 RBF driver +../MODULES/RBF/rbdw3.dr +../MODULES/RBF/dw3.sb +*../MODULES/RBF/dw3_coco1.sb +* DriveWire descriptors - select as needed +../MODULES/RBF/ddx0.dd +*../MODULES/RBF/x0.dd +../MODULES/RBF/x1.dd +../MODULES/RBF/x2.dd +../MODULES/RBF/x3.dd +* +* SuperDriver Package +*../MODULES/RBF/rbsuper.dr +* Select Low level SCSI and/or IDE driver +*../MODULES/RBF/lltc3.dr +*../MODULES/RBF/llide.dr +* SuperDriver descriptors - select as needed +* TC^3 SCSI DD Descriptor (ID 0) +*../MODULES/RBF/dds0_tc3.dd +* TC^3 SCSI descriptors (IDs 0-6) +*../MODULES/RBF/s0_tc3.dd +*../MODULES/RBF/s1_tc3.dd +*../MODULES/RBF/s2_tc3.dd +*../MODULES/RBF/s3_tc3.dd +*../MODULES/RBF/s4_tc3.dd +*../MODULES/RBF/s5_tc3.dd +*../MODULES/RBF/s6_tc3.dd +* TC^3 SCSI HDB-DOS descriptor +*../MODULES/RBF/sh_tc3.dd +* IDE DD descriptor (Master) +*../MODULES/RBF/ddi0_ide.dd +* IDE descriptors (master/slave) +*../MODULES/RBF/i0_ide.dd +*../MODULES/RBF/i1_ide.dd +* IDE HDB-DOS descriptor +*../MODULES/RBF/ih_ide.dd +* +* WD1773 floppy support for Tandy and compatible disk controllers +../MODULES/RBF/rb1773.dr +* WD1773 floppy support for Disto Super Controller II +*../MODULES/RBF/rb1773_scii_ff74.dr +*../MODULES/RBF/rb1773_scii_ff58.dr +* Floppy device descriptors +* DD - default device - choose one if needed +*../MODULES/RBF/ddd0_35s.dd +*../MODULES/RBF/ddd0_40d.dd +*../MODULES/RBF/ddd0_80d.dd +* D0 - drive 0 - choose one if needed +*../MODULES/RBF/d0_35s.dd +../MODULES/RBF/d0_40d.dd +*../MODULES/RBF/d0_80d.dd +* D1 - drive 1 - choose one if needed +*../MODULES/RBF/d1_35s.dd +../MODULES/RBF/d1_40d.dd +*../MODULES/RBF/d1_80d.dd +* D2 - drive 2 - choose one if needed +*../MODULES/RBF/d2_35s.dd +../MODULES/RBF/d2_40d.dd +*../MODULES/RBF/d2_80d.dd +* D3 - drive 3 - choose if needed +*../MODULES/RBF/d3_35s.dd +*************************************** +* SCF Section +* +../MODULES/SCF/scf.mn +* +* Video Terminal I/O driver and subroutine modules +../MODULES/SCF/vtio.dr +* Choose from CoVDG (32x16 VDG) or CoHR (Hi-Res 51x24 graphics screen) +../MODULES/SCF/covdg.io +*../MODULES/SCF/cohr.io +* +* Select only one term descriptor +../MODULES/SCF/term32.dt +*../MODULES/SCF/term51.dt +*../MODULES/SCF/term_scbbt.dt +*../MODULES/SCF/term_sc6551.dt +* +* Serial port drivers +* CoCo Bit-Banger terminal port +*../MODULES/SCF/scbbt.dr +*../MODULES/SCF/t1_scbbt.dd +* 6551 ACIA +*../MODULES/SCF/sc6551.dr +*../MODULES/SCF/t2_sc6551.dd +*../MODULES/SCF/t3_sc6551.dd +* +* Printer drivers +* ../MODULES/SCF/scbbp.dr +* ../MODULES/SCF/p_scbbp.dd +* +* DriveWire 3 Printer drivers +* ../MODULES/SCF/scdwp.dr +* ../MODULES/SCF/p_scdwp.dd +* +* DriveWire Networking +*../MODULES/SCF/scdwn.dr +*../MODULES/SCF/term_scdwn.dt +*../MODULES/SCF/n_scdwn.dd +*../MODULES/SCF/n1_scdwn.dd +*../MODULES/SCF/n2_scdwn.dd +*../MODULES/SCF/n3_scdwn.dd +*../MODULES/SCF/n4_scdwn.dd +*../MODULES/SCF/n5_scdwn.dd +*../MODULES/SCF/n6_scdwn.dd +*../MODULES/SCF/n7_scdwn.dd +*../MODULES/SCF/n8_scdwn.dd +*../MODULES/SCF/n9_scdwn.dd +*../MODULES/SCF/n10_scdwn.dd +*../MODULES/SCF/n11_scdwn.dd +*../MODULES/SCF/n12_scdwn.dd +*../MODULES/SCF/n13_scdwn.dd +*../MODULES/SCF/n14_scdwn.dd +* +*************************************** +* Pipe Section +* +* Pipes are a useful but optional part of a system. +../MODULES/PIPE/pipeman.mn +../MODULES/PIPE/piper.dr +../MODULES/PIPE/pipe.dd +* +*************************************** +* Clock Section +* +* Select one clock module depending upon your power line frequency +* (60Hz = USA/Canada; 50Hz = Europe, Australia) +../MODULES/CLOCKS/clock_60hz +*../MODULES/CLOCKS/clock_50hz +* Select one clock2 module that supports your real-time clock, if any. +* Besides support for the internal software clock, the following +* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, +* Eliminator, Harris, SmartWatch, Cloud-9, the MESS emulator, Jeff +* Vavasour's CoCo emulator, and DriveWire. +*../MODULES/CLOCKS/clock2_soft +*../MODULES/CLOCKS/clock2_bnb +*../MODULES/CLOCKS/clock2_disto2 +*../MODULES/CLOCKS/clock2_disto4 +*../MODULES/CLOCKS/clock2_elim +*../MODULES/CLOCKS/clock2_harris +*../MODULES/CLOCKS/clock2_smart +*../MODULES/CLOCKS/clock2_jvemu +*../MODULES/CLOCKS/clock2_messemu +*../MODULES/CLOCKS/clock2_cloud9 +../MODULES/CLOCKS/clock2_dw3 +* +*************************************** +* System Kick-Start Module +* +* Choose which startup module you wish to use. (sysgo_dd is recommended +* for most configurations.) +../MODULES/SYSMODS/sysgo_dd +*../MODULES/SYSMODS/sysgo_h0
--- a/level1/coco/bootlists/dw3.bl Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -*************************************** -* NitrOS-9 Level 1 CoCo Bootlist -* -* $Id$ -* -* This bootlist is presented as an example for creating custom bootfiles. -* A module may be excluded from the bootfile if an asterisk (*) is the -* first character of the line. -* -*************************************** -* Kernel/System Section -* -* These modules are mandatory. -../MODULES/SYSMODS/ioman -* -*************************************** -* CDF Section (HawkSoft) -* -*../MODULES/CDF/cdf.mn -* -* CDF descriptors - select as needed -* SCSI descriptors (IDs 0-6) -*../MODULES/CDF/sc0.dd -*../MODULES/CDF/sc1.dd -*../MODULES/CDF/sc2.dd -*../MODULES/CDF/sc3.dd -*../MODULES/CDF/sc4.dd -*../MODULES/CDF/sc5.dd -*../MODULES/CDF/sc6.dd -* IDE descriptors (master/slave) -*../MODULES/CDF/ic0.dd -*../MODULES/CDF/ic1.dd -* -*************************************** -* RBF Section -* -../MODULES/RBF/rbf.mn -* -* DriveWire 3 RBF driver -../MODULES/RBF/rbdw3.dr -../MODULES/RBF/dw3.sb -*../MODULES/RBF/dw3_coco1.sb -* DriveWire descriptors - select as needed -../MODULES/RBF/ddx0.dd -*../MODULES/RBF/x0.dd -../MODULES/RBF/x1.dd -../MODULES/RBF/x2.dd -../MODULES/RBF/x3.dd -* -* SuperDriver Package -*../MODULES/RBF/rbsuper.dr -* Select Low level SCSI and/or IDE driver -*../MODULES/RBF/lltc3.dr -*../MODULES/RBF/llide.dr -* SuperDriver descriptors - select as needed -* TC^3 SCSI DD Descriptor (ID 0) -*../MODULES/RBF/dds0_tc3.dd -* TC^3 SCSI descriptors (IDs 0-6) -*../MODULES/RBF/s0_tc3.dd -*../MODULES/RBF/s1_tc3.dd -*../MODULES/RBF/s2_tc3.dd -*../MODULES/RBF/s3_tc3.dd -*../MODULES/RBF/s4_tc3.dd -*../MODULES/RBF/s5_tc3.dd -*../MODULES/RBF/s6_tc3.dd -* TC^3 SCSI HDB-DOS descriptor -*../MODULES/RBF/sh_tc3.dd -* IDE DD descriptor (Master) -*../MODULES/RBF/ddi0_ide.dd -* IDE descriptors (master/slave) -*../MODULES/RBF/i0_ide.dd -*../MODULES/RBF/i1_ide.dd -* IDE HDB-DOS descriptor -*../MODULES/RBF/ih_ide.dd -* -* WD1773 floppy support for Tandy and compatible disk controllers -../MODULES/RBF/rb1773.dr -* WD1773 floppy support for Disto Super Controller II -*../MODULES/RBF/rb1773_scii_ff74.dr -*../MODULES/RBF/rb1773_scii_ff58.dr -* Floppy device descriptors -* DD - default device - choose one if needed -*../MODULES/RBF/ddd0_35s.dd -*../MODULES/RBF/ddd0_40d.dd -*../MODULES/RBF/ddd0_80d.dd -* D0 - drive 0 - choose one if needed -*../MODULES/RBF/d0_35s.dd -../MODULES/RBF/d0_40d.dd -*../MODULES/RBF/d0_80d.dd -* D1 - drive 1 - choose one if needed -*../MODULES/RBF/d1_35s.dd -../MODULES/RBF/d1_40d.dd -*../MODULES/RBF/d1_80d.dd -* D2 - drive 2 - choose one if needed -*../MODULES/RBF/d2_35s.dd -../MODULES/RBF/d2_40d.dd -*../MODULES/RBF/d2_80d.dd -* D3 - drive 3 - choose if needed -*../MODULES/RBF/d3_35s.dd -*************************************** -* SCF Section -* -../MODULES/SCF/scf.mn -* -* Video Terminal I/O driver and subroutine modules -../MODULES/SCF/vtio.dr -* Choose from CoVDG (32x16 VDG) or CoHR (Hi-Res 51x24 graphics screen) -../MODULES/SCF/covdg.io -*../MODULES/SCF/cohr.io -* -* Select only one term descriptor -../MODULES/SCF/term32.dt -*../MODULES/SCF/term51.dt -*../MODULES/SCF/term_scbbt.dt -*../MODULES/SCF/term_sc6551.dt -* -* Serial port drivers -* CoCo Bit-Banger terminal port -*../MODULES/SCF/scbbt.dr -*../MODULES/SCF/t1_scbbt.dd -* 6551 ACIA -*../MODULES/SCF/sc6551.dr -*../MODULES/SCF/t2_sc6551.dd -*../MODULES/SCF/t3_sc6551.dd -* -* Printer drivers -* ../MODULES/SCF/scbbp.dr -* ../MODULES/SCF/p_scbbp.dd -* -* DriveWire 3 Printer drivers -* ../MODULES/SCF/scdwp.dr -* ../MODULES/SCF/p_scdwp.dd -* -* DriveWire Networking -*../MODULES/SCF/scdwn.dr -*../MODULES/SCF/term_scdwn.dt -*../MODULES/SCF/n_scdwn.dd -*../MODULES/SCF/n1_scdwn.dd -*../MODULES/SCF/n2_scdwn.dd -*../MODULES/SCF/n3_scdwn.dd -*../MODULES/SCF/n4_scdwn.dd -*../MODULES/SCF/n5_scdwn.dd -*../MODULES/SCF/n6_scdwn.dd -*../MODULES/SCF/n7_scdwn.dd -*../MODULES/SCF/n8_scdwn.dd -*../MODULES/SCF/n9_scdwn.dd -*../MODULES/SCF/n10_scdwn.dd -*../MODULES/SCF/n11_scdwn.dd -*../MODULES/SCF/n12_scdwn.dd -*../MODULES/SCF/n13_scdwn.dd -*../MODULES/SCF/n14_scdwn.dd -* -*************************************** -* Pipe Section -* -* Pipes are a useful but optional part of a system. -../MODULES/PIPE/pipeman.mn -../MODULES/PIPE/piper.dr -../MODULES/PIPE/pipe.dd -* -*************************************** -* Clock Section -* -* Select one clock module depending upon your power line frequency -* (60Hz = USA/Canada; 50Hz = Europe, Australia) -../MODULES/CLOCKS/clock_60hz -*../MODULES/CLOCKS/clock_50hz -* Select one clock2 module that supports your real-time clock, if any. -* Besides support for the internal software clock, the following -* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, -* Eliminator, Harris, SmartWatch, Cloud-9, the MESS emulator, Jeff -* Vavasour's CoCo emulator, and DriveWire. -*../MODULES/CLOCKS/clock2_soft -*../MODULES/CLOCKS/clock2_bnb -*../MODULES/CLOCKS/clock2_disto2 -*../MODULES/CLOCKS/clock2_disto4 -*../MODULES/CLOCKS/clock2_elim -*../MODULES/CLOCKS/clock2_harris -*../MODULES/CLOCKS/clock2_smart -*../MODULES/CLOCKS/clock2_jvemu -*../MODULES/CLOCKS/clock2_messemu -*../MODULES/CLOCKS/clock2_cloud9 -../MODULES/CLOCKS/clock2_dw3 -* -*************************************** -* System Kick-Start Module -* -* Choose which startup module you wish to use. (sysgo_dd is recommended -* for most configurations.) -../MODULES/SYSMODS/sysgo_dd -*../MODULES/SYSMODS/sysgo_h0
--- a/level1/coco/bootlists/dw3_coco1.bl Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -*************************************** -* NitrOS-9 Level 1 CoCo Bootlist -* -* $Id$ -* -* This bootlist is presented as an example for creating custom bootfiles. -* A module may be excluded from the bootfile if an asterisk (*) is the -* first character of the line. -* -*************************************** -* Kernel/System Section -* -* These modules are mandatory. -../MODULES/SYSMODS/ioman -* -*************************************** -* CDF Section (HawkSoft) -* -*../MODULES/CDF/cdf.mn -* -* CDF descriptors - select as needed -* SCSI descriptors (IDs 0-6) -*../MODULES/CDF/sc0.dd -*../MODULES/CDF/sc1.dd -*../MODULES/CDF/sc2.dd -*../MODULES/CDF/sc3.dd -*../MODULES/CDF/sc4.dd -*../MODULES/CDF/sc5.dd -*../MODULES/CDF/sc6.dd -* IDE descriptors (master/slave) -*../MODULES/CDF/ic0.dd -*../MODULES/CDF/ic1.dd -* -*************************************** -* RBF Section -* -../MODULES/RBF/rbf.mn -* -* DriveWire 3 RBF driver -../MODULES/RBF/rbdw3.dr -*../MODULES/RBF/dw3.sb -../MODULES/RBF/dw3_coco1.sb -* DriveWire descriptors - select as needed -../MODULES/RBF/ddx0.dd -*../MODULES/RBF/x0.dd -../MODULES/RBF/x1.dd -../MODULES/RBF/x2.dd -../MODULES/RBF/x3.dd -* -* SuperDriver Package -*../MODULES/RBF/rbsuper.dr -* Select Low level SCSI and/or IDE driver -*../MODULES/RBF/lltc3.dr -*../MODULES/RBF/llide.dr -* SuperDriver descriptors - select as needed -* TC^3 SCSI DD Descriptor (ID 0) -*../MODULES/RBF/dds0_tc3.dd -* TC^3 SCSI descriptors (IDs 0-6) -*../MODULES/RBF/s0_tc3.dd -*../MODULES/RBF/s1_tc3.dd -*../MODULES/RBF/s2_tc3.dd -*../MODULES/RBF/s3_tc3.dd -*../MODULES/RBF/s4_tc3.dd -*../MODULES/RBF/s5_tc3.dd -*../MODULES/RBF/s6_tc3.dd -* TC^3 SCSI HDB-DOS descriptor -*../MODULES/RBF/sh_tc3.dd -* IDE DD descriptor (Master) -*../MODULES/RBF/ddi0_ide.dd -* IDE descriptors (master/slave) -*../MODULES/RBF/i0_ide.dd -*../MODULES/RBF/i1_ide.dd -* IDE HDB-DOS descriptor -*../MODULES/RBF/ih_ide.dd -* -* WD1773 floppy support for Tandy and compatible disk controllers -../MODULES/RBF/rb1773.dr -* WD1773 floppy support for Disto Super Controller II -*../MODULES/RBF/rb1773_scii_ff74.dr -*../MODULES/RBF/rb1773_scii_ff58.dr -* Floppy device descriptors -* DD - default device - choose one if needed -*../MODULES/RBF/ddd0_35s.dd -*../MODULES/RBF/ddd0_40d.dd -*../MODULES/RBF/ddd0_80d.dd -* D0 - drive 0 - choose one if needed -*../MODULES/RBF/d0_35s.dd -../MODULES/RBF/d0_40d.dd -*../MODULES/RBF/d0_80d.dd -* D1 - drive 1 - choose one if needed -*../MODULES/RBF/d1_35s.dd -../MODULES/RBF/d1_40d.dd -*../MODULES/RBF/d1_80d.dd -* D2 - drive 2 - choose one if needed -*../MODULES/RBF/d2_35s.dd -../MODULES/RBF/d2_40d.dd -*../MODULES/RBF/d2_80d.dd -* D3 - drive 3 - choose if needed -*../MODULES/RBF/d3_35s.dd -*************************************** -* SCF Section -* -../MODULES/SCF/scf.mn -* -* Video Terminal I/O driver and subroutine modules -../MODULES/SCF/vtio.dr -* Choose from CoVDG (32x16 VDG) or CoHR (Hi-Res 51x24 graphics screen) -../MODULES/SCF/covdg.io -*../MODULES/SCF/cohr.io -* -* Select only one term descriptor -../MODULES/SCF/term32.dt -*../MODULES/SCF/term51.dt -*../MODULES/SCF/term_scbbt.dt -*../MODULES/SCF/term_sc6551.dt -* -* Serial port drivers -* CoCo Bit-Banger terminal port -*../MODULES/SCF/scbbt.dr -*../MODULES/SCF/t1_scbbt.dd -* 6551 ACIA -*../MODULES/SCF/sc6551.dr -*../MODULES/SCF/t2_sc6551.dd -*../MODULES/SCF/t3_sc6551.dd -* -* Printer drivers -* ../MODULES/SCF/scbbp.dr -* ../MODULES/SCF/p_scbbp.dd -* -* DriveWire 3 Printer drivers -* ../MODULES/SCF/scdwp.dr -* ../MODULES/SCF/p_scdwp.dd -* -* DriveWire Networking -*../MODULES/SCF/scdwn.dr -*../MODULES/SCF/term_scdwn.dt -*../MODULES/SCF/n_scdwn.dd -*../MODULES/SCF/n1_scdwn.dd -*../MODULES/SCF/n2_scdwn.dd -*../MODULES/SCF/n3_scdwn.dd -*../MODULES/SCF/n4_scdwn.dd -*../MODULES/SCF/n5_scdwn.dd -*../MODULES/SCF/n6_scdwn.dd -*../MODULES/SCF/n7_scdwn.dd -*../MODULES/SCF/n8_scdwn.dd -*../MODULES/SCF/n9_scdwn.dd -*../MODULES/SCF/n10_scdwn.dd -*../MODULES/SCF/n11_scdwn.dd -*../MODULES/SCF/n12_scdwn.dd -*../MODULES/SCF/n13_scdwn.dd -*../MODULES/SCF/n14_scdwn.dd -* -*************************************** -* Pipe Section -* -* Pipes are a useful but optional part of a system. -../MODULES/PIPE/pipeman.mn -../MODULES/PIPE/piper.dr -../MODULES/PIPE/pipe.dd -* -*************************************** -* Clock Section -* -* Select one clock module depending upon your power line frequency -* (60Hz = USA/Canada; 50Hz = Europe, Australia) -../MODULES/CLOCKS/clock_60hz -*../MODULES/CLOCKS/clock_50hz -* Select one clock2 module that supports your real-time clock, if any. -* Besides support for the internal software clock, the following -* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, -* Eliminator, Harris, SmartWatch, Cloud-9, the MESS emulator, Jeff -* Vavasour's CoCo emulator, and DriveWire. -*../MODULES/CLOCKS/clock2_soft -*../MODULES/CLOCKS/clock2_bnb -*../MODULES/CLOCKS/clock2_disto2 -*../MODULES/CLOCKS/clock2_disto4 -*../MODULES/CLOCKS/clock2_elim -*../MODULES/CLOCKS/clock2_harris -*../MODULES/CLOCKS/clock2_smart -*../MODULES/CLOCKS/clock2_jvemu -*../MODULES/CLOCKS/clock2_messemu -*../MODULES/CLOCKS/clock2_cloud9 -../MODULES/CLOCKS/clock2_dw3 -* -*************************************** -* System Kick-Start Module -* -* Choose which startup module you wish to use. (sysgo_dd is recommended -* for most configurations.) -../MODULES/SYSMODS/sysgo_dd -*../MODULES/SYSMODS/sysgo_h0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/coco/bootlists/dw_coco1.bl Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,191 @@ +*************************************** +* NitrOS-9 Level 1 CoCo Bootlist +* +* $Id$ +* +* This bootlist is presented as an example for creating custom bootfiles. +* A module may be excluded from the bootfile if an asterisk (*) is the +* first character of the line. +* +*************************************** +* Kernel/System Section +* +* These modules are mandatory. +../MODULES/SYSMODS/ioman +* +*************************************** +* CDF Section (HawkSoft) +* +*../MODULES/CDF/cdf.mn +* +* CDF descriptors - select as needed +* SCSI descriptors (IDs 0-6) +*../MODULES/CDF/sc0.dd +*../MODULES/CDF/sc1.dd +*../MODULES/CDF/sc2.dd +*../MODULES/CDF/sc3.dd +*../MODULES/CDF/sc4.dd +*../MODULES/CDF/sc5.dd +*../MODULES/CDF/sc6.dd +* IDE descriptors (master/slave) +*../MODULES/CDF/ic0.dd +*../MODULES/CDF/ic1.dd +* +*************************************** +* RBF Section +* +../MODULES/RBF/rbf.mn +* +* DriveWire 3 RBF driver +../MODULES/RBF/rbdw3.dr +*../MODULES/RBF/dw3.sb +../MODULES/RBF/dw3_coco1.sb +* DriveWire descriptors - select as needed +../MODULES/RBF/ddx0.dd +*../MODULES/RBF/x0.dd +../MODULES/RBF/x1.dd +../MODULES/RBF/x2.dd +../MODULES/RBF/x3.dd +* +* SuperDriver Package +*../MODULES/RBF/rbsuper.dr +* Select Low level SCSI and/or IDE driver +*../MODULES/RBF/lltc3.dr +*../MODULES/RBF/llide.dr +* SuperDriver descriptors - select as needed +* TC^3 SCSI DD Descriptor (ID 0) +*../MODULES/RBF/dds0_tc3.dd +* TC^3 SCSI descriptors (IDs 0-6) +*../MODULES/RBF/s0_tc3.dd +*../MODULES/RBF/s1_tc3.dd +*../MODULES/RBF/s2_tc3.dd +*../MODULES/RBF/s3_tc3.dd +*../MODULES/RBF/s4_tc3.dd +*../MODULES/RBF/s5_tc3.dd +*../MODULES/RBF/s6_tc3.dd +* TC^3 SCSI HDB-DOS descriptor +*../MODULES/RBF/sh_tc3.dd +* IDE DD descriptor (Master) +*../MODULES/RBF/ddi0_ide.dd +* IDE descriptors (master/slave) +*../MODULES/RBF/i0_ide.dd +*../MODULES/RBF/i1_ide.dd +* IDE HDB-DOS descriptor +*../MODULES/RBF/ih_ide.dd +* +* WD1773 floppy support for Tandy and compatible disk controllers +../MODULES/RBF/rb1773.dr +* WD1773 floppy support for Disto Super Controller II +*../MODULES/RBF/rb1773_scii_ff74.dr +*../MODULES/RBF/rb1773_scii_ff58.dr +* Floppy device descriptors +* DD - default device - choose one if needed +*../MODULES/RBF/ddd0_35s.dd +*../MODULES/RBF/ddd0_40d.dd +*../MODULES/RBF/ddd0_80d.dd +* D0 - drive 0 - choose one if needed +*../MODULES/RBF/d0_35s.dd +../MODULES/RBF/d0_40d.dd +*../MODULES/RBF/d0_80d.dd +* D1 - drive 1 - choose one if needed +*../MODULES/RBF/d1_35s.dd +../MODULES/RBF/d1_40d.dd +*../MODULES/RBF/d1_80d.dd +* D2 - drive 2 - choose one if needed +*../MODULES/RBF/d2_35s.dd +../MODULES/RBF/d2_40d.dd +*../MODULES/RBF/d2_80d.dd +* D3 - drive 3 - choose if needed +*../MODULES/RBF/d3_35s.dd +*************************************** +* SCF Section +* +../MODULES/SCF/scf.mn +* +* Video Terminal I/O driver and subroutine modules +../MODULES/SCF/vtio.dr +* Choose from CoVDG (32x16 VDG) or CoHR (Hi-Res 51x24 graphics screen) +../MODULES/SCF/covdg.io +*../MODULES/SCF/cohr.io +* +* Select only one term descriptor +../MODULES/SCF/term32.dt +*../MODULES/SCF/term51.dt +*../MODULES/SCF/term_scbbt.dt +*../MODULES/SCF/term_sc6551.dt +* +* Serial port drivers +* CoCo Bit-Banger terminal port +*../MODULES/SCF/scbbt.dr +*../MODULES/SCF/t1_scbbt.dd +* 6551 ACIA +*../MODULES/SCF/sc6551.dr +*../MODULES/SCF/t2_sc6551.dd +*../MODULES/SCF/t3_sc6551.dd +* +* Printer drivers +* ../MODULES/SCF/scbbp.dr +* ../MODULES/SCF/p_scbbp.dd +* +* DriveWire 3 Printer drivers +* ../MODULES/SCF/scdwp.dr +* ../MODULES/SCF/p_scdwp.dd +* +* DriveWire Networking +*../MODULES/SCF/scdwn.dr +*../MODULES/SCF/term_scdwn.dt +*../MODULES/SCF/n_scdwn.dd +*../MODULES/SCF/n1_scdwn.dd +*../MODULES/SCF/n2_scdwn.dd +*../MODULES/SCF/n3_scdwn.dd +*../MODULES/SCF/n4_scdwn.dd +*../MODULES/SCF/n5_scdwn.dd +*../MODULES/SCF/n6_scdwn.dd +*../MODULES/SCF/n7_scdwn.dd +*../MODULES/SCF/n8_scdwn.dd +*../MODULES/SCF/n9_scdwn.dd +*../MODULES/SCF/n10_scdwn.dd +*../MODULES/SCF/n11_scdwn.dd +*../MODULES/SCF/n12_scdwn.dd +*../MODULES/SCF/n13_scdwn.dd +*../MODULES/SCF/n14_scdwn.dd +* +*************************************** +* Pipe Section +* +* Pipes are a useful but optional part of a system. +../MODULES/PIPE/pipeman.mn +../MODULES/PIPE/piper.dr +../MODULES/PIPE/pipe.dd +* +*************************************** +* Clock Section +* +* Select one clock module depending upon your power line frequency +* (60Hz = USA/Canada; 50Hz = Europe, Australia) +../MODULES/CLOCKS/clock_60hz +*../MODULES/CLOCKS/clock_50hz +* Select one clock2 module that supports your real-time clock, if any. +* Besides support for the internal software clock, the following +* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, +* Eliminator, Harris, SmartWatch, Cloud-9, the MESS emulator, Jeff +* Vavasour's CoCo emulator, and DriveWire. +*../MODULES/CLOCKS/clock2_soft +*../MODULES/CLOCKS/clock2_bnb +*../MODULES/CLOCKS/clock2_disto2 +*../MODULES/CLOCKS/clock2_disto4 +*../MODULES/CLOCKS/clock2_elim +*../MODULES/CLOCKS/clock2_harris +*../MODULES/CLOCKS/clock2_smart +*../MODULES/CLOCKS/clock2_jvemu +*../MODULES/CLOCKS/clock2_messemu +*../MODULES/CLOCKS/clock2_cloud9 +../MODULES/CLOCKS/clock2_dw3 +* +*************************************** +* System Kick-Start Module +* +* Choose which startup module you wish to use. (sysgo_dd is recommended +* for most configurations.) +../MODULES/SYSMODS/sysgo_dd +*../MODULES/SYSMODS/sysgo_h0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/coco/scripts/mb.dw Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,30 @@ +-t +-x +tmode .1 pau=0 +echo * NitrOS-9 Level 1 Boot Creation Script +echo * +echo * This script creates a bootable DriveWire 3 disk image +echo * using the dw.bl bootlist file. +echo * +echo * The resulting disk will boot NitrOS-9 from DriveWire drive 0. +echo * +prompt Insert a blank disk in /x1 and press a key: +echo * +echo * Step 1: Format disk in /x1 +format /x1 "NitrOS-9 Level 1 Boot Disk" r +ynn +echo * +echo * Step 2: Create a custom boot track +del bttemp +merge ../MODULES/BOOTTRACK/rel ../MODULES/KERNEL/krn ../MODULES/KERNEL/krnp2 ../MODULES/SYSMODS/init ../MODULES/BOOTTRACK/boot_dw>bttemp +echo * +echo * Step 3: Create the bootfile and boot track +os9gen /x1 -t=bttemp<../BOOTLISTS/dw.bl +del bttemp +echo * +echo * Step 4: Populate the disk with essential files +copy ../MODULES/SYSMODS/sysgo_dd /x1/sysgo +makdir /x1/CMDS +copy -w=/x1/CMDS ../CMDS/shell +echo * +echo * We're done
--- a/level1/coco/scripts/mb.dw3 Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ --t --x -tmode .1 pau=0 -echo * NitrOS-9 Level 1 Boot Creation Script -echo * -echo * This script creates a bootable DriveWire 3 disk image -echo * using the dw3.bl bootlist file. -echo * -echo * The resulting disk will boot NitrOS-9 from DriveWire drive 0. -echo * -prompt Insert a blank disk in /x1 and press a key: -echo * -echo * Step 1: Format disk in /x1 -format /x1 "NitrOS-9 Level 1 Boot Disk" r -ynn -echo * -echo * Step 2: Create a custom boot track -del bttemp -merge ../MODULES/BOOTTRACK/rel ../MODULES/KERNEL/krn ../MODULES/KERNEL/krnp2 ../MODULES/SYSMODS/init ../MODULES/BOOTTRACK/boot_dw3>bttemp -echo * -echo * Step 3: Create the bootfile and boot track -os9gen /x1 -t=bttemp<../BOOTLISTS/dw3.bl -del bttemp -echo * -echo * Step 4: Populate the disk with essential files -copy ../MODULES/SYSMODS/sysgo_dd /x1/sysgo -makdir /x1/CMDS -copy -w=/x1/CMDS ../CMDS/shell -echo * -echo * We're done
--- a/level1/coco/scripts/mb.dw3_coco1 Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ --t --x -tmode .1 pau=0 -echo * NitrOS-9 Level 1 Boot Creation Script -echo * -echo * This script creates a bootable DriveWire 3 disk image -echo * using the dw3_coco1.bl bootlist file. -echo * -echo * The resulting disk will boot NitrOS-9 from DriveWire disk 0. -echo * -echo "Please type the destination device (e.g. /x0, /x1)" -var.1 -prompt Insert a blank disk in %1 and press a key: -echo * -echo * Step 1: Format disk in %1 -format %1 "NitrOS-9 Level 1 Boot Disk" r -echo * -echo * Step 2: Create a custom boot track -merge ../MODULES/BOOTTRACK/rel ../MODULES/KERNEL/krn ../MODULES/KERNEL/krnp2 ../MODULES/SYSMODS/init ../MODULES/BOOTTRACK/boot_dw3_coco1>-bttemp -echo * -echo * Step 3: Create the bootfile and boot track -os9gen %1 -t=bttemp<../BOOTLISTS/dw3_coco1.bl -del bttemp -echo * -echo * Step 4: Populate the disk with essential files -copy ../MODULES/SYSMODS/sysgo_dd %1/sysgo -makdir %1/CMDS -copy -w=%1/CMDS ../CMDS/shell -echo * -echo * We're done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/coco/scripts/mb.dw_coco1 Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,30 @@ +-t +-x +tmode .1 pau=0 +echo * NitrOS-9 Level 1 Boot Creation Script +echo * +echo * This script creates a bootable DriveWire 3 disk image +echo * using the dw_coco1.bl bootlist file. +echo * +echo * The resulting disk will boot NitrOS-9 from DriveWire disk 0. +echo * +echo "Please type the destination device (e.g. /x0, /x1)" +var.1 +prompt Insert a blank disk in %1 and press a key: +echo * +echo * Step 1: Format disk in %1 +format %1 "NitrOS-9 Level 1 Boot Disk" r +echo * +echo * Step 2: Create a custom boot track +merge ../MODULES/BOOTTRACK/rel ../MODULES/KERNEL/krn ../MODULES/KERNEL/krnp2 ../MODULES/SYSMODS/init ../MODULES/BOOTTRACK/boot_dw_coco1>-bttemp +echo * +echo * Step 3: Create the bootfile and boot track +os9gen %1 -t=bttemp<../BOOTLISTS/dw_coco1.bl +del bttemp +echo * +echo * Step 4: Populate the disk with essential files +copy ../MODULES/SYSMODS/sysgo_dd %1/sysgo +makdir %1/CMDS +copy -w=%1/CMDS ../CMDS/shell +echo * +echo * We're done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/modules/boot_dw.asm Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,143 @@ +******************************************************************** +* Boot - DriveWire 3 Boot Module +* +* $Id$ +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 1 2008/02/09 Boisy G. Pitre +* Created. + + NAM Boot + TTL DriveWire Boot Module + + IFP1 + USE defsfile + USE drivewire.d + ENDC + +tylg SET Systm+Objct +atrv SET ReEnt+rev +rev SET 0 +edition SET 1 + + MOD eom,name,tylg,atrv,start,size + +* on-stack buffer to use + ORG 0 +seglist RMB 2 pointer to segment list +blockloc RMB 2 pointer to memory requested +blockimg RMB 2 duplicate of the above +bootloc RMB 3 sector pointer; not byte pointer +bootsize RMB 2 size in bytes +LSN0Ptr RMB 2 LSN0 pointer +size EQU . + +name EQU * + FCS /Boot/ + FCB edition + + +* Common booter-required defines +LSN24BIT EQU 1 +FLOPPY EQU 0 + + + USE boot_common.asm + + +************************************************************ +************************************************************ +* Hardware-Specific Booter Area * +************************************************************ +************************************************************ + +* HWInit - Initialize the device +* Entry: Y = hardware address +* Exit: Carry Clear = OK, Set = Error +* B = error (Carry Set) +HWInit +* Set up DDR for side B +* ldx #PIA1Base get base address of PIA +* ldb 3,x +* andb #%11111011 +* stb 3,x +* lda #%11111010 +* sta 2,x +* orb #%00000100 +* stb 3,x + +* Set up DDR for side A +* ldb 1,x +* andb #%11111011 +* stb 1,x $FF20 is now Data Direction Register +* lda #%11111110 data direction bits (1=out, 0=in) +* sta ,x tell HW +* orb #%00000100 reset $FF20 to I/O register +* stb 1,x $FF20 is now Data Direction Register +HWTerm clrb + rts + + +* HWRead - Read a 256 byte sector from the device +* Entry: Y = hardware address +* B = bits 23-16 of LSN +* X = bits 15-0 of LSN +* blockloc,u = ptr to 256 byte sector +* Exit: X = ptr to data (i.e. ptr in blockloc,u) +HWRead + pshs cc,d,x +* Send out op code and 3 byte LSN + lda #OP_READEX load A with READ opcode +Read2 ldb WhichDrv,pcr + std ,s + leax ,s + ldy #5 + lbsr DWWrite send it to server +* Get 256 bytes of sector data + ldx blockloc,u + ldy #256 + bsr DWRead read bytes from server + bcs ReadEr branch if framing error + bne ReadEr2 + +* Send two byte checksum + pshs y + leax ,s + ldy #2 + lbsr DWWrite + ldy #1 + bsr DWRead + leas 2,s + bcs ReadEx + bne ReadEr2 + ldb ,s + beq ReadEx + cmpb #E_CRC + bne ReadEr + lda #OP_REREADEX + bra Read2 +ReadEx EQU * + leas 5,s eat stack + ldx blockloc,u + clrb + rts +ReadEr2 ldb #E$Read +ReadEr + leas 5,s eat stack + orcc #Carry + rts + + USE dwread.asm + USE dwwrite.asm + + IFGT Level-1 +Pad FILL $39,$1D0-3-2-1-* + ENDC + +Address FDB $0000 +WhichDrv FCB $00 + EMOD +eom EQU * + END
--- a/level1/modules/boot_dw3.asm Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -******************************************************************** -* Boot - DriveWire 3 Boot Module -* -* $Id$ -* -* Edt/Rev YYYY/MM/DD Modified by -* Comment -* ------------------------------------------------------------------ -* 1 2008/02/09 Boisy G. Pitre -* Created. - - NAM Boot - TTL DriveWire Boot Module - - IFP1 - USE defsfile - USE drivewire.d - ENDC - -tylg SET Systm+Objct -atrv SET ReEnt+rev -rev SET 0 -edition SET 1 - - MOD eom,name,tylg,atrv,start,size - -* on-stack buffer to use - ORG 0 -seglist RMB 2 pointer to segment list -blockloc RMB 2 pointer to memory requested -blockimg RMB 2 duplicate of the above -bootloc RMB 3 sector pointer; not byte pointer -bootsize RMB 2 size in bytes -LSN0Ptr RMB 2 LSN0 pointer -size EQU . - -name EQU * - FCS /Boot/ - FCB edition - - -* Common booter-required defines -LSN24BIT EQU 1 -FLOPPY EQU 0 - - - USE boot_common.asm - - -************************************************************ -************************************************************ -* Hardware-Specific Booter Area * -************************************************************ -************************************************************ - -* HWInit - Initialize the device -* Entry: Y = hardware address -* Exit: Carry Clear = OK, Set = Error -* B = error (Carry Set) -HWInit -* Set up DDR for side B -* ldx #PIA1Base get base address of PIA -* ldb 3,x -* andb #%11111011 -* stb 3,x -* lda #%11111010 -* sta 2,x -* orb #%00000100 -* stb 3,x - -* Set up DDR for side A -* ldb 1,x -* andb #%11111011 -* stb 1,x $FF20 is now Data Direction Register -* lda #%11111110 data direction bits (1=out, 0=in) -* sta ,x tell HW -* orb #%00000100 reset $FF20 to I/O register -* stb 1,x $FF20 is now Data Direction Register -HWTerm clrb - rts - - -* HWRead - Read a 256 byte sector from the device -* Entry: Y = hardware address -* B = bits 23-16 of LSN -* X = bits 15-0 of LSN -* blockloc,u = ptr to 256 byte sector -* Exit: X = ptr to data (i.e. ptr in blockloc,u) -HWRead - pshs cc,d,x -* Send out op code and 3 byte LSN - lda #OP_READEX load A with READ opcode -Read2 ldb WhichDrv,pcr - std ,s - leax ,s - ldy #5 - lbsr DWWrite send it to server -* Get 256 bytes of sector data - ldx blockloc,u - ldy #256 - bsr DWRead read bytes from server - bcs ReadEr branch if framing error - bne ReadEr2 - -* Send two byte checksum - pshs y - leax ,s - ldy #2 - lbsr DWWrite - ldy #1 - bsr DWRead - leas 2,s - bcs ReadEx - bne ReadEr2 - ldb ,s - beq ReadEx - cmpb #E_CRC - bne ReadEr - lda #OP_REREADEX - bra Read2 -ReadEx EQU * - leas 5,s eat stack - ldx blockloc,u - clrb - rts -ReadEr2 ldb #E$Read -ReadEr - leas 5,s eat stack - orcc #Carry - rts - - USE dwread.asm - USE dwwrite.asm - - IFGT Level-1 -Pad FILL $39,$1D0-3-2-1-* - ENDC - -Address FDB $0000 -WhichDrv FCB $00 - EMOD -eom EQU * - END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/modules/clock2_dw.asm Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,123 @@ +******************************************************************** +* Clock2 - DriveWire 3 RTC Driver +* +* $Id$ +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 1 2004/08/18 Boisy G. Pitre +* Separated clock2 modules for source clarity. +* +* 2 2010/01/02 Boisy G. Pitre +* Saved some bytes by optimizing + + nam Clock2 + ttl DriveWire 3 RTC Driver + + ifp1 + use defsfile + use drivewire.d + endc + +tylg set Sbrtn+Objct +atrv set ReEnt+rev +rev set $00 +edition set 2 + + +RTC.Base equ $0000 + + mod eom,name,tylg,atrv,JmpTable,RTC.Base + +name fcs "Clock2" + fcb edition + +subname fcs "dw3" + +* Three Entry Points: +* - Init +* - GetTime +* - SetTIme +JmpTable + bra Init + nop + bra GetTime RTC Get Time + nop + +SetTime pshs u,y,x,d + IFNE atari + tst D.ATARIFLAGS + bmi UpdLeave + ENDC + IFGT Level-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC + beq UpdLeave in case we failed to link it, just exit + lda #OP_SETTIME + pshs a + ldy #$0001 + leax ,s + jsr DW$Write,u + puls a + ldx #D.Year + ldy #$0006 + jsr DW$Write,u + bra UpdLeave + +GetTime + lda #OP_TIME Time packet + pshs u,y,x,d + IFNE atari + tst D.ATARIFLAGS + bmi UpdLeave + ENDC + IFGT Level-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC + beq UpdLeave in case we failed to link it, just exit + leax ,s + ldy #$0001 + jsr DW$Write,u + ldx #D.Year + ldy #$0006 + jsr DW$Read,u +UpdLeave puls d,x,y,u,pc + + +Init +* Check if subroutine already linked + IFGT Level-1 + ldx <D.DWSubAddr + ELSE + ldx >D.DWSubAddr + ENDC + bne leave + IFGT Level-1 + ldx <D.Proc + pshs x + ldx <D.SysPrc + stx <D.Proc + ENDC + leax subname,pcr + clra + os9 F$Link + IFGT Level-1 + puls x + stx <D.Proc + bcs leave + sty <D.DWSubAddr + ELSE + bcs leave + sty >D.DWSubAddr + ENDC + jmp ,y call initialization routine +leave rts + + emod +eom equ * + end
--- a/level1/modules/clock2_dw3.asm Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -******************************************************************** -* Clock2 - DriveWire 3 RTC Driver -* -* $Id$ -* -* Edt/Rev YYYY/MM/DD Modified by -* Comment -* ------------------------------------------------------------------ -* 1 2004/08/18 Boisy G. Pitre -* Separated clock2 modules for source clarity. -* -* 2 2010/01/02 Boisy G. Pitre -* Saved some bytes by optimizing - - nam Clock2 - ttl DriveWire 3 RTC Driver - - ifp1 - use defsfile - use drivewire.d - endc - -tylg set Sbrtn+Objct -atrv set ReEnt+rev -rev set $00 -edition set 2 - - -RTC.Base equ $0000 - - mod eom,name,tylg,atrv,JmpTable,RTC.Base - -name fcs "Clock2" - fcb edition - -subname fcs "dw3" - -* Three Entry Points: -* - Init -* - GetTime -* - SetTIme -JmpTable - bra Init - nop - bra GetTime RTC Get Time - nop - -SetTime pshs u,y,x,d - IFNE atari - tst D.ATARIFLAGS - bmi UpdLeave - ENDC - IFGT Level-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC - beq UpdLeave in case we failed to link it, just exit - lda #OP_SETTIME - pshs a - ldy #$0001 - leax ,s - jsr DW$Write,u - puls a - ldx #D.Year - ldy #$0006 - jsr DW$Write,u - bra UpdLeave - -GetTime - lda #OP_TIME Time packet - pshs u,y,x,d - IFNE atari - tst D.ATARIFLAGS - bmi UpdLeave - ENDC - IFGT Level-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC - beq UpdLeave in case we failed to link it, just exit - leax ,s - ldy #$0001 - jsr DW$Write,u - ldx #D.Year - ldy #$0006 - jsr DW$Read,u -UpdLeave puls d,x,y,u,pc - - -Init -* Check if subroutine already linked - IFGT Level-1 - ldx <D.DWSubAddr - ELSE - ldx >D.DWSubAddr - ENDC - bne leave - IFGT Level-1 - ldx <D.Proc - pshs x - ldx <D.SysPrc - stx <D.Proc - ENDC - leax subname,pcr - clra - os9 F$Link - IFGT Level-1 - puls x - stx <D.Proc - bcs leave - sty <D.DWSubAddr - ELSE - bcs leave - sty >D.DWSubAddr - ENDC - jmp ,y call initialization routine -leave rts - - emod -eom equ * - end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/modules/dw.asm Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,580 @@ +******************************************************************** +* DW3 - DriveWire 3 Low Level Subroutine Module +* +* $Id$ +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 1 2008/01/26 Boisy G. Pitre +* Started as a segregated subroutine module. +* +* 2 2010/01/20 Boisy G. Pitre +* Added support for DWNet +* +* 3 2010/01/23 Aaron A. Wolfe +* Added dynamic polling frequency +* + nam DW3 + ttl DriveWire 3 Low Level Subroutine Module + + ifp1 + use defsfile + use drivewire.d + endc + +tylg set Sbrtn+Objct +atrv set ReEnt+rev +rev set $01 + + mod eom,name,tylg,atrv,start,0 + +* irq +IRQPckt fcb $00,$01,$0A ;IRQ packet Flip(1),Mask(1),Priority(1) bytes +* Default time packet +DefTime fcb 109,12,31,23,59,59 + +* for dynamic poll frequency, number of ticks between firing poller - should we move to dwdefs? +* speed 1 = interactive (typing) +PollSpd1 fcb 3 +* speed 2 = bulk transfer (depending on how much processing needs to be done to incoming stream, 5-8 seems good) +PollSpd2 fcb 6 +* speed 3 = idle +PollSpd3 fcb 40 +* X pollidle -> drop to next slower rate +PollIdle fcb 60 + + +name fcs /dw3/ + +* DriveWire subroutine entry table +start lbra Init + bra Read + nop + lbra Write + +* Term +* +* Entry: +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +Term + clrb clear Carry + rts + +Read + use dwread.asm + +Write + use dwwrite.asm + + + use dwinit.asm + +* Init +* +* Entry: +* Y = address of device descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +* Initialize the serial device +Init + clrb clear Carry + pshs y,x,cc then push CC on stack + bsr DWInit + +; allocate DW statics page + pshs u + ldd #$0100 + os9 F$SRqMem + tfr u,x + puls u + lbcs InitEx + ifgt Level-1 + stx <D.DWStat + else + stx >D.DWStat + endc +; clear out 256 byte page at X + clrb +loop@ clr ,x+ + decb + bne loop@ + +* send OP_DWINIT + ; setup DWsub command + pshs u + ldb #1 ; DRIVER VERSION + lda #OP_DWINIT ; load command + pshs d ; command store on stack + leax ,s ; point X to stack + ldy #2 ; 1 byte to send + ifgt Level-1 + ldu <D.DWSubAddr + else + ldu >D.DWSubAddr + endc + jsr DW$Write,u ; call DWrite + leas 1,s ; leave one byte on stack for response + + ; read protocol version response, 1 byte + leax ,s ; point X to stack head + ldy #1 ; 1 byte to retrieve + jsr DW$Read,u ; call DWRead + IFNE atari-1 + beq InstIRQ ; branch if no error + ENDC + leas 3,s ; error, cleanup stack (u and 1 byte from read) + lbra InitEx ; don't install IRQ handler + +* install ISR +InstIRQ + puls a,u ; a has proto version from server.. not used yet + + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + leax DW.VIRQPkt,x + pshs u + tfr x,u + leax Vi.Stat,x ;fake VIRQ status register + lda #$80 ;VIRQ flag clear, repeated VIRQs + sta ,x ;set it while we're here... + tfr x,d ;copy fake VIRQ status register address + leax IRQPckt,pcr ;IRQ polling packet + leay IRQSvc,pcr ;IRQ service entry + os9 F$IRQ ;install + puls u + bcs InitEx ;exit with error + clra + ldb PollSpd3,pcr ; start at idle + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + leax DW.VIRQPkt,x + std Vi.Rst,x ; reset count + tfr x,y ; move VIRQ software packet to Y +tryagain + ldx #$0001 ; code to install new VIRQ + os9 F$VIRQ ; install + bcc IRQok ; no error, continue + cmpb #E$UnkSvc + bne InitEx +; if we get an E$UnkSvc error, then clock has not been initialized, so do it here + leax DefTime,pcr + os9 F$STime + bra tryagain ; note: this has the slim potential of looping forever +IRQok + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc +; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax + leax DW.StatTbl,x + tfr u,d + ldb <V.PORT+1,u ; get our port # + sta b,x ; store in table + +InitEx + puls cc,x,y,pc + + +; *********************************************************************** +; Interrupt handler - Much help from Darren Atkinson + +IRQMulti3 anda #$0F ; mask first 4 bits, a is now port #+1 + deca ; we pass +1 to use 0 for no data + pshs a ; save port # + cmpb RxGrab,u ; compare room in buffer to server's byte + bhs IRQM06 ; room left >= server's bytes, no problem + + stb RxGrab,u ; else replace with room left in our buffer + + ; also limit to end of buffer +IRQM06 ldd RxBufEnd,u ; end addr of buffer + subd RxBufPut,u ; subtract current write pointer, result is # bytes left going forward in buff. + +IRQM05 cmpb RxGrab,u ; compare b (room left) to grab bytes + bhs IRQM03 ; branch if we have room for grab bytes + + stb RxGrab,u ; else set grab to room left + + ; send multiread req +IRQM03 puls a ; port # is on stack + ldb RxGrab,u + + pshs u + + ; setup DWsub command + pshs d ; (a port, b bytes) + lda #OP_SERREADM ; load command + pshs a ; command store on stack + leax ,s ; point X to stack + ldy #3 ; 3 bytes to send + + ifgt Level-1 + ldu <D.DWSubAddr + else + ldu >D.DWSubAddr + endc + jsr DW$Write,u ; call DWrite + + leas 3,s ; clean 3 DWsub args from stack + + ldx ,s ; pointer to this port's area (from U prior), leave it on stack + ldb RxGrab,x ; set B to grab bytes + clra ; 0 in high byte + tfr d,y ; set # bytes for DW + + ldx RxBufPut,x ; point X to insert position in this port's buffer + ; receive response + jsr DW$Read,u ; call DWRead + ; handle errors? + + + puls u + ldb RxGrab,u ; our grab bytes + + ; set new RxBufPut + ldx RxBufPut,u ; current write pointer + abx ; add b (# bytes) to RxBufPut + cmpx RxBufEnd,u ; end of Rx buffer? + blo IRQM04 ; no, go keep laydown pointer + ldx RxBufPtr,u ; get Rx buffer start address +IRQM04 stx RxBufPut,u ; set new Rx data laydown pointer + + ; set new RxDatLen + ldb RxDatLen,u + addb RxGrab,u + stb RxDatLen,u ; store new value + + lbra CkSSig ; had to lbra + +IRQMulti + ; set IRQ freq for bulk + pshs a + lda PollSpd2,pcr + lbsr IRQsetFRQ + puls a + + ; initial grab bytes + stb RxGrab,u + + ; limit server bytes to bufsize - datlen + ldb RxBufSiz,u ; size of buffer + subb RxDatLen,u ; current bytes in buffer + bne IRQMulti3 ; continue, we have some space in buffer + ; no room in buffer + tstb + lbne CkSSig ;had to lbra + lbra IRQExit ;had to lbra + + +; **** IRQ ENTRY POINT +IRQSvc equ * + pshs cc,dp ; save system cc,DP + orcc #IntMasks ; mask interrupts + + ; mark VIRQ handled (note U is pointer to our VIRQ packet in DP) + lda Vi.Stat,u ; VIRQ status register + anda #^Vi.IFlag ; clear flag in VIRQ status register + sta Vi.Stat,u ; save it... + + ; poll server for incoming serial data + + ; send request + lda #OP_SERREAD ; load command + pshs a ; command store on stack + leax ,s ; point X to stack + ldy #1 ; 1 byte to send + + ifgt Level-1 + ldu <D.DWSubAddr + else + ldu >D.DWSubAddr + endc + jsr DW$Write,u ; call DWrite + + ; receive response + leas -1,s ; one more byte to fit response + leax ,s ; point X to stack head + ldy #2 ; 2 bytes to retrieve + jsr DW$Read,u ; call DWRead + beq IRQSvc2 ; branch if no error + leas 2,s ; error, cleanup stack 2 + lbra IRQExit2 ; don't reset error count on the way out + + ; process response +IRQSvc2 + ldd ,s++ ; pull returned status byte into A,data into B (set Z if zero, N if multiread) + bne IRQGotOp ; branch if D != 0 (something to do) +* this is a NOP response.. do we need to reschedule + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + lda DW.VIRQPkt+Vi.Rst+1,x + cmpa PollSpd3,pcr + lbeq IRQExit ;we are already at idle speed + + lda DW.VIRQNOP,x + inca + cmpa PollIdle,pcr + beq FRQdown + + sta DW.VIRQNOP,x ;inc NOP count, exit + lbra IRQExit + +FRQdown lda DW.VIRQPkt+Vi.Rst+1,x + cmpa PollSpd1,pcr + beq FRQd1 + lda PollSpd3,pcr +FRQd2 + sta DW.VIRQPkt+Vi.Rst+1,x + clr DW.VIRQNOP,x + lbra IRQExit +FRQd1 lda PollSpd2,pcr + bra FRQd2 + +; save back D on stack and build our U +IRQGotOp pshs d + * mode switch on bits 7+6 of A: 00 = vserial, 01 = vwindow, 10 = wirebug?, 11 = ? + anda #$C0 ; mask last 6 bits + beq mode00 ; virtual serial mode + ; future - handle other modes + cmpa #%01000000 ; vwindow? + beq mode01 + lbra IRQExit ; for now, bail + +* Virtual Window Handler +mode01 + lda ,s + anda #%00110000 + beq key + lbra IRQExit + +key + lda ,s + anda #$0F + ora #$10 + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc +; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax +; leax DW.StatTbl,x + lda a,x + clrb + tfr d,u + puls d + lbra IRQPutch + + +* Virtual Serial Handler +mode00 lda ,s ; restore A + anda #$0F ; mask first 4 bits, a is now port #+1 + beq IRQCont ; if we're here with 0 in the port, its not really a port # (can we jump straight to status?) + deca ; we pass +1 to use 0 for no data +; here we set U to the static storage area of the device we are working with + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc +; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax +; leax DW.StatTbl,x + lda a,x + bne IRQCont ; if A is 0, then this device is not active, so exit + puls d + lbra IRQExit +IRQCont + clrb + tfr d,u + + puls d + + * multiread/status flag is in bit 4 of A + bita #$10 + beq IRQPutch ; branch for read1 if multiread not set + + * all 0s in port means status, anything else is multiread + + bita #$0F ;mask bit 7-4 + beq dostat ;port # all 0, this is a status response + lbra IRQMulti ;its not all 0, this is a multiread + + + * in status events, databyte is split, 4bits status, 4bits port # +dostat bitb #$F0 ;mask low bits + lbne IRQExit ;we only implement code 0000, term + * set u to port # + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + lda b,x + bne statcont ; if A is 0, then this device is not active, so exit + lbra IRQExit + +* IRQ set freq routine +* sets freq and clears NOP counter +* a = desired IRQ freq +IRQsetFRQ pshs x ; preserve + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + sta DW.VIRQPkt+Vi.Rst+1,x +* +++ BGP +++ added following line so that the counter (which was copied by +* clock before calling us) gets reset to the same value the reset value. Without +* this line, we get called again with the PRIOR Vi.Rst value. + sta DW.VIRQPkt+Vi.Cnt+1,x + clr DW.VIRQNOP,x + puls x + rts + + +* This routine roots through process descriptors in a queue and +* checks to see if the process has a path that is open to the device +* represented by the static storage pointer in U. if so, the S$HUP +* signal is sent to that process +* +* Entry: X = process descriptor to evaluate +* U = static storage of device we want to check against +RootThrough + ldb #NumPaths + leay P$Path,x + pshs x +loop decb + bmi out + lda ,y+ + beq loop + pshs y + ifgt Level-1 + ldx <D.PthDBT + else + ldx >D.PthDBT + endc + os9 F$Find64 + ldx PD.DEV,y + leax V$STAT,x + puls y + bcs out + + cmpu ,x + bne loop + + ldx ,s + lda P$ID,x + ldb #S$HUP + os9 F$Send + +out puls x + ldx P$Queue,x + bne RootThrough + rts + +statcont clrb + tfr d,u +* NEW: root through all process descriptors. if any has a path open to this +* device, send then S$HUP + ldx <D.AProcQ + beq dowaitq + bsr RootThrough +dowaitq ldx <D.WProcQ + beq dosleepq + bsr RootThrough +dosleepq ldx <D.SProcQ + beq CkLPRC + bsr RootThrough + +CkLPRC + lda <V.LPRC,u + beq IRQExit ; no last process, bail + ldb #S$HUP + os9 F$Send ; send signal, don't think we can do anything about an error result anyway.. so + bra CkSuspnd ; do we need to go check suspend? + +; put byte B in port As buffer - optimization help from Darren Atkinson +IRQPutCh + ; set IRQ freq for bulk + lda PollSpd1,pcr + lbsr IRQsetFRQ + ldx RxBufPut,u ; point X to the data buffer + +; process interrupt/quit characters here +; note we will have to do this in the multiread (ugh) + tfr b,a ; put byte in A + ldb #S$Intrpt + cmpa V.INTR,u + beq send@ + ldb #S$Abort + cmpa V.QUIT,u + bne store +send@ lda V.LPRC,u + beq IRQExit + os9 F$Send + bra IRQExit + +store + ; store our data byte + sta ,x+ ; store and increment buffer pointer + + ; adjust RxBufPut + cmpx RxBufEnd,u ; end of Rx buffer? + blo IRQSkip1 ; no, go keep laydown pointer + ldx RxBufPtr,u ; get Rx buffer start address +IRQSkip1 stx RxBufPut,u ; set new Rx data laydown pointer + + ; increment RxDatLen + inc RxDatLen,u + +CkSSig + lda <SSigID,u ; send signal on data ready? + beq CkSuspnd + ldb <SSigSg,u ; else get signal code + os9 F$Send + clr <SSigID,u + bra IRQExit + + ; check if we have a process waiting for data +CkSuspnd + lda <V.WAKE,u ; V.WAKE? + beq IRQExit ; no + clr <V.WAKE,u ; clear V.WAKE + + ; wake up waiter for read + ifeq Level-1 + ldb #S$Wake + os9 F$Send + else + clrb + tfr d,x ; copy process descriptor pointer + lda P$State,x ; get state flags + anda #^Suspend ; clear suspend state + sta P$State,x ; save state flags + endc + +IRQExit +IRQExit2 puls cc,dp,pc ; restore interrupts cc,dp, return + + emod +eom equ * + end
--- a/level1/modules/dw3.asm Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,580 +0,0 @@ -******************************************************************** -* DW3 - DriveWire 3 Low Level Subroutine Module -* -* $Id$ -* -* Edt/Rev YYYY/MM/DD Modified by -* Comment -* ------------------------------------------------------------------ -* 1 2008/01/26 Boisy G. Pitre -* Started as a segregated subroutine module. -* -* 2 2010/01/20 Boisy G. Pitre -* Added support for DWNet -* -* 3 2010/01/23 Aaron A. Wolfe -* Added dynamic polling frequency -* - nam DW3 - ttl DriveWire 3 Low Level Subroutine Module - - ifp1 - use defsfile - use drivewire.d - endc - -tylg set Sbrtn+Objct -atrv set ReEnt+rev -rev set $01 - - mod eom,name,tylg,atrv,start,0 - -* irq -IRQPckt fcb $00,$01,$0A ;IRQ packet Flip(1),Mask(1),Priority(1) bytes -* Default time packet -DefTime fcb 109,12,31,23,59,59 - -* for dynamic poll frequency, number of ticks between firing poller - should we move to dwdefs? -* speed 1 = interactive (typing) -PollSpd1 fcb 3 -* speed 2 = bulk transfer (depending on how much processing needs to be done to incoming stream, 5-8 seems good) -PollSpd2 fcb 6 -* speed 3 = idle -PollSpd3 fcb 40 -* X pollidle -> drop to next slower rate -PollIdle fcb 60 - - -name fcs /dw3/ - -* DriveWire subroutine entry table -start lbra Init - bra Read - nop - lbra Write - -* Term -* -* Entry: -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -Term - clrb clear Carry - rts - -Read - use dwread.asm - -Write - use dwwrite.asm - - - use dwinit.asm - -* Init -* -* Entry: -* Y = address of device descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -* Initialize the serial device -Init - clrb clear Carry - pshs y,x,cc then push CC on stack - bsr DWInit - -; allocate DW statics page - pshs u - ldd #$0100 - os9 F$SRqMem - tfr u,x - puls u - lbcs InitEx - ifgt Level-1 - stx <D.DWStat - else - stx >D.DWStat - endc -; clear out 256 byte page at X - clrb -loop@ clr ,x+ - decb - bne loop@ - -* send OP_DWINIT - ; setup DWsub command - pshs u - ldb #1 ; DRIVER VERSION - lda #OP_DWINIT ; load command - pshs d ; command store on stack - leax ,s ; point X to stack - ldy #2 ; 1 byte to send - ifgt Level-1 - ldu <D.DWSubAddr - else - ldu >D.DWSubAddr - endc - jsr DW$Write,u ; call DWrite - leas 1,s ; leave one byte on stack for response - - ; read protocol version response, 1 byte - leax ,s ; point X to stack head - ldy #1 ; 1 byte to retrieve - jsr DW$Read,u ; call DWRead - IFNE atari-1 - beq InstIRQ ; branch if no error - ENDC - leas 3,s ; error, cleanup stack (u and 1 byte from read) - lbra InitEx ; don't install IRQ handler - -* install ISR -InstIRQ - puls a,u ; a has proto version from server.. not used yet - - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - leax DW.VIRQPkt,x - pshs u - tfr x,u - leax Vi.Stat,x ;fake VIRQ status register - lda #$80 ;VIRQ flag clear, repeated VIRQs - sta ,x ;set it while we're here... - tfr x,d ;copy fake VIRQ status register address - leax IRQPckt,pcr ;IRQ polling packet - leay IRQSvc,pcr ;IRQ service entry - os9 F$IRQ ;install - puls u - bcs InitEx ;exit with error - clra - ldb PollSpd3,pcr ; start at idle - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - leax DW.VIRQPkt,x - std Vi.Rst,x ; reset count - tfr x,y ; move VIRQ software packet to Y -tryagain - ldx #$0001 ; code to install new VIRQ - os9 F$VIRQ ; install - bcc IRQok ; no error, continue - cmpb #E$UnkSvc - bne InitEx -; if we get an E$UnkSvc error, then clock has not been initialized, so do it here - leax DefTime,pcr - os9 F$STime - bra tryagain ; note: this has the slim potential of looping forever -IRQok - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc -; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax - leax DW.StatTbl,x - tfr u,d - ldb <V.PORT+1,u ; get our port # - sta b,x ; store in table - -InitEx - puls cc,x,y,pc - - -; *********************************************************************** -; Interrupt handler - Much help from Darren Atkinson - -IRQMulti3 anda #$0F ; mask first 4 bits, a is now port #+1 - deca ; we pass +1 to use 0 for no data - pshs a ; save port # - cmpb RxGrab,u ; compare room in buffer to server's byte - bhs IRQM06 ; room left >= server's bytes, no problem - - stb RxGrab,u ; else replace with room left in our buffer - - ; also limit to end of buffer -IRQM06 ldd RxBufEnd,u ; end addr of buffer - subd RxBufPut,u ; subtract current write pointer, result is # bytes left going forward in buff. - -IRQM05 cmpb RxGrab,u ; compare b (room left) to grab bytes - bhs IRQM03 ; branch if we have room for grab bytes - - stb RxGrab,u ; else set grab to room left - - ; send multiread req -IRQM03 puls a ; port # is on stack - ldb RxGrab,u - - pshs u - - ; setup DWsub command - pshs d ; (a port, b bytes) - lda #OP_SERREADM ; load command - pshs a ; command store on stack - leax ,s ; point X to stack - ldy #3 ; 3 bytes to send - - ifgt Level-1 - ldu <D.DWSubAddr - else - ldu >D.DWSubAddr - endc - jsr DW$Write,u ; call DWrite - - leas 3,s ; clean 3 DWsub args from stack - - ldx ,s ; pointer to this port's area (from U prior), leave it on stack - ldb RxGrab,x ; set B to grab bytes - clra ; 0 in high byte - tfr d,y ; set # bytes for DW - - ldx RxBufPut,x ; point X to insert position in this port's buffer - ; receive response - jsr DW$Read,u ; call DWRead - ; handle errors? - - - puls u - ldb RxGrab,u ; our grab bytes - - ; set new RxBufPut - ldx RxBufPut,u ; current write pointer - abx ; add b (# bytes) to RxBufPut - cmpx RxBufEnd,u ; end of Rx buffer? - blo IRQM04 ; no, go keep laydown pointer - ldx RxBufPtr,u ; get Rx buffer start address -IRQM04 stx RxBufPut,u ; set new Rx data laydown pointer - - ; set new RxDatLen - ldb RxDatLen,u - addb RxGrab,u - stb RxDatLen,u ; store new value - - lbra CkSSig ; had to lbra - -IRQMulti - ; set IRQ freq for bulk - pshs a - lda PollSpd2,pcr - lbsr IRQsetFRQ - puls a - - ; initial grab bytes - stb RxGrab,u - - ; limit server bytes to bufsize - datlen - ldb RxBufSiz,u ; size of buffer - subb RxDatLen,u ; current bytes in buffer - bne IRQMulti3 ; continue, we have some space in buffer - ; no room in buffer - tstb - lbne CkSSig ;had to lbra - lbra IRQExit ;had to lbra - - -; **** IRQ ENTRY POINT -IRQSvc equ * - pshs cc,dp ; save system cc,DP - orcc #IntMasks ; mask interrupts - - ; mark VIRQ handled (note U is pointer to our VIRQ packet in DP) - lda Vi.Stat,u ; VIRQ status register - anda #^Vi.IFlag ; clear flag in VIRQ status register - sta Vi.Stat,u ; save it... - - ; poll server for incoming serial data - - ; send request - lda #OP_SERREAD ; load command - pshs a ; command store on stack - leax ,s ; point X to stack - ldy #1 ; 1 byte to send - - ifgt Level-1 - ldu <D.DWSubAddr - else - ldu >D.DWSubAddr - endc - jsr DW$Write,u ; call DWrite - - ; receive response - leas -1,s ; one more byte to fit response - leax ,s ; point X to stack head - ldy #2 ; 2 bytes to retrieve - jsr DW$Read,u ; call DWRead - beq IRQSvc2 ; branch if no error - leas 2,s ; error, cleanup stack 2 - lbra IRQExit2 ; don't reset error count on the way out - - ; process response -IRQSvc2 - ldd ,s++ ; pull returned status byte into A,data into B (set Z if zero, N if multiread) - bne IRQGotOp ; branch if D != 0 (something to do) -* this is a NOP response.. do we need to reschedule - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - lda DW.VIRQPkt+Vi.Rst+1,x - cmpa PollSpd3,pcr - lbeq IRQExit ;we are already at idle speed - - lda DW.VIRQNOP,x - inca - cmpa PollIdle,pcr - beq FRQdown - - sta DW.VIRQNOP,x ;inc NOP count, exit - lbra IRQExit - -FRQdown lda DW.VIRQPkt+Vi.Rst+1,x - cmpa PollSpd1,pcr - beq FRQd1 - lda PollSpd3,pcr -FRQd2 - sta DW.VIRQPkt+Vi.Rst+1,x - clr DW.VIRQNOP,x - lbra IRQExit -FRQd1 lda PollSpd2,pcr - bra FRQd2 - -; save back D on stack and build our U -IRQGotOp pshs d - * mode switch on bits 7+6 of A: 00 = vserial, 01 = vwindow, 10 = wirebug?, 11 = ? - anda #$C0 ; mask last 6 bits - beq mode00 ; virtual serial mode - ; future - handle other modes - cmpa #%01000000 ; vwindow? - beq mode01 - lbra IRQExit ; for now, bail - -* Virtual Window Handler -mode01 - lda ,s - anda #%00110000 - beq key - lbra IRQExit - -key - lda ,s - anda #$0F - ora #$10 - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc -; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax -; leax DW.StatTbl,x - lda a,x - clrb - tfr d,u - puls d - lbra IRQPutch - - -* Virtual Serial Handler -mode00 lda ,s ; restore A - anda #$0F ; mask first 4 bits, a is now port #+1 - beq IRQCont ; if we're here with 0 in the port, its not really a port # (can we jump straight to status?) - deca ; we pass +1 to use 0 for no data -; here we set U to the static storage area of the device we are working with - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc -; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax -; leax DW.StatTbl,x - lda a,x - bne IRQCont ; if A is 0, then this device is not active, so exit - puls d - lbra IRQExit -IRQCont - clrb - tfr d,u - - puls d - - * multiread/status flag is in bit 4 of A - bita #$10 - beq IRQPutch ; branch for read1 if multiread not set - - * all 0s in port means status, anything else is multiread - - bita #$0F ;mask bit 7-4 - beq dostat ;port # all 0, this is a status response - lbra IRQMulti ;its not all 0, this is a multiread - - - * in status events, databyte is split, 4bits status, 4bits port # -dostat bitb #$F0 ;mask low bits - lbne IRQExit ;we only implement code 0000, term - * set u to port # - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - lda b,x - bne statcont ; if A is 0, then this device is not active, so exit - lbra IRQExit - -* IRQ set freq routine -* sets freq and clears NOP counter -* a = desired IRQ freq -IRQsetFRQ pshs x ; preserve - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - sta DW.VIRQPkt+Vi.Rst+1,x -* +++ BGP +++ added following line so that the counter (which was copied by -* clock before calling us) gets reset to the same value the reset value. Without -* this line, we get called again with the PRIOR Vi.Rst value. - sta DW.VIRQPkt+Vi.Cnt+1,x - clr DW.VIRQNOP,x - puls x - rts - - -* This routine roots through process descriptors in a queue and -* checks to see if the process has a path that is open to the device -* represented by the static storage pointer in U. if so, the S$HUP -* signal is sent to that process -* -* Entry: X = process descriptor to evaluate -* U = static storage of device we want to check against -RootThrough - ldb #NumPaths - leay P$Path,x - pshs x -loop decb - bmi out - lda ,y+ - beq loop - pshs y - ifgt Level-1 - ldx <D.PthDBT - else - ldx >D.PthDBT - endc - os9 F$Find64 - ldx PD.DEV,y - leax V$STAT,x - puls y - bcs out - - cmpu ,x - bne loop - - ldx ,s - lda P$ID,x - ldb #S$HUP - os9 F$Send - -out puls x - ldx P$Queue,x - bne RootThrough - rts - -statcont clrb - tfr d,u -* NEW: root through all process descriptors. if any has a path open to this -* device, send then S$HUP - ldx <D.AProcQ - beq dowaitq - bsr RootThrough -dowaitq ldx <D.WProcQ - beq dosleepq - bsr RootThrough -dosleepq ldx <D.SProcQ - beq CkLPRC - bsr RootThrough - -CkLPRC - lda <V.LPRC,u - beq IRQExit ; no last process, bail - ldb #S$HUP - os9 F$Send ; send signal, don't think we can do anything about an error result anyway.. so - bra CkSuspnd ; do we need to go check suspend? - -; put byte B in port As buffer - optimization help from Darren Atkinson -IRQPutCh - ; set IRQ freq for bulk - lda PollSpd1,pcr - lbsr IRQsetFRQ - ldx RxBufPut,u ; point X to the data buffer - -; process interrupt/quit characters here -; note we will have to do this in the multiread (ugh) - tfr b,a ; put byte in A - ldb #S$Intrpt - cmpa V.INTR,u - beq send@ - ldb #S$Abort - cmpa V.QUIT,u - bne store -send@ lda V.LPRC,u - beq IRQExit - os9 F$Send - bra IRQExit - -store - ; store our data byte - sta ,x+ ; store and increment buffer pointer - - ; adjust RxBufPut - cmpx RxBufEnd,u ; end of Rx buffer? - blo IRQSkip1 ; no, go keep laydown pointer - ldx RxBufPtr,u ; get Rx buffer start address -IRQSkip1 stx RxBufPut,u ; set new Rx data laydown pointer - - ; increment RxDatLen - inc RxDatLen,u - -CkSSig - lda <SSigID,u ; send signal on data ready? - beq CkSuspnd - ldb <SSigSg,u ; else get signal code - os9 F$Send - clr <SSigID,u - bra IRQExit - - ; check if we have a process waiting for data -CkSuspnd - lda <V.WAKE,u ; V.WAKE? - beq IRQExit ; no - clr <V.WAKE,u ; clear V.WAKE - - ; wake up waiter for read - ifeq Level-1 - ldb #S$Wake - os9 F$Send - else - clrb - tfr d,x ; copy process descriptor pointer - lda P$State,x ; get state flags - anda #^Suspend ; clear suspend state - sta P$State,x ; save state flags - endc - -IRQExit -IRQExit2 puls cc,dp,pc ; restore interrupts cc,dp, return - - emod -eom equ * - end
--- a/level1/modules/dw3mess.asm Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,574 +0,0 @@ -******************************************************************** -* DW3 - DriveWire 3 Low Level Subroutine Module - MESS version -* -* $Id$ -* -* Edt/Rev YYYY/MM/DD Modified by -* Comment -* ------------------------------------------------------------------ -* 1 2008/01/26 Boisy G. Pitre -* Started as a segregated subroutine module. -* -* 2 2010/01/20 Boisy G. Pitre -* Added support for DWNet -* -* 3 2010/01/23 Aaron A. Wolfe -* Added dynamic polling frequency -* -* 4 2010/04/27 Aaron A. Wolfe -* hacked to use MESS FIFO routines -* -* - nam DW3 - ttl DriveWire 3 Low Level Subroutine Module - - ifp1 - use defsfile - use dwdefs.d - endc - -tylg set Sbrtn+Objct -atrv set ReEnt+rev -rev set $01 - - mod eom,name,tylg,atrv,start,0 - -* irq -IRQPckt fcb $00,$01,$0A ;IRQ packet Flip(1),Mask(1),Priority(1) bytes -* Default time packet -DefTime fcb 109,12,31,23,59,59 - -* for dynamic poll frequency, number of ticks between firing poller - should we move to dwdefs? -* speed 1 = interactive (typing) -PollSpd1 fcb 3 -* speed 2 = bulk transfer (depending on how much processing needs to be done to incoming stream, 5-8 seems good) -PollSpd2 fcb 6 -* speed 3 = idle -PollSpd3 fcb 40 -* X pollidle -> drop to next slower rate -PollIdle fcb 60 - - -name fcs /dw3/ - -* DriveWire subroutine entry table -start lbra Init - bra Read - nop - lbra Write - -* Term -* -* Entry: -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -Term - clrb clear Carry - rts - -* Read -* -* ON ENTRY: -* X = ADDRESS OF THE RECEIVE BUFFER -* A = TIMEOUT VALUE (182 = APPROX ONE SECOND @ 0.89 MHz) -* -* ON EXIT: -* Y = DATA CHECKSUM -* D = ACTUAL NUMBER OF BYTES RECEIVED -* X AND U ARE PRESERVED -* CC.CARRY IS SET IF A FRAMING ERROR WAS DETECTED -* -Read - use dwrdmess.asm - -* Write -* -* Entry: -Write - use dwwrmess.asm - -* Init -* -* Entry: -* Y = address of device descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -* Initialize the serial device -Init - clrb clear Carry - pshs y,x,cc then push CC on stack - orcc #IntMasks -* no init for bitbanger in mess -* ldx #PIA1Base $FF20 -* clr 1,x clear CD -* lda #%11111110 -* sta ,x -* lda #%00110100 -* sta 1,x -* lda ,x - -; allocate DW statics page - pshs u - ldd #$0100 - os9 F$SRqMem - tfr u,x - puls u - lbcs InitEx - ifgt Level-1 - stx <D.DWStat - else - stx >D.DWStat - endc -; clear out 256 byte page at X - clrb -loop@ clr ,x+ - decb - bne loop@ - -* send OP_DWINIT - ; setup DWsub command - pshs u - ldb #1 ; DRIVER VERSION - lda #OP_DWINIT ; load command - pshs d ; command store on stack - leax ,s ; point X to stack - ldy #2 ; 1 byte to send - ifgt Level-1 - ldu <D.DWSubAddr - else - ldu >D.DWSubAddr - endc - jsr 6,u ; call DWrite - leas 1,s ; leave one byte on stack for response - - ; read protocol version response, 1 byte - leax ,s ; point X to stack head - ldy #1 ; 1 byte to retrieve - jsr 3,u ; call DWRead - beq InstIRQ ; branch if no error - leas 3,s ; error, cleanup stack (u and 1 byte from read) - lbra InitEx ; don't install IRQ handler - -* install ISR -InstIRQ - puls a,u ; a has proto version from server.. not used yet - - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - leax DW.VIRQPkt,x - pshs u - tfr x,u - leax Vi.Stat,x ;fake VIRQ status register - lda #$80 ;VIRQ flag clear, repeated VIRQs - sta ,x ;set it while we're here... - tfr x,d ;copy fake VIRQ status register address - leax IRQPckt,pcr ;IRQ polling packet - leay IRQSvc,pcr ;IRQ service entry - os9 F$IRQ ;install - puls u - bcs InitEx ;exit with error - clra - ldb PollSpd3,pcr ; start at idle - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - leax DW.VIRQPkt,x - std Vi.Rst,x ; reset count - tfr x,y ; move VIRQ software packet to Y -tryagain - ldx #$0001 ; code to install new VIRQ - os9 F$VIRQ ; install - bcc IRQok ; no error, continue - cmpb #E$UnkSvc - bne InitEx -; if we get an E$UnkSvc error, then clock has not been initialized, so do it here - leax DefTime,pcr - os9 F$STime - bra tryagain ; note: this has the slim potential of looping forever -IRQok - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc -; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax - leax DW.StatTbl,x - tfr u,d - ldb <V.PORT+1,u ; get our port # - sta b,x ; store in table - -InitEx - puls cc,x,y,pc - - -; *********************************************************************** -; Interrupt handler - Much help from Darren Atkinson - -IRQMulti3 anda #$0F ; mask first 4 bits, a is now port #+1 - deca ; we pass +1 to use 0 for no data - pshs a ; save port # - cmpb RxGrab,u ; compare room in buffer to server's byte - bhs IRQM06 ; room left >= server's bytes, no problem - - stb RxGrab,u ; else replace with room left in our buffer - - ; also limit to end of buffer -IRQM06 ldd RxBufEnd,u ; end addr of buffer - subd RxBufPut,u ; subtract current write pointer, result is # bytes left going forward in buff. - -IRQM05 cmpb RxGrab,u ; compare b (room left) to grab bytes - bhs IRQM03 ; branch if we have room for grab bytes - - stb RxGrab,u ; else set grab to room left - - ; send multiread req -IRQM03 puls a ; port # is on stack - ldb RxGrab,u - - pshs u - - ; setup DWsub command - pshs d ; (a port, b bytes) - lda #OP_SERREADM ; load command - pshs a ; command store on stack - leax ,s ; point X to stack - ldy #3 ; 3 bytes to send - - ifgt Level-1 - ldu <D.DWSubAddr - else - ldu >D.DWSubAddr - endc - jsr 6,u ; call DWrite - - leas 3,s ; clean 3 DWsub args from stack - - ldx ,s ; pointer to this port's area (from U prior), leave it on stack - ldb RxGrab,x ; set B to grab bytes - clra ; 0 in high byte - tfr d,y ; set # bytes for DW - - ldx RxBufPut,x ; point X to insert position in this port's buffer - ; receive response - jsr 3,u ; call DWRead - ; handle errors? - - - puls u - ldb RxGrab,u ; our grab bytes - - ; set new RxBufPut - ldx RxBufPut,u ; current write pointer - abx ; add b (# bytes) to RxBufPut - cmpx RxBufEnd,u ; end of Rx buffer? - blo IRQM04 ; no, go keep laydown pointer - ldx RxBufPtr,u ; get Rx buffer start address -IRQM04 stx RxBufPut,u ; set new Rx data laydown pointer - - ; set new RxDatLen - ldb RxDatLen,u - addb RxGrab,u - stb RxDatLen,u ; store new value - - lbra CkSSig ; had to lbra - -IRQMulti - ; set IRQ freq for bulk - pshs a - lda PollSpd2,pcr - lbsr IRQsetFRQ - puls a - - ; initial grab bytes - stb RxGrab,u - - ; limit server bytes to bufsize - datlen - ldb RxBufSiz,u ; size of buffer - subb RxDatLen,u ; current bytes in buffer - bne IRQMulti3 ; continue, we have some space in buffer - ; no room in buffer - tstb - lbne CkSSig ;had to lbra - lbra IRQExit ;had to lbra - - -; **** IRQ ENTRY POINT -IRQSvc equ * - pshs cc,dp ; save system cc,DP - orcc #IntMasks ; mask interrupts - - ; mark VIRQ handled (note U is pointer to our VIRQ packet in DP) - lda Vi.Stat,u ; VIRQ status register - anda #^Vi.IFlag ; clear flag in VIRQ status register - sta Vi.Stat,u ; save it... - - ; poll server for incoming serial data - - ; send request - lda #OP_SERREAD ; load command - pshs a ; command store on stack - leax ,s ; point X to stack - ldy #1 ; 1 byte to send - - ifgt Level-1 - ldu <D.DWSubAddr - else - ldu >D.DWSubAddr - endc - jsr 6,u ; call DWrite - - ; receive response - leas -1,s ; one more byte to fit response - leax ,s ; point X to stack head - ldy #2 ; 2 bytes to retrieve - jsr 3,u ; call DWRead - beq IRQSvc2 ; branch if no error - leas 2,s ; error, cleanup stack 2 - lbra IRQExit2 ; don't reset error count on the way out - - ; process response -IRQSvc2 - ldd ,s++ ; pull returned status byte into A,data into B (set Z if zero, N if multiread) - bne IRQGotOp ; branch if D != 0 (something to do) -* this is a NOP response.. do we need to reschedule - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - lda DW.VIRQPkt+Vi.Rst+1,x - cmpa PollSpd3,pcr - lbeq IRQExit ;we are already at idle speed - - lda DW.VIRQNOP,x - inca - cmpa PollIdle,pcr - beq FRQdown - - sta DW.VIRQNOP,x ;inc NOP count, exit - lbra IRQExit - -FRQdown lda DW.VIRQPkt+Vi.Rst+1,x - cmpa PollSpd1,pcr - beq FRQd1 - lda PollSpd3,pcr -FRQd2 - sta DW.VIRQPkt+Vi.Rst+1,x - clr DW.VIRQNOP,x - lbra IRQExit -FRQd1 lda PollSpd2,pcr - bra FRQd2 - -; save back D on stack and build our U -IRQGotOp pshs d - * mode switch on bits 7+6 of A: 00 = vserial, 01 = system, 10 = wirebug?, 11 = ? - anda #$C0 ; mask last 6 bits - beq mode00 ; virtual serial mode - ; future - handle other modes - lbra IRQExit ; for now, bail - -mode00 lda ,s ; restore A - anda #$0F ; mask first 4 bits, a is now port #+1 - beq IRQCont ; if we're here with 0 in the port, its not really a port # (can we jump straight to status?) - deca ; we pass +1 to use 0 for no data -; here we set U to the static storage area of the device we are working with - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc -; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax -; leax DW.StatTbl,x - lda a,x - bne IRQCont ; if A is 0, then this device is not active, so exit - puls d - lbra IRQExit -IRQCont - clrb - tfr d,u - - puls d - - * multiread/status flag is in bit 4 of A - bita #$10 - beq IRQPutch ; branch for read1 if multiread not set - - * all 0s in port means status, anything else is multiread - - bita #$0F ;mask bit 7-4 - beq dostat ;port # all 0, this is a status response - lbra IRQMulti ;its not all 0, this is a multiread - - - * in status events, databyte is split, 4bits status, 4bits port # -dostat bitb #$F0 ;mask low bits - lbne IRQExit ;we only implement code 0000, term - * set u to port # - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - lda b,x - bne statcont ; if A is 0, then this device is not active, so exit - lbra IRQExit - -* IRQ set freq routine -* sets freq and clears NOP counter -* a = desired IRQ freq -IRQsetFRQ pshs x ; preserve - ifgt Level-1 - ldx <D.DWStat - else - ldx >D.DWStat - endc - sta DW.VIRQPkt+Vi.Rst+1,x -* +++ BGP +++ added following line so that the counter (which was copied by -* clock before calling us) gets reset to the same value the reset value. Without -* this line, we get called again with the PRIOR Vi.Rst value. - sta DW.VIRQPkt+Vi.Cnt+1,x - clr DW.VIRQNOP,x - puls x - rts - - -* This routine roots through process descriptors in a queue and -* checks to see if the process has a path that is open to the device -* represented by the static storage pointer in U. if so, the S$HUP -* signal is sent to that process -* -* Entry: X = process descriptor to evaluate -* U = static storage of device we want to check against -RootThrough - ldb #NumPaths - leay P$Path,x - pshs x -loop decb - bmi out - lda ,y+ - beq loop - pshs y - ifgt Level-1 - ldx <D.PthDBT - else - ldx >D.PthDBT - endc - os9 F$Find64 - ldx PD.DEV,y - leax V$STAT,x - puls y - bcs out - - cmpu ,x - bne loop - - ldx ,s - lda P$ID,x - ldb #S$HUP - os9 F$Send - -out puls x - ldx P$Queue,x - bne RootThrough - rts - -statcont clrb - tfr d,u -* NEW: root through all process descriptors. if any has a path open to this -* device, send then S$HUP - ldx <D.AProcQ - beq dowaitq - bsr RootThrough -dowaitq ldx <D.WProcQ - beq dosleepq - bsr RootThrough -dosleepq ldx <D.SProcQ - beq CkLPRC - bsr RootThrough - -CkLPRC - lda <V.LPRC,u - beq IRQExit ; no last process, bail - ldb #S$HUP - os9 F$Send ; send signal, don't think we can do anything about an error result anyway.. so - bra CkSuspnd ; do we need to go check suspend? - -; put byte B in port As buffer - optimization help from Darren Atkinson -IRQPutCh - ; set IRQ freq for bulk - lda PollSpd1,pcr - lbsr IRQsetFRQ - ldx RxBufPut,u ; point X to the data buffer - -; process interrupt/quit characters here -; note we will have to do this in the multiread (ugh) - tfr b,a ; put byte in A - ldb #S$Intrpt - cmpa V.INTR,u - beq send@ - ldb #S$Abort - cmpa V.QUIT,u - bne store -send@ lda V.LPRC,u - beq IRQExit - os9 F$Send - bra IRQExit - -store - ; store our data byte - sta ,x+ ; store and increment buffer pointer - - ; adjust RxBufPut - cmpx RxBufEnd,u ; end of Rx buffer? - blo IRQSkip1 ; no, go keep laydown pointer - ldx RxBufPtr,u ; get Rx buffer start address -IRQSkip1 stx RxBufPut,u ; set new Rx data laydown pointer - - ; increment RxDatLen - inc RxDatLen,u - -CkSSig - lda <SSigID,u ; send signal on data ready? - beq CkSuspnd - ldb <SSigSg,u ; else get signal code - os9 F$Send - clr <SSigID,u - bra IRQExit - - ; check if we have a process waiting for data -CkSuspnd - lda <V.WAKE,u ; V.WAKE? - beq IRQExit ; no - clr <V.WAKE,u ; clear V.WAKE - - ; wake up waiter for read - ifeq Level-1 - ldb #S$Wake - os9 F$Send - else - clrb - tfr d,x ; copy process descriptor pointer - lda P$State,x ; get state flags - anda #^Suspend ; clear suspend state - sta P$State,x ; save state flags - endc - -IRQExit -IRQExit2 puls cc,dp,pc ; restore interrupts cc,dp, return - - emod -eom equ * - end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/modules/dwmess.asm Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,574 @@ +******************************************************************** +* DW3 - DriveWire 3 Low Level Subroutine Module - MESS version +* +* $Id$ +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 1 2008/01/26 Boisy G. Pitre +* Started as a segregated subroutine module. +* +* 2 2010/01/20 Boisy G. Pitre +* Added support for DWNet +* +* 3 2010/01/23 Aaron A. Wolfe +* Added dynamic polling frequency +* +* 4 2010/04/27 Aaron A. Wolfe +* hacked to use MESS FIFO routines +* +* + nam DW3 + ttl DriveWire 3 Low Level Subroutine Module + + ifp1 + use defsfile + use dwdefs.d + endc + +tylg set Sbrtn+Objct +atrv set ReEnt+rev +rev set $01 + + mod eom,name,tylg,atrv,start,0 + +* irq +IRQPckt fcb $00,$01,$0A ;IRQ packet Flip(1),Mask(1),Priority(1) bytes +* Default time packet +DefTime fcb 109,12,31,23,59,59 + +* for dynamic poll frequency, number of ticks between firing poller - should we move to dwdefs? +* speed 1 = interactive (typing) +PollSpd1 fcb 3 +* speed 2 = bulk transfer (depending on how much processing needs to be done to incoming stream, 5-8 seems good) +PollSpd2 fcb 6 +* speed 3 = idle +PollSpd3 fcb 40 +* X pollidle -> drop to next slower rate +PollIdle fcb 60 + + +name fcs /dw3/ + +* DriveWire subroutine entry table +start lbra Init + bra Read + nop + lbra Write + +* Term +* +* Entry: +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +Term + clrb clear Carry + rts + +* Read +* +* ON ENTRY: +* X = ADDRESS OF THE RECEIVE BUFFER +* A = TIMEOUT VALUE (182 = APPROX ONE SECOND @ 0.89 MHz) +* +* ON EXIT: +* Y = DATA CHECKSUM +* D = ACTUAL NUMBER OF BYTES RECEIVED +* X AND U ARE PRESERVED +* CC.CARRY IS SET IF A FRAMING ERROR WAS DETECTED +* +Read + use dwrdmess.asm + +* Write +* +* Entry: +Write + use dwwrmess.asm + +* Init +* +* Entry: +* Y = address of device descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +* Initialize the serial device +Init + clrb clear Carry + pshs y,x,cc then push CC on stack + orcc #IntMasks +* no init for bitbanger in mess +* ldx #PIA1Base $FF20 +* clr 1,x clear CD +* lda #%11111110 +* sta ,x +* lda #%00110100 +* sta 1,x +* lda ,x + +; allocate DW statics page + pshs u + ldd #$0100 + os9 F$SRqMem + tfr u,x + puls u + lbcs InitEx + ifgt Level-1 + stx <D.DWStat + else + stx >D.DWStat + endc +; clear out 256 byte page at X + clrb +loop@ clr ,x+ + decb + bne loop@ + +* send OP_DWINIT + ; setup DWsub command + pshs u + ldb #1 ; DRIVER VERSION + lda #OP_DWINIT ; load command + pshs d ; command store on stack + leax ,s ; point X to stack + ldy #2 ; 1 byte to send + ifgt Level-1 + ldu <D.DWSubAddr + else + ldu >D.DWSubAddr + endc + jsr 6,u ; call DWrite + leas 1,s ; leave one byte on stack for response + + ; read protocol version response, 1 byte + leax ,s ; point X to stack head + ldy #1 ; 1 byte to retrieve + jsr 3,u ; call DWRead + beq InstIRQ ; branch if no error + leas 3,s ; error, cleanup stack (u and 1 byte from read) + lbra InitEx ; don't install IRQ handler + +* install ISR +InstIRQ + puls a,u ; a has proto version from server.. not used yet + + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + leax DW.VIRQPkt,x + pshs u + tfr x,u + leax Vi.Stat,x ;fake VIRQ status register + lda #$80 ;VIRQ flag clear, repeated VIRQs + sta ,x ;set it while we're here... + tfr x,d ;copy fake VIRQ status register address + leax IRQPckt,pcr ;IRQ polling packet + leay IRQSvc,pcr ;IRQ service entry + os9 F$IRQ ;install + puls u + bcs InitEx ;exit with error + clra + ldb PollSpd3,pcr ; start at idle + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + leax DW.VIRQPkt,x + std Vi.Rst,x ; reset count + tfr x,y ; move VIRQ software packet to Y +tryagain + ldx #$0001 ; code to install new VIRQ + os9 F$VIRQ ; install + bcc IRQok ; no error, continue + cmpb #E$UnkSvc + bne InitEx +; if we get an E$UnkSvc error, then clock has not been initialized, so do it here + leax DefTime,pcr + os9 F$STime + bra tryagain ; note: this has the slim potential of looping forever +IRQok + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc +; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax + leax DW.StatTbl,x + tfr u,d + ldb <V.PORT+1,u ; get our port # + sta b,x ; store in table + +InitEx + puls cc,x,y,pc + + +; *********************************************************************** +; Interrupt handler - Much help from Darren Atkinson + +IRQMulti3 anda #$0F ; mask first 4 bits, a is now port #+1 + deca ; we pass +1 to use 0 for no data + pshs a ; save port # + cmpb RxGrab,u ; compare room in buffer to server's byte + bhs IRQM06 ; room left >= server's bytes, no problem + + stb RxGrab,u ; else replace with room left in our buffer + + ; also limit to end of buffer +IRQM06 ldd RxBufEnd,u ; end addr of buffer + subd RxBufPut,u ; subtract current write pointer, result is # bytes left going forward in buff. + +IRQM05 cmpb RxGrab,u ; compare b (room left) to grab bytes + bhs IRQM03 ; branch if we have room for grab bytes + + stb RxGrab,u ; else set grab to room left + + ; send multiread req +IRQM03 puls a ; port # is on stack + ldb RxGrab,u + + pshs u + + ; setup DWsub command + pshs d ; (a port, b bytes) + lda #OP_SERREADM ; load command + pshs a ; command store on stack + leax ,s ; point X to stack + ldy #3 ; 3 bytes to send + + ifgt Level-1 + ldu <D.DWSubAddr + else + ldu >D.DWSubAddr + endc + jsr 6,u ; call DWrite + + leas 3,s ; clean 3 DWsub args from stack + + ldx ,s ; pointer to this port's area (from U prior), leave it on stack + ldb RxGrab,x ; set B to grab bytes + clra ; 0 in high byte + tfr d,y ; set # bytes for DW + + ldx RxBufPut,x ; point X to insert position in this port's buffer + ; receive response + jsr 3,u ; call DWRead + ; handle errors? + + + puls u + ldb RxGrab,u ; our grab bytes + + ; set new RxBufPut + ldx RxBufPut,u ; current write pointer + abx ; add b (# bytes) to RxBufPut + cmpx RxBufEnd,u ; end of Rx buffer? + blo IRQM04 ; no, go keep laydown pointer + ldx RxBufPtr,u ; get Rx buffer start address +IRQM04 stx RxBufPut,u ; set new Rx data laydown pointer + + ; set new RxDatLen + ldb RxDatLen,u + addb RxGrab,u + stb RxDatLen,u ; store new value + + lbra CkSSig ; had to lbra + +IRQMulti + ; set IRQ freq for bulk + pshs a + lda PollSpd2,pcr + lbsr IRQsetFRQ + puls a + + ; initial grab bytes + stb RxGrab,u + + ; limit server bytes to bufsize - datlen + ldb RxBufSiz,u ; size of buffer + subb RxDatLen,u ; current bytes in buffer + bne IRQMulti3 ; continue, we have some space in buffer + ; no room in buffer + tstb + lbne CkSSig ;had to lbra + lbra IRQExit ;had to lbra + + +; **** IRQ ENTRY POINT +IRQSvc equ * + pshs cc,dp ; save system cc,DP + orcc #IntMasks ; mask interrupts + + ; mark VIRQ handled (note U is pointer to our VIRQ packet in DP) + lda Vi.Stat,u ; VIRQ status register + anda #^Vi.IFlag ; clear flag in VIRQ status register + sta Vi.Stat,u ; save it... + + ; poll server for incoming serial data + + ; send request + lda #OP_SERREAD ; load command + pshs a ; command store on stack + leax ,s ; point X to stack + ldy #1 ; 1 byte to send + + ifgt Level-1 + ldu <D.DWSubAddr + else + ldu >D.DWSubAddr + endc + jsr 6,u ; call DWrite + + ; receive response + leas -1,s ; one more byte to fit response + leax ,s ; point X to stack head + ldy #2 ; 2 bytes to retrieve + jsr 3,u ; call DWRead + beq IRQSvc2 ; branch if no error + leas 2,s ; error, cleanup stack 2 + lbra IRQExit2 ; don't reset error count on the way out + + ; process response +IRQSvc2 + ldd ,s++ ; pull returned status byte into A,data into B (set Z if zero, N if multiread) + bne IRQGotOp ; branch if D != 0 (something to do) +* this is a NOP response.. do we need to reschedule + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + lda DW.VIRQPkt+Vi.Rst+1,x + cmpa PollSpd3,pcr + lbeq IRQExit ;we are already at idle speed + + lda DW.VIRQNOP,x + inca + cmpa PollIdle,pcr + beq FRQdown + + sta DW.VIRQNOP,x ;inc NOP count, exit + lbra IRQExit + +FRQdown lda DW.VIRQPkt+Vi.Rst+1,x + cmpa PollSpd1,pcr + beq FRQd1 + lda PollSpd3,pcr +FRQd2 + sta DW.VIRQPkt+Vi.Rst+1,x + clr DW.VIRQNOP,x + lbra IRQExit +FRQd1 lda PollSpd2,pcr + bra FRQd2 + +; save back D on stack and build our U +IRQGotOp pshs d + * mode switch on bits 7+6 of A: 00 = vserial, 01 = system, 10 = wirebug?, 11 = ? + anda #$C0 ; mask last 6 bits + beq mode00 ; virtual serial mode + ; future - handle other modes + lbra IRQExit ; for now, bail + +mode00 lda ,s ; restore A + anda #$0F ; mask first 4 bits, a is now port #+1 + beq IRQCont ; if we're here with 0 in the port, its not really a port # (can we jump straight to status?) + deca ; we pass +1 to use 0 for no data +; here we set U to the static storage area of the device we are working with + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc +; cheat: we know DW.StatTbl is at offset $00 from D.DWStat, do not bother with leax +; leax DW.StatTbl,x + lda a,x + bne IRQCont ; if A is 0, then this device is not active, so exit + puls d + lbra IRQExit +IRQCont + clrb + tfr d,u + + puls d + + * multiread/status flag is in bit 4 of A + bita #$10 + beq IRQPutch ; branch for read1 if multiread not set + + * all 0s in port means status, anything else is multiread + + bita #$0F ;mask bit 7-4 + beq dostat ;port # all 0, this is a status response + lbra IRQMulti ;its not all 0, this is a multiread + + + * in status events, databyte is split, 4bits status, 4bits port # +dostat bitb #$F0 ;mask low bits + lbne IRQExit ;we only implement code 0000, term + * set u to port # + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + lda b,x + bne statcont ; if A is 0, then this device is not active, so exit + lbra IRQExit + +* IRQ set freq routine +* sets freq and clears NOP counter +* a = desired IRQ freq +IRQsetFRQ pshs x ; preserve + ifgt Level-1 + ldx <D.DWStat + else + ldx >D.DWStat + endc + sta DW.VIRQPkt+Vi.Rst+1,x +* +++ BGP +++ added following line so that the counter (which was copied by +* clock before calling us) gets reset to the same value the reset value. Without +* this line, we get called again with the PRIOR Vi.Rst value. + sta DW.VIRQPkt+Vi.Cnt+1,x + clr DW.VIRQNOP,x + puls x + rts + + +* This routine roots through process descriptors in a queue and +* checks to see if the process has a path that is open to the device +* represented by the static storage pointer in U. if so, the S$HUP +* signal is sent to that process +* +* Entry: X = process descriptor to evaluate +* U = static storage of device we want to check against +RootThrough + ldb #NumPaths + leay P$Path,x + pshs x +loop decb + bmi out + lda ,y+ + beq loop + pshs y + ifgt Level-1 + ldx <D.PthDBT + else + ldx >D.PthDBT + endc + os9 F$Find64 + ldx PD.DEV,y + leax V$STAT,x + puls y + bcs out + + cmpu ,x + bne loop + + ldx ,s + lda P$ID,x + ldb #S$HUP + os9 F$Send + +out puls x + ldx P$Queue,x + bne RootThrough + rts + +statcont clrb + tfr d,u +* NEW: root through all process descriptors. if any has a path open to this +* device, send then S$HUP + ldx <D.AProcQ + beq dowaitq + bsr RootThrough +dowaitq ldx <D.WProcQ + beq dosleepq + bsr RootThrough +dosleepq ldx <D.SProcQ + beq CkLPRC + bsr RootThrough + +CkLPRC + lda <V.LPRC,u + beq IRQExit ; no last process, bail + ldb #S$HUP + os9 F$Send ; send signal, don't think we can do anything about an error result anyway.. so + bra CkSuspnd ; do we need to go check suspend? + +; put byte B in port As buffer - optimization help from Darren Atkinson +IRQPutCh + ; set IRQ freq for bulk + lda PollSpd1,pcr + lbsr IRQsetFRQ + ldx RxBufPut,u ; point X to the data buffer + +; process interrupt/quit characters here +; note we will have to do this in the multiread (ugh) + tfr b,a ; put byte in A + ldb #S$Intrpt + cmpa V.INTR,u + beq send@ + ldb #S$Abort + cmpa V.QUIT,u + bne store +send@ lda V.LPRC,u + beq IRQExit + os9 F$Send + bra IRQExit + +store + ; store our data byte + sta ,x+ ; store and increment buffer pointer + + ; adjust RxBufPut + cmpx RxBufEnd,u ; end of Rx buffer? + blo IRQSkip1 ; no, go keep laydown pointer + ldx RxBufPtr,u ; get Rx buffer start address +IRQSkip1 stx RxBufPut,u ; set new Rx data laydown pointer + + ; increment RxDatLen + inc RxDatLen,u + +CkSSig + lda <SSigID,u ; send signal on data ready? + beq CkSuspnd + ldb <SSigSg,u ; else get signal code + os9 F$Send + clr <SSigID,u + bra IRQExit + + ; check if we have a process waiting for data +CkSuspnd + lda <V.WAKE,u ; V.WAKE? + beq IRQExit ; no + clr <V.WAKE,u ; clear V.WAKE + + ; wake up waiter for read + ifeq Level-1 + ldb #S$Wake + os9 F$Send + else + clrb + tfr d,x ; copy process descriptor pointer + lda P$State,x ; get state flags + anda #^Suspend ; clear suspend state + sta P$State,x ; save state flags + endc + +IRQExit +IRQExit2 puls cc,dp,pc ; restore interrupts cc,dp, return + + emod +eom equ * + end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level1/modules/rbdw.asm Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,448 @@ +******************************************************************** +* rbdw3 - DriveWire 3 driver +* +* $Id$ +* +* This driver works in conjuction with the DriveWire Server on Linux, +* Mac or Windows, providing the CoCo with pseudo-disk access through +* the serial port. +* +* It adheres to the DriveWire Version 3 Protocol. +* +* The baud rate is set at 115200 and the communications requirements +* are set to 8-N-1. For OS-9 Level One on a CoCo 2, the baud rate +* is 57600. +* +* Edt/Rev YYYY/MM/DD Modified by +* Comment +* ------------------------------------------------------------------ +* 1 2008/02/08 Boisy G. Pitre +* Started from drivewire.asm in DriveWire 2 Product folder. +* +* 2 2008/04/22 Boisy G. Pitre +* Verified working operation on a CoCo 3 running NitrOS-9/6809 Level 1 @ 57.6Kbps +* +* 3 2009/03/09 Boisy G. Pitre +* Added checks for size after reading as noted by Darren A's email. +* +* 4 2009/12/31 Boisy G. Pitre +* Fixed a crash in Term by adding a check for DWSubAddr of $0000 +* (possible if Init fails due to subroutine module not being in +* memory and I$Detach calls Term) + + nam rbdw3 + ttl DriveWire 3 driver + +NUMRETRIES equ 8 + + ifp1 + use defsfile + use drivewire.d + endc + +NumDrvs set 4 + +tylg set Drivr+Objct +atrv set ReEnt+rev +rev set $01 +edition set 4 + + mod eom,name,tylg,atrv,start,size + + rmb DRVBEG+(DRVMEM*NumDrvs) +driveno rmb 1 +retries rmb 1 +size equ . + + fcb DIR.+SHARE.+PEXEC.+PREAD.+PWRIT.+EXEC.+UPDAT. + +name fcs /rbdw3/ + fcb edition + +start bra Init + nop + bra Read + nop + lbra Write + lbra GetStat + lbra SetStat + +* Term +* +* Entry: +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +Term + clrb + pshs cc +* Send OP_TERM to the server + IFGT LEVEL-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC +* Fix crash in certain cases + beq no@ + ldy #$0001 + IFNE atari + lda D.ATARIFLAGS + ora #DWIOSEMA + sta D.ATARIFLAGS + ENDC + lda #OP_TERM + pshs a + leax ,s + orcc #IntMasks + jsr DW$Write,u + IFNE atari + lda D.ATARIFLAGS + anda #^DWIOSEMA + sta D.ATARIFLAGS + ENDC + clrb + puls a +no@ puls cc,pc + +* Init +* +* Entry: +* Y = address of device descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +Init + IFGT Level-1 +* Perform this so we can successfully do F$Link below + ldx <D.Proc + pshs a,x + ldx <D.SysPrc + stx <D.Proc + ELSE + pshs a + ENDC + + ldb #NumDrvs + stb V.NDRV,u + leax DRVBEG,u + lda #$FF +Init2 sta DD.TOT,x invalidate drive tables + sta DD.TOT+1,x + sta DD.TOT+2,x + leax DRVMEM,x + decb + bne Init2 + +* Check if subroutine module has already been linked + IFGT LEVEL-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC + bne InitEx +* Link to subroutine module + clra + leax name+2,pcr + os9 F$Link + bcs InitEx + tfr y,u + IFGT LEVEL-1 + stu <D.DWSubAddr + ELSE + stu >D.DWSubAddr + ENDC +* Initialize the low level device + IFNE atari + lda D.ATARIFLAGS + ora #DWIOSEMA + sta D.ATARIFLAGS + ENDC + jsr DW$Init,u + lda #OP_INIT + sta ,s + leax ,s + ldy #$0001 + jsr DW$Write,u + IFNE atari + lda D.ATARIFLAGS + anda #^DWIOSEMA + sta D.ATARIFLAGS + ENDC + clrb + +InitEx + IFGT Level-1 + puls a,x + stx <D.Proc +InitEx2 + rts + ELSE +InitEx2 + puls a,pc + ENDC + +* Read +* +* Entry: +* B = MSB of LSN +* X = LSB of LSN +* Y = address of path descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +Read + lda #NUMRETRIES + sta retries,u + cmpx #$0000 LSN 0? + bne ReadSect branch if not + tstb LSN 0? + bne ReadSect branch if not +* At this point we are reading LSN0 + bsr ReadSect read the sector + bcs CpyLSNEx if error, exit + leax DRVBEG,u point to start of drive table + ldb <PD.DRV,y get drive number +NextDrv beq CopyLSN0 branch if terminal count + leax <DRVMEM,x else move to next drive table entry + decb decrement counter + bra NextDrv and continue +CopyLSN0 ldb #DD.SIZ get size to copy + ldy PD.BUF,y point to buffer +CpyLSNLp lda ,y+ get byte from buffer + sta ,x+ and save in drive table + decb + bne CpyLSNLp +CpyLSNEx rts + + +ReadSect pshs cc + pshs u,y,x,b,a,cc then push CC and others on stack +* Send out op code and 3 byte LSN + lda PD.DRV,y get drive number + cmpa #NumDrvs + blo Read1 + ldb #E$Unit + bra ReadEr2 +Read1 sta driveno,u + IFNE atari + lda D.ATARIFLAGS + ora #DWIOSEMA + sta D.ATARIFLAGS + ENDC + lda #OP_READEX load A with READ opcode + +Read2 + ldb driveno,u + leax ,s + std ,x + ldy #5 + IFGT LEVEL-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC + orcc #IntMasks + jsr DW$Write,u + +* Get 256 bytes of sector data + ldx 5,s + ldx PD.BUF,x get buffer pointer into X + ldy #$0100 + jsr DW$Read,u + bcs ReadEr1 + bne ReadEr1 + pshs y + leax ,s + ldy #$0002 + jsr DW$Write,u write checksum to server + +* Get error code byte + leax ,s + ldy #$0001 + jsr DW$Read,u + puls d + bcs ReadEr0 branch if we timed out + bne ReadEr0 + tfr a,b transfer byte to B (in case of error) + tstb is it zero? + beq ReadEx if not, exit with error + cmpb #E$CRC + bne ReadEr2 + ldu 7,s get U from stack + dec retries,u decrement retries + beq ReadEr1 + + lda #OP_REREADEX reread opcode + bra Read2 and try getting sector again +ReadEr0 +ReadEr1 ldb #E$Read read error +ReadEr2 lda 9,s + ora #Carry + sta 9,s +ReadEx leas 5,s + IFNE atari + lda D.ATARIFLAGS + anda #^DWIOSEMA + sta D.ATARIFLAGS + ENDC + puls y,u + puls cc,pc + +* Write +* +* Entry: +* B = MSB of LSN +* X = LSB of LSN +* Y = address of path descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +Write lda #NUMRETRIES + sta retries,u + pshs cc + pshs u,y,x,b,a,cc + IFNE atari + lda D.ATARIFLAGS + ora #DWIOSEMA + sta D.ATARIFLAGS + ENDC +* Send out op code and 3 byte LSN + lda PD.DRV,y + cmpa #NumDrvs + blo Write1 + comb set Carry + ldb #E$Unit + bra WritEx +Write1 sta driveno,u + lda #OP_WRITE +Write15 + ldb driveno,u + leax ,s + std ,x + ldy #$0005 + IFGT LEVEL-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC + orcc #IntMasks + jsr DW$Write,u + +* Compute checksum on sector we just sent and send checksum to server + ldy 5,s get Y from stack + ldx PD.BUF,y point to buffer + ldy #256 + jsr 6,u + leax -256,x + bsr DoCSum + pshs d + leax ,s + ldy #$0002 + jsr DW$Write,u + +* Await acknowledgement from server on receipt of sector + leax ,s + ldy #$0001 + jsr DW$Read,u read ack byte from server + bcs WritEx0 + bne WritEx0 + puls d + tsta + beq WritEx yep + tfr a,b + cmpb #E$CRC checksum error? + bne WritEx2 + ldu 7,s get U from stack + dec retries,u decrement retries + beq WritEx1 exit with error if no more + lda #OP_REWRIT else resend + bra Write15 +WritEx0 puls d +WritEx1 ldb #E$Write +WritEx2 lda 9,s + ora #Carry + sta 9,s +WritEx leas 5,s + IFNE atari + lda D.ATARIFLAGS + anda #^DWIOSEMA + sta D.ATARIFLAGS + ENDC + puls y,u + puls cc,pc + + use dwcheck.asm + +* SetStat +* +* Entry: +* R$B = function code +* Y = address of path descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +SetStat lda #OP_SETSTA +* Size optimization + fcb $8C skip next two bytes + + +* GetStat +* +* Entry: +* R$B = function code +* Y = address of path descriptor +* U = address of device memory area +* +* Exit: +* CC = carry set on error +* B = error code +* +GetStat + IFNE atari + lda D.ATARIFLAGS + ora #DWIOSEMA + sta D.ATARIFLAGS + ENDC + lda #OP_GETSTA + clrb clear Carry + pshs cc and push CC on stack + leas -3,s + sta ,s + lda PD.DRV,y get drive number + ldx PD.RGS,y + ldb R$B,x + std 1,s + leax ,s + ldy #$0003 + IFGT LEVEL-1 + ldu <D.DWSubAddr + ELSE + ldu >D.DWSubAddr + ENDC + jsr 6,u + leas 3,s + IFNE atari + lda D.ATARIFLAGS + anda #^DWIOSEMA + sta D.ATARIFLAGS + ENDC + puls cc,pc + + emod +eom equ * + end
--- a/level1/modules/rbdw3.asm Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,448 +0,0 @@ -******************************************************************** -* rbdw3 - DriveWire 3 driver -* -* $Id$ -* -* This driver works in conjuction with the DriveWire Server on Linux, -* Mac or Windows, providing the CoCo with pseudo-disk access through -* the serial port. -* -* It adheres to the DriveWire Version 3 Protocol. -* -* The baud rate is set at 115200 and the communications requirements -* are set to 8-N-1. For OS-9 Level One on a CoCo 2, the baud rate -* is 57600. -* -* Edt/Rev YYYY/MM/DD Modified by -* Comment -* ------------------------------------------------------------------ -* 1 2008/02/08 Boisy G. Pitre -* Started from drivewire.asm in DriveWire 2 Product folder. -* -* 2 2008/04/22 Boisy G. Pitre -* Verified working operation on a CoCo 3 running NitrOS-9/6809 Level 1 @ 57.6Kbps -* -* 3 2009/03/09 Boisy G. Pitre -* Added checks for size after reading as noted by Darren A's email. -* -* 4 2009/12/31 Boisy G. Pitre -* Fixed a crash in Term by adding a check for DWSubAddr of $0000 -* (possible if Init fails due to subroutine module not being in -* memory and I$Detach calls Term) - - nam rbdw3 - ttl DriveWire 3 driver - -NUMRETRIES equ 8 - - ifp1 - use defsfile - use drivewire.d - endc - -NumDrvs set 4 - -tylg set Drivr+Objct -atrv set ReEnt+rev -rev set $01 -edition set 4 - - mod eom,name,tylg,atrv,start,size - - rmb DRVBEG+(DRVMEM*NumDrvs) -driveno rmb 1 -retries rmb 1 -size equ . - - fcb DIR.+SHARE.+PEXEC.+PREAD.+PWRIT.+EXEC.+UPDAT. - -name fcs /rbdw3/ - fcb edition - -start bra Init - nop - bra Read - nop - lbra Write - lbra GetStat - lbra SetStat - -* Term -* -* Entry: -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -Term - clrb - pshs cc -* Send OP_TERM to the server - IFGT LEVEL-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC -* Fix crash in certain cases - beq no@ - ldy #$0001 - IFNE atari - lda D.ATARIFLAGS - ora #DWIOSEMA - sta D.ATARIFLAGS - ENDC - lda #OP_TERM - pshs a - leax ,s - orcc #IntMasks - jsr DW$Write,u - IFNE atari - lda D.ATARIFLAGS - anda #^DWIOSEMA - sta D.ATARIFLAGS - ENDC - clrb - puls a -no@ puls cc,pc - -* Init -* -* Entry: -* Y = address of device descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -Init - IFGT Level-1 -* Perform this so we can successfully do F$Link below - ldx <D.Proc - pshs a,x - ldx <D.SysPrc - stx <D.Proc - ELSE - pshs a - ENDC - - ldb #NumDrvs - stb V.NDRV,u - leax DRVBEG,u - lda #$FF -Init2 sta DD.TOT,x invalidate drive tables - sta DD.TOT+1,x - sta DD.TOT+2,x - leax DRVMEM,x - decb - bne Init2 - -* Check if subroutine module has already been linked - IFGT LEVEL-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC - bne InitEx -* Link to subroutine module - clra - leax name+2,pcr - os9 F$Link - bcs InitEx - tfr y,u - IFGT LEVEL-1 - stu <D.DWSubAddr - ELSE - stu >D.DWSubAddr - ENDC -* Initialize the low level device - IFNE atari - lda D.ATARIFLAGS - ora #DWIOSEMA - sta D.ATARIFLAGS - ENDC - jsr DW$Init,u - lda #OP_INIT - sta ,s - leax ,s - ldy #$0001 - jsr DW$Write,u - IFNE atari - lda D.ATARIFLAGS - anda #^DWIOSEMA - sta D.ATARIFLAGS - ENDC - clrb - -InitEx - IFGT Level-1 - puls a,x - stx <D.Proc -InitEx2 - rts - ELSE -InitEx2 - puls a,pc - ENDC - -* Read -* -* Entry: -* B = MSB of LSN -* X = LSB of LSN -* Y = address of path descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -Read - lda #NUMRETRIES - sta retries,u - cmpx #$0000 LSN 0? - bne ReadSect branch if not - tstb LSN 0? - bne ReadSect branch if not -* At this point we are reading LSN0 - bsr ReadSect read the sector - bcs CpyLSNEx if error, exit - leax DRVBEG,u point to start of drive table - ldb <PD.DRV,y get drive number -NextDrv beq CopyLSN0 branch if terminal count - leax <DRVMEM,x else move to next drive table entry - decb decrement counter - bra NextDrv and continue -CopyLSN0 ldb #DD.SIZ get size to copy - ldy PD.BUF,y point to buffer -CpyLSNLp lda ,y+ get byte from buffer - sta ,x+ and save in drive table - decb - bne CpyLSNLp -CpyLSNEx rts - - -ReadSect pshs cc - pshs u,y,x,b,a,cc then push CC and others on stack -* Send out op code and 3 byte LSN - lda PD.DRV,y get drive number - cmpa #NumDrvs - blo Read1 - ldb #E$Unit - bra ReadEr2 -Read1 sta driveno,u - IFNE atari - lda D.ATARIFLAGS - ora #DWIOSEMA - sta D.ATARIFLAGS - ENDC - lda #OP_READEX load A with READ opcode - -Read2 - ldb driveno,u - leax ,s - std ,x - ldy #5 - IFGT LEVEL-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC - orcc #IntMasks - jsr DW$Write,u - -* Get 256 bytes of sector data - ldx 5,s - ldx PD.BUF,x get buffer pointer into X - ldy #$0100 - jsr DW$Read,u - bcs ReadEr1 - bne ReadEr1 - pshs y - leax ,s - ldy #$0002 - jsr DW$Write,u write checksum to server - -* Get error code byte - leax ,s - ldy #$0001 - jsr DW$Read,u - puls d - bcs ReadEr0 branch if we timed out - bne ReadEr0 - tfr a,b transfer byte to B (in case of error) - tstb is it zero? - beq ReadEx if not, exit with error - cmpb #E$CRC - bne ReadEr2 - ldu 7,s get U from stack - dec retries,u decrement retries - beq ReadEr1 - - lda #OP_REREADEX reread opcode - bra Read2 and try getting sector again -ReadEr0 -ReadEr1 ldb #E$Read read error -ReadEr2 lda 9,s - ora #Carry - sta 9,s -ReadEx leas 5,s - IFNE atari - lda D.ATARIFLAGS - anda #^DWIOSEMA - sta D.ATARIFLAGS - ENDC - puls y,u - puls cc,pc - -* Write -* -* Entry: -* B = MSB of LSN -* X = LSB of LSN -* Y = address of path descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -Write lda #NUMRETRIES - sta retries,u - pshs cc - pshs u,y,x,b,a,cc - IFNE atari - lda D.ATARIFLAGS - ora #DWIOSEMA - sta D.ATARIFLAGS - ENDC -* Send out op code and 3 byte LSN - lda PD.DRV,y - cmpa #NumDrvs - blo Write1 - comb set Carry - ldb #E$Unit - bra WritEx -Write1 sta driveno,u - lda #OP_WRITE -Write15 - ldb driveno,u - leax ,s - std ,x - ldy #$0005 - IFGT LEVEL-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC - orcc #IntMasks - jsr DW$Write,u - -* Compute checksum on sector we just sent and send checksum to server - ldy 5,s get Y from stack - ldx PD.BUF,y point to buffer - ldy #256 - jsr 6,u - leax -256,x - bsr DoCSum - pshs d - leax ,s - ldy #$0002 - jsr DW$Write,u - -* Await acknowledgement from server on receipt of sector - leax ,s - ldy #$0001 - jsr DW$Read,u read ack byte from server - bcs WritEx0 - bne WritEx0 - puls d - tsta - beq WritEx yep - tfr a,b - cmpb #E$CRC checksum error? - bne WritEx2 - ldu 7,s get U from stack - dec retries,u decrement retries - beq WritEx1 exit with error if no more - lda #OP_REWRIT else resend - bra Write15 -WritEx0 puls d -WritEx1 ldb #E$Write -WritEx2 lda 9,s - ora #Carry - sta 9,s -WritEx leas 5,s - IFNE atari - lda D.ATARIFLAGS - anda #^DWIOSEMA - sta D.ATARIFLAGS - ENDC - puls y,u - puls cc,pc - - use dwcheck.asm - -* SetStat -* -* Entry: -* R$B = function code -* Y = address of path descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -SetStat lda #OP_SETSTA -* Size optimization - fcb $8C skip next two bytes - - -* GetStat -* -* Entry: -* R$B = function code -* Y = address of path descriptor -* U = address of device memory area -* -* Exit: -* CC = carry set on error -* B = error code -* -GetStat - IFNE atari - lda D.ATARIFLAGS - ora #DWIOSEMA - sta D.ATARIFLAGS - ENDC - lda #OP_GETSTA - clrb clear Carry - pshs cc and push CC on stack - leas -3,s - sta ,s - lda PD.DRV,y get drive number - ldx PD.RGS,y - ldb R$B,x - std 1,s - leax ,s - ldy #$0003 - IFGT LEVEL-1 - ldu <D.DWSubAddr - ELSE - ldu >D.DWSubAddr - ENDC - jsr 6,u - leas 3,s - IFNE atari - lda D.ATARIFLAGS - anda #^DWIOSEMA - sta D.ATARIFLAGS - ENDC - puls cc,pc - - emod -eom equ * - end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level2/coco3/bootlists/dw.bl Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,288 @@ +*************************************** +* NitrOS-9 Level 2 CoCo 3 Bootlist +* +* $Id$ +* +* This bootlist is presented as an example for creating custom bootfiles. +* A module may be excluded from the bootfile if an asterisk (*) is the +* first character of the line. +* +*************************************** +* Kernel/System Section +* +* These modules are mandatory. +../MODULES/KERNEL/krnp2 +*../MODULES/KERNEL/krnp3_perr +*../MODULES/KERNEL/krnp4_regdump +../MODULES/SYSMODS/ioman +../MODULES/SYSMODS/init +* +*************************************** +* CDF Section (HawkSoft) +* +*../MODULES/CDF/cdf.mn +* +* CDF descriptors - select as needed +* SCSI descriptors (IDs 0-6) +*../MODULES/CDF/sc0.dd +*../MODULES/CDF/sc1.dd +*../MODULES/CDF/sc2.dd +*../MODULES/CDF/sc3.dd +*../MODULES/CDF/sc4.dd +*../MODULES/CDF/sc5.dd +*../MODULES/CDF/sc6.dd +* IDE descriptors (master/slave) +*../MODULES/CDF/ic0.dd +*../MODULES/CDF/ic1.dd +* +*************************************** +* RBF Section +* +../MODULES/RBF/rbf.mn +* +* DriveWire 3 driver +../MODULES/RBF/rbdw3.dr +../MODULES/RBF/dw3.sb +* DriveWire descriptors - select as needed +../MODULES/RBF/ddx0.dd +*../MODULES/RBF/x0.dd +../MODULES/RBF/x1.dd +../MODULES/RBF/x2.dd +../MODULES/RBF/x3.dd +* +* SuperDriver Package (Cloud-9 product) +*../MODULES/RBF/rbsuper.dr +* Select Low level SCSI and/or IDE driver +*../MODULES/RBF/lltc3.dr +*../MODULES/RBF/llide.dr +* SuperDriver descriptors - select as needed +* TC^3 SCSI DD descriptor (ID 0) +*../MODULES/RBF/dds0_tc3.dd +* TC^3 SCSI descriptors (IDs 0-6) +*../MODULES/RBF/s0_tc3.dd +*../MODULES/RBF/s1_tc3.dd +*../MODULES/RBF/s2_tc3.dd +*../MODULES/RBF/s3_tc3.dd +*../MODULES/RBF/s4_tc3.dd +*../MODULES/RBF/s5_tc3.dd +*../MODULES/RBF/s6_tc3.dd +* TC^3 SCSI HDB-DOS descriptor +*../MODULES/RBF/sh_tc3.dd +* IDE DD descriptor (Master) +*../MODULES/RBF/ddi0_ide.dd +* IDE descriptors (master/slave) +*../MODULES/RBF/i0_ide.dd +*../MODULES/RBF/i1_ide.dd +* IDE HDB-DOS descriptor +*../MODULES/RBF/ih_ide.dd +* +* WD1773 floppy support for Tandy and compatible disk controllers +../MODULES/RBF/rb1773.dr +* WD1773 floppy support for Disto Super Controller II +*../MODULES/RBF/rb1773_scii_ff74.dr +*../MODULES/RBF/rb1773_scii_ff58.dr +* Floppy device descriptors +* DD - default device - choose one if needed +*../MODULES/RBF/ddd0_35s.dd +*../MODULES/RBF/ddd0_40d.dd +*../MODULES/RBF/ddd0_80d.dd +* D0 - drive 0 - choose one if needed +*../MODULES/RBF/d0_35s.dd +../MODULES/RBF/d0_40d.dd +*../MODULES/RBF/d0_80d.dd +* D1 - drive 1 - choose one if needed +*../MODULES/RBF/d1_35s.dd +../MODULES/RBF/d1_40d.dd +*../MODULES/RBF/d1_80d.dd +* D2 - drive 2 - choose one if needed +*../MODULES/RBF/d2_35s.dd +../MODULES/RBF/d2_40d.dd +*../MODULES/RBF/d2_80d.dd +* D3 - drive 3 - choose if needed +*../MODULES/RBF/d3_35s.dd +* +* RAMDisk driver +*../MODULES/RBF/rammer.dr +* RAMDisk descriptors - select as needed +*../MODULES/RBF/ddr0_8k.dd +*../MODULES/RBF/ddr0_96k.dd +*../MODULES/RBF/ddr0_128k.dd +*../MODULES/RBF/ddr0_192k.dd +*../MODULES/RBF/r0_8k.dd +*../MODULES/RBF/r0_96k.dd +*../MODULES/RBF/r0_128k.dd +*../MODULES/RBF/r0_192k.dd +* Memory device descriptor +*../MODULES/RBF/md.dd +*************************************** +* SCF Section +* +../MODULES/SCF/scf.mn +* +* CoCo 3 I/O sub-drivers +../MODULES/SCF/vtio.dr +../MODULES/SCF/keydrv_cc3.sb +* Sound module: CoCo 3 built-in sound generator +../MODULES/SCF/snddrv_cc3.sb +* Joystick modules: choose joy for hi-res joystick adapter or +* (M)icrosoft or (L)ogitech mouse using 6551 or 6552 ACIA +../MODULES/SCF/joydrv_joy.sb +*../MODULES/SCF/joydrv_6551M.sb +*../MODULES/SCF/joydrv_6552M.sb +*../MODULES/SCF/joydrv_6551L.sb +*../MODULES/SCF/joydrv_6552L.sb +* +* CoGrf/CoWin subroutine module +* Use CoWin with Multi-Vue; use CoGrf +* for basic text and graphic window support.. +* Select only one. +*../MODULES/SCF/cogrf.io +../MODULES/SCF/cowin.io +* +* CoVDG I/O subroutine module +* Select one or both +*../MODULES/SCF/covdg.io +*../MODULES/SCF/covdg_small.io +* +* Select only one term descriptor +*../MODULES/SCF/term_vdg.dt +*../MODULES/SCF/term_win40.dt +../MODULES/SCF/term_win80.dt +*../MODULES/SCF/term_scbbt.dt +*../MODULES/SCF/term_sc6551.dt +* +* Select as many window descriptors as needed +../MODULES/SCF/w.dw +../MODULES/SCF/w1.dw +../MODULES/SCF/w2.dw +../MODULES/SCF/w3.dw +../MODULES/SCF/w4.dw +../MODULES/SCF/w5.dw +../MODULES/SCF/w6.dw +../MODULES/SCF/w7.dw +../MODULES/SCF/w8.dw +../MODULES/SCF/w9.dw +../MODULES/SCF/w10.dw +../MODULES/SCF/w11.dw +../MODULES/SCF/w12.dw +../MODULES/SCF/w13.dw +../MODULES/SCF/w14.dw +../MODULES/SCF/w15.dw +* +* Select as many VDG window descriptors as needed +*../MODULES/SCF/v1.dw +*../MODULES/SCF/v2.dw +*../MODULES/SCF/v3.dw +*../MODULES/SCF/v4.dw +*../MODULES/SCF/v5.dw +*../MODULES/SCF/v6.dw +*../MODULES/SCF/v7.dw +* +* Serial port drivers +* CoCo Bit-Banger terminal port +*../MODULES/SCF/scbbt.dr +*../MODULES/SCF/t1_scbbt.dd +* 6551 ACIA +*../MODULES/SCF/sc6551.dr +*../MODULES/SCF/t2_sc6551.dd +*../MODULES/SCF/t3_sc6551.dd +* Tandy Modem Pak +*../MODULES/SCF/modpak.dr +*../MODULES/SCF/m1.dd +*../MODULES/SCF/m2.dd +* +* Printer drivers +* ../MODULES/SCF/scbbp.dr +* ../MODULES/SCF/p_scbbp.dd +* +* DriveWire 3 Printer drivers +* ../MODULES/SCF/scdwp.dr +* ../MODULES/SCF/p_scdwp.dd +* +* DriveWire Networking +*../MODULES/SCF/scdwn.dr +*../MODULES/SCF/term_scdwn.dt +*../MODULES/SCF/n_scdwn.dd +*../MODULES/SCF/n1_scdwn.dd +*../MODULES/SCF/n2_scdwn.dd +*../MODULES/SCF/n3_scdwn.dd +*../MODULES/SCF/n4_scdwn.dd +*../MODULES/SCF/n5_scdwn.dd +*../MODULES/SCF/n6_scdwn.dd +*../MODULES/SCF/n7_scdwn.dd +*../MODULES/SCF/n8_scdwn.dd +*../MODULES/SCF/n9_scdwn.dd +*../MODULES/SCF/n10_scdwn.dd +*../MODULES/SCF/n11_scdwn.dd +*../MODULES/SCF/n12_scdwn.dd +*../MODULES/SCF/n13_scdwn.dd +*../MODULES/SCF/n14_scdwn.dd +* +* DriveWire Networking +*../MODULES/SCF/scdwn.dr +*../MODULES/SCF/term_scdwn.dt +*../MODULES/SCF/n0_scdwn.dd +*../MODULES/SCF/n1_scdwn.dd +*../MODULES/SCF/n2_scdwn.dd +*../MODULES/SCF/n3_scdwn.dd +*../MODULES/SCF/n4_scdwn.dd +*../MODULES/SCF/n5_scdwn.dd +*../MODULES/SCF/n6_scdwn.dd +*../MODULES/SCF/n7_scdwn.dd +*../MODULES/SCF/n8_scdwn.dd +*../MODULES/SCF/n9_scdwn.dd +*../MODULES/SCF/n10_scdwn.dd +*../MODULES/SCF/n11_scdwn.dd +*../MODULES/SCF/n12_scdwn.dd +*../MODULES/SCF/n13_scdwn.dd +*../MODULES/SCF/n14_scdwn.dd +* +* VRN is a driver module used by certain games, including King's Quest III, +* Leisure Suit Larry and Flight Simulator II. A /nil descriptor is also +* supported. +../MODULES/SCF/vrn.dr +../MODULES/SCF/vi.dd +../MODULES/SCF/ftdd.dd +* +*************************************** +* Pipe Section +* +* Pipes are a useful but optional part of a system. +../MODULES/PIPE/pipeman.mn +../MODULES/PIPE/piper.dr +../MODULES/PIPE/pipe.dd +* +*************************************** +* Clock Section +* +* Select one clock module depending upon your power line frequency +* (60Hz = USA/Canada; 50Hz = Europe, Australia) +../MODULES/CLOCKS/clock_60hz +*../MODULES/CLOCKS/clock_50hz +* Select one clock2 module that supports your real-time clock, if any. +* Besides support for the internal software clock, the following +* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, +* Eliminator, Harris, SmartWatch, Cloud-9 (SuperIDE), the MESS emulator, Jeff +* Vavasour's CoCo emulator and DriveWire +*../MODULES/CLOCKS/clock2_soft +*../MODULES/CLOCKS/clock2_bnb +*../MODULES/CLOCKS/clock2_disto2 +*../MODULES/CLOCKS/clock2_disto4 +*../MODULES/CLOCKS/clock2_elim +*../MODULES/CLOCKS/clock2_harris +*../MODULES/CLOCKS/clock2_smart +*../MODULES/CLOCKS/clock2_jvemu +*../MODULES/CLOCKS/clock2_messemu +*../MODULES/CLOCKS/clock2_cloud9 +../MODULES/CLOCKS/clock2_dw3 +* +*************************************** +* System Kick-Start Module +* +* Choose which startup module you wish to use. (sysgo_dd is recommended +* for most configurations.) +* +* Alternatively, this module can reside in the root directory of the +* boot device, saving precious system RAM. +../MODULES/SYSMODS/sysgo_dd +*../MODULES/SYSMODS/sysgo_h0
--- a/level2/coco3/bootlists/dw3.bl Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,288 +0,0 @@ -*************************************** -* NitrOS-9 Level 2 CoCo 3 Bootlist -* -* $Id$ -* -* This bootlist is presented as an example for creating custom bootfiles. -* A module may be excluded from the bootfile if an asterisk (*) is the -* first character of the line. -* -*************************************** -* Kernel/System Section -* -* These modules are mandatory. -../MODULES/KERNEL/krnp2 -*../MODULES/KERNEL/krnp3_perr -*../MODULES/KERNEL/krnp4_regdump -../MODULES/SYSMODS/ioman -../MODULES/SYSMODS/init -* -*************************************** -* CDF Section (HawkSoft) -* -*../MODULES/CDF/cdf.mn -* -* CDF descriptors - select as needed -* SCSI descriptors (IDs 0-6) -*../MODULES/CDF/sc0.dd -*../MODULES/CDF/sc1.dd -*../MODULES/CDF/sc2.dd -*../MODULES/CDF/sc3.dd -*../MODULES/CDF/sc4.dd -*../MODULES/CDF/sc5.dd -*../MODULES/CDF/sc6.dd -* IDE descriptors (master/slave) -*../MODULES/CDF/ic0.dd -*../MODULES/CDF/ic1.dd -* -*************************************** -* RBF Section -* -../MODULES/RBF/rbf.mn -* -* DriveWire 3 driver -../MODULES/RBF/rbdw3.dr -../MODULES/RBF/dw3.sb -* DriveWire descriptors - select as needed -../MODULES/RBF/ddx0.dd -*../MODULES/RBF/x0.dd -../MODULES/RBF/x1.dd -../MODULES/RBF/x2.dd -../MODULES/RBF/x3.dd -* -* SuperDriver Package (Cloud-9 product) -*../MODULES/RBF/rbsuper.dr -* Select Low level SCSI and/or IDE driver -*../MODULES/RBF/lltc3.dr -*../MODULES/RBF/llide.dr -* SuperDriver descriptors - select as needed -* TC^3 SCSI DD descriptor (ID 0) -*../MODULES/RBF/dds0_tc3.dd -* TC^3 SCSI descriptors (IDs 0-6) -*../MODULES/RBF/s0_tc3.dd -*../MODULES/RBF/s1_tc3.dd -*../MODULES/RBF/s2_tc3.dd -*../MODULES/RBF/s3_tc3.dd -*../MODULES/RBF/s4_tc3.dd -*../MODULES/RBF/s5_tc3.dd -*../MODULES/RBF/s6_tc3.dd -* TC^3 SCSI HDB-DOS descriptor -*../MODULES/RBF/sh_tc3.dd -* IDE DD descriptor (Master) -*../MODULES/RBF/ddi0_ide.dd -* IDE descriptors (master/slave) -*../MODULES/RBF/i0_ide.dd -*../MODULES/RBF/i1_ide.dd -* IDE HDB-DOS descriptor -*../MODULES/RBF/ih_ide.dd -* -* WD1773 floppy support for Tandy and compatible disk controllers -../MODULES/RBF/rb1773.dr -* WD1773 floppy support for Disto Super Controller II -*../MODULES/RBF/rb1773_scii_ff74.dr -*../MODULES/RBF/rb1773_scii_ff58.dr -* Floppy device descriptors -* DD - default device - choose one if needed -*../MODULES/RBF/ddd0_35s.dd -*../MODULES/RBF/ddd0_40d.dd -*../MODULES/RBF/ddd0_80d.dd -* D0 - drive 0 - choose one if needed -*../MODULES/RBF/d0_35s.dd -../MODULES/RBF/d0_40d.dd -*../MODULES/RBF/d0_80d.dd -* D1 - drive 1 - choose one if needed -*../MODULES/RBF/d1_35s.dd -../MODULES/RBF/d1_40d.dd -*../MODULES/RBF/d1_80d.dd -* D2 - drive 2 - choose one if needed -*../MODULES/RBF/d2_35s.dd -../MODULES/RBF/d2_40d.dd -*../MODULES/RBF/d2_80d.dd -* D3 - drive 3 - choose if needed -*../MODULES/RBF/d3_35s.dd -* -* RAMDisk driver -*../MODULES/RBF/rammer.dr -* RAMDisk descriptors - select as needed -*../MODULES/RBF/ddr0_8k.dd -*../MODULES/RBF/ddr0_96k.dd -*../MODULES/RBF/ddr0_128k.dd -*../MODULES/RBF/ddr0_192k.dd -*../MODULES/RBF/r0_8k.dd -*../MODULES/RBF/r0_96k.dd -*../MODULES/RBF/r0_128k.dd -*../MODULES/RBF/r0_192k.dd -* Memory device descriptor -*../MODULES/RBF/md.dd -*************************************** -* SCF Section -* -../MODULES/SCF/scf.mn -* -* CoCo 3 I/O sub-drivers -../MODULES/SCF/vtio.dr -../MODULES/SCF/keydrv_cc3.sb -* Sound module: CoCo 3 built-in sound generator -../MODULES/SCF/snddrv_cc3.sb -* Joystick modules: choose joy for hi-res joystick adapter or -* (M)icrosoft or (L)ogitech mouse using 6551 or 6552 ACIA -../MODULES/SCF/joydrv_joy.sb -*../MODULES/SCF/joydrv_6551M.sb -*../MODULES/SCF/joydrv_6552M.sb -*../MODULES/SCF/joydrv_6551L.sb -*../MODULES/SCF/joydrv_6552L.sb -* -* CoGrf/CoWin subroutine module -* Use CoWin with Multi-Vue; use CoGrf -* for basic text and graphic window support.. -* Select only one. -*../MODULES/SCF/cogrf.io -../MODULES/SCF/cowin.io -* -* CoVDG I/O subroutine module -* Select one or both -*../MODULES/SCF/covdg.io -*../MODULES/SCF/covdg_small.io -* -* Select only one term descriptor -*../MODULES/SCF/term_vdg.dt -*../MODULES/SCF/term_win40.dt -../MODULES/SCF/term_win80.dt -*../MODULES/SCF/term_scbbt.dt -*../MODULES/SCF/term_sc6551.dt -* -* Select as many window descriptors as needed -../MODULES/SCF/w.dw -../MODULES/SCF/w1.dw -../MODULES/SCF/w2.dw -../MODULES/SCF/w3.dw -../MODULES/SCF/w4.dw -../MODULES/SCF/w5.dw -../MODULES/SCF/w6.dw -../MODULES/SCF/w7.dw -../MODULES/SCF/w8.dw -../MODULES/SCF/w9.dw -../MODULES/SCF/w10.dw -../MODULES/SCF/w11.dw -../MODULES/SCF/w12.dw -../MODULES/SCF/w13.dw -../MODULES/SCF/w14.dw -../MODULES/SCF/w15.dw -* -* Select as many VDG window descriptors as needed -*../MODULES/SCF/v1.dw -*../MODULES/SCF/v2.dw -*../MODULES/SCF/v3.dw -*../MODULES/SCF/v4.dw -*../MODULES/SCF/v5.dw -*../MODULES/SCF/v6.dw -*../MODULES/SCF/v7.dw -* -* Serial port drivers -* CoCo Bit-Banger terminal port -*../MODULES/SCF/scbbt.dr -*../MODULES/SCF/t1_scbbt.dd -* 6551 ACIA -*../MODULES/SCF/sc6551.dr -*../MODULES/SCF/t2_sc6551.dd -*../MODULES/SCF/t3_sc6551.dd -* Tandy Modem Pak -*../MODULES/SCF/modpak.dr -*../MODULES/SCF/m1.dd -*../MODULES/SCF/m2.dd -* -* Printer drivers -* ../MODULES/SCF/scbbp.dr -* ../MODULES/SCF/p_scbbp.dd -* -* DriveWire 3 Printer drivers -* ../MODULES/SCF/scdwp.dr -* ../MODULES/SCF/p_scdwp.dd -* -* DriveWire Networking -*../MODULES/SCF/scdwn.dr -*../MODULES/SCF/term_scdwn.dt -*../MODULES/SCF/n_scdwn.dd -*../MODULES/SCF/n1_scdwn.dd -*../MODULES/SCF/n2_scdwn.dd -*../MODULES/SCF/n3_scdwn.dd -*../MODULES/SCF/n4_scdwn.dd -*../MODULES/SCF/n5_scdwn.dd -*../MODULES/SCF/n6_scdwn.dd -*../MODULES/SCF/n7_scdwn.dd -*../MODULES/SCF/n8_scdwn.dd -*../MODULES/SCF/n9_scdwn.dd -*../MODULES/SCF/n10_scdwn.dd -*../MODULES/SCF/n11_scdwn.dd -*../MODULES/SCF/n12_scdwn.dd -*../MODULES/SCF/n13_scdwn.dd -*../MODULES/SCF/n14_scdwn.dd -* -* DriveWire Networking -*../MODULES/SCF/scdwn.dr -*../MODULES/SCF/term_scdwn.dt -*../MODULES/SCF/n0_scdwn.dd -*../MODULES/SCF/n1_scdwn.dd -*../MODULES/SCF/n2_scdwn.dd -*../MODULES/SCF/n3_scdwn.dd -*../MODULES/SCF/n4_scdwn.dd -*../MODULES/SCF/n5_scdwn.dd -*../MODULES/SCF/n6_scdwn.dd -*../MODULES/SCF/n7_scdwn.dd -*../MODULES/SCF/n8_scdwn.dd -*../MODULES/SCF/n9_scdwn.dd -*../MODULES/SCF/n10_scdwn.dd -*../MODULES/SCF/n11_scdwn.dd -*../MODULES/SCF/n12_scdwn.dd -*../MODULES/SCF/n13_scdwn.dd -*../MODULES/SCF/n14_scdwn.dd -* -* VRN is a driver module used by certain games, including King's Quest III, -* Leisure Suit Larry and Flight Simulator II. A /nil descriptor is also -* supported. -../MODULES/SCF/vrn.dr -../MODULES/SCF/vi.dd -../MODULES/SCF/ftdd.dd -* -*************************************** -* Pipe Section -* -* Pipes are a useful but optional part of a system. -../MODULES/PIPE/pipeman.mn -../MODULES/PIPE/piper.dr -../MODULES/PIPE/pipe.dd -* -*************************************** -* Clock Section -* -* Select one clock module depending upon your power line frequency -* (60Hz = USA/Canada; 50Hz = Europe, Australia) -../MODULES/CLOCKS/clock_60hz -*../MODULES/CLOCKS/clock_50hz -* Select one clock2 module that supports your real-time clock, if any. -* Besides support for the internal software clock, the following -* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, -* Eliminator, Harris, SmartWatch, Cloud-9 (SuperIDE), the MESS emulator, Jeff -* Vavasour's CoCo emulator and DriveWire -*../MODULES/CLOCKS/clock2_soft -*../MODULES/CLOCKS/clock2_bnb -*../MODULES/CLOCKS/clock2_disto2 -*../MODULES/CLOCKS/clock2_disto4 -*../MODULES/CLOCKS/clock2_elim -*../MODULES/CLOCKS/clock2_harris -*../MODULES/CLOCKS/clock2_smart -*../MODULES/CLOCKS/clock2_jvemu -*../MODULES/CLOCKS/clock2_messemu -*../MODULES/CLOCKS/clock2_cloud9 -../MODULES/CLOCKS/clock2_dw3 -* -*************************************** -* System Kick-Start Module -* -* Choose which startup module you wish to use. (sysgo_dd is recommended -* for most configurations.) -* -* Alternatively, this module can reside in the root directory of the -* boot device, saving precious system RAM. -../MODULES/SYSMODS/sysgo_dd -*../MODULES/SYSMODS/sysgo_h0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level2/coco3/scripts/mb.dw Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,31 @@ +-t +-x +tmode .1 pau=0 +echo * NitrOS-9 Level 2 Boot Creation Script +echo * +echo * This script creates a bootable DriveWire 3 disk image +echo * using the dw.bl bootlist file. +echo * +echo * The resulting disk will boot NitrOS-9 from DriveWire disk 0. +echo * +echo "Please type the destination device (e.g. /x0, /x1)" +var.1 +prompt Insert a blank disk in %1 and press a key: +echo * +echo * Step 1: Format disk in %1 +format %1 "NitrOS-9 Level 2 Boot Disk" r +ynn +echo * +echo * Step 2: Create a custom boot track +merge ../MODULES/BOOTTRACK/rel_80 ../MODULES/BOOTTRACK/boot_dw ../MODULES/BOOTTRACK/krn>-bttemp +echo * +echo * Step 3: Create the bootfile and boot track +os9gen %1 -t=bttemp<../BOOTLISTS/dw.bl +del bttemp +echo * +echo * Step 4: Populate the disk with essential files +copy ../MODULES/SYSMODS/sysgo_dd %1/sysgo +makdir %1/CMDS +copy -w=%1/CMDS ../CMDS/shell ../CMDS/grfdrv +echo * +echo * We're done
--- a/level2/coco3/scripts/mb.dw3 Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ --t --x -tmode .1 pau=0 -echo * NitrOS-9 Level 2 Boot Creation Script -echo * -echo * This script creates a bootable DriveWire 3 disk image -echo * using the dw3.bl bootlist file. -echo * -echo * The resulting disk will boot NitrOS-9 from DriveWire disk 0. -echo * -echo "Please type the destination device (e.g. /x0, /x1)" -var.1 -prompt Insert a blank disk in %1 and press a key: -echo * -echo * Step 1: Format disk in %1 -format %1 "NitrOS-9 Level 2 Boot Disk" r -ynn -echo * -echo * Step 2: Create a custom boot track -merge ../MODULES/BOOTTRACK/rel_80 ../MODULES/BOOTTRACK/boot_dw3 ../MODULES/BOOTTRACK/krn>-bttemp -echo * -echo * Step 3: Create the bootfile and boot track -os9gen %1 -t=bttemp<../BOOTLISTS/dw3.bl -del bttemp -echo * -echo * Step 4: Populate the disk with essential files -copy ../MODULES/SYSMODS/sysgo_dd %1/sysgo -makdir %1/CMDS -copy -w=%1/CMDS ../CMDS/shell ../CMDS/grfdrv -echo * -echo * We're done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level2/coco3_6309/bootlists/dw.bl Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,288 @@ +*************************************** +* NitrOS-9 Level 2 CoCo 3 Bootlist +* +* $Id$ +* +* This bootlist is presented as an example for creating custom bootfiles. +* A module may be excluded from the bootfile if an asterisk (*) is the +* first character of the line. +* +*************************************** +* Kernel/System Section +* +* These modules are mandatory. +../MODULES/KERNEL/krnp2 +*../MODULES/KERNEL/krnp3_perr +*../MODULES/KERNEL/krnp4_regdump +../MODULES/SYSMODS/ioman +../MODULES/SYSMODS/init +* +*************************************** +* CDF Section (HawkSoft) +* +*../MODULES/CDF/cdf.mn +* +* CDF descriptors - select as needed +* SCSI descriptors (IDs 0-6) +*../MODULES/CDF/sc0.dd +*../MODULES/CDF/sc1.dd +*../MODULES/CDF/sc2.dd +*../MODULES/CDF/sc3.dd +*../MODULES/CDF/sc4.dd +*../MODULES/CDF/sc5.dd +*../MODULES/CDF/sc6.dd +* IDE descriptors (master/slave) +*../MODULES/CDF/ic0.dd +*../MODULES/CDF/ic1.dd +* +*************************************** +* RBF Section +* +../MODULES/RBF/rbf.mn +* +* DriveWire 3 driver +../MODULES/RBF/rbdw3.dr +../MODULES/RBF/dw3.sb +* DriveWire descriptors - select as needed +../MODULES/RBF/ddx0.dd +*../MODULES/RBF/x0.dd +../MODULES/RBF/x1.dd +../MODULES/RBF/x2.dd +../MODULES/RBF/x3.dd +* +* SuperDriver Package (Cloud-9 product) +*../MODULES/RBF/rbsuper.dr +* Select Low level SCSI and/or IDE driver +*../MODULES/RBF/lltc3.dr +*../MODULES/RBF/llide.dr +* SuperDriver descriptors - select as needed +* TC^3 SCSI DD descriptor (ID 0) +*../MODULES/RBF/dds0_tc3.dd +* TC^3 SCSI descriptors (IDs 0-6) +*../MODULES/RBF/s0_tc3.dd +*../MODULES/RBF/s1_tc3.dd +*../MODULES/RBF/s2_tc3.dd +*../MODULES/RBF/s3_tc3.dd +*../MODULES/RBF/s4_tc3.dd +*../MODULES/RBF/s5_tc3.dd +*../MODULES/RBF/s6_tc3.dd +* TC^3 SCSI HDB-DOS descriptor +*../MODULES/RBF/sh_tc3.dd +* IDE DD descriptor (Master) +*../MODULES/RBF/ddi0_ide.dd +* IDE descriptors (master/slave) +*../MODULES/RBF/i0_ide.dd +*../MODULES/RBF/i1_ide.dd +* IDE HDB-DOS descriptor +*../MODULES/RBF/ih_ide.dd +* +* WD1773 floppy support for Tandy and compatible disk controllers +../MODULES/RBF/rb1773.dr +* WD1773 floppy support for Disto Super Controller II +*../MODULES/RBF/rb1773_scii_ff74.dr +*../MODULES/RBF/rb1773_scii_ff58.dr +* Floppy device descriptors +* DD - default device - choose one if needed +*../MODULES/RBF/ddd0_35s.dd +*../MODULES/RBF/ddd0_40d.dd +*../MODULES/RBF/ddd0_80d.dd +* D0 - drive 0 - choose one if needed +*../MODULES/RBF/d0_35s.dd +../MODULES/RBF/d0_40d.dd +*../MODULES/RBF/d0_80d.dd +* D1 - drive 1 - choose one if needed +*../MODULES/RBF/d1_35s.dd +../MODULES/RBF/d1_40d.dd +*../MODULES/RBF/d1_80d.dd +* D2 - drive 2 - choose one if needed +*../MODULES/RBF/d2_35s.dd +../MODULES/RBF/d2_40d.dd +*../MODULES/RBF/d2_80d.dd +* D3 - drive 3 - choose if needed +*../MODULES/RBF/d3_35s.dd +* +* RAMDisk driver +*../MODULES/RBF/rammer.dr +* RAMDisk descriptors - select as needed +*../MODULES/RBF/ddr0_8k.dd +*../MODULES/RBF/ddr0_96k.dd +*../MODULES/RBF/ddr0_128k.dd +*../MODULES/RBF/ddr0_192k.dd +*../MODULES/RBF/r0_8k.dd +*../MODULES/RBF/r0_96k.dd +*../MODULES/RBF/r0_128k.dd +*../MODULES/RBF/r0_192k.dd +* Memory device descriptor +*../MODULES/RBF/md.dd +*************************************** +* SCF Section +* +../MODULES/SCF/scf.mn +* +* CoCo 3 I/O sub-drivers +../MODULES/SCF/vtio.dr +../MODULES/SCF/keydrv_cc3.sb +* Sound module: CoCo 3 built-in sound generator +../MODULES/SCF/snddrv_cc3.sb +* Joystick modules: choose joy for hi-res joystick adapter or +* (M)icrosoft or (L)ogitech mouse using 6551 or 6552 ACIA +../MODULES/SCF/joydrv_joy.sb +*../MODULES/SCF/joydrv_6551M.sb +*../MODULES/SCF/joydrv_6552M.sb +*../MODULES/SCF/joydrv_6551L.sb +*../MODULES/SCF/joydrv_6552L.sb +* +* CoGrf/CoWin subroutine module +* Use CoWin with Multi-Vue; use CoGrf +* for basic text and graphic window support.. +* Select only one. +*../MODULES/SCF/cogrf.io +../MODULES/SCF/cowin.io +* +* CoVDG I/O subroutine module +* Select one or both +*../MODULES/SCF/covdg.io +*../MODULES/SCF/covdg_small.io +* +* Select only one term descriptor +*../MODULES/SCF/term_vdg.dt +*../MODULES/SCF/term_win40.dt +../MODULES/SCF/term_win80.dt +*../MODULES/SCF/term_scbbt.dt +*../MODULES/SCF/term_sc6551.dt +* +* Select as many window descriptors as needed +../MODULES/SCF/w.dw +../MODULES/SCF/w1.dw +../MODULES/SCF/w2.dw +../MODULES/SCF/w3.dw +../MODULES/SCF/w4.dw +../MODULES/SCF/w5.dw +../MODULES/SCF/w6.dw +../MODULES/SCF/w7.dw +../MODULES/SCF/w8.dw +../MODULES/SCF/w9.dw +../MODULES/SCF/w10.dw +../MODULES/SCF/w11.dw +../MODULES/SCF/w12.dw +../MODULES/SCF/w13.dw +../MODULES/SCF/w14.dw +../MODULES/SCF/w15.dw +* +* Select as many VDG window descriptors as needed +*../MODULES/SCF/v1.dw +*../MODULES/SCF/v2.dw +*../MODULES/SCF/v3.dw +*../MODULES/SCF/v4.dw +*../MODULES/SCF/v5.dw +*../MODULES/SCF/v6.dw +*../MODULES/SCF/v7.dw +* +* Serial port drivers +* CoCo Bit-Banger terminal port +*../MODULES/SCF/scbbt.dr +*../MODULES/SCF/t1_scbbt.dd +* 6551 ACIA +*../MODULES/SCF/sc6551.dr +*../MODULES/SCF/t2_sc6551.dd +*../MODULES/SCF/t3_sc6551.dd +* Tandy Modem Pak +*../MODULES/SCF/modpak.dr +*../MODULES/SCF/m1.dd +*../MODULES/SCF/m2.dd +* +* Printer drivers +* ../MODULES/SCF/scbbp.dr +* ../MODULES/SCF/p_scbbp.dd +* +* DriveWire 3 Printer drivers +* ../MODULES/SCF/scdwp.dr +* ../MODULES/SCF/p_scdwp.dd +* +* DriveWire Networking +*../MODULES/SCF/scdwn.dr +*../MODULES/SCF/term_scdwn.dt +*../MODULES/SCF/n_scdwn.dd +*../MODULES/SCF/n1_scdwn.dd +*../MODULES/SCF/n2_scdwn.dd +*../MODULES/SCF/n3_scdwn.dd +*../MODULES/SCF/n4_scdwn.dd +*../MODULES/SCF/n5_scdwn.dd +*../MODULES/SCF/n6_scdwn.dd +*../MODULES/SCF/n7_scdwn.dd +*../MODULES/SCF/n8_scdwn.dd +*../MODULES/SCF/n9_scdwn.dd +*../MODULES/SCF/n10_scdwn.dd +*../MODULES/SCF/n11_scdwn.dd +*../MODULES/SCF/n12_scdwn.dd +*../MODULES/SCF/n13_scdwn.dd +*../MODULES/SCF/n14_scdwn.dd +* +* DriveWire Networking +*../MODULES/SCF/scdwn.dr +*../MODULES/SCF/term_scdwn.dt +*../MODULES/SCF/n0_scdwn.dd +*../MODULES/SCF/n1_scdwn.dd +*../MODULES/SCF/n2_scdwn.dd +*../MODULES/SCF/n3_scdwn.dd +*../MODULES/SCF/n4_scdwn.dd +*../MODULES/SCF/n5_scdwn.dd +*../MODULES/SCF/n6_scdwn.dd +*../MODULES/SCF/n7_scdwn.dd +*../MODULES/SCF/n8_scdwn.dd +*../MODULES/SCF/n9_scdwn.dd +*../MODULES/SCF/n10_scdwn.dd +*../MODULES/SCF/n11_scdwn.dd +*../MODULES/SCF/n12_scdwn.dd +*../MODULES/SCF/n13_scdwn.dd +*../MODULES/SCF/n14_scdwn.dd +* +* VRN is a driver module used by certain games, including King's Quest III, +* Leisure Suit Larry and Flight Simulator II. A /nil descriptor is also +* supported. +../MODULES/SCF/vrn.dr +../MODULES/SCF/vi.dd +../MODULES/SCF/ftdd.dd +* +*************************************** +* Pipe Section +* +* Pipes are a useful but optional part of a system. +../MODULES/PIPE/pipeman.mn +../MODULES/PIPE/piper.dr +../MODULES/PIPE/pipe.dd +* +*************************************** +* Clock Section +* +* Select one clock module depending upon your power line frequency +* (60Hz = USA/Canada; 50Hz = Europe, Australia) +../MODULES/CLOCKS/clock_60hz +*../MODULES/CLOCKS/clock_50hz +* Select one clock2 module that supports your real-time clock, if any. +* Besides support for the internal software clock, the following +* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, +* Eliminator, Harris, SmartWatch, Cloud-9 (SuperIDE), the MESS emulator, Jeff +* Vavasour's CoCo emulator and DriveWire +*../MODULES/CLOCKS/clock2_soft +*../MODULES/CLOCKS/clock2_bnb +*../MODULES/CLOCKS/clock2_disto2 +*../MODULES/CLOCKS/clock2_disto4 +*../MODULES/CLOCKS/clock2_elim +*../MODULES/CLOCKS/clock2_harris +*../MODULES/CLOCKS/clock2_smart +*../MODULES/CLOCKS/clock2_jvemu +*../MODULES/CLOCKS/clock2_messemu +*../MODULES/CLOCKS/clock2_cloud9 +../MODULES/CLOCKS/clock2_dw3 +* +*************************************** +* System Kick-Start Module +* +* Choose which startup module you wish to use. (sysgo_dd is recommended +* for most configurations.) +* +* Alternatively, this module can reside in the root directory of the +* boot device, saving precious system RAM. +../MODULES/SYSMODS/sysgo_dd +*../MODULES/SYSMODS/sysgo_h0
--- a/level2/coco3_6309/bootlists/dw3.bl Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,288 +0,0 @@ -*************************************** -* NitrOS-9 Level 2 CoCo 3 Bootlist -* -* $Id$ -* -* This bootlist is presented as an example for creating custom bootfiles. -* A module may be excluded from the bootfile if an asterisk (*) is the -* first character of the line. -* -*************************************** -* Kernel/System Section -* -* These modules are mandatory. -../MODULES/KERNEL/krnp2 -*../MODULES/KERNEL/krnp3_perr -*../MODULES/KERNEL/krnp4_regdump -../MODULES/SYSMODS/ioman -../MODULES/SYSMODS/init -* -*************************************** -* CDF Section (HawkSoft) -* -*../MODULES/CDF/cdf.mn -* -* CDF descriptors - select as needed -* SCSI descriptors (IDs 0-6) -*../MODULES/CDF/sc0.dd -*../MODULES/CDF/sc1.dd -*../MODULES/CDF/sc2.dd -*../MODULES/CDF/sc3.dd -*../MODULES/CDF/sc4.dd -*../MODULES/CDF/sc5.dd -*../MODULES/CDF/sc6.dd -* IDE descriptors (master/slave) -*../MODULES/CDF/ic0.dd -*../MODULES/CDF/ic1.dd -* -*************************************** -* RBF Section -* -../MODULES/RBF/rbf.mn -* -* DriveWire 3 driver -../MODULES/RBF/rbdw3.dr -../MODULES/RBF/dw3.sb -* DriveWire descriptors - select as needed -../MODULES/RBF/ddx0.dd -*../MODULES/RBF/x0.dd -../MODULES/RBF/x1.dd -../MODULES/RBF/x2.dd -../MODULES/RBF/x3.dd -* -* SuperDriver Package (Cloud-9 product) -*../MODULES/RBF/rbsuper.dr -* Select Low level SCSI and/or IDE driver -*../MODULES/RBF/lltc3.dr -*../MODULES/RBF/llide.dr -* SuperDriver descriptors - select as needed -* TC^3 SCSI DD descriptor (ID 0) -*../MODULES/RBF/dds0_tc3.dd -* TC^3 SCSI descriptors (IDs 0-6) -*../MODULES/RBF/s0_tc3.dd -*../MODULES/RBF/s1_tc3.dd -*../MODULES/RBF/s2_tc3.dd -*../MODULES/RBF/s3_tc3.dd -*../MODULES/RBF/s4_tc3.dd -*../MODULES/RBF/s5_tc3.dd -*../MODULES/RBF/s6_tc3.dd -* TC^3 SCSI HDB-DOS descriptor -*../MODULES/RBF/sh_tc3.dd -* IDE DD descriptor (Master) -*../MODULES/RBF/ddi0_ide.dd -* IDE descriptors (master/slave) -*../MODULES/RBF/i0_ide.dd -*../MODULES/RBF/i1_ide.dd -* IDE HDB-DOS descriptor -*../MODULES/RBF/ih_ide.dd -* -* WD1773 floppy support for Tandy and compatible disk controllers -../MODULES/RBF/rb1773.dr -* WD1773 floppy support for Disto Super Controller II -*../MODULES/RBF/rb1773_scii_ff74.dr -*../MODULES/RBF/rb1773_scii_ff58.dr -* Floppy device descriptors -* DD - default device - choose one if needed -*../MODULES/RBF/ddd0_35s.dd -*../MODULES/RBF/ddd0_40d.dd -*../MODULES/RBF/ddd0_80d.dd -* D0 - drive 0 - choose one if needed -*../MODULES/RBF/d0_35s.dd -../MODULES/RBF/d0_40d.dd -*../MODULES/RBF/d0_80d.dd -* D1 - drive 1 - choose one if needed -*../MODULES/RBF/d1_35s.dd -../MODULES/RBF/d1_40d.dd -*../MODULES/RBF/d1_80d.dd -* D2 - drive 2 - choose one if needed -*../MODULES/RBF/d2_35s.dd -../MODULES/RBF/d2_40d.dd -*../MODULES/RBF/d2_80d.dd -* D3 - drive 3 - choose if needed -*../MODULES/RBF/d3_35s.dd -* -* RAMDisk driver -*../MODULES/RBF/rammer.dr -* RAMDisk descriptors - select as needed -*../MODULES/RBF/ddr0_8k.dd -*../MODULES/RBF/ddr0_96k.dd -*../MODULES/RBF/ddr0_128k.dd -*../MODULES/RBF/ddr0_192k.dd -*../MODULES/RBF/r0_8k.dd -*../MODULES/RBF/r0_96k.dd -*../MODULES/RBF/r0_128k.dd -*../MODULES/RBF/r0_192k.dd -* Memory device descriptor -*../MODULES/RBF/md.dd -*************************************** -* SCF Section -* -../MODULES/SCF/scf.mn -* -* CoCo 3 I/O sub-drivers -../MODULES/SCF/vtio.dr -../MODULES/SCF/keydrv_cc3.sb -* Sound module: CoCo 3 built-in sound generator -../MODULES/SCF/snddrv_cc3.sb -* Joystick modules: choose joy for hi-res joystick adapter or -* (M)icrosoft or (L)ogitech mouse using 6551 or 6552 ACIA -../MODULES/SCF/joydrv_joy.sb -*../MODULES/SCF/joydrv_6551M.sb -*../MODULES/SCF/joydrv_6552M.sb -*../MODULES/SCF/joydrv_6551L.sb -*../MODULES/SCF/joydrv_6552L.sb -* -* CoGrf/CoWin subroutine module -* Use CoWin with Multi-Vue; use CoGrf -* for basic text and graphic window support.. -* Select only one. -*../MODULES/SCF/cogrf.io -../MODULES/SCF/cowin.io -* -* CoVDG I/O subroutine module -* Select one or both -*../MODULES/SCF/covdg.io -*../MODULES/SCF/covdg_small.io -* -* Select only one term descriptor -*../MODULES/SCF/term_vdg.dt -*../MODULES/SCF/term_win40.dt -../MODULES/SCF/term_win80.dt -*../MODULES/SCF/term_scbbt.dt -*../MODULES/SCF/term_sc6551.dt -* -* Select as many window descriptors as needed -../MODULES/SCF/w.dw -../MODULES/SCF/w1.dw -../MODULES/SCF/w2.dw -../MODULES/SCF/w3.dw -../MODULES/SCF/w4.dw -../MODULES/SCF/w5.dw -../MODULES/SCF/w6.dw -../MODULES/SCF/w7.dw -../MODULES/SCF/w8.dw -../MODULES/SCF/w9.dw -../MODULES/SCF/w10.dw -../MODULES/SCF/w11.dw -../MODULES/SCF/w12.dw -../MODULES/SCF/w13.dw -../MODULES/SCF/w14.dw -../MODULES/SCF/w15.dw -* -* Select as many VDG window descriptors as needed -*../MODULES/SCF/v1.dw -*../MODULES/SCF/v2.dw -*../MODULES/SCF/v3.dw -*../MODULES/SCF/v4.dw -*../MODULES/SCF/v5.dw -*../MODULES/SCF/v6.dw -*../MODULES/SCF/v7.dw -* -* Serial port drivers -* CoCo Bit-Banger terminal port -*../MODULES/SCF/scbbt.dr -*../MODULES/SCF/t1_scbbt.dd -* 6551 ACIA -*../MODULES/SCF/sc6551.dr -*../MODULES/SCF/t2_sc6551.dd -*../MODULES/SCF/t3_sc6551.dd -* Tandy Modem Pak -*../MODULES/SCF/modpak.dr -*../MODULES/SCF/m1.dd -*../MODULES/SCF/m2.dd -* -* Printer drivers -* ../MODULES/SCF/scbbp.dr -* ../MODULES/SCF/p_scbbp.dd -* -* DriveWire 3 Printer drivers -* ../MODULES/SCF/scdwp.dr -* ../MODULES/SCF/p_scdwp.dd -* -* DriveWire Networking -*../MODULES/SCF/scdwn.dr -*../MODULES/SCF/term_scdwn.dt -*../MODULES/SCF/n_scdwn.dd -*../MODULES/SCF/n1_scdwn.dd -*../MODULES/SCF/n2_scdwn.dd -*../MODULES/SCF/n3_scdwn.dd -*../MODULES/SCF/n4_scdwn.dd -*../MODULES/SCF/n5_scdwn.dd -*../MODULES/SCF/n6_scdwn.dd -*../MODULES/SCF/n7_scdwn.dd -*../MODULES/SCF/n8_scdwn.dd -*../MODULES/SCF/n9_scdwn.dd -*../MODULES/SCF/n10_scdwn.dd -*../MODULES/SCF/n11_scdwn.dd -*../MODULES/SCF/n12_scdwn.dd -*../MODULES/SCF/n13_scdwn.dd -*../MODULES/SCF/n14_scdwn.dd -* -* DriveWire Networking -*../MODULES/SCF/scdwn.dr -*../MODULES/SCF/term_scdwn.dt -*../MODULES/SCF/n0_scdwn.dd -*../MODULES/SCF/n1_scdwn.dd -*../MODULES/SCF/n2_scdwn.dd -*../MODULES/SCF/n3_scdwn.dd -*../MODULES/SCF/n4_scdwn.dd -*../MODULES/SCF/n5_scdwn.dd -*../MODULES/SCF/n6_scdwn.dd -*../MODULES/SCF/n7_scdwn.dd -*../MODULES/SCF/n8_scdwn.dd -*../MODULES/SCF/n9_scdwn.dd -*../MODULES/SCF/n10_scdwn.dd -*../MODULES/SCF/n11_scdwn.dd -*../MODULES/SCF/n12_scdwn.dd -*../MODULES/SCF/n13_scdwn.dd -*../MODULES/SCF/n14_scdwn.dd -* -* VRN is a driver module used by certain games, including King's Quest III, -* Leisure Suit Larry and Flight Simulator II. A /nil descriptor is also -* supported. -../MODULES/SCF/vrn.dr -../MODULES/SCF/vi.dd -../MODULES/SCF/ftdd.dd -* -*************************************** -* Pipe Section -* -* Pipes are a useful but optional part of a system. -../MODULES/PIPE/pipeman.mn -../MODULES/PIPE/piper.dr -../MODULES/PIPE/pipe.dd -* -*************************************** -* Clock Section -* -* Select one clock module depending upon your power line frequency -* (60Hz = USA/Canada; 50Hz = Europe, Australia) -../MODULES/CLOCKS/clock_60hz -*../MODULES/CLOCKS/clock_50hz -* Select one clock2 module that supports your real-time clock, if any. -* Besides support for the internal software clock, the following -* hardware clocks are supported: Burke & Burke, Disto 2-N-1, Disto 4-N-1, -* Eliminator, Harris, SmartWatch, Cloud-9 (SuperIDE), the MESS emulator, Jeff -* Vavasour's CoCo emulator and DriveWire -*../MODULES/CLOCKS/clock2_soft -*../MODULES/CLOCKS/clock2_bnb -*../MODULES/CLOCKS/clock2_disto2 -*../MODULES/CLOCKS/clock2_disto4 -*../MODULES/CLOCKS/clock2_elim -*../MODULES/CLOCKS/clock2_harris -*../MODULES/CLOCKS/clock2_smart -*../MODULES/CLOCKS/clock2_jvemu -*../MODULES/CLOCKS/clock2_messemu -*../MODULES/CLOCKS/clock2_cloud9 -../MODULES/CLOCKS/clock2_dw3 -* -*************************************** -* System Kick-Start Module -* -* Choose which startup module you wish to use. (sysgo_dd is recommended -* for most configurations.) -* -* Alternatively, this module can reside in the root directory of the -* boot device, saving precious system RAM. -../MODULES/SYSMODS/sysgo_dd -*../MODULES/SYSMODS/sysgo_h0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/level2/coco3_6309/scripts/mb.dw Sun Nov 24 12:07:31 2013 +0100 @@ -0,0 +1,31 @@ +-t +-x +tmode .1 pau=0 +echo * NitrOS-9 Level 2 Boot Creation Script +echo * +echo * This script creates a bootable DriveWire 3 disk image +echo * using the dw.bl bootlist file. +echo * +echo * The resulting disk will boot NitrOS-9 from DriveWire disk 0. +echo * +echo "Please type the destination device (e.g. /x0, /x1)" +var.1 +prompt Insert a blank disk in %1 and press a key: +echo * +echo * Step 1: Format disk in %1 +format %1 "NitrOS-9 Level 2 Boot Disk" r +ynn +echo * +echo * Step 2: Create a custom boot track +merge ../MODULES/BOOTTRACK/rel_80 ../MODULES/BOOTTRACK/boot_dw ../MODULES/BOOTTRACK/krn>-bttemp +echo * +echo * Step 3: Create the bootfile and boot track +os9gen %1 -t=bttemp<../BOOTLISTS/dw.bl +del bttemp +echo * +echo * Step 4: Populate the disk with essential files +copy ../MODULES/SYSMODS/sysgo_dd %1/sysgo +makdir %1/CMDS +copy -w=%1/CMDS ../CMDS/shell ../CMDS/grfdrv +echo * +echo * We're done
--- a/level2/coco3_6309/scripts/mb.dw3 Sun Nov 24 11:45:32 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ --t --x -tmode .1 pau=0 -echo * NitrOS-9 Level 2 Boot Creation Script -echo * -echo * This script creates a bootable DriveWire 3 disk image -echo * using the dw3.bl bootlist file. -echo * -echo * The resulting disk will boot NitrOS-9 from DriveWire disk 0. -echo * -echo "Please type the destination device (e.g. /x0, /x1)" -var.1 -prompt Insert a blank disk in %1 and press a key: -echo * -echo * Step 1: Format disk in %1 -format %1 "NitrOS-9 Level 2 Boot Disk" r -ynn -echo * -echo * Step 2: Create a custom boot track -merge ../MODULES/BOOTTRACK/rel_80 ../MODULES/BOOTTRACK/boot_dw3 ../MODULES/BOOTTRACK/krn>-bttemp -echo * -echo * Step 3: Create the bootfile and boot track -os9gen %1 -t=bttemp<../BOOTLISTS/dw3.bl -del bttemp -echo * -echo * Step 4: Populate the disk with essential files -copy ../MODULES/SYSMODS/sysgo_dd %1/sysgo -makdir %1/CMDS -copy -w=%1/CMDS ../CMDS/shell ../CMDS/grfdrv -echo * -echo * We're done