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.
- data/bin/dsktool.rb +157 -0
- data/doc/classes/AppleSoftFile.html +215 -0
- data/doc/classes/AppleSoftFile.src/M000005.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000006.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000008.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000009.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000010.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000011.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000012.html +18 -0
- data/doc/classes/BinaryFile.html +179 -0
- data/doc/classes/BinaryFile.src/M000015.html +18 -0
- data/doc/classes/BinaryFile.src/M000020.html +18 -0
- data/doc/classes/BinaryFile.src/M000021.html +18 -0
- data/doc/classes/BinaryFile.src/M000022.html +19 -0
- data/doc/classes/BinaryFile.src/M000023.html +18 -0
- data/doc/classes/BinaryFile.src/M000024.html +18 -0
- data/doc/classes/BinaryFile.src/M000025.html +19 -0
- data/doc/classes/D65.html +180 -0
- data/doc/classes/D65.src/M000002.html +18 -0
- data/doc/classes/D65.src/M000003.html +18 -0
- data/doc/classes/D65.src/M000004.html +64 -0
- data/doc/classes/D65.src/M000005.html +18 -0
- data/doc/classes/D65.src/M000006.html +18 -0
- data/doc/classes/D65.src/M000007.html +18 -0
- data/doc/classes/D65.src/M000008.html +18 -0
- data/doc/classes/D65.src/M000009.html +64 -0
- data/doc/classes/DOSDisk.html +272 -0
- data/doc/classes/DOSDisk.src/M000007.html +20 -0
- data/doc/classes/DOSDisk.src/M000008.html +77 -0
- data/doc/classes/DOSDisk.src/M000010.html +20 -0
- data/doc/classes/DOSDisk.src/M000011.html +20 -0
- data/doc/classes/DOSDisk.src/M000012.html +19 -0
- data/doc/classes/DOSDisk.src/M000013.html +20 -0
- data/doc/classes/DOSDisk.src/M000014.html +19 -0
- data/doc/classes/DOSDisk.src/M000015.html +76 -0
- data/doc/classes/DOSFile.html +221 -0
- data/doc/classes/DOSFile.src/M000016.html +22 -0
- data/doc/classes/DOSFile.src/M000017.html +17 -0
- data/doc/classes/DOSFile.src/M000018.html +18 -0
- data/doc/classes/DOSFile.src/M000021.html +22 -0
- data/doc/classes/DOSFile.src/M000022.html +22 -0
- data/doc/classes/DOSFile.src/M000023.html +22 -0
- data/doc/classes/DOSFile.src/M000024.html +17 -0
- data/doc/classes/DOSFile.src/M000025.html +18 -0
- data/doc/classes/DOSFile.src/M000026.html +22 -0
- data/doc/classes/DOSFile.src/M000027.html +17 -0
- data/doc/classes/DOSFile.src/M000028.html +18 -0
- data/doc/classes/DSK.html +285 -0
- data/doc/classes/DSK.src/M000009.html +22 -0
- data/doc/classes/DSK.src/M000010.html +27 -0
- data/doc/classes/DSK.src/M000011.html +19 -0
- data/doc/classes/DSK.src/M000012.html +18 -0
- data/doc/classes/DSK.src/M000013.html +22 -0
- data/doc/classes/DSK.src/M000014.html +22 -0
- data/doc/classes/DSK.src/M000015.html +22 -0
- data/doc/classes/DSK.src/M000016.html +22 -0
- data/doc/classes/DSK.src/M000017.html +22 -0
- data/doc/classes/DSK.src/M000018.html +27 -0
- data/doc/classes/DSK.src/M000019.html +19 -0
- data/doc/classes/DSK.src/M000020.html +18 -0
- data/doc/classes/DSK.src/M000021.html +40 -0
- data/doc/classes/DSK.src/M000022.html +23 -0
- data/doc/classes/IntegerBasicFile.html +276 -0
- data/doc/classes/IntegerBasicFile.src/M000001.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000004.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000005.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000006.html +18 -0
- data/doc/classes/TestDOSDisks.html +174 -0
- data/doc/classes/TestDOSDisks.src/M000001.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000002.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000003.html +43 -0
- data/doc/classes/TestDisassembly.html +144 -0
- data/doc/classes/TestDisassembly.src/M000005.html +19 -0
- data/doc/classes/TestDisassembly.src/M000006.html +19 -0
- data/doc/classes/TestDisassembly.src/M000007.html +19 -0
- data/doc/classes/TextFile.html +179 -0
- data/doc/classes/TextFile.src/M000019.html +18 -0
- data/doc/classes/TextFile.src/M000020.html +20 -0
- data/doc/classes/TextFile.src/M000024.html +18 -0
- data/doc/classes/TextFile.src/M000025.html +18 -0
- data/doc/classes/TextFile.src/M000026.html +18 -0
- data/doc/classes/TextFile.src/M000027.html +20 -0
- data/doc/classes/TextFile.src/M000029.html +18 -0
- data/doc/classes/TextFile.src/M000030.html +18 -0
- data/doc/classes/TextFile.src/M000031.html +20 -0
- data/doc/created.rid +1 -0
- data/doc/dot/f_0.dot +14 -0
- data/doc/dot/f_0.png +0 -0
- data/doc/dot/f_1.dot +23 -0
- data/doc/dot/f_1.png +0 -0
- data/doc/dot/f_2.dot +32 -0
- data/doc/dot/f_2.png +0 -0
- data/doc/dot/f_3.dot +75 -0
- data/doc/dot/f_3.png +0 -0
- data/doc/dot/f_4.dot +23 -0
- data/doc/dot/f_4.png +0 -0
- data/doc/dot/f_5.dot +32 -0
- data/doc/dot/f_5.png +0 -0
- data/doc/dot/f_6.dot +32 -0
- data/doc/dot/f_6.png +0 -0
- data/doc/dot/f_7.dot +14 -0
- data/doc/dot/f_7.png +0 -0
- data/doc/files/bin/dsktool_rb.html +171 -0
- data/doc/files/lib/D65_rb.html +114 -0
- data/doc/files/lib/DOSDisk_rb.html +115 -0
- data/doc/files/lib/DOSFile_rb.html +118 -0
- data/doc/files/lib/DSK_rb.html +114 -0
- data/doc/files/test/tc_disassembly_rb.html +117 -0
- data/doc/files/test/tc_dos_disks_rb.html +116 -0
- data/doc/files/test/test_dos_disks_rb.html +109 -0
- data/doc/files/test/ts_test_all_rb.html +114 -0
- data/doc/fr_class_index.html +36 -0
- data/doc/fr_file_index.html +34 -0
- data/doc/fr_method_index.html +57 -0
- data/doc/index.html +24 -0
- data/lib/D65.rb +178 -0
- data/lib/DOSDisk.rb +186 -0
- data/lib/DOSFile.rb +356 -0
- data/lib/DSK.rb +121 -0
- data/lib/a2_symbols.yaml +199 -0
- data/test/dos33_with_adt.dsk +0 -0
- data/test/tc_disassembly.rb +16 -0
- data/test/tc_dos_disks.rb +49 -0
- data/test/ts_test_all.rb +5 -0
- 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.
|
data/lib/a2_symbols.yaml
ADDED
@@ -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
|
data/test/ts_test_all.rb
ADDED
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
|
+
|