dsktool 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. data/bin/dsktool.rb +157 -0
  2. data/doc/classes/AppleSoftFile.html +215 -0
  3. data/doc/classes/AppleSoftFile.src/M000005.html +18 -0
  4. data/doc/classes/AppleSoftFile.src/M000006.html +18 -0
  5. data/doc/classes/AppleSoftFile.src/M000008.html +18 -0
  6. data/doc/classes/AppleSoftFile.src/M000009.html +18 -0
  7. data/doc/classes/AppleSoftFile.src/M000010.html +18 -0
  8. data/doc/classes/AppleSoftFile.src/M000011.html +18 -0
  9. data/doc/classes/AppleSoftFile.src/M000012.html +18 -0
  10. data/doc/classes/BinaryFile.html +179 -0
  11. data/doc/classes/BinaryFile.src/M000015.html +18 -0
  12. data/doc/classes/BinaryFile.src/M000020.html +18 -0
  13. data/doc/classes/BinaryFile.src/M000021.html +18 -0
  14. data/doc/classes/BinaryFile.src/M000022.html +19 -0
  15. data/doc/classes/BinaryFile.src/M000023.html +18 -0
  16. data/doc/classes/BinaryFile.src/M000024.html +18 -0
  17. data/doc/classes/BinaryFile.src/M000025.html +19 -0
  18. data/doc/classes/D65.html +180 -0
  19. data/doc/classes/D65.src/M000002.html +18 -0
  20. data/doc/classes/D65.src/M000003.html +18 -0
  21. data/doc/classes/D65.src/M000004.html +64 -0
  22. data/doc/classes/D65.src/M000005.html +18 -0
  23. data/doc/classes/D65.src/M000006.html +18 -0
  24. data/doc/classes/D65.src/M000007.html +18 -0
  25. data/doc/classes/D65.src/M000008.html +18 -0
  26. data/doc/classes/D65.src/M000009.html +64 -0
  27. data/doc/classes/DOSDisk.html +272 -0
  28. data/doc/classes/DOSDisk.src/M000007.html +20 -0
  29. data/doc/classes/DOSDisk.src/M000008.html +77 -0
  30. data/doc/classes/DOSDisk.src/M000010.html +20 -0
  31. data/doc/classes/DOSDisk.src/M000011.html +20 -0
  32. data/doc/classes/DOSDisk.src/M000012.html +19 -0
  33. data/doc/classes/DOSDisk.src/M000013.html +20 -0
  34. data/doc/classes/DOSDisk.src/M000014.html +19 -0
  35. data/doc/classes/DOSDisk.src/M000015.html +76 -0
  36. data/doc/classes/DOSFile.html +221 -0
  37. data/doc/classes/DOSFile.src/M000016.html +22 -0
  38. data/doc/classes/DOSFile.src/M000017.html +17 -0
  39. data/doc/classes/DOSFile.src/M000018.html +18 -0
  40. data/doc/classes/DOSFile.src/M000021.html +22 -0
  41. data/doc/classes/DOSFile.src/M000022.html +22 -0
  42. data/doc/classes/DOSFile.src/M000023.html +22 -0
  43. data/doc/classes/DOSFile.src/M000024.html +17 -0
  44. data/doc/classes/DOSFile.src/M000025.html +18 -0
  45. data/doc/classes/DOSFile.src/M000026.html +22 -0
  46. data/doc/classes/DOSFile.src/M000027.html +17 -0
  47. data/doc/classes/DOSFile.src/M000028.html +18 -0
  48. data/doc/classes/DSK.html +285 -0
  49. data/doc/classes/DSK.src/M000009.html +22 -0
  50. data/doc/classes/DSK.src/M000010.html +27 -0
  51. data/doc/classes/DSK.src/M000011.html +19 -0
  52. data/doc/classes/DSK.src/M000012.html +18 -0
  53. data/doc/classes/DSK.src/M000013.html +22 -0
  54. data/doc/classes/DSK.src/M000014.html +22 -0
  55. data/doc/classes/DSK.src/M000015.html +22 -0
  56. data/doc/classes/DSK.src/M000016.html +22 -0
  57. data/doc/classes/DSK.src/M000017.html +22 -0
  58. data/doc/classes/DSK.src/M000018.html +27 -0
  59. data/doc/classes/DSK.src/M000019.html +19 -0
  60. data/doc/classes/DSK.src/M000020.html +18 -0
  61. data/doc/classes/DSK.src/M000021.html +40 -0
  62. data/doc/classes/DSK.src/M000022.html +23 -0
  63. data/doc/classes/IntegerBasicFile.html +276 -0
  64. data/doc/classes/IntegerBasicFile.src/M000001.html +18 -0
  65. data/doc/classes/IntegerBasicFile.src/M000004.html +18 -0
  66. data/doc/classes/IntegerBasicFile.src/M000005.html +18 -0
  67. data/doc/classes/IntegerBasicFile.src/M000006.html +18 -0
  68. data/doc/classes/TestDOSDisks.html +174 -0
  69. data/doc/classes/TestDOSDisks.src/M000001.html +19 -0
  70. data/doc/classes/TestDOSDisks.src/M000002.html +19 -0
  71. data/doc/classes/TestDOSDisks.src/M000003.html +43 -0
  72. data/doc/classes/TestDisassembly.html +144 -0
  73. data/doc/classes/TestDisassembly.src/M000005.html +19 -0
  74. data/doc/classes/TestDisassembly.src/M000006.html +19 -0
  75. data/doc/classes/TestDisassembly.src/M000007.html +19 -0
  76. data/doc/classes/TextFile.html +179 -0
  77. data/doc/classes/TextFile.src/M000019.html +18 -0
  78. data/doc/classes/TextFile.src/M000020.html +20 -0
  79. data/doc/classes/TextFile.src/M000024.html +18 -0
  80. data/doc/classes/TextFile.src/M000025.html +18 -0
  81. data/doc/classes/TextFile.src/M000026.html +18 -0
  82. data/doc/classes/TextFile.src/M000027.html +20 -0
  83. data/doc/classes/TextFile.src/M000029.html +18 -0
  84. data/doc/classes/TextFile.src/M000030.html +18 -0
  85. data/doc/classes/TextFile.src/M000031.html +20 -0
  86. data/doc/created.rid +1 -0
  87. data/doc/dot/f_0.dot +14 -0
  88. data/doc/dot/f_0.png +0 -0
  89. data/doc/dot/f_1.dot +23 -0
  90. data/doc/dot/f_1.png +0 -0
  91. data/doc/dot/f_2.dot +32 -0
  92. data/doc/dot/f_2.png +0 -0
  93. data/doc/dot/f_3.dot +75 -0
  94. data/doc/dot/f_3.png +0 -0
  95. data/doc/dot/f_4.dot +23 -0
  96. data/doc/dot/f_4.png +0 -0
  97. data/doc/dot/f_5.dot +32 -0
  98. data/doc/dot/f_5.png +0 -0
  99. data/doc/dot/f_6.dot +32 -0
  100. data/doc/dot/f_6.png +0 -0
  101. data/doc/dot/f_7.dot +14 -0
  102. data/doc/dot/f_7.png +0 -0
  103. data/doc/files/bin/dsktool_rb.html +171 -0
  104. data/doc/files/lib/D65_rb.html +114 -0
  105. data/doc/files/lib/DOSDisk_rb.html +115 -0
  106. data/doc/files/lib/DOSFile_rb.html +118 -0
  107. data/doc/files/lib/DSK_rb.html +114 -0
  108. data/doc/files/test/tc_disassembly_rb.html +117 -0
  109. data/doc/files/test/tc_dos_disks_rb.html +116 -0
  110. data/doc/files/test/test_dos_disks_rb.html +109 -0
  111. data/doc/files/test/ts_test_all_rb.html +114 -0
  112. data/doc/fr_class_index.html +36 -0
  113. data/doc/fr_file_index.html +34 -0
  114. data/doc/fr_method_index.html +57 -0
  115. data/doc/index.html +24 -0
  116. data/lib/D65.rb +178 -0
  117. data/lib/DOSDisk.rb +186 -0
  118. data/lib/DOSFile.rb +356 -0
  119. data/lib/DSK.rb +121 -0
  120. data/lib/a2_symbols.yaml +199 -0
  121. data/test/dos33_with_adt.dsk +0 -0
  122. data/test/tc_disassembly.rb +16 -0
  123. data/test/tc_dos_disks.rb +49 -0
  124. data/test/ts_test_all.rb +5 -0
  125. metadata +184 -0
data/lib/DSK.rb ADDED
@@ -0,0 +1,121 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ #
5
+ # For manipulating DSK files, as created by ADT (http://adt.berlios.de) and ADTPRo (http://adtpro.sourceforge.net)
6
+ # used by many Apple 2 emulators.
7
+ #
8
+ class DSK
9
+
10
+ DSK_FILE_LENGTH=143360
11
+ attr_accessor (:file_bytes)
12
+ # does this DSK have a standard Apple DOS 3.3 VTOC?
13
+ def is_dos33?
14
+ # VTOC is at offset 0x11000
15
+ # bytes 1/2/3 are a track number, sector number and DOS version number
16
+ # see if these are reasonable values
17
+
18
+ (@file_bytes[0x11001]<=34) && (@file_bytes[0x11002]<=15) && (@file_bytes[0x11003]==3)
19
+ end
20
+
21
+ #create a new DSK structure (in memory, not on disk)
22
+ def initialize(file_bytes="\0"*DSK_FILE_LENGTH)
23
+ if (file_bytes.length!=DSK_FILE_LENGTH) then
24
+ raise "DSK files must be #{DSK_FILE_LENGTH} bytes long (was #{file_bytes.length} bytes)"
25
+ end
26
+ @file_bytes=file_bytes
27
+ @files={}
28
+ end
29
+
30
+ #read in an existing DSK file (must exist)
31
+ def DSK.read(filename)
32
+ file_bytes=File.new(filename,"rb").read
33
+ if (file_bytes.length!=DSK_FILE_LENGTH) then
34
+ abort("#{filename} is not a valid DSK format file")
35
+ end
36
+ dsk=DSK.new(file_bytes)
37
+ if (dsk.is_dos33?)
38
+ require 'DOSDisk'
39
+ dsk=DOSDisk.new(file_bytes)
40
+ end
41
+ dsk
42
+ end
43
+
44
+ def get_sector(track,sector)
45
+ start_byte=track*16*256+sector*256
46
+ @file_bytes[start_byte..start_byte+255]
47
+ end
48
+
49
+ def files
50
+ @files
51
+ end
52
+
53
+ #print to stdout a formatted hex dump of a single 256 byte sector
54
+ def dump_sector(track,sector)
55
+
56
+ start_byte=track*16*256+sector*256
57
+ s=@file_bytes[start_byte..start_byte+255]
58
+
59
+ print_hline
60
+ printf("TRACK: $%02X SECTOR $%02X\ OFFSET $%04X\n",track,sector,start_byte)
61
+ printf "\t"
62
+
63
+ (0..15).each {|x| printf("%02X ",x) }
64
+ puts
65
+ print_hline
66
+ (0..15).each {|line_number|
67
+ lhs=""
68
+ rhs=""
69
+ start_byte=line_number*16
70
+ line=s[start_byte..start_byte+15]
71
+ line.each_byte {|byte|
72
+ lhs+= sprintf("%02X ", byte)
73
+ rhs+= (byte%128).chr.sub(/[\x00-\x1f]/,'.')
74
+ }
75
+ printf("%02X\t%s %s\n",start_byte,lhs,rhs)
76
+ }
77
+
78
+ end
79
+
80
+ #print to stdout a formatted hex dump of all sectors on all tracks
81
+ def dump_disk
82
+
83
+ (0..34).each {|track|
84
+ (0..15).each {|sector|
85
+ dump_sector(track,sector)
86
+ }
87
+ }
88
+ end
89
+
90
+ private
91
+
92
+ def print_hline
93
+ puts "-"*79
94
+ end
95
+
96
+
97
+ end
98
+ # == Author
99
+ # Jonno Downes (jonno@jamtronix.com)
100
+ #
101
+ # == Copyright
102
+ # Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
103
+ #
104
+ #Permission is hereby granted, free of charge, to any person obtaining
105
+ #a copy of this software and associated documentation files (the
106
+ #"Software"), to deal in the Software without restriction, including
107
+ #without limitation the rights to use, copy, modify, merge, publish,
108
+ #distribute, sublicense, and/or sell copies of the Software, and to
109
+ #permit persons to whom the Software is furnished to do so, subject to
110
+ #the following conditions:
111
+
112
+ # The above copyright notice and this permission notice shall be
113
+ # included in all copies or substantial portions of the Software.
114
+
115
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
116
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
117
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
118
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
119
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
120
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
121
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,199 @@
1
+ ---
2
+ 0x20: WNDLFT - Text window left-edge (0-39)
3
+ 0x21: WNDWDTH - Text window width (1-40)
4
+ 0x22: WNDTOP -Text window top-edge (0-23)
5
+ 0x23: WNDBTM - Text window bottom (1-24)
6
+ 0x24: CH - Horizontal cursor-position (0-39)
7
+ 0x25: CV - Vertical cursor-position (0-23)
8
+ 0x26: GBASL - low byte of screen address of left end point of line
9
+ 0x27: GBASH - high byte of screen address of left end point of line
10
+ 0x28: BASL - low byte of left end char position of current line
11
+ 0x29: BASH - high byte of left end char position of current line
12
+ 0x2B: Boot slot * $10 (after boot only)
13
+ 0x2C: H2 - Lo-res line end-point
14
+ 0x2E: MASK / CHKSUM
15
+ 0x2F: LASTIN - last byte read from cassette
16
+ 0x30: COLOR - Lo-res COLOR * $11
17
+ 0x32: INVFLAG - Text output format [$3F=INVERSE $FF=NORMAL $7F=FLASH]
18
+ 0x33: PROMPT - Prompt-character used by GETLN
19
+ 0x34: YSAV
20
+ 0x35: YSAV1
21
+ 0x36: CSWL - low byte of stdout routine
22
+ 0x37: CSWH - high byte of stdout routine
23
+ 0x38: KSWL - low byte of stdin routine
24
+ 0x39: KSWH - high byte of stdin routine
25
+ 0x3A: PCL - saved program counter (low byte)
26
+ 0x3B: PCH - saved program counter (high byte)
27
+ 0x45: ACC - saved A
28
+ 0x46: XREG - saved X
29
+ 0x47: YREG - saved Y
30
+ 0x48: STATUS - saved STATUS register
31
+ 0x49: SPNT - saved stack pointer
32
+ 0x4A: LOMEM address (INT) (low byte)
33
+ 0x4B: LOMEM address (INT) (high byte)
34
+ 0x4C: HIMEM address (INT) (low byte)
35
+ 0x4D: HIMEM address (INT) (high byte)
36
+ 0x4E: Random-Number Field (low byte)
37
+ 0x4F: Random-Number Field (high byte)
38
+ 0x67: LOMEM - Start of Applesoft program (low byte)
39
+ 0x68: LOMEM - Start of Applesoft program (high byte)
40
+ 0x69: HIMEM - Start of varible space & end of Applesoft program (low byte)
41
+ 0x6A: HIMEM - Start of varible space & end of Applesoft program (high byte)
42
+ 0x6B: Start of array space (FP) (low byte)
43
+ 0x6C: Start of array space (FP) (high byte)
44
+ 0xCA: Start of Program Address (INT) (low byte)
45
+ 0xCB: Start of Program Address (INT) (high byte)
46
+ 0xCC: End of Varible Storage (INT) (low byte)
47
+ 0xCD: End of Varible Storage (INT) (high byte)
48
+ 0xD6: RUN Flag (set to $FF turns Applesoft into run only.)
49
+ 0xD8: ONERR Flag (set to $00 cancels ONERR)
50
+ 0xDA: "Line# of ONERR Error (low byte)"
51
+ 0xDB: "Line# of ONERR Error (high byte)"
52
+ 0xDE: ONERR Error Codes
53
+ 0xE0: X Coordinate of last HPLOT (0-279) (low byte)
54
+ 0xE1: X Coordinate of last HPLOT (0-279) (high byte)
55
+ 0xE2: Y Coordinate of last HPLOT (0-191)
56
+ 0xE4: HCOLOR codes:$00=0 $2A=1 $85=2 $7F=3 $80=4 $AA=5 $D5=6 $FF=6
57
+ 0xE6: "Hi res plotting page (32=page 1, 64=page 2, 96=page 3)"
58
+ 0xE7: SCALE (NOTE:SCALE=0 is equivalent to a SCALE of $FF.)
59
+ 0xE8: Shape table start address. (low byte)
60
+ 0xE9: Shape table start address. (high byte)
61
+ 0xEA: Hi-Res Collision-Check
62
+ 0xF1: SPEED (NOTE:PEEK(241) is 256 minus the current SPEED.)
63
+ 0xF3: FLASH Mask
64
+ 0xF9: ROT (rotation) value
65
+ 0x3F0: BRK handler vector (low byte)
66
+ 0x3F1: BRK handler vector (high byte)
67
+ 0x3F2: RESET handler vector (low byte)
68
+ 0x3F3: RESET handler vector (high byte)
69
+ 0x3F4: "Powerup indicator (if not == EOR of #$A5 and $3F3 then RESET leads to cold-start)"
70
+ 0x3F5: Applesoft & vector handler - byte 1
71
+ 0x3F6: Applesoft & vector handler - byte 2
72
+ 0x3F7: Applesoft & vector handler - byte 3
73
+ 0x3F8: Control-y handler - byte 1
74
+ 0x3F9: Control-y handler - byte 2
75
+ 0x3FA: Control-y handler - byte 3
76
+ 0x3FB: NMI handler - byte 1
77
+ 0x3FC: NMI handler - byte 2
78
+ 0x3FD: NMI handler - byte 3
79
+ 0x3FE: IRQ vector address - (low byte)
80
+ 0x3FB: IRQ vector address - (high byte)
81
+ 0xC000: 80STOREOFF - Allow page2 to switch video page1 page2
82
+ 0xC001: 80STOREON - Allow page2 to switch main & aux video memory
83
+ 0xC002: RAMRDOFF - Read enable main memory from $0200-$BFFF
84
+ 0xC003: RAMDRON - Read enable aux memory from $0200-$BFFF
85
+ 0xC004: RAMWRTOFF - Write enable main memory from $0200-$BFFF
86
+ 0xC005: RAMWRTON - Write enable aux memory from $0200-$BFFF
87
+ 0xC006: INTCXROMOFF - Enable slot ROM from $C100-$CFFF
88
+ 0xC007: INTCXROMON - Enable main ROM from $C100-$CFFF
89
+ 0xC008: ALZTPOFF - Enable main memory from $0000-$01FF & avl BSR
90
+ 0xC009: ALTZPON - Enable aux memory from $0000-$01FF & avl BSR
91
+ 0xC00A: SLOTC3ROMOFF - Enable main ROM from $C300-$C3FF
92
+ 0xC00B: SLOTC3ROMON - Enable slot ROM from $C300-$C3FF
93
+ 0xC00C: 80COLOFF - Turn off 80 column display
94
+ 0xC00D: 80COLON - Turn on 80 column display
95
+ 0xC00E: ALTCHARSETOFF - Turn off alternate characters
96
+ 0xC00F: ALTCHARSETON - Turn on alternate characters
97
+ 0xC010: AKD - 1=key pressed 0=keys free (clears strobe)
98
+ 0xC011: BSRBANK2 - 1=bank2 available 0=bank1 available
99
+ 0xC012: BSRREADRAM - 1=BSR active for read 0=$D000-$FFFF active
100
+ 0xC013: RAMRD - 0=main $0200-$BFFF active reads 1=aux active
101
+ 0xC014: RAMWRT - 0=main $0200-$BFFF active writes 1=aux writes
102
+ 0xC015: INTCXROM - 1=main $C100-$CFFF ROM active 0=slot active
103
+ 0xC016: ALTZP - 1=aux $0000-$1FF+auxBSR 0=main available
104
+ 0xC017: SLOTC3ROM - 1=slot $C3 ROM active 0=main $C3 ROM active
105
+ 0xC018: 80STORE - 1=page2 switches main/aux 0=page2 video
106
+ 0xC019: VERTBLANK - 1=vertical retrace on 0=vertical retrace off
107
+ 0xC01A: TEXT - 1=text mode is active 0=graphics mode active
108
+ 0xC01B: MIXED - 1=mixed graphics & text
109
+ 0xC01C: PAGE2 - 1=video page2 selected or aux
110
+ 0xC01D: HIRES - 1=high resolution graphics 0=low resolution
111
+ 0xC01E: ALTCHARSET - 1=alt character set on 0=alt char set off
112
+ 0xC01F: 80COL - 1=80 col display on 0=80 col display off
113
+ 0xC020: TAPEOUT - toggle the cassette output
114
+ 0xC030: SPEAKER - toggle speaker diaphragm
115
+ oxC040: STROBE - generate .5 uS low pulse @ Game pin 5
116
+ 0xC050: TEXTOFF - Select graphics mode
117
+ 0xC051: TEXTON - Select text mode
118
+ 0xC052: MIXEDOFF - Use full screen for graphics
119
+ 0xC053: MIXEDON - Use graphics with 4 lines of text
120
+ 0xC054: PAGE2OFF - Select panel display (or main video memory)
121
+ 0xC055: PAGE2ON - Select page2 display (or aux video memory)
122
+ 0xC056: HIRESOFF - Select low resolution graphics
123
+ 0xC057: HIRESON - Select high resolution graphics
124
+ 0xC058: SETAN0 - annunciator-0 output to 0
125
+ 0xC059: CLRAN0 - annunciator-0 output to 1
126
+ 0xC05A: SETAN1 - annunciator-1 output to 0
127
+ 0xC05B: CLRAN1 - annunciator-1 output to 1
128
+ 0xC05C: SETAN2 - annunciator-2 output to 0
129
+ 0xC05D: CLRAN2 - annunciator-2 output to 1
130
+ 0xC05E: SETDHIRES - turn on double hi-res
131
+ 0xC05F: CLRDHIRES - turn off double hi-res
132
+ 0xC060: TAPEIN - bit 7 = data from cassete
133
+ 0xC061: OPNAPPLE - open apple (command) key data
134
+ 0xC062: CLSAPPLE - closed apple (option) key data (read)
135
+ 0xC07E: SETIOUDIS - enable DHIRES & disable $C058-5F (W)
136
+ 0xC07F: CLRIOUDIS - disable DHIRES & enable $C058-5F (W)
137
+ 0xC080: RD LC RAM bank2, WR-protect LC RAM
138
+ 0xC081: ROMIN - RD ROM, WR-enable LC RAM
139
+ 0xC082: RD ROM, WR-protect LC RAM
140
+ 0xC083: LCBANK2 - RD LC RAM bank2, WR-enable LC RAM
141
+ 0xC084: RD LC RAM bank2, WR-protect LC RAM
142
+ 0xC085: RD ROM, WR-enable LC RAM
143
+ 0xC086: RD ROM, WR-protect LC RAM
144
+ 0xC087: RD LC RAM bank2, WR-enable LC RAM
145
+ 0xC088: RD LC RAM bank1, WR-protect LC RAM
146
+ 0xC089: RD ROM, WR-enable LC RAM
147
+ 0xC08A: RD ROM, WR-protect LC RAM
148
+ 0xC08B: LCBANK1 - RD LC RAM bank1, WR-enable LC RAM
149
+ 0xC08C: RD LC RAM bank1, WR-protect LC RAM
150
+ 0xC08D: RD ROM, WR-enable LC RAM
151
+ 0xC08E: RD ROM, WR-protect LC RAM
152
+ 0xC08F: LCBANK1 - RD LC RAM bank1, WR-enable LC RAM
153
+ 0xC0E8: Turn on disk motor (slot 6)
154
+ 0xC0E9: Turn off disk motor (slot 6)
155
+ 0xCFFD: CLRC8ROM - disable Slot card C8 ROM
156
+ 0xF800: "PLOT - draw block on low res screen - vert position in A, horizontal position in Y"
157
+ 0xF819: "HLINE - draw horizontal line - vertical address in A, start horizontal position in Y, end horizontal position in $2C"
158
+ 0xF828: "VLINE - draw vertical line of blocks. horizintal coordinate in Y, top vertical coordinate in A, bottom vertical coordinate in $2D"
159
+ 0xF832: "CLRSCR - clear the low res screen"
160
+ 0xF836: "CLRTOP - clear top 40 rows of low res screen"
161
+ 0xF85F: "NEXTCOL - incriment colour by 3"
162
+ 0xF864: "SETCOL - set low res gfx colour to value in A"
163
+ 0xF871: "SCRN - read the low res screen. on input, A is vertical position, Y is horizontal. on return, A is color of block"
164
+ 0xF941: "PRNTAX - print A & X in hex to stdout"
165
+ 0xF948: "PRBLNK - print 3 blank spaces to stdout"
166
+ 0xF94A: "PRBL2 - print many blank spaces - X holds count"
167
+ 0xFB1E: "PREAD - read a hand control - on input X is control (0..3), on return Y holds value"
168
+ 0xFB2F: "INIT - set STATUS in zero page to 0"
169
+ 0xFC42: "CLREOP - clear to end of window"
170
+ 0xFC58: "HOME - home cursor and clear"
171
+ 0xFC9C: "CLREOL - clear to end of line from cursor"
172
+ 0xFC9E: "CLREOLZ - clear to end of line, starting from BASL,Y"
173
+ 0xFCA8: "WAIT - wait for period of time specified by A. delay is 1/2(26+27A+5A^2) microseconds"
174
+ 0xFD0C: "RDKEY - get an input char, using routine at ($38/$39)"
175
+ 0xFD1B: "KEYIN - wait for keypress, keycode returned in A"
176
+ 0xFD35: "RDCHAR - read a char from stdin"
177
+ 0xFD67: "GETLNZ - print CR, then call GETLN"
178
+ 0xFD6A: "GETLN - get an input line - uses char in $36 as prompt, input stored in $200, length in X"
179
+ 0xFD6F: "GETLN1 - get input line, no prompt"
180
+ 0xFD75: "NEXTCHAR - process next char in input buffer"
181
+ 0xFD8B: "CROUT1 - return with clear"
182
+ 0xFD8E: "CROUT - send a CR to stdout"
183
+ 0xFDDA: "PRBYTE - print A to stdout as hex digits"
184
+ 0xFDE3: "PRHEX - print low nibble of A to stdout as a hex digit"
185
+ 0xFDED: "COUT - output char in A (uses routine at ($36/$37) for output)"
186
+ 0xFDF0: "COUT1 - output char in A to screen"
187
+ 0xFE2C: "MOVE - destination address in $42/$43, start source in $3C/$3D, end source in $3E/$3F"
188
+ 0xFE36: "VERIFY - compare 2 blocks of memory, destination is in $42/$43, start source in $3C/$3D, end address in $3E/3F"
189
+ 0xFE80: "SETINV - set inverse mode"
190
+ 0xFE84: "SETNORM - set normal mode"
191
+ 0xFE89: "SETKBD - set port #0(keyboard) for input"
192
+ 0xFE93: "SETVID - set port #0(video) for output"
193
+ 0xFECD: "WRITE - write data to cassete. Address of first byte in $3C/$3D, last byte in $3D/$3E"
194
+ 0xFEFD: "READ - read from tape. address of first byte in $3C/$3D, end address in $3E/$3D"
195
+ 0xFF2D: "PRERR - print ERR to stdout"
196
+ 0xFF3A: "BELL - writes a ^G to stdout"
197
+ 0xFF3F: "IOREST - load registers with locations $45 to $49"
198
+ 0xFF4A: "IOSAVE - save all registers to locations $45 to $49 in order A,X,Y,P,S"
199
+ 0xFFBD: "BELL1 - send a beep to the speaker"
Binary file
@@ -0,0 +1,16 @@
1
+ #make sure the relevant folder with our libraries is in the require path
2
+ lib_path=File.expand_path(File.dirname(__FILE__)+"//..//lib")
3
+ $:.unshift(lib_path) unless $:.include?(lib_path)
4
+
5
+ require 'test/unit'
6
+ require 'D65'
7
+ require 'DSK'
8
+
9
+ class TestDisassembly <Test::Unit::TestCase
10
+
11
+ def test_simple
12
+ assert(/RTS/.match(D65.disassemble("\x60")),"disassembly of 0x60 should be RTS")
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,49 @@
1
+ #make sure the relevant folder with our libraries is in the require path
2
+ lib_path=File.expand_path(File.dirname(__FILE__)+"//..//lib")
3
+ $:.unshift(lib_path) unless $:.include?(lib_path)
4
+
5
+ require 'test/unit'
6
+ require 'DSK'
7
+
8
+ class TestDOSDisks <Test::Unit::TestCase
9
+ def test_bad_dsks
10
+ assert_raise(RuntimeError,"short file should throw an error") {dsk=DSK.new("0"*100)}
11
+ assert_raise(Errno::ENOENT,"non existant file should throw an error") {dsk=DSK.read("NonExistantFileName.not")}
12
+ end
13
+
14
+
15
+ def test_empty_dsk
16
+ dsk=DSK.new()
17
+ assert(!dsk.is_dos33?,"empty DSK should not be DOS 3.3 format")
18
+ end
19
+
20
+ def test_simple_dos_dsk
21
+ dskname=File.dirname(__FILE__)+"//dos33_with_adt.dsk"
22
+ dsk=DSK.read(dskname)
23
+ assert(dsk.is_dos33?,"#{dskname} should be DOS 3.3 format")
24
+ assert(dsk.files.length>0,"#{dskname} should have at least one file")
25
+
26
+ hello_file=dsk.files["HELLO"]
27
+ assert(hello_file!=nil,"#{dskname} should have a file called HELLO")
28
+ assert(hello_file.instance_of?(AppleSoftFile),"HELLO should be an AppleSoft file")
29
+ assert(hello_file.to_s.length>0,"HELLO should have non-zero length")
30
+ assert(hello_file.to_s[0..5]=="10 REM","HELLO should start '10 REM'")
31
+
32
+ binary_file=dsk.files["MUFFIN"]
33
+ assert(binary_file!=nil,"#{dskname} should have a file called MUFFIN")
34
+ assert(binary_file.instance_of?(BinaryFile),"HELLO should be an Binary file")
35
+ assert(binary_file.to_s.length>0,"MUFFIN should have non-zero length")
36
+ assert(binary_file.disassembly.length>0,"MUFFIN disassembly should have non-zero length")
37
+ assert(binary_file.disassembly[0..4]=="0803:","MUFFIN disassembly should start at $803")
38
+
39
+
40
+ integer_file=dsk.files["APPLESOFT"]
41
+ assert(integer_file!=nil,"#{dskname} should have a file called APPLESOFT")
42
+ assert(integer_file.instance_of?(IntegerBasicFile),"HELLO should be an IntegetBasic file")
43
+ assert(integer_file.to_s.length>0,"APPLESOFT should have non-zero length")
44
+ assert(integer_file.to_s[0..5]=="10 REM","APPLESOFT should start '10 REM'")
45
+
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,5 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'tc_dos_disks'
5
+ require 'tc_disassembly'
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: dsktool
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.1
7
+ date: 2007-06-16 00:00:00 +10:00
8
+ summary: a command line tool + libraries for manipulating DSK format images as used by Apple 2 emulators
9
+ require_paths:
10
+ - lib
11
+ email: dsktoool@jamtronix.com
12
+ homepage: http://dsktool.rubyforge.org
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ authors:
29
+ - Jonno Downes
30
+ files:
31
+ - bin/dsktool.rb
32
+ - doc/classes
33
+ - doc/created.rid
34
+ - doc/dot
35
+ - doc/files
36
+ - doc/fr_class_index.html
37
+ - doc/fr_file_index.html
38
+ - doc/fr_method_index.html
39
+ - doc/index.html
40
+ - doc/classes/AppleSoftFile.html
41
+ - doc/classes/AppleSoftFile.src
42
+ - doc/classes/BinaryFile.html
43
+ - doc/classes/BinaryFile.src
44
+ - doc/classes/D65.html
45
+ - doc/classes/D65.src
46
+ - doc/classes/DOSDisk.html
47
+ - doc/classes/DOSDisk.src
48
+ - doc/classes/DOSFile.html
49
+ - doc/classes/DOSFile.src
50
+ - doc/classes/DSK.html
51
+ - doc/classes/DSK.src
52
+ - doc/classes/IntegerBasicFile.html
53
+ - doc/classes/IntegerBasicFile.src
54
+ - doc/classes/TestDisassembly.html
55
+ - doc/classes/TestDisassembly.src
56
+ - doc/classes/TestDOSDisks.html
57
+ - doc/classes/TestDOSDisks.src
58
+ - doc/classes/TextFile.html
59
+ - doc/classes/TextFile.src
60
+ - doc/classes/AppleSoftFile.src/M000005.html
61
+ - doc/classes/AppleSoftFile.src/M000006.html
62
+ - doc/classes/AppleSoftFile.src/M000008.html
63
+ - doc/classes/AppleSoftFile.src/M000009.html
64
+ - doc/classes/AppleSoftFile.src/M000010.html
65
+ - doc/classes/AppleSoftFile.src/M000011.html
66
+ - doc/classes/AppleSoftFile.src/M000012.html
67
+ - doc/classes/BinaryFile.src/M000015.html
68
+ - doc/classes/BinaryFile.src/M000020.html
69
+ - doc/classes/BinaryFile.src/M000021.html
70
+ - doc/classes/BinaryFile.src/M000022.html
71
+ - doc/classes/BinaryFile.src/M000023.html
72
+ - doc/classes/BinaryFile.src/M000024.html
73
+ - doc/classes/BinaryFile.src/M000025.html
74
+ - doc/classes/D65.src/M000002.html
75
+ - doc/classes/D65.src/M000003.html
76
+ - doc/classes/D65.src/M000004.html
77
+ - doc/classes/D65.src/M000005.html
78
+ - doc/classes/D65.src/M000006.html
79
+ - doc/classes/D65.src/M000007.html
80
+ - doc/classes/D65.src/M000008.html
81
+ - doc/classes/D65.src/M000009.html
82
+ - doc/classes/DOSDisk.src/M000007.html
83
+ - doc/classes/DOSDisk.src/M000008.html
84
+ - doc/classes/DOSDisk.src/M000010.html
85
+ - doc/classes/DOSDisk.src/M000011.html
86
+ - doc/classes/DOSDisk.src/M000012.html
87
+ - doc/classes/DOSDisk.src/M000013.html
88
+ - doc/classes/DOSDisk.src/M000014.html
89
+ - doc/classes/DOSDisk.src/M000015.html
90
+ - doc/classes/DOSFile.src/M000016.html
91
+ - doc/classes/DOSFile.src/M000017.html
92
+ - doc/classes/DOSFile.src/M000018.html
93
+ - doc/classes/DOSFile.src/M000021.html
94
+ - doc/classes/DOSFile.src/M000022.html
95
+ - doc/classes/DOSFile.src/M000023.html
96
+ - doc/classes/DOSFile.src/M000024.html
97
+ - doc/classes/DOSFile.src/M000025.html
98
+ - doc/classes/DOSFile.src/M000026.html
99
+ - doc/classes/DOSFile.src/M000027.html
100
+ - doc/classes/DOSFile.src/M000028.html
101
+ - doc/classes/DSK.src/M000009.html
102
+ - doc/classes/DSK.src/M000010.html
103
+ - doc/classes/DSK.src/M000011.html
104
+ - doc/classes/DSK.src/M000012.html
105
+ - doc/classes/DSK.src/M000013.html
106
+ - doc/classes/DSK.src/M000014.html
107
+ - doc/classes/DSK.src/M000015.html
108
+ - doc/classes/DSK.src/M000016.html
109
+ - doc/classes/DSK.src/M000017.html
110
+ - doc/classes/DSK.src/M000018.html
111
+ - doc/classes/DSK.src/M000019.html
112
+ - doc/classes/DSK.src/M000020.html
113
+ - doc/classes/DSK.src/M000021.html
114
+ - doc/classes/DSK.src/M000022.html
115
+ - doc/classes/IntegerBasicFile.src/M000001.html
116
+ - doc/classes/IntegerBasicFile.src/M000004.html
117
+ - doc/classes/IntegerBasicFile.src/M000005.html
118
+ - doc/classes/IntegerBasicFile.src/M000006.html
119
+ - doc/classes/TestDisassembly.src/M000005.html
120
+ - doc/classes/TestDisassembly.src/M000006.html
121
+ - doc/classes/TestDisassembly.src/M000007.html
122
+ - doc/classes/TestDOSDisks.src/M000001.html
123
+ - doc/classes/TestDOSDisks.src/M000002.html
124
+ - doc/classes/TestDOSDisks.src/M000003.html
125
+ - doc/classes/TextFile.src/M000019.html
126
+ - doc/classes/TextFile.src/M000020.html
127
+ - doc/classes/TextFile.src/M000024.html
128
+ - doc/classes/TextFile.src/M000025.html
129
+ - doc/classes/TextFile.src/M000026.html
130
+ - doc/classes/TextFile.src/M000027.html
131
+ - doc/classes/TextFile.src/M000029.html
132
+ - doc/classes/TextFile.src/M000030.html
133
+ - doc/classes/TextFile.src/M000031.html
134
+ - doc/dot/f_0.dot
135
+ - doc/dot/f_0.png
136
+ - doc/dot/f_1.dot
137
+ - doc/dot/f_1.png
138
+ - doc/dot/f_2.dot
139
+ - doc/dot/f_2.png
140
+ - doc/dot/f_3.dot
141
+ - doc/dot/f_3.png
142
+ - doc/dot/f_4.dot
143
+ - doc/dot/f_4.png
144
+ - doc/dot/f_5.dot
145
+ - doc/dot/f_5.png
146
+ - doc/dot/f_6.dot
147
+ - doc/dot/f_6.png
148
+ - doc/dot/f_7.dot
149
+ - doc/dot/f_7.png
150
+ - doc/files/bin
151
+ - doc/files/lib
152
+ - doc/files/test
153
+ - doc/files/bin/dsktool_rb.html
154
+ - doc/files/lib/D65_rb.html
155
+ - doc/files/lib/DOSDisk_rb.html
156
+ - doc/files/lib/DOSFile_rb.html
157
+ - doc/files/lib/DSK_rb.html
158
+ - doc/files/test/tc_disassembly_rb.html
159
+ - doc/files/test/tc_dos_disks_rb.html
160
+ - doc/files/test/test_dos_disks_rb.html
161
+ - doc/files/test/ts_test_all_rb.html
162
+ - lib/a2_symbols.yaml
163
+ - lib/D65.rb
164
+ - lib/DOSDisk.rb
165
+ - lib/DOSFile.rb
166
+ - lib/DSK.rb
167
+ - test/dos33_with_adt.dsk
168
+ - test/tc_disassembly.rb
169
+ - test/tc_dos_disks.rb
170
+ - test/ts_test_all.rb
171
+ test_files:
172
+ - test/ts_test_all.rb
173
+ rdoc_options: []
174
+
175
+ extra_rdoc_files: []
176
+
177
+ executables:
178
+ - dsktool.rb
179
+ extensions: []
180
+
181
+ requirements: []
182
+
183
+ dependencies: []
184
+