From 0891665c81adf58bd25e78e5cd49c542ee5d06f7 Mon Sep 17 00:00:00 2001 From: Christopher Shepherd Date: Wed, 25 May 2016 23:34:19 -0400 Subject: [PATCH] initial commit --- Disassembler/Disassembler_65816.php | 603 ++++++ Input/Input_2MG.php | 233 +++ Input/Input_BIN.php | 66 + Input/Input_PO.php | 72 + LICENSE.txt | 25 + NList.Data.TXT | 2516 +++++++++++++++++++++++++ Personality/Personality_AppleIIGS.php | 87 + README.md | 48 + yagsdisasm.php | 181 ++ 9 files changed, 3831 insertions(+) create mode 100644 Disassembler/Disassembler_65816.php create mode 100644 Input/Input_2MG.php create mode 100644 Input/Input_BIN.php create mode 100644 Input/Input_PO.php create mode 100644 LICENSE.txt create mode 100644 NList.Data.TXT create mode 100644 Personality/Personality_AppleIIGS.php create mode 100644 README.md create mode 100644 yagsdisasm.php diff --git a/Disassembler/Disassembler_65816.php b/Disassembler/Disassembler_65816.php new file mode 100644 index 0000000..dde0d72 --- /dev/null +++ b/Disassembler/Disassembler_65816.php @@ -0,0 +1,603 @@ +opcodes = array( + 0x00 => array( 'BRK', 'StackInt' ), + 0x01 => array( 'ORA', 'DPIndexXInd' ), + 0x02 => array( 'COP', 'StackInt' ), + 0x03 => array( 'ORA', 'StackRel' ), + 0x04 => array( 'TSB', 'DP' ), + 0x05 => array( 'ORA', 'DP' ), + 0x06 => array( 'ASL', 'DP' ), + 0x07 => array( 'ORA', 'DPIndLong' ), + 0x08 => array( 'PHP', 'StackPush' ), + 0x09 => array( 'ORA', 'Imm' ), + 0x0A => array( 'ASL', 'Acc' ), + 0x0B => array( 'PHD', 'StackPush' ), + 0x0C => array( 'TSB', 'Abs' ), + 0x0D => array( 'ORA', 'Abs' ), + 0x0E => array( 'ASL', 'Abs' ), + 0x0F => array( 'ORA', 'AbsLong' ), + + 0x10 => array( 'BPL', 'PCRel' ), + 0x11 => array( 'ORA', 'DPIndIndexY' ), + 0x12 => array( 'ORA', 'DPInd' ), + 0x13 => array( 'ORA', 'StackRelIndexY' ), + 0x14 => array( 'TRB', 'DP' ), + 0x15 => array( 'ORA', 'DPIndexX' ), + 0x16 => array( 'ASL', 'DPIndexX' ), + 0x17 => array( 'ORA', 'DPIndexYLong' ), + 0x18 => array( 'CLC', 'Implied' ), + 0x19 => array( 'ORA', 'AbsIndexY' ), + 0x1A => array( 'INC', 'Acc' ), + 0x1B => array( 'TCS', 'Implied' ), + 0x1C => array( 'TRB', 'Abs' ), + 0x1D => array( 'ORA', 'AbsIndexX' ), + 0x1E => array( 'ASL', 'AbsIndexX' ), + 0x1F => array( 'ORA', 'AbsIndexXLong' ), + + 0x20 => array( 'JSR', 'Abs' ), + 0x21 => array( 'AND', 'DPIndexXind' ), + 0x22 => array( 'JSL', 'AbsLong' ), + 0x23 => array( 'AND', 'StackRel' ), + 0x24 => array( 'BIT', 'DP' ), + 0x25 => array( 'AND', 'DP' ), + 0x26 => array( 'ROL', 'DP' ), + 0x27 => array( 'AND', 'DPIndLong' ), + 0x28 => array( 'PLP', 'StackPull' ), + 0x29 => array( 'AND', 'Imm' ), + 0x2A => array( 'ROL', 'Acc' ), + 0x2B => array( 'PLD', 'StackPull' ), + 0x2C => array( 'BIT', 'Abs' ), + 0x2D => array( 'AND', 'Abs' ), + 0x2E => array( 'ROL', 'Abs' ), + 0x2F => array( 'AND', 'AbsLong' ), + + 0x30 => array( 'BMI', 'PCRel' ), + 0x31 => array( 'AND', 'DPIndIndexY' ), + 0x32 => array( 'AND', 'DPInd' ), + 0x33 => array( 'AND', 'StackRelIndexY' ), + 0x34 => array( 'BIT', 'DPIndexX' ), + 0x35 => array( 'AND', 'DPIndexX' ), + 0x36 => array( 'ROL', 'DPIndexX' ), + 0x37 => array( 'AND', 'DPIndIndexYLong' ), + 0x38 => array( 'SEC', 'Implied' ), + 0x39 => array( 'AND', 'AbsIndexY' ), + 0x3A => array( 'DEC', 'Acc' ), + 0x3B => array( 'TSC', 'Implied' ), + 0x3C => array( 'BIT', 'AbsIndexX' ), + 0x3D => array( 'AND', 'AbsIndexX' ), + 0x3E => array( 'ROL', 'AbsIndexX' ), + 0x3F => array( 'AND', 'AbsIndexXLong' ), + + 0x40 => array( 'RTI', 'StackRTI' ), + 0x41 => array( 'EOR', 'DPIndexXind' ), + 0x42 => array( 'WDM', 'WDM' ), + 0x43 => array( 'EOR', 'StackRel' ), + 0x44 => array( 'MVP', 'BlockMove' ), + 0x45 => array( 'EOR', 'DP' ), + 0x46 => array( 'LSR', 'DP' ), + 0x47 => array( 'EOR', 'DPIndLong' ), + 0x48 => array( 'PHA', 'StackPush' ), + 0x49 => array( 'EOR', 'Imm' ), + 0x4A => array( 'LSR', 'Acc' ), + 0x4B => array( 'PHK', 'StackPush' ), + 0x4C => array( 'JMP', 'Abs' ), + 0x4D => array( 'EOR', 'Abs' ), + 0x4E => array( 'LSR', 'Abs' ), + 0x4F => array( 'EOR', 'AbsLong' ), + + 0x50 => array( 'BVC', 'PCRel' ), + 0x51 => array( 'EOR', 'DPIndIndexY' ), + 0x52 => array( 'EOR', 'DPInd' ), + 0x53 => array( 'EOR', 'StackRelIndexY' ), + 0x54 => array( 'MVN', 'BlockMove' ), + 0x55 => array( 'EOR', 'DPIndexX' ), + 0x56 => array( 'LSR', 'DPIndexX' ), + 0x57 => array( 'EOR', 'DPIndIndexYLong' ), + 0x58 => array( 'CLI', 'Implied' ), + 0x59 => array( 'EOR', 'AbsIndexY' ), + 0x5A => array( 'PHY', 'StackPush' ), + 0x5B => array( 'TCD', 'Implied' ), + 0x5C => array( 'JMP', 'AbsLong' ), + 0x5D => array( 'EOR', 'AbsIndexX' ), + 0x5E => array( 'LSR', 'AbsIndexX' ), + 0x5F => array( 'EOR', 'AbsIndexXLong' ), + + 0x60 => array( 'RTS', 'StackRTS' ), + 0x61 => array( 'ADC', 'DPIndexXInd' ), + 0x62 => array( 'PER', 'StackPCRel' ), + 0x63 => array( 'ADC', 'StackRel' ), + 0x64 => array( 'STZ', 'DP' ), + 0x65 => array( 'ADC', 'DP' ), + 0x66 => array( 'ROR', 'DP' ), + 0x67 => array( 'ADC', 'DPIndLong' ), + 0x68 => array( 'PLA', 'StackPull' ), + 0x69 => array( 'ADC', 'Imm' ), + 0x6A => array( 'ROR', 'Acc' ), + 0x6B => array( 'RTL', 'StackRTL' ), + 0x6C => array( 'JMP', 'AbsInd' ), + 0x6D => array( 'ADC', 'Abs' ), + 0x6E => array( 'ROR', 'Abs' ), + 0x6F => array( 'ADC', 'AbsLong' ), + + 0x70 => array( 'BVS', 'PCRel' ), + 0x71 => array( 'ADC', 'DPIndIndexY' ), + 0x72 => array( 'ADC', 'DPInd' ), + 0x73 => array( 'ADC', 'StackRelIndexY' ), + 0x74 => array( 'STZ', 'DPIndexX' ), + 0x75 => array( 'ADC', 'DPIndexX' ), + 0x76 => array( 'ROR', 'DPIndexX' ), + 0x77 => array( 'ADC', 'DPIndIndexYLong' ), + 0x78 => array( 'SEI', 'Implied' ), + 0x79 => array( 'ADC', 'AbsIndexY' ), + 0x7A => array( 'PLY', 'StackPull' ), + 0x7B => array( 'TDC', 'Implied' ), + 0x7C => array( 'JMP', 'AbsIndexXInd' ), + 0x7D => array( 'ADC', 'AbsIndexX' ), + 0x7E => array( 'ROR', 'AbsIndexX' ), + 0x7F => array( 'ADC', 'AbsIndexXLong' ), + + 0x80 => array( 'BRA', 'PCRel' ), + 0x81 => array( 'STA', 'DPIndexXind' ), + 0x82 => array( 'BRL', 'PCRelLong' ), + 0x83 => array( 'STA', 'StackRel' ), + 0x84 => array( 'STY', 'DP' ), + 0x85 => array( 'STA', 'DP' ), + 0x86 => array( 'STX', 'DP' ), + 0x87 => array( 'STA', 'DPIndLong' ), + 0x88 => array( 'DEY', 'Implied' ), + 0x89 => array( 'BIT', 'Imm' ), + 0x8A => array( 'TXA', 'Implied' ), + 0x8B => array( 'PHB', 'StackPush' ), + 0x8C => array( 'STY', 'Abs' ), + 0x8D => array( 'STA', 'Abs' ), + 0x8E => array( 'STX', 'Abs' ), + 0x8F => array( 'STA', 'AbsLong' ), + + 0x90 => array( 'BCC', 'PCRel' ), + 0x91 => array( 'STA', 'DPIndIndexY' ), + 0x92 => array( 'STA', 'DPInd' ), + 0x93 => array( 'STA', 'StackRelIndexY' ), + 0x94 => array( 'STY', 'DPIndexX' ), + 0x95 => array( 'STA', 'DPIndexX' ), + 0x96 => array( 'STX', 'DPIndexY' ), + 0x97 => array( 'STA', 'DPIndIndexYLong' ), + 0x98 => array( 'TYA', 'Implied' ), + 0x99 => array( 'STA', 'AbsIndexY' ), + 0x9A => array( 'TXS', 'Implied' ), + 0x9B => array( 'TXY', 'Implied' ), + 0x9C => array( 'STZ', 'Abs' ), + 0x9D => array( 'STA', 'AbsIndexX' ), + 0x9E => array( 'STZ', 'AbsIndexX' ), + 0x9F => array( 'STA', 'AbsIndexXLong' ), + + 0xA0 => array( 'LDY', 'Imm' ), + 0xA1 => array( 'LDA', 'DPIndexXInd' ), + 0xA2 => array( 'LDX', 'Imm' ), + 0xA3 => array( 'LDA', 'StackRel' ), + 0xA4 => array( 'LDY', 'DP' ), + 0xA5 => array( 'LDA', 'DP' ), + 0xA6 => array( 'LDX', 'DP' ), + 0xA7 => array( 'LDA', 'DPIndLong' ), + 0xA8 => array( 'TAY', 'Implied' ), + 0xA9 => array( 'LDA', 'Imm' ), + 0xAA => array( 'TAX', 'Implied' ), + 0xAB => array( 'PLB', 'StackPull' ), + 0xAC => array( 'LDY', 'Abs' ), + 0xAD => array( 'LDA', 'Abs' ), + 0xAE => array( 'LDX', 'Abs' ), + 0xAF => array( 'LDA', 'AbsLong' ), + + 0xB0 => array( 'BCS', 'PCRel' ), + 0xB1 => array( 'LDA', 'DPIndIndexY' ), + 0xB2 => array( 'LDA', 'DPInd' ), + 0xB3 => array( 'LDA', 'StackRelIndexY' ), + 0xB4 => array( 'LDY', 'DPIndexX' ), + 0xB5 => array( 'LDA', 'DPIndexX' ), + 0xB6 => array( 'LDX', 'DPIndexY' ), + 0xB7 => array( 'LDA', 'DPIndIndexYLong' ), + 0xB8 => array( 'CLV', 'Implied' ), + 0xB9 => array( 'LDA', 'AbsIndexY' ), + 0xBA => array( 'TSX', 'Implied' ), + 0xBB => array( 'TYX', 'Implied' ), + 0xBC => array( 'LDY', 'AbsIndexX' ), + 0xBD => array( 'LDA', 'AbsIndexX' ), + 0xBE => array( 'LDX', 'AbsIndexY' ), + 0xBF => array( 'LDA', 'AbsIndexXLong' ), + + 0xC0 => array( 'CPY', 'Imm' ), + 0xC1 => array( 'CMP', 'DPIndexXInd' ), + 0xC2 => array( 'REP', 'Imm' ), + 0xC3 => array( 'CMP', 'StackRel' ), + 0xC4 => array( 'CPY', 'DP' ), + 0xC5 => array( 'CMP', 'DP' ), + 0xC6 => array( 'DEC', 'DP' ), + 0xC7 => array( 'CMP', 'DPIndLong' ), + 0xC8 => array( 'INY', 'Implied' ), + 0xC9 => array( 'CMP', 'Imm' ), + 0xCA => array( 'DEX', 'Implied' ), + 0xCB => array( 'WAI', 'Implied' ), + 0xCC => array( 'CPY', 'Abs' ), + 0xCD => array( 'CMP', 'Abs' ), + 0xCE => array( 'DEC', 'Abs' ), + 0xCF => array( 'CMP', 'AbsLong' ), + + 0xD0 => array( 'BNE', 'PCRel' ), + 0xD1 => array( 'CMP', 'DPIndIndexY' ), + 0xD2 => array( 'CMP', 'DPInd' ), + 0xD3 => array( 'CMP', 'StackRelIndexY' ), + 0xD4 => array( 'PEI', 'StackDPInd' ), + 0xD5 => array( 'CMP', 'DPIndexX' ), + 0xD6 => array( 'DEC', 'DPIndexX' ), + 0xD7 => array( 'CMP', 'DPIndIndexYLong' ), + 0xD8 => array( 'CLD', 'Implied' ), + 0xD9 => array( 'CMP', 'AbsIndexY' ), + 0xDA => array( 'PHX', 'StackPush' ), + 0xDB => array( 'STP', 'Implied' ), + 0xDC => array( 'JML', 'AbsIndLong' ), + 0xDD => array( 'CMP', 'AbsIndexX' ), + 0xDE => array( 'DEC', 'AbsIndexX' ), + 0xDF => array( 'CMP', 'AbsIndexXLong' ), + + 0xE0 => array( 'CPX', 'Imm' ), + 0xE1 => array( 'SBC', 'DPIndexXInd' ), + 0xE2 => array( 'SEP', 'Imm' ), + 0xE3 => array( 'SBC', 'StackRel' ), + 0xE4 => array( 'CPX', 'DP' ), + 0xE5 => array( 'SBC', 'DP' ), + 0xE6 => array( 'INC', 'DP' ), + 0xE7 => array( 'SBC', 'DPIndLong' ), + 0xE8 => array( 'INX', 'Implied' ), + 0xE9 => array( 'SBC', 'Imm' ), + 0xEA => array( 'NOP', 'Implied' ), + 0xEB => array( 'XBA', 'Implied' ), + 0xEC => array( 'CPX', 'Abs' ), + 0xED => array( 'SBC', 'Abs' ), + 0xEE => array( 'INC', 'Abs' ), + 0xEF => array( 'SBC', 'AbsLong' ), + + 0xF0 => array( 'BEQ', 'PCRel' ), + 0xF1 => array( 'SBC', 'DPIndIndexY' ), + 0xF2 => array( 'SBC', 'DPInd' ), + 0xF3 => array( 'SBC', 'StackRelIndexY' ), + 0xF4 => array( 'PEA', 'StackAbs' ), + 0xF5 => array( 'SBC', 'DPIndexX' ), + 0xF6 => array( 'INC', 'DPIndexX' ), + 0xF7 => array( 'SBC', 'DPIndIndexYLong' ), + 0xF8 => array( 'SED', 'Implied' ), + 0xF9 => array( 'SBC', 'AbsIndexY' ), + 0xFA => array( 'PLX', 'StackPull' ), + 0xFB => array( 'XCE', 'Implied' ), + 0xFC => array( 'JSR', 'AbsIndexXInd' ), + 0xFD => array( 'SBC', 'AbsIndexX' ), + 0xFE => array( 'INC', 'AbsIndexX' ), + 0xFF => array( 'SBC', 'AbsIndexXLong' ), + ); + } + + /** + * rel_offset( $pc, $offset ) - compute absolute offset vs program counter for a branch offset + * + * @param $pc int, $offset int + */ + private function rel_offset( $pc, $offset, $offset2 ) + { + if( $offset > 127 ) + { + $result = $pc - (256-$offset); + } else { + $result = $pc + $offset; + } + + $result += $offset2+1; + + return $result; + } + + /** + * rel_long_offset( $pc, $offset ) - compute absolute offset vs program counter for a branch offset + * + * @param $pc int, $offset int + */ + private function rel_long_offset( $pc, $offset, $offset2 ) + { + if( $offset > 32767 ) + { + $result = $pc - (65536-$offset); + } else { + $result = $pc + $offset; + } + + $result += $offset2+1; + + return $result; + } + + /** + * print_instruction( $opcode_txt, $opcode, $mode, $arg_bytes, $pc ) - Output text-friendly disassembled output for one instruction + * + * @param $opcode_txt str, $opcode int, $mode str, $arg_bytes str, $pc int + */ + public function print_instruction( $opcode_txt, $opcode, $mode, $arg_bytes, $pc ) + { + // first print the program counter and hex bytes + switch( strlen( $arg_bytes )) + { + case 0: + $output = sprintf( '%06X- %02X ', $pc, $opcode ); + break; + case 1: + $output = sprintf( '%06X- %02X %02X ', $pc, $opcode, ord($arg_bytes[0]) ); + break; + case 2: + $output = sprintf( '%06X- %02X %02X %02X ', $pc, $opcode, ord($arg_bytes[0]), ord($arg_bytes[1]) ); + break; + case 3: + $output = sprintf( '%06X- %02X %02X %02X %02X ', $pc, $opcode, ord($arg_bytes[0]), ord($arg_bytes[1]), ord($arg_bytes[2]) ); + break; + } + + // now the opcode + $output .= $opcode_txt; + + // now the args depending on mode + switch( $mode ) + { + case 'Implied': + case 'StackPull': + case 'StackPush': + case 'StackRTI': + case 'StackRTS': + case 'Acc': + break; + case 'DP': + $output .= sprintf( ' %02X', ord($arg_bytes[0] )); + break; + case 'DPIndexX': + $output .= sprintf( ' %02X,X', ord($arg_bytes[0] )); + break; + case 'DPIndexY': + $output .= sprintf( ' %02X,Y', ord($arg_bytes[0] )); + break; + case 'DPIndexXInd': + $output .= sprintf( ' (%02X,X)', ord($arg_bytes[0] )); + break; + case 'DPInd': + $output .= sprintf( ' (%02X)', ord($arg_bytes[0] )); + break; + case 'DPIndIndexY': + $output .= sprintf( ' (%02X),Y', ord($arg_bytes[0] )); + break; + case 'Imm': + if( strlen( $arg_bytes ) == 2 ) + { + $output .= sprintf( ' #%02X%02X', ord($arg_bytes[1]), ord($arg_bytes[0])); + } else { + $output .= sprintf( ' #%02X', ord($arg_bytes[0] )); + } + break; + case 'PCRel': + if( ord($arg_bytes[0]) > 127) + { + $output .= sprintf( ' %04X {-%02X}', $this->rel_offset( $pc, ord($arg_bytes[0]),strlen($arg_bytes)), 256-ord($arg_bytes[0])); + } else { + $output .= sprintf( ' %04X {+%02X}', $this->rel_offset( $pc, ord($arg_bytes[0]),strlen($arg_bytes)), ord($arg_bytes[0])); + } + break; + case 'Abs': + $output .= sprintf( ' %02X%02X', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'AbsIndexX': + $output .= sprintf( ' %02X%02X,X', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'AbsIndexY': + $output .= sprintf( ' %02X%02X,Y', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'AbsIndexXInd': + $output .= sprintf( ' (%02X%02X,X)', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'AbsInd': + $output .= sprintf( ' (%02X%02X)', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'WDM': + case 'StackInt': + if( strlen( $arg_bytes ) > 0 ) + { + $output .= sprintf( ' %02X', ord($arg_bytes[0] )); + } + break; + case 'AbsIndLong': + $output .= sprintf( ' (%02X%02X)', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'AbsLong': + $output .= sprintf( ' %02X%02X%02X', ord($arg_bytes[2]), ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'AbsIndexXLong': + $output .= sprintf( ' %02X%02X%02X,X', ord($arg_bytes[2]), ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'BlockMove': + $output .= sprintf( ' %02X,%02X', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'DPIndLong': + $output .= sprintf( ' [%02X]', ord($arg_bytes[0] )); + break; + case 'DPIndIndexYLong': + $output .= sprintf( ' [%02X],Y', ord($arg_bytes[0] )); + break; + case 'StackPCRel': + case 'PCRelLong': + $offset = (ord($arg_bytes[1])*256)+ord($arg_bytes[0]); + if( $offset > 32767 ) + { + $output .= sprintf( ' %04X {-%02X}', $this->rel_long_offset( $pc, $offset, strlen($arg_bytes)), 65536-$offset); + } else { + $output .= sprintf( ' %04X {+%02X}', $this->rel_long_offset( $pc, $offset, strlen($arg_bytes)), $offset); + } + break; + case 'StackAbs': + $output .= sprintf( ' %02X%02X', ord($arg_bytes[1]), ord($arg_bytes[0])); + break; + case 'StackDPInd': + $output .= sprintf( ' %02X', ord($arg_bytes[0])); + break; + case 'StackRel': + $output .= sprintf( ' %02X,S', ord($arg_bytes[0])); + break; + case 'StackRelIndexY': + $output .= sprintf( ' (%02X,S),Y', ord($arg_bytes[0])); + break; + } + + return $output; + } + + /** + * disassemble( $m_flag, $x_flag, $e_flag, $origin, $data, $personality ) - Disassemble some data + * + * @param $m_flag bool, $x_flag bool, $e_flag bool, $origin int, $data str, $personality obj + * @return mixed + */ + public function disassemble( $m_flag, $x_flag, $e_flag, $origin, $data, $personality ) + { + $pc = $origin; + $data_index = 0; + $last_output = ''; + + echo " ORG ".sprintf('%06X',$origin)."\n"; + if( $m_flag > 0) + { + $print_m = '1'; + } else { + $print_m = '0'; + } + if( $x_flag > 0 ) + { + $print_x = '1'; + } else { + $print_x = '0'; + } + echo " MX %{$print_m}{$print_x}\n\n"; + + while( $data_index < strlen( $data )) + { + $opcode = $data[$data_index]; + $opcode_txt = $this->opcodes[ord($opcode)][0]; + $mode = $this->opcodes[ord($opcode)][1]; + + // get opcode width + $width = 0; + switch( $mode ) + { + case 'Acc': + case 'Implied': + case 'StackPull': + case 'StackPush': + case 'StackRTI': + case 'StackRTL': + case 'StackRTS': + $width = 1; + break; + case 'DP': + case 'DPIndexX': + case 'DPIndexY': + case 'DPIndexXInd': + case 'DPInd': + case 'DPIndLong': + case 'DPIndIndexY': + case 'DPIndIndexYLong': + case 'PCRel': + case 'StackRel': + case 'StackRelIndexY': + case 'StackDPInd': + $width = 2; + break; + case 'Abs': + case 'AbsIndexX': + case 'AbsIndexY': + case 'AbsIndexXInd': + case 'AbsInd': + case 'AbsIndLong': + case 'BlockMove': + case 'PCRelLong': + case 'StackAbs': + case 'StackPCRel': + $width = 3; + break; + case 'AbsLong': + case 'AbsIndexXLong': + $width = 4; + break; + case 'StackInt': + if( $e_flag ) + { + $width = 1; + } else { + $width = 2; + } + break; + case 'Imm': + $width = 2; + if( $e_flag == 0 ) + { + if( in_array( $opcode_txt, array( 'CPX', 'CPY', 'LDX', 'LDY' ))) + { + if( $x_flag == 0 ) + { + $width = 3; + } + } elseif( in_array( $opcode_txt, array( 'ADC', 'AND', 'BIT', 'CMP', 'EOR', 'LDA', 'ORA', 'SBC' ))) + { + if( $m_flag == 0 ) + { + $width = 3; + } + } + } + break; + case 'WDM': + $width = 2; + break; + default: + $width = 1; + break; + } // switch + + // fetch arguments if any + $arg_bytes = ''; + for( $ind=1;$ind<$width;$ind++ ) + { + $arg_bytes .= $data[$data_index + $ind]; + } + + $output = $this->print_instruction( $opcode_txt, ord($opcode), $mode, $arg_bytes, $pc ); + + // Personality support + $this_output = substr( $output, 22 ); + $comment = $personality->check( $last_output, $this_output ); + if( $comment ) + { + for($pad=strlen($output);$pad<42;$pad++) + { + $output .= ' '; + } + $output .= '; '.$comment; + } + $last_output = $this_output; + + echo "{$output}\n"; + $pc += $width; + $data_index += $width; + } // for + } +} diff --git a/Input/Input_2MG.php b/Input/Input_2MG.php new file mode 100644 index 0000000..0be58f5 --- /dev/null +++ b/Input/Input_2MG.php @@ -0,0 +1,233 @@ +source_filename = $filename; + + // check for 2MG magic + $magic = fread( $fp, 4 ); + if( $magic != '2IMG' ) + { + throw new Exception( 'Input_2MG: source file not a 2MG file' ); + } + + // save creator id + $this->creator_id = fread( $fp, 4 ); + + // get header length (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $this->header_length = (ord( $byte2 )*256) + ord( $byte1 ); + + // get version number (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $this->version_number = (ord( $byte2 )*256) + ord( $byte1 ); + + // get image format (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $image_format_id = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + $known_format_ids = array( + 0 => 'DOS 3.3', + 1 => 'ProDOS', + 2 => 'NIB', + ); + $this->image_format = $known_format_ids[$image_format_id]; + + // flags / volume number (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + if( ord( $byte2 ) && 0x01 ) + { + $this->volume_number = ord( $byte1 ); + } else { + if( $image_format_id == 1 ) + { + $this->volume_number = 254; + } + } + if( ord( $byte4 ) && 0x80 ) + { + $this->is_locked = true; + } else { + $this->is_locked = false; + } + + // block count (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->total_blocks = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // offset to image data (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->image_offset = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // bytes of disk data (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->total_bytes = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // offset to comment (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->comment_offset = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // comment length (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->comment_length = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // creator data offset (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->creator_data_offset = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // creator data length (little-endian) + $byte1 = fread( $fp, 1 ); + $byte2 = fread( $fp, 1 ); + $byte3 = fread( $fp, 1 ); + $byte4 = fread( $fp, 1 ); + $this->creator_data_length = (ord( $byte4 )*16777216) + (ord( $byte3 )*65536) + (ord( $byte2 )*256) + ord( $byte1 ); + + // reserved bytes + $reserved = fread( $fp, 8 ); + + // get Comment string if present + if( $this->comment_length > 0 ) + { + fseek( $fp, $this->comment_offset, SEEK_SET ); + $this->comment = fread( $fp, $this->comment_length ); + } + + $this->is_initialized = true; + $this->fp = $fp; + } + + /** + * getBlocks( $starting_block, $num_blocks ) - Retrieve $num_blocks 512-byte blocks from the file, starting at $starting_block + * @param $starting_block int, $num_blocks int + * @return $data str + */ + public function getBlocks( $starting_block, $num_blocks ) + { + fseek( $this->fp, $this->image_offset, SEEK_SET ); + fseek( $this->fp, $starting_block*512, SEEK_CUR ); + $data = ''; + for( $blk=0;$blk<$num_blocks;$blk++ ) + { + $data .= fread( $this->fp, 512 ); + } + + return $data; + } + + /** + * printInfo() - Print some information about this 2MG image + */ + public function printInfo() + { + echo "Source Filename: ".$this->source_filename."\n"; + echo " Creator ID: ".$this->creator_id."\n"; + echo " Header Length: ".$this->header_length."\n"; + echo " Version Number: ".$this->version_number."\n"; + echo " Image Format: ".$this->image_format."\n"; + if( $this->image_format == 'DOS 3.3' ) + { + echo " Volume Number: ".$this->volume_number."\n"; + } + echo " Is Locked? "; + if( $this->is_locked ) + { + echo "Yes\n"; + } else { + echo "No\n"; + } + echo " Block Count: ".$this->total_blocks."\n"; + echo " Total Bytes: ".$this->total_bytes."\n"; + if( $this->comment != '' ) + { + echo " Comment: ".$this->comment."\n"; + } + } +} \ No newline at end of file diff --git a/Input/Input_BIN.php b/Input/Input_BIN.php new file mode 100644 index 0000000..9756382 --- /dev/null +++ b/Input/Input_BIN.php @@ -0,0 +1,66 @@ +source_filename = $filename; + + // bytes of disk data + $this->total_bytes = filesize( $filename ); + + $this->is_initialized = true; + $this->fp = $fp; + } + + /** + * getBytes( $starting_byte, $num_bytes ) - Retrieve $num_bytes bytes from the file, starting at $starting_byte + * @param $starting_byte int, $num_bytes int + * @return $data str + */ + public function getBytes( $starting_byte, $num_bytes ) + { + if( $num_bytes == 'all' ) + { + return file_get_contents( $this->source_filename ); + } + + fseek( $fp, $starting_byte, SEEK_SET ); + $data = ''; + $data .= fread( $fp, $num_bytes ); + + return $data; + } + + /** + * printInfo() - Print some information about this binary image + */ + public function printInfo() + { + echo "Source Filename: ".$this->source_filename."\n"; + echo " Image Format: Binary\n"; + echo " Total Bytes: ".$this->total_bytes."\n"; + } +} \ No newline at end of file diff --git a/Input/Input_PO.php b/Input/Input_PO.php new file mode 100644 index 0000000..b1f8fc7 --- /dev/null +++ b/Input/Input_PO.php @@ -0,0 +1,72 @@ +source_filename = $filename; + + // bytes of disk data + $this->total_bytes = filesize( $filename ); + + // block count (little-endian) + $this->total_blocks = $this->total_bytes / 512; + + $this->is_initialized = true; + $this->fp = $fp; + } + + /** + * getBlocks( $starting_block, $num_blocks ) - Retrieve $num_blocks 512-byte blocks from the file, starting at $starting_block + * @param $starting_block int, $num_blocks int + * @return $data str + */ + public function getBlocks( $starting_block, $num_blocks ) + { + fseek( $fp, $this->image_offset, SEEK_SET ); + fseek( $fp, $starting_block*512 ); + $data = ''; + for( $blk=0;$blk<$num_blocks;$blk++ ) + { + $data .= fread( $fp, 512 ); + } + + return $data; + } + + /** + * printInfo() - Print some information about this PO image + */ + public function printInfo() + { + echo "Source Filename: ".$this->source_filename."\n"; + echo " Image Format: ProDOS\n"; + echo " Block Count: ".$this->total_blocks."\n"; + echo " Total Bytes: ".$this->total_bytes."\n"; + } +} \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..e7adc74 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,25 @@ +Copyright (c) 2009, CiderPress project authors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of FaddenSoft, LLC nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY FaddenSoft, LLC ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL FaddenSoft, LLC BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/NList.Data.TXT b/NList.Data.TXT new file mode 100644 index 0000000..b4efab5 --- /dev/null +++ b/NList.Data.TXT @@ -0,0 +1,2516 @@ +fff9 | NLIST Data File: Last mod 17-Oct-93 DAL (Loma Prieta + 4) +fffa | Based on Apple IIgs System Disk 6.0.1+UserTool#1,2 +fffb | Dave Lyons +fffc | dlyons@apple.com +0040 P8:ALLOC_INTERRUPT(2:IntNum/1,CodePtr) +0041 P8:DEALLOC_INTERRUPT(1:IntNum/1) +0042 P8:ATLK:AppleTalk(Async/1,Cmd/1,Result,...) +0043 P8:ATLK:SpecialOpenFork(4or84:pn,ioBuff,Ref/1,Mode/1) +0044 P8:ATLK:ByteRangeLock(4:Ref/1,Flag/1,Off/3,Len/3) +0065 P8:QUIT(4:Type/1,Path,zz/1,zz) +0080 P8:READ_BLOCK(3:Unit/1,Buff,BlkNum) +0081 P8:WRITE_BLOCK(3:Unit/1,Buff,BlkNum) +0082 P8:GET_TIME() +00C0 P8:CREATE(7:pn,acc/1,type/1,aux,stt/1,cD,cT) +00C1 P8:DESTROY(1:pn) +00C2 P8:RENAME(2:pn1,pn2) +00C3 P8:SetFileInfo(7:pn,a/1,t/1,aux,nul/3,mD,mT) +00C4 P8:GetFileInfo(10:pn,a/1,t/1,x,s/1,b,mDTcDT) +00C5 P8:ONLINE(2:UnitNum/1,Buff) +00C6 P8:SET_PREFIX(1:pn) +00C7 P8:GET_PREFIX(1:Buff) +00C8 P8:OPEN(3:pn,ioBuff,Ref/1) +00C9 P8:NEWLINE(3:Ref/1,Mask/1,Char/1) +00CA P8:READ(4:Ref/1,Where,reqCount,xfrCount) +00CB P8:WRITE(4:Ref/1,Where,reqCount,xfrCount) +00CC P8:CLOSE(1:Ref/1) +00CD P8:FLUSH(1:Ref/1) +00CE P8:SET_MARK(2:Ref/1,Position/3) +00CF P8:GET_MARK(2:Ref/1,Position/3) +00D0 P8:SET_EOF(2:Ref/1,Position/3) +00D1 P8:GET_EOF(2:Ref/1,Position/3) +00D2 P8:SET_BUF(2:Ref/1,ioBuff) +00D3 P8:GET_BUF(2:Ref/1,ioBuff) +* ProDOS 16 / GS/OS +0001 P16:CREATE(@Path,Acc,Typ,Aux/4,StT,CrD,CrT) +0002 P16:DESTROY(@Path) +0004 P16:CHANGE_PATH(@Path1,@Path2) +0005 P16:SET_FILE_INFO(@P,a,t,xt/4,z,cD,cT,mD,mT) +0006 P16:GET_FILE_INFO(@P,a,t,xt/4,s,cDT,mDT,b/4) +0008 P16:VOLUME(@DevN,@VolN,Blks/4,FreeBlks/4,fsID) +0009 P16:SET_PREFIX(Pfx#,@Prefix) +000A P16:GET_PREFIX(Pfx#,@Buff) +000B P16:CLEAR_BACKUP_BIT(@Path) +0010 P16:OPEN(Ref,@Path,xxx/4) +0011 P16:NEWLINE(Ref,Mask,Char) +0012 P16:READ(Ref,@Where,Count/4,xfCount/4) +0013 P16:WRITE(Ref,@Where,Count/4,xfCount/4) +0014 P16:CLOSE(Ref) +0015 P16:FLUSH(Ref) +0016 P16:SET_MARK(Ref,Pos/4) +0017 P16:GET_MARK(Ref,Pos/4) +0018 P16:SET_EOF(Ref,EOF/4) +0019 P16:GET_EOF(Ref,EOF/4) +001A P16:SET_LEVEL(Level) +001B P16:GET_LEVEL(Level) +001C P16:GET_DIR_ENTRY(Ref#,z,Bs,Dis,@Bf,dEnt/36) +0020 P16:GET_DEV_NUM(@DevName,Dev#) +0021 P16:GET_LAST_DEV(Dev#) +0022 P16:READ_BLOCK(Dev#,@Where,Blk#/4) +0023 P16:WRITE_BLOCK(Dev#,@Where,Blk#/4) +0024 P16:FORMAT(@DevName,@VolName,fsID) +0025 P16:ERASE_DISK(@DevName,@VolName,fsID) +0027 P16:GET_NAME(@Buff) +0028 P16:GET_BOOT_VOL(@Buff) +0029 P16:QUIT(@Path,Flags) +002A P16:GET_VERSION(Version) +002C P16:D_INFO(Dev#,@DevName) +0031 P16:ALLOC_INTERRUPT(Int#,@Code) +0032 P16:DEALLOCATE_INTERRUPT(Int#) +0101 Shell:Get_LInfo (...) +0102 Shell:Set_LInfo (...) +0103 Shell:Get_Lang(Lang) +0104 Shell:Set_Lang(Lang) +0105 Shell:Error(Error) +0106 Shell:Set_Variable(@VarName,Val/4) +0107 Shell:Version(Vers/4) +0108 Shell:Read_Indexed(@VarName,Val/4,Index) +0109 Shell:Init_Wildcard(@File,Flags) +010A Shell:Next_Wildcard(@NextFile) +010B Shell:Read_Variable(@VarName,Value/4) +010C Shell:ChangeVector(res,vec,@proc,@old) +010D Shell:Execute(Flag,@CmdStr) +010E Shell:FastFile(act,ind,flg,H,L/4,@n,...) +010F Shell:Direction(Dev,Direct) +0110 Shell:Redirect(Dev,ApndFlg,@File) +0113 Shell:Stop(StopFlag) +0114 Shell:ExpandDevices(@name) +0115 Shell:UnsetVariable(@var) +0116 Shell:Export(@var,flags) +0117 Shell:PopVariables() +0118 Shell:PushVariables() +0119 Shell:SetStopFlag(stopFlag) +011A Shell:ConsoleOut(Char) +011B Shell:SetIODevices(OutT,@out,ErrT,@err,InT,@in) +011C Shell:GetIODevices(OutT,@out,ErrT,@err,InT,@in) +011D Shell:GetCommand(idx,restart,rsv,cmd,name/16) +2001 GS/OS:Create(1-7:@P,Acc,Typ,Aux/4,Stg,EOF/4,rEOF/4) +2002 GS/OS:Destroy(1:@P) +2003 GS/OS:OSShutdown(1:Flags) +2004 GS/OS:ChangePath(2-3:@P1,@P2,TrustMeFlag) +2005 GS/OS:SetFileInfo(2-12:@P,A,T,X/4,,c/8,m/8,@Opt,,,,) +2006 GS/OS:GetFileInfo(2-12:@P,A,T,X/4,S,c/8,m/8,@Opt,EOF/4,B/4,rEOF/4,rB/4) +2007 GS/OS:JudgeName(3-6:fileSysID,Descr,@Rules,MaxLen,@Path,Result) +2008 GS/OS:Volume(2-8:@DevN,@vnOut,blks/4,free/4,fSys,BlkSz,char,devID) +2009 GS/OS:SetPrefix(1-2:pfxNum,@Pfx) +200A GS/OS:GetPrefix(2:pfxNum,@Pfx) +200B GS/OS:ClearBackup(1:@P) +200C GS/OS:SetSysPrefs(1:prefs) +200D GS/OS:Null(0:) +200E GS/OS:ExpandPath(2-3:@InPath,@OutPath,UpcaseFlg) +200F GS/OS:GetSysPrefs(1:prefs) +2010 GS/OS:Open(2-15:ref,@P,Acc,fork,gotAcc,+GET_FILE_INFO) +2011 GS/OS:NewLine(4:ref,ANDmask,NumChars,@NLtable) +2012 GS/OS:Read(4-5:ref,@buff,count/4,xfer/4,cacheFlg) +2013 GS/OS:Write(4-5:ref,@buff,count/4,xfer/4,cacheFlg) +2014 GS/OS:Close(1:ref) +2015 GS/OS:Flush(1-2:ref,flags) +2016 GS/OS:SetMark(3:ref,base,displ/4) +2017 GS/OS:GetMark(2:ref,pos/4) +2018 GS/OS:SetEOF(3:ref,base,displ/4) +2019 GS/OS:GetEOF(2:ref,eof/4) +201A GS/OS:SetLevel(1-2:level,levelMode) +201B GS/OS:GetLevel(1-2:level,levelMode) +201C GS/OS:GetDirEntry(5-17:rf,fl,bs,ds,@n,n,T,EOF/4,b/4,c/8,m/8,A,X/4,FS,@o,resEOF/4,resBk/4) +201D GS/OS:BeginSession(0:) +201E GS/OS:EndSession(0:) +201F GS/OS:SessionStatus(1:status) +2020 GS/OS:GetDevNumber(2:@DevN,devnum) +2024 GS/OS:Format(1-6:@DevN,@VolN,gotFS,wantFS,flags,realVolName) +2025 GS/OS:EraseDisk(1-6:@DevN,@VolN,gotFS,wantFS,flags,realVolName) +2026 GS/OS:ResetCache(0:) +2027 GS/OS:GetName(1:@n) +2028 GS/OS:GetBootvol(1:@n) +2029 GS/OS:Quit(0-2:@P,flags) +202A GS/OS:GetVersion(1:version) +202B GS/OS:GetFSTInfo(2-7:n,fs,@n,ver,attr,bSz,mxV/4,mxF/4) +202C GS/OS:DInfo(2-10:n,@n,chr,B/4,sl,unit,ver,dTyp,@hd,@nx) +202D GS/OS:DStatus(5:n,statusReq,@statList,count/4,xfer/4) +202E GS/OS:DControl(5:n,code,@ctlList,count/4,xfer/4) +202F GS/OS:DRead(6:n,@bf,count/4,blk/4,blkSz,xfer/4) +2030 GS/OS:DWrite(6:n,@bf,count/4,blk/4,blkSz,xfer/4) +2031 GS/OS:BindInt(3:IntNum,VecRefNum,@handler) +2032 GS/OS:UnbindInt(1:IntNum) +2033 GS/OS:FSTSpecific(2+...) +2034 GS/OS:AddNotifyProc(1:@proc) +2035 GS/OS:DelNotifyProc(1:@proc) +2036 GS/OS:DRename(2:n,@newName) +2037 GS/OS:GetStdRefNum(2:pfxNum,refNum) +2038 GS/OS:GetRefNum(2-6:@path,ref,acc,res,case,disp) +2039 GS/OS:GetRefInfo(2-5:ref,acc,@path,resNum,level) +203A GS/OS:SetStdRefNum(2:pfxNum,refNum) +* System tools +0000 === System Tools === +0001 === tool locator === +0101 TLBootInit() +0201 TLStartUp() +0301 TLShutDown() +0401 TLVersion():Vers +0501 TLReset() +0601 TLStatus():ActFlg +0901 GetTSPtr(SysFlg,TS#):@FPT +0A01 SetTSPtr(SysFlg,TS#,@FPT) +0B01 GetFuncPtr(SysFlg,Func):@Func +0C01 GetWAP(SysFlg,TS#):@WAP +0D01 SetWAP(SysFlg,TS#,@WAP) +0E01 LoadTools(@ToolTable) +0F01 LoadOneTool(TS#,MinVers) +1001 UnloadOneTool(TS#) +1101 TLMountVolume(X,Y,@L1,@L2,@B1,@B2):Btn# +1201 TLTextMountVolume(@L1,@L2,@B1,@B2):Btn# +1301 SaveTextState():StateH +1401 RestoreTextState(StateH) +1501 MessageCenter(Action,Type,MsgH) +1601 SetDefaultTPT() +1701 MessageByName(CreateF,@inpRec):Created,Type +1801 StartUpTools(MemID,ssDesc,ssRef/4):ssRef/4 +1901 ShutDownTools(ssDesc,ssRef/4) +1A01 GetMsgHandle(Flags,MsgRef/4):H +1B01 AcceptRequests(@NameStr,UserID,@ReqProc) +1C01 SendRequest(ReqCode,How,Target/4,@In,@Out) +0002 === memory manager === +0102 MMBootInit() +0202 MMStartUp():MemID +0302 MMShutDown(MemID) +0402 MMVersion():Vers +0502 MMReset() +0602 MMStatus():ActFlg +0902 NewHandle(Size/4,MemID,Attr,@loc):H +0A02 ReAllocHandle(Size/4,MemID,Attr,@loc,H) +0B02 RestoreHandle(H) +0C02 AddToOOMQueue(@header) +0D02 RemoveFromOOMQueue(@header) +1002 DisposeHandle(H) +1102 DisposeAll(MemID) +1202 PurgeHandle(H) +1302 PurgeAll(MemID) +1802 GetHandleSize(H):Size/4 +1902 SetHandleSize(Size/4,H) +1A02 FindHandle(@byte):H +1B02 FreeMem():FreeBytes/4 +1C02 MaxBlock():Size/4 +1D02 TotalMem():Size/4 +1E02 CheckHandle(H) +1F02 CompactMem() +2002 HLock(H) +2102 HLockAll(MemID) +2202 HUnlock(H) +2302 HUnlockAll(MemID) +2402 SetPurge(PrgLvl,H) +2502 SetPurgeAll(PrgLvl,MemID) +2802 PtrToHand(@Src,DestH,Count/4) +2902 HandToPtr(SrcH,@Dest,Count/4) +2A02 HandToHand(SrcH,DestH,Count/4) +2B02 BlockMove(@Source,@Dest,Count/4) +2F02 RealFreeMem():Size/4 +3002 SetHandleID(newMemID,theH):oldMemID +0003 === misc tools === +0103 MTBootInit() +0203 MTStartUp() +0303 MTShutDown() +0403 MTVersion():Vers +0503 MTReset() +0603 MTStatus():ActFlg +0903 WriteBRam(@Buff) +0A03 ReadBRam(@Buff) +0B03 WriteBParam(Data,Parm#) +0C03 ReadBParam(Parm#):Data +0D03 ReadTimeHex():WkDay,Mn&Dy,Yr&Hr,Mn&Sec +0E03 WriteTimeHex(Mn&Dy,Yr&Hr,Mn&Sec) +0F03 ReadAsciiTime(@Buff) +1003 SetVector(Vec#,@x) +1103 GetVector(Vec#):@x +1203 SetHeartBeat(@Task) +1303 DelHeartBeat(@Task) +1403 ClrHeartBeat() +1503 SysFailMgr(Code,@Msg) +1603 GetAddr(Ref#):@Parm +1703 ReadMouse():X,Y,Stat&Mode +1803 InitMouse(Slot) +1903 SetMouse(Mode) +1A03 HomeMouse() +1B03 ClearMouse() +1C03 ClampMouse(Xmn,Xmx,Ymn,Ymx) +1D03 GetMouseClamp():Xmn,Xmx,Ymn,Ymx +1E03 PosMouse(X,Y) +1F03 ServeMouse():IntStat +2003 GetNewID(Kind):MemID +2103 DeleteID(MemID) +2203 StatusID(MemID) +2303 IntSource(Ref#) +2403 FWEntry(A,X,Y,Address):P,A,X,Y +2503 GetTick():Ticks/4 +2603 PackBytes(@StartPtr,@Sz,@OutBf,OutSz):Size +2703 UnPackBytes(@Buff,BfSz,@StartPtr,@Sz):Size +2803 Munger(@Dst,@DstL,@t,tL,@Rpl,RplL,@Pad):N +2903 GetIRQEnable():IntStat +2A03 SetAbsClamp(Xmn,Xmx,Ymn,Ymx) +2B03 GetAbsClamp():Xmn,Xmx,Ymn,Ymx +2C03 SysBeep() +2E03 AddToQueue(@newTask,@queueHeader) +2F03 DeleteFromQueue(@task,@queueHeader) +3003 SetInterruptState(@stateRec,NumBytes) +3103 GetInterruptState(@stateRec,NumBytes) +3203 GetIntStateRecSize():Size +3303 ReadMouse2():xPos,yPos,StatMode +3403 GetCodeResConverter():@proc +3503 GetROMResource(???,???/4):???H +3603 ReleaseROMResource(???,???/4) +3703 ConvSeconds(convVerb,Secs/4,@Date):SecondsOut/4 +3803 SysBeep2(beepKind) +3903 VersionString(flags,Version/4,@Buffer) +3A03 WaitUntil(WaitFromTime,DelayTime):NewTime +3B03 StringToText(flags,@String,StrLen,@Buffer):ResFlags,PrntLen +3C03 ShowBootInfo(@String,@Icon) +3D03 ScanDevices():DevNum +3E03 AlertMessage(@Table,MsgNum,@Subs):Button +3F03 DoSysPrefs(bitsToClear,bitsToSet):SysPrefs +0004 === QuickDraw II === +0104 QDBootInit() +0204 QDStartUp(DirPg,MastSCB,MaxWid,MemID) +0304 QDShutDown() +0404 QDVersion():Vers +0504 QDReset() +0604 QDStatus():ActFlg +0904 GetAddress(what):@Table +0A04 GrafOn() +0B04 GrafOff() +0C04 GetStandardSCB():SCB +0D04 InitColorTable(@Table) +0E04 SetColorTable(Tab#,@SrcTab) +0F04 GetColorTable(Tab#,@DestTbl) +1004 SetColorEntry(Tab#,Ent#,NewCol) +1104 GetColorEntry(Tab#,Ent#):Color +1204 SetSCB(Line#,SCB) +1304 GetSCB(Line#):SCB +1404 SetAllSCBs(SCB) +1504 ClearScreen(Color) +1604 SetMasterSCB(SCB) +1704 GetMasterSCB():SCB +1804 OpenPort(@Port) +1904 InitPort(@Port) +1A04 ClosePort(@Port) +1B04 SetPort(@Port) +1C04 GetPort():@Port +1D04 SetPortLoc(@LocInfo) +1E04 GetPortLoc(@LocInfo) +1F04 SetPortRect(@Rect) +2004 GetPortRect(@Rect) +2104 SetPortSize(w,h) +2204 MovePortTo(h,v) +2304 SetOrigin(h,v) +2404 SetClip(RgnH) +2504 GetClip(RgnH) +2604 ClipRect(@Rect) +2704 HidePen() +2804 ShowPen() +2904 GetPen(@Pt) +2A04 SetPenState(@PenSt) +2B04 GetPenState(@PenSt) +2C04 SetPenSize(w,h) +2D04 GetPenSize(@Pt) +2E04 SetPenMode(Mode) +2F04 GetPenMode():Mode +3004 SetPenPat(@Patt) +3104 GetPenPat(@Patt) +3204 SetPenMask(@Mask) +3304 GetPenMask(@Mask) +3404 SetBackPat(@Patt) +3504 GetBackPat(@Patt) +3604 PenNormal() +3704 SetSolidPenPat(Color) +3804 SetSolidBackPat(Color) +3904 SolidPattern(Color,@Patt) +3A04 MoveTo(h,v) +3B04 Move(dh,dv) +3C04 LineTo(h,v) +3D04 Line(dh,dv) +3E04 SetPicSave(Val/4) +3F04 GetPicSave():Val/4 +4004 SetRgnSave(Val/4) +4104 GetRgnSave():Val/4 +4204 SetPolySave(Val/4) +4304 GetPolySave():Val/4 +4404 SetGrafProcs(@GrafProcs) +4504 GetGrafProcs():@GrafProcs +4604 SetUserField(Val/4) +4704 GetUserField():Val/4 +4804 SetSysField(Val/4) +4904 GetSysField():Val/4 +4A04 SetRect(@Rect,left,top,right,bot) +4B04 OffsetRect(@Rect,dh,dv) +4C04 InsetRect(@Rect,dh,dv) +4D04 SectRect(@R1,@R2,@DstR):nonEmptyF +4E04 UnionRect(@Rect1,@Rect2,@UnionRect) +4F04 PtInRect(@Pt,@Rect):Flag +5004 Pt2Rect(@Pt1,@Pt2,@Rect) +5104 EqualRect(@Rect1,@Rect2):Flag +5204 NotEmptyRect(@Rect):Flag +5304 FrameRect(@Rect) +5404 PaintRect(@Rect) +5504 EraseRect(@Rect) +5604 InvertRect(@Rect) +5704 FillRect(@Rect,@Patt) +5804 FrameOval(@Rect) +5904 PaintOval(@Rect) +5A04 EraseOval(@Rect) +5B04 InvertOval(@Rect) +5C04 FillOval(@Rect,@Patt) +5D04 FrameRRect(@Rect,OvalW,OvalHt) +5E04 PaintRRect(@Rect,OvalW,OvalHt) +5F04 EraseRRect(@Rect,OvalW,OvalHt) +6004 InvertRRect(@Rect,OvalW,OvalHt) +6104 FillRRect(@Rect,OvalW,OvalHt,@Patt) +6204 FrameArc(@Rect,Ang1,ArcAng) +6304 PaintArc(@Rect,Ang1,ArcAng) +6404 EraseArc(@Rect,Ang1,ArcAng) +6504 InvertArc(@Rect,Ang1,ArcAng) +6604 FillArc(@Rect,Ang1,ArcAng,@Patt) +6704 NewRgn():RgnH +6804 DisposeRgn(RgnH) +6904 CopyRgn(SrcRgnH,DestRgnH) +6A04 SetEmptyRgn(RgnH) +6B04 SetRectRgn(RgnH,left,top,right,bot) +6C04 RectRgn(RgnH,@Rect) +6D04 OpenRgn() +6E04 CloseRgn(RgnH) +6F04 OffsetRgn(RgnH,dh,dv) +7004 InsetRgn(RgnH,dh,dv) +7104 SectRgn(Rgn1H,Rgn2H,DstRgnH) +7204 UnionRgn(Rgn1H,Rgn2H,UnionRgnH) +7304 DiffRgn(Rgn1H,Rgn2H,DstRgnH) +7404 XorRgn(Rgn1H,Rgn2H,DstRgnH) +7504 PtInRgn(@Pt,RgnH):Flag +7604 RectInRgn(@Rect,RgnH):Flag +7704 EqualRgn(Rgn1H,Rgn2H):Flag +7804 EmptyRgn(RgnH):Flag +7904 FrameRgn(RgnH) +7A04 PaintRgn(RgnH) +7B04 EraseRgn(RgnH) +7C04 InvertRgn(RgnH) +7D04 FillRgn(RgnH,@Patt) +7E04 ScrollRect(@Rect,dh,dv,UpdtRgnH) +7F04 PaintPixels(@ppParms) +8004 AddPt(@SrcPt,@DestPt) +8104 SubPt(@SrcPt,@DstPt) +8204 SetPt(@Pt,h,v) +8304 EqualPt(@Pt1,@Pt2):Flag +8404 LocalToGlobal(@Pt) +8504 GlobalToLocal(@Pt) +8604 Random():N +8704 SetRandSeed(Seed/4) +8804 GetPixel(Hor,Vert):Pixel +8904 ScalePt(@Pt,@SrcRect,@DstRect) +8A04 MapPt(@Pt,@SrcRect,@DstRect) +8B04 MapRect(@Rect,@SrcRect,@DstRect) +8C04 MapRgn(MapRgnH,@SrcRect,@DstRect) +8D04 SetStdProcs(@StdProcRec) +8E04 SetCursor(@Curs) +8F04 GetCursorAdr():@Curs +9004 HideCursor() +9104 ShowCursor() +9204 ObscureCursor() +9304 SetMouseLoc ??? +9404 SetFont(FontH) +9504 GetFont():FontH +9604 GetFontInfo(@InfoRec) +9704 GetFontGlobals(@FGRec) +9804 SetFontFlags(Flags) +9904 GetFontFlags():Flags +9A04 SetTextFace(TextF) +9B04 GetTextFace():TextF +9C04 SetTextMode(TextM) +9D04 GetTextMode():TextM +9E04 SetSpaceExtra(SpEx/4f) +9F04 GetSpaceExtra():SpEx/4f +A004 SetForeColor(Color) +A104 GetForeColor():Color +A204 SetBackColor(BackCol) +A304 GetBackColor():BackCol +A404 DrawChar(Char) +A504 DrawString(@Str) +A604 DrawCString(@cStr) +A704 DrawText(@Text,Len) +A804 CharWidth(Char):Width +A904 StringWidth(@Str):Width +AA04 CStringWidth(@cStr):Width +AB04 TextWidth(@Text,Len):Width +AC04 CharBounds(Char,@Rect) +AD04 StringBounds(@Str,@Rect) +AE04 CStringBounds(@cStr,@Rect) +AF04 TextBounds(@Text,Len,@Rect) +B004 SetArcRot(ArcRot) +B104 GetArcRot():ArcRot +B204 SetSysFont(FontH) +B304 GetSysFont():FontH +B404 SetVisRgn(RgnH) +B504 GetVisRgn(RgnH) +B604 SetIntUse(Flag) +B704 OpenPicture(@FrameRect):PicH +B804 PicComment(Kind,DataSz,DataH) +B904 ClosePicture() +BA04 DrawPicture(PicH,@DstRect) +BB04 KillPicture(PicH) +BC04 FramePoly(PolyH) +BD04 PaintPoly(PolyH) +BE04 ErasePoly(PolyH) +BF04 InvertPoly(PolyH) +C004 FillPoly(PolyH,@Patt) +C104 OpenPoly():PolyH +C204 ClosePoly() +C304 KillPoly(PolyH) +C404 OffsetPoly(PolyH,dh,dv) +C504 MapPoly(PolyH,@SrcRect,@DstRect) +C604 SetClipHandle(RgnH) +C704 GetClipHandle():RgnH +C804 SetVisHandle(RgnH) +C904 GetVisHandle():RgnH +CA04 InitCursor() +CB04 SetBufDims(MaxW,MaxFontHt,MaxFBRext) +CC04 ForceBufDims(MaxW,MaxFontHt,MaxFBRext) +CD04 SaveBufDims(@SizeInfo) +CE04 RestoreBufDims(@SizeInfo) +CF04 GetFGSize():FGSize +D004 SetFontID(FontID/4) +D104 GetFontID():FontID/4 +D204 SetTextSize(TextSz) +D304 GetTextSize():TextSz +D404 SetCharExtra(ChEx/4f) +D504 GetCharExtra():ChEx/4f +D604 PPToPort(@SrcLoc,@SrcRect,X,Y,Mode) +D704 InflateTextBuffer(NewW,NewHt) +D804 GetRomFont(@Rec) +D904 GetFontLore(@Rec,RecSize):Size +DA04 Get640Colors():@PattTable +DB04 Set640Color(color) +0005 === desk manager === +0105 DeskBootInit() +0205 DeskStartUp() +0305 DeskShutDown() +0405 DeskVersion():Vers +0505 DeskReset() +0605 DeskStatus():ActFlg +0905 SaveScrn() +0A05 RestScrn() +0B05 SaveAll() +0C05 RestAll() +0E05 InstallNDA(ndaH) +0F05 InstallCDA(cdaH) +1105 ChooseCDA() +1305 SetDAStrPtr(AltDispH,@StrTbl) +1405 GetDAStrPtr():@StrTbl +1505 OpenNDA(ItemID):Ref# +1605 CloseNDA(Ref#) +1705 SystemClick(@EvRec,@Wind,fwRes) +1805 SystemEdit(eType):Flag +1905 SystemTask() +1A05 SystemEvent(Mods,Where/4,When/4,Msg/4,What):F +1B05 GetNumNDAs():N +1C05 CloseNDAbyWinPtr(@Wind) +1D05 CloseAllNDAs() +1E05 FixAppleMenu(MenuID) +1F05 AddToRunQ(@taskHeader) +2005 RemoveFromRunQ(@taskHeader) +2105 RemoveCDA(cdaH) +2205 RemoveNDA(ndaH) +2305 GetDeskAccInfo(flags,daRef/4,BufSize,@Buffer) +2405 CallDeskAcc(flags,daRef/4,Action,Data/4):Result +2505 GetDeskGlobal(selector):Value/4 +0006 === event manager === +0106 EMBootInit() +0206 EMStartUp(DirPg,qSz,Xmn,Xmx,Ymn,Ymx,MemID) +0306 EMShutDown() +0406 EMVersion():Vers +0506 EMReset() +0606 EMStatus():ActFlg +0906 DoWindows():DirPg +0A06 GetNextEvent(evMask,@EvRec):Flag +0B06 EventAvail(evMask,@EvRec):Flag +0C06 GetMouse(@Pt) +0D06 Button(Btn#):DownFlg +0E06 StillDown(Btn#):Flag +0F06 WaitMouseUp(Btn#):Flag +1006 TickCount():Ticks/4 +1106 GetDblTime():Ticks/4 +1206 GetCaretTime():Ticks/4 +1306 SetSwitch() +1406 PostEvent(code,Msg/4):Flag +1506 FlushEvents(evMask,StopMask):F +1606 GetOSEvent(evMask,@EvRec):Flag +1706 OSEventAvail(evMask,@EvRec):Flag +1806 SetEventMask(evMask) +1906 FakeMouse(ChFlg,Mods,X,Y,BtnStat) +1A06 SetAutoKeyLimit(NewLimit) +1B06 GetKeyTranslation():kTransID +1C06 SetKeyTranslation(kTransID) +0007 === scheduler === +0107 SchBootInit() +0207 SchStartUp() +0307 SchShutDown() +0407 SchVersion():Vers +0507 SchReset() +0607 SchStatus():ActFlg +0907 SchAddTask(@Task):Flag +0A07 SchFlush() +0008 === sound manager === +0108 SoundBootInit() +0208 SoundStartUp(DirPg) +0308 SoundShutDown() +0408 SoundVersion():Vers +0508 SoundReset() +0608 SoundToolStatus():ActFlg +0908 WriteRamBlock(@Src,DOCStart,Count) +0A08 ReadRamBlock(@Dest,DOCStart,Count) +0B08 GetTableAddress():@JumpTbl +0C08 GetSoundVolume(Gen#):Vol +0D08 SetSoundVolume(Vol,Gen#) +0E08 FFStartSound(GenN&mode,@Parms) +0F08 FFStopSound(GenMask) +1008 FFSoundStatus():ActFlg +1108 FFGeneratorStatus(Gen#):Stat +1208 SetSoundMIRQV(@IntHandler) +1308 SetUserSoundIRQV(@NewIRQ):@OldIRQ +1408 FFSoundDoneStatus(Gen#):Stat +1508 FFSetUpSound(ChannelGen,@Parms) +1608 FFStartPlaying(GenWord) +1708 SetDocReg(@DocRegParms) +1808 ReadDocReg(@DocRegParms) +0009 === desktop bus === +0109 ADBBootInit() +0209 ADBStartUp() +0309 ADBShutDown() +0409 ADBVersion():Vers +0509 ADBReset() +0609 ADBStatus():ActFlg +0909 SendInfo(NumB,@Data,Cmd) +0A09 ReadKeyMicroData(NumB,@Data,Cmd) +0B09 ReadKeyMicroMemory(@DataOut,@DataIn,Cmd) +0C09 [resynch--don't call] +0D09 AsyncADBReceive(@CompVec,Cmd) +0E09 SyncADBReceive(InputWrd,@CompVec,Cmd) +0F09 AbsOn() +1009 AbsOff() +1109 RdAbs():Flag +1209 SetAbsScale(@DataOut) +1309 GetAbsScale(@DataIn) +1409 SRQPoll(@CompVec,ADBreg) +1509 SRQRemove(ADBreg) +1609 ClearSRQTable() +FF09 [OBSOLETE: Use 09FF] +000A === SANE === +010A SANEBootInit() +020A SANEStartUp(DirPg) +030A SANEShutDown() +040A SANEVersion():Vers +050A SANEReset() +060A SANEStatus():ActFlg +090A FPNum (...) +0A0A DecStrNum (...) +0B0A ElemNum (...) +FF0A [OBSOLETE: USE $0AFF] +000B === integer math === +010B IMBootInit() +020B IMStartUp() +030B IMShutDown() +040B IMVersion():Vers +050B IMReset() +060B IMStatus():ActFlg +090B Multiply(A,B):Prod/4 +0A0B SDivide(Num,Den):Rem,Quot +0B0B UDivide(Num,Den):Rem,Quot +0C0B LongMul(A/4,B/4):Prod/8 +0D0B LongDivide(Num/4,Denom/4):Rem/4,Quot/4 +0E0B FixRatio(Numer,Denom):fxRatio/4 +0F0B FixMul(fx1/4,fx2/4):fxProd/4 +100B FracMul(fr1/4,fr2/4):frRes/4 +110B FixDiv(Quot/4,Divisor/4):fxRes/4 +120B FracDiv(Quot/4,Divisor/4):frRes/4 +130B FixRound(fxVal/4):Int +140B FracSqrt(frVal/4):frRes/4 +150B FracCos(fxAngle/4):frRes/4 +160B FracSin(fxAngle/4):frRes/4 +170B FixATan2(In1/4,In2/4):fxArcTan/4 +180B HiWord(Long/4):Int +190B LoWord(Long/4):Int +1A0B Long2Fix(Long/4):fxRes/4 +1B0B Fix2Long(Fix/4):Long/4 +1C0B Fix2Frac(fxVal/4):Frac/4 +1D0B Frac2Fix(frVal/4):fxRes/4 +1E0B Fix2X(Fix/4,@Extended) +1F0B Frac2X(frVal/4,@Extended) +200B X2Fix(@Extended):fxRes/4 +210B X2Frac(@Extended):frRes/4 +220B Int2Hex(Int,@Str,Len) +230B Long2Hex(Long/4,@Str,Len) +240B Hex2Int(@Str,Len):Int +250B Hex2Long(@Str,Len):Long/4 +260B Int2Dec(Int,@Str,Len,SgnFlg) +270B Long2Dec(Long/4,@Str,Len,SgnFlg) +280B Dec2Int(@Str,Len,SgnFlg):Int +290B Dec2Long(@Str,Len,SgnFlg):Long/4 +2A0B HexIt(Int):Hex/4 +000C === text tools === +010C TextBootInit() +020C TextStartUp() +030C TextShutDown() +040C TextVersion():Vers +050C TextReset() +060C TextStatus():ActFlg +090C SetInGlobals(ANDmsk,ORmsk) +0A0C SetOutGlobals(ANDmsk,ORmsk) +0B0C SetErrGlobals(ANDmsk,ORmsk) +0C0C GetInGlobals():ANDmsk,ORmsk +0D0C GetOutGlobals():ANDmsk,ORmsk +0E0C GetErrGlobals():ANDmsk,ORmsk +0F0C SetInputDevice(Type,@drvr|Slot/4) +100C SetOutputDevice(Type,@drvr|Slot/4) +110C SetErrorDevice(Type,@drvr|Slot/4) +120C GetInputDevice():Type,@drvr|Slot/4 +130C GetOutputDevice():Type,@drvr|Slot/4 +140C GetErrorDevice():Type,@drvr|Slot/4 +150C InitTextDev(dev) +160C CtlTextDev(dev,code) +170C StatusTextDev(dev,request) +180C WriteChar(Char) +190C ErrWriteChar(Char) +1A0C WriteLine(@Str) +1B0C ErrWriteLine(@Str) +1C0C WriteString(@Str) +1D0C ErrWriteString(@Str) +1E0C TextWriteBlock(@Text,Offset,Len) +1F0C ErrWriteBlock(@Text,Offset,Len) +200C WriteCString(@cStr) +210C ErrWriteCString(@cStr) +220C ReadChar(EchoFlg):Char +230C TextReadBlock(@Buff,Offset,Size,EchoFlg) +240C ReadLine(@Buff,Max,EOLch,EchoFlg):Count +000D === reserved === +000E === window manager === +010E WindBootInit() +020E WindStartUp(MemID) +030E WindShutDown() +040E WindVersion():Vers +050E WindReset() +060E WindStatus():ActFlg +090E NewWindow(@Parms):@Wind +0A0E CheckUpdate(@EvRec):Flag +0B0E CloseWindow(@Wind) +0C0E Desktop(Oper,param/4):result/4 +0D0E SetWTitle(@Title,@Wind) +0E0E GetWTitle(@Wind):@Title +0F0E SetFrameColor(@NewColTbl,@Wind) +100E GetFrameColor(@Table,@Wind) +110E SelectWindow(@Wind) +120E HideWindow(@Wind) +130E ShowWindow(@Wind) +140E SendBehind(@BehindWho,@Wind) +150E FrontWindow():@Wind +160E SetInfoDraw(@Proc,@Wind) +170E FindWindow(@WindVar,X,Y):Where +180E TrackGoAway(X,Y,@Wind):Flag +190E MoveWindow(X,Y,@Wind) +1A0E DragWindow(Grid,X,Y,Grace,@bRect,@Wind) +1B0E GrowWindow(mnW,mnH,X,Y,@Wind):nSize/4 +1C0E SizeWindow(w,h,@Wind) +1D0E TaskMaster(evMask,@TaskRec):Code +1E0E BeginUpdate(@Wind) +1F0E EndUpdate(@Wind) +200E GetWMgrPort():@Port +210E PinRect(X,Y,@Rect):Point/4 +220E HiliteWindow(Flag,@Wind) +230E ShowHide(Flag,@Wind) +240E BringToFront(@Wind) +250E WindNewRes() +260E TrackZoom(X,Y,@Wind):Flag +270E ZoomWindow(@Wind) +280E SetWRefCon(Refcon/4,@Wind) +290E GetWRefCon(@Wind):Refcon/4 +2A0E GetNextWindow(@Wind):@Wind +2B0E GetWKind(@Wind):Flag +2C0E GetWFrame(@Wind):Frame +2D0E SetWFrame(Frame,@Wind) +2E0E GetStructRgn(@Wind):StructRgnH +2F0E GetContentRgn(@Wind):ContRgnH +300E GetUpdateRgn(@Wind):UpdateRgnH +310E GetDefProc(@Wind):@Proc +320E SetDefProc(@Proc,@Wind) +330E GetWControls(@Wind):CtrlH +340E SetOriginMask(Mask,@Wind) +350E GetInfoRefCon(@Wind):Refcon/4 +360E SetInfoRefCon(Val/4,@Wind) +370E GetZoomRect(@Wind):@zRect +380E SetZoomRect(@zRect,@Wind) +390E RefreshDesktop(@Rect) +3A0E InvalRect(@Rect) +3B0E InvalRgn(RgnH) +3C0E ValidRect(@Rect) +3D0E ValidRgn(RgnH) +3E0E GetContentOrigin(@Wind):Origin/4 +3F0E SetContentOrigin(X,Y,@Wind) +400E GetDataSize(@Wind):DataSize/4 +410E SetDataSize(w,h,@Wind) +420E GetMaxGrow(@Wind):MaxGrow/4 +430E SetMaxGrow(maxWidth,maxHeight,@Wind) +440E GetScroll(@Wind):Scroll/4 +450E SetScroll(h,v,@Wind) +460E GetPage(@Wind):Page/4 +470E SetPage(h,v,@Wind) +480E GetContentDraw(@Wind):@Proc +490E SetContentDraw(@Proc,@Wind) +4A0E GetInfoDraw(@Wind):@Proc +4B0E SetSysWindow(@Wind) +4C0E GetSysWFlag(@Wind):Flag +4D0E StartDrawing(@Wind) +4E0E SetWindowIcons(NewFontH):OldFontH +4F0E GetRectInfo(@InfoRect,@Wind) +500E StartInfoDrawing(@iRect,@Wind) +510E EndInfoDrawing() +520E GetFirstWindow():@Wind +530E WindDragRect(@a,@P,X,Y,@R,@lR,@sR,F):M/4 +540E Private01():@func [GetDragRectPtr] +550E DrawInfoBar(@Wind) +560E WindowGlobal(Flags):Flags +570E SetContentOrigin2(ScrollFlag,X,Y,@Wind) +580E GetWindowMgrGlobals():@Globals +590E AlertWindow(AlertDesc,@SubArray,AlertRef/4):Btn +5A0E StartFrameDrawing(@Wind) +5B0E EndFrameDrawing() +5C0E ResizeWindow(hidden,@ContRect,@Wind) +5D0E TaskMasterContent +5E0E TaskMasterKey +5F0E TaskMasterDA(evMask,@bigTaskRec):taskCode +600E CompileText(subType,@subs,@text,size):H +610E NewWindow2(@T,RC/4,@draw,@def,pDesc,pRef/4,rType):@W +620E ErrorWindow(subType,@subs,ErrNum):Button +630E GetAuxWindInfo(@Wind):@Info +640E DoModalWindow(@Event,@Update,@EvHook,@Beep,Flags):Result/4 +650E MWGetCtlPart():Part +660E MWSetMenuProc(@NewMenuProc):@OldMenuProc +670E MWStdDrawProc() +680E MWSetUpEditMenu() +690E FindCursorCtl(@CtrlH,x,y,@Wind):PartCode +6A0E ResizeInfoBar(flags,newHeight,@Wind) +6B0E HandleDiskInsert(flags,devNum):resFlags,resDevNum +6C0E UpdateWindow(flags,@Wind) +000F === menu manager === +010F MenuBootInit() +020F MenuStartUp(MemID,DirPg) +030F MenuShutDown() +040F MenuVersion():Vers +050F MenuReset() +060F MenuStatus():ActFlg +090F MenuKey(@TaskRec,BarH) +0A0F GetMenuBar():BarH +0B0F MenuRefresh(@RedrawProc) +0C0F FlashMenuBar() +0D0F InsertMenu(MenuH,AfterWhat) +0E0F DeleteMenu(MenuID) +0F0F InsertMItem(@Item,AfterItem,MenuID) +100F DeleteMItem(ItemID) +110F GetSysBar():BarH +120F SetSysBar(BarH) +130F FixMenuBar():Height +140F CountMItems(MenuID):N +150F NewMenuBar(@Wind):BarH +160F GetMHandle(MenuID):MenuH +170F SetBarColors(BarCol,InvCol,OutCol) +180F GetBarColors():Colors/4 +190F SetMTitleStart(hStart) +1A0F GetMTitleStart():hStart +1B0F GetMenuMgrPort():@Port +1C0F CalcMenuSize(w,h,MenuID) +1D0F SetMTitleWidth(w,MenuID) +1E0F GetMTitleWidth(MenuID):TitleWidth +1F0F SetMenuFlag(Flags,MenuID) +200F GetMenuFlag(MenuID):Flags +210F SetMenuTitle(@Title,MenuID) +220F GetMenuTitle(MenuID):@Title +230F MenuGlobal(Flags):Flags +240F SetMItem(@Str,ItemID) +250F GetMItem(ItemID):@ItemName +260F SetMItemFlag(Flags,ItemID) +270F GetMItemFlag(ItemID):Flag +280F SetMItemBlink(Count) +290F MenuNewRes() +2A0F DrawMenuBar() +2B0F MenuSelect(@TaskRec,BarH) +2C0F HiliteMenu(Flag,MenuID) +2D0F NewMenu(@MenuStr):MenuH +2E0F DisposeMenu(MenuH) +2F0F InitPalette() +300F EnableMItem(ItemID) +310F DisableMItem(ItemID) +320F CheckMItem(Flag,ItemID) +330F SetMItemMark(MarkCh,ItemID) +340F GetMItemMark(ItemID):MarkChar +350F SetMItemStyle(TextStyle,ItemID) +360F GetMItemStyle(ItemID):TextStyle +370F SetMenuID(New,Old) +380F SetMItemID(New,Old) +390F SetMenuBar(BarH) +3A0F SetMItemName(@Str,ItemID) +3B0F GetPopUpDefProc():@proc +3C0F PopUpMenuSelect(SelID,left,top,flag,MenuH):id +3D0F [DrawPopUp(SelID,Flag,right,bottom,left,top,MenuH)] +3E0F NewMenu2(RefDesc,Ref/4):MenuH +3F0F InsertMItem2(RefDesc,Ref/4,After,MenuID) +400F SetMenuTitle2(RefDesc,TitleRef/4,MenuID) +410F SetMItem2(RefDesc,Ref/4,Item) +420F SetMItemName2(RefDesc,Ref/4,Item) +430F NewMenuBar2(RefDesc,Ref/4,@Wind):BarH +450F HideMenuBar() +460F ShowMenuBar() +470F SetMItemIcon(IconDesc,IconRef/4,ItemID) +480F GetMItemIcon(ItemID):IconRef/4 +490F SetMItemStruct(Desc,StructRef/4,ItemID) +4A0F GetMItemStruct(ItemID):ItemStruct/4 +4B0F RemoveMItemStruct(ItemID) +4C0F GetMItemFlag2(ItemID):ItemFlag2 +4D0F SetMItemFlag2(newValue,ItemID) +4F0F GetMItemBlink():Count +500F InsertPathMItems(flags,@Path,devnum,MenuID,AfterID,StartID,@Results) +0010 === control manager === +0110 CtlBootInit() +0210 CtlStartUp(MemID,DirPg) +0310 CtlShutDown() +0410 CtlVersion():Vers +0510 CtlReset() +0610 CtlStatus():ActFlg +0910 NewControl(@W,@R,@T,F,V,P1,P2,@p,r/4,@C):cH +0A10 DisposeControl(CtrlH) +0B10 KillControls(@Wind) +0C10 SetCtlTitle(@Title,CtrlH) +0D10 GetCtlTitle(CtrlH):@Title +0E10 HideControl(CtrlH) +0F10 ShowControl(CtrlH) +1010 DrawControls(@Wind) +1110 HiliteControl(Flag,CtrlH) +1210 CtlNewRes() +1310 FindControl(@CtrlHVar,X,Y,@Wind):Part +1410 TestControl(X,Y,CtrlH):Part +1510 TrackControl(X,Y,@ActProc,CtrlH):Part +1610 MoveControl(X,Y,CtrlH) +1710 DragControl(X,Y,@LimR,@slR,Axis,CtrlH) +1810 SetCtlIcons(FontH):OldFontH +1910 SetCtlValue(Val,CtrlH) +1A10 GetCtlValue(CtrlH):Val +1B10 SetCtlParams(P2,P1,CtrlH) +1C10 GetCtlParams(CtrlH):P1,P2 +1D10 DragRect(@acPr,@P,X,Y,@drR,@l,@slR,F):M/4 +1E10 GrowSize():Size/4 +1F10 GetCtlDpage():DirPg +2010 SetCtlAction(@ActProc,CtrlH) +2110 GetCtlAction(CtrlH):Action/4 +2210 SetCtlRefCon(Refcon/4,CtrlH) +2310 GetCtlRefCon(CtrlH):Refcon/4 +2410 EraseControl(CtrlH) +2510 DrawOneCtl(CtrlH) +2610 FindTargetCtl():CtrlH +2710 MakeNextCtlTarget():CtrlH +2810 MakeThisCtlTarget(CtrlH) +2910 SendEventToCtl(TgtOnly,@Wind,@eTask):Accepted +2A10 GetCtlID(CtrlH):CtlID/4 +2B10 SetCtlID(CtlID/4,CtrlH) +2C10 CallCtlDefProc(CtrlH,Msg,Param/4):Result/4 +2D10 NotifyCtls(Mask,Msg,Param/4,@Wind) +2E10 GetCtlMoreFlags(CtrlH):Flags +2F10 SetCtlMoreFlags(Flags,CtrlH) +3010 GetCtlHandleFromID(@Wind,CtlID/4):CtrlH +3110 NewControl2(@Wind,InKind,InRef/4):CtrlH +3210 CMLoadResource(rType,rID/4):resH +3310 CMReleaseResource(rType,rID/4) +3410 SetCtlParamPtr(@SubArray) +3510 GetCtlParamPtr():@SubArray +3710 InvalCtls(@Wind) +3810 [reserved] +3910 FindRadioButton(@Wind,FamilyNum):WhichRadio +3A10 SetLETextByID(@Wind,leID/4,@PString) +3B10 GetLETextByID(@Wind,leID/4,@PString) +3C10 SetCtlValueByID(Value,@Wind,CtlID/4) +3D10 GetCtlValueByID(@Wind,CtlID/4):Value +3E10 InvalOneCtlByID(@Wind,CtlID/4) +3F10 HiliteCtlByID(Hilite,@Wind,CtlID/4) +0011 === loader === +0111 LoaderBootInit() +0211 LoaderStartUp() +0311 LoaderShutDown() +0411 LoaderVersion():Vers +0511 LoaderReset() +0611 LoaderStatus():ActFlg +0911 InitialLoad(MemID,@path,F):dpsSz,dps,@l,MemID +0A11 Restart(MemID):dpsSz,dps,@loc,MemID +0B11 LoadSegNum(MemID,file#,seg#):@loc +0C11 UnloadSegNum(MemID,file#,seg#) +0D11 LoadSegName(MemID,@path,@segn):@loc,MemID,file#,sg# +0E11 UnloadSeg(@loc):seg#,file#,MemID +0F11 GetLoadSegInfo(MemID,file#,seg#,@buff) +1011 GetUserID(@Pathname):MemID +1111 LGetPathname(MemID,file#):@path +1211 UserShutDown(MemID,qFlag):MemID +1311 RenamePathname(@path1,@path2) +2011 InitialLoad2(MemID,@in,F,Type):dpsSz,dps,@l,MemID +2111 GetUserID2(@path):MemID +2211 LGetPathname2(MemID,file#):@path +0012 === QuickDraw Aux === +0112 QDAuxBootInit() +0212 QDAuxStartUp() +0312 QDAuxShutDown() +0412 QDAuxVersion():Vers +0512 QDAuxReset() +0612 QDAuxStatus():ActFlg +0912 CopyPixels(@sLoc,@dLoc,@sRect,@dRct,M,MskH) +0A12 WaitCursor() +0B12 DrawIcon(@Icon,Mode,X,Y) +0C12 SpecialRect(@Rect,FrameColor,FillColor) +0D12 SeedFill(@sLoc,@sR,@dLoc,@dR,X,Y,Mode,@Patt,@Leak) +0E12 CalcMask(@sLoc,@sR,@dLoc,@dR,Mode,@Patt,@Leak) +0F12 GetSysIcon(flags,value,aux/4):@Icon +1012 PixelMap2Rgn(@srcLoc,bitsPerPix,colorMask):RgnH +1312 IBeamCursor() +1412 WhooshRect(flags/4,@smallRect,@bigRect) +1512 DrawStringWidth(Flags,Ref/4,Width) +1612 UseColorTable(tableNum,@Table,Flags):ColorInfoH +1712 RestoreColorTable(ColorInfoH,Flags) +0013 === print manager === +0113 PMBootInit() +0213 PMStartUp(MemID,DirPg) +0313 PMShutDown() +0413 PMVersion():Vers +0513 PMReset() +0613 PMStatus():ActFlg +0913 PrDefault(PrRecH) +0A13 PrValidate(PrRecH):Flag +0B13 PrStlDialog(PrRecH):Flag +0C13 PrJobDialog(PrRecH):Flag +0D13 PrPixelMap(@LocInfo,@SrcRect,colorFlag) +0E13 PrOpenDoc(PrRecH,@Port):@Port +0F13 PrCloseDoc(@Port) +1013 PrOpenPage(@Port,@Frame) +1113 PrClosePage(@Port) +1213 PrPicFile(PrRecH,@Port,@StatRec) +1313 PrControl [obsolete] +1413 PrError():Error +1513 PrSetError(Error) +1613 PrChoosePrinter():DrvFlag +1813 PrGetPrinterSpecs():Type,Characteristics +1913 PrDevPrChanged(@PrinterName) +1A13 PrDevStartup(@PrinterName,@ZoneName) +1B13 PrDevShutDown() +1C13 PrDevOpen(@compProc,Reserved/4) +1D13 PrDevRead(@buffer,reqCount):xferCount +1E13 PrDevWrite(@compProc,@buff,bufLen) +1F13 PrDevClose() +2013 PrDevStatus(@statBuff) +2113 PrDevAsyncRead(@compPr,bufLen,@buff):xferCount +2213 PrDevWriteBackground(@compProc,bufLen,@buff) +2313 PrDriverVer():Vers +2413 PrPortVer():Vers +2513 PrGetZoneName():@ZoneName +2813 PrGetPrinterDvrName():@Name +2913 PrGetPortDvrName():@Name +2A13 PrGetUserName():@Name +2B13 PrGetNetworkName():@Name +3013 PrDevIsItSafe():safeFlag +3113 GetZoneList [obsolete?] +3213 GetMyZone [obsolete?] +3313 GetPrinterList [obsolete?] +3413 PMUnloadDriver(whichDriver) +3513 PMLoadDriver(whichDriver) +3613 PrGetDocName():@pStr +3713 PrSetDocName(@pStr) +3813 PrGetPgOrientation(PrRecH):Orientation +0014 === line edit === +0114 LEBootInit() +0214 LEStartUp(MemID,DirPg) +0314 LEShutDown() +0414 LEVersion():Vers +0514 LEReset() +0614 LEStatus():ActFlg +0914 LENew(@DstRect,@ViewRect,MaxL):leH +0A14 LEDispose(leH) +0B14 LESetText(@Text,Len,leH) +0C14 LEIdle(leH) +0D14 LEClick(@EvRec,leH) +0E14 LESetSelect(Start,End,leH) +0F14 LEActivate(leH) +1014 LEDeactivate(leH) +1114 LEKey(Key,Mods,leH) +1214 LECut(leH) +1314 LECopy(leH) +1414 LEPaste(leH) +1514 LEDelete(leH) +1614 LEInsert(@Text,Len,leH) +1714 LEUpdate(leH) +1814 LETextBox(@Text,Len,@Rect,Just) +1914 LEFromScrap() +1A14 LEToScrap() +1B14 LEScrapHandle():ScrapH +1C14 LEGetScrapLen():Len +1D14 LESetScrapLen(NewL) +1E14 LESetHilite(@HiliteProc,leH) +1F14 LESetCaret(@CaretProc,leH) +2014 LETextBox2(@Text,Len,@Rect,Just) +2114 LESetJust(Just,leH) +2214 LEGetTextHand(leH):TextH +2314 LEGetTextLen(leH):TxtLen +2414 GetLEDefProc():@proc +2514 LEClassifyKey(@Event):Flag +0015 === dialog manager === +0115 DialogBootInit() +0215 DialogStartUp(MemID) +0315 DialogShutDown() +0415 DialogVersion():Vers +0515 DialogReset() +0615 DialogStatus():ActFlg +0915 ErrorSound(@SoundProc) +0A15 NewModalDialog(@bR,vis,refcon/4):@Dlog +0B15 NewModelessDialog(@R,@T,@b,fr,rf/4,@zR):@D +0C15 CloseDialog(@Dlog) +0D15 NewDItem(@Dlog,dItem,@R,ty,Des/4,V,F,@Col) +0E15 RemoveDItem(@Dlog,dItem) +0F15 ModalDialog(@FilterProc):Hit +1015 IsDialogEvent(@EvRec):Flag +1115 DialogSelect(@EvRec,@Dlog,@Hit):Flag +1215 DlgCut(@Dlog) +1315 DlgCopy(@Dlog) +1415 DlgPaste(@Dlog) +1515 DlgDelete(@Dlog) +1615 DrawDialog(@Dlog) +1715 Alert(@AlertTmpl,@FiltProc):Hit +1815 StopAlert(@AlertTmpl,@FiltProc):Hit +1915 NoteAlert(@AlertTmpl,@FiltProc):Hit +1A15 CautionAlert(@AlertTmpl,@FiltProc):Hit +1B15 ParamText(@P0,@P1,@P2,@P3) +1C15 SetDAFont(FontH) +1E15 GetControlDItem(@Dlog,dItem):CtrlH +1F15 GetIText(@Dlog,dItem,@Str) +2015 SetIText(@Dlog,dItem,@Str) +2115 SelectIText(@Dlog,dItem,start,end) +2215 HideDItem(@Dlog,dItem) +2315 ShowDItem(@Dlog,dItem) +2415 FindDItem(@Dlog,Point/4):Hit +2515 UpdateDialog(@Dlog,UpdtRgnH) +2615 GetDItemType(@Dlog,dItem):type +2715 SetDItemType(type,@Dlog,dItem) +2815 GetDItemBox(@Dlog,dItem,@Rect) +2915 SetDItemBox(@Dlog,dItem,@Rect) +2A15 GetFirstDItem(@Dlog):dItem +2B15 GetNextDItem(@Dlog,dItem):dItem +2C15 ModalDialog2(@FilterProc):HitInfo/4 +2E15 GetDItemValue(@Dlog,dItem):Val +2F15 SetDItemValue(val,@Dlog,dItem) +3215 GetNewModalDialog(@DlogTmpl):@Dlog +3315 GetNewDItem(@Dlog,@ItemTmpl) +3415 GetAlertStage():Stage +3515 ResetAlertStage() +3615 DefaultFilter(@Dlog,@EvRec,@Hit):Flag +3715 GetDefButton(@Dlog):dItem +3815 SetDefButton(BtnID,@Dlog) +3915 DisableDItem(@Dlog,dItem) +3A15 EnableDItem(@Dlog,dItem) +0016 === scrap manager === +0116 ScrapBootInit() +0216 ScrapStartUp() +0316 ScrapShutDown() +0416 ScrapVersion():Vers +0516 ScrapReset() +0616 ScrapStatus():ActFlg +0916 UnloadScrap() +0A16 LoadScrap() +0B16 ZeroScrap() +0C16 PutScrap(Count/4,Type,@Src) +0D16 GetScrap(DestH,Type) +0E16 GetScrapHandle(Type):ScrapH +0F16 GetScrapSize(Type):Size/4 +1016 GetScrapPath():@Pathname +1116 SetScrapPath(@Pathname) +1216 GetScrapCount():Count +1316 GetScrapState():State +1416 GetIndScrap(Index,@buffer) +1516 ShowClipboard(flags,@rect):@Wind +0017 === standard file === +0117 SFBootInit() +0217 SFStartUp(MemID,DirPg) +0317 SFShutDown() +0417 SFVersion():Vers +0517 SFReset() +0617 SFStatus():ActFlg +0917 SFGetFile(X,Y,@Prmpt,@FPrc,@tL,@Reply) +0A17 SFPutFile(X,Y,@Prompt,@DfltName,mxL,@Reply) +0B17 SFPGetFile(X,Y,@P,@FPrc,@tL,@dTmp,@dHk,@Rp) +0C17 SFPPutFile(X,Y,@P,@Df,mxL,@dTmpl,@dHk,@Rply) +0D17 SFAllCaps(Flag) +0E17 SFGetFile2(X,Y,prDesc,prRef/4,@fProc,@tList,@rep) +0F17 SFPutFile2(X,Y,prDesc,prRef/4,nmDesc,nmRef/4,@rep) +1017 SFPGetFile2(X,Y,@draw,prD,prRf/4,@fP,@tL,@d,@hk,@rep) +1117 SFPPutFile2(X,Y,@draw,prD,prRf/4,nmD,nmRf/4,@d,@hk,@rep) +1217 SFShowInvisible(InvisState):OldState +1317 SFReScan(@filterProc,@typeList) +1417 SFMultiGet2(X,Y,prDesc,prRef/4,@fP,@tL,@rep) +1517 SFPMultiGet2(X,Y,@draw,prD,prRf/4,@fP,@tL,@d,@hk,@rep) +0019 === note synthesizer === +0119 NSBootInit() +0219 NSStartUp(Rate,@UpdProc) +0319 NSShutDown() +0419 NSVersion():Vers +0519 NSReset() +0619 NSStatus():ActFlg +0919 AllocGen(Priority):Gen# +0A19 DeallocGen(Gen#) +0B19 NoteOn(Gen#,Semitone,Vol,@Instr) +0C19 NoteOff(Gen#,Semitone) +0D19 AllNotesOff() +0E19 NSSetUpdateRate(NewRate):OldRate +0F19 NSSetUserUpdateRtn(@New):@Old +001A === note sequencer === +011A SeqBootInit() +021A SeqStartUp(DirPg,Mode,Rate,Incr) +031A SeqShutDown() +041A SeqVersion():Vers +051A SeqReset() +061A SeqStatus():ActFlg +091A SetIncr(Increment) +0A1A ClearIncr():OldIncr +0B1A GetTimer():Tick +0C1A GetLoc():Phrase,Patt,Level +0D1A SeqAllNotesOff() +0E1A SetTrkInfo(Priority,InstIndex,TrkNum) +0F1A StartSeq(@ErrRtn,@CompRtn,SeqH) +101A StepSeq() +111A StopSeq(NextFlag) +121A SetInstTable(TableH) +131A StartInts() +141A StopInts() +151A StartSeqRel(@errHndlr,@CompRtn,SeqH) +001B === font manager === +011B FMBootInit() +021B FMStartUp(MemID,DirPg) +031B FMShutDown() +041B FMVersion():Vers +051B FMReset() +061B FMStatus():ActFlg +091B CountFamilies(FamSpecs):Count +0A1B FindFamily(Specs,Pos,@Name):FamNum +0B1B GetFamInfo(FamNum,@Name):FamStats +0C1B GetFamNum(@Name):FamNum +0D1B AddFamily(FamNum,@Name) +0E1B InstallFont(ID/4,Scale) +0F1B SetPurgeStat(FontID/4,PrgStat) +101B CountFonts(ID/4,Specs):N +111B FindFontStats(ID/4,Specs,Pos,@FStatRec) +121B LoadFont(ID/4,Specs,Pos,@FStatRec) +131B LoadSysFont() +141B AddFontVar(FontH,NewSpecs) +151B FixFontMenu(MenuID,StartID,FamSpecs) +161B ChooseFont(CurrID/4,Famspecs):NewID/4 +171B ItemID2FamNum(ItemID):FamNum +181B FMSetSysFont(FontID/4) +191B FMGetSysFID():SysID/4 +1A1B FMGetCurFID():CurID/4 +1B1B FamNum2ItemID(FamNum):ItemID +1C1B InstallWithStats(ID/4,Scale,@ResultRec) +001C === List Manager === +011C ListBootInit() +021C ListStartUp() +031C ListShutDown() +041C ListVersion():Vers +051C ListReset() +061C ListStatus():ActFlg +091C CreateList(@Wind,@ListRec):CtrlH +0A1C SortList(@CompareProc,@ListRec) +0B1C NextMember(@Member,@ListRec):@NxtMemVal +0C1C DrawMember(@Member,@ListRec) +0D1C SelectMember(@Member,@ListRec) +0E1C GetListDefProc():@Proc +0F1C ResetMember(@ListRec):NxtMemVal/4 +101C NewList(@Member,@ListRec) +111C DrawMember2(itemNum,CtrlH) +121C NextMember2(itemNum,CtrlH):itemNum +131C ResetMember2(CtrlH):itemNum +141C SelectMember2(itemNum,CtrlH) +151C SortList2(@CompareProc,CtrlH) +161C NewList2(@draw,start,ref/4,refKind,size,CtrlH) +171C ListKey(flags,@EventRec,CtrlH) +181C CompareStrings(flags,@String1,@String2):Order +001D === Audio Compression/Expansion === +011D ACEBootInit() +021D ACEStartUp(DirPg) +031D ACEShutDown() +041D ACEVersion():Vers +051D ACEReset() +061D ACEStatus():ActFlg +071D ACEInfo(Code):Value/4 +091D ACECompress(SrcH,SrcOff/4,DestH,DestOff/4,Blks,Method) +0A1D ACEExpand(SrcH,SrcOff/4,DestH,DestOff/4,Blks,Method) +0B1D ACECompBegin() +0C1D ACEExpBegin() +0D1D GetACEExpState(@Buffer) +0E1D SetACEExpState(@Buffer) +001E === Resource Manager === +011E ResourceBootInit() +021E ResourceStartUp(MemID) +031E ResourceShutDown() +041E ResourceVersion():Vers +051E ResourceReset() +061E ResourceStatus():ActFlag +091E CreateResourceFile(aux/4,fType,Access,@n) +0A1E OpenResourceFile(reqAcc,@mapAddr,@n):fileID +0B1E CloseResourceFile(fileID) +0C1E AddResource(H,Attr,rType,rID/4) +0D1E UpdateResourcefile(fileID) +0E1E LoadResource(rType,rID/4):H +0F1E RemoveResource(rType,rID/4) +101E MarkResourceChange(changeFlag,rType,rID/4) +111E SetCurResourceFile(fileID) +121E GetCurResourceFile():fileID +131E SetCurResourceApp(MemID) +141E GetCurResourceApp():MemID +151E HomeResourceFile(rType,rID/4):fileID +161E WriteResource(rType,rID/4) +171E ReleaseResource(PurgeLevel,rType,rID/4) +181E DetachResource(rType,rID/4) +191E UniqueResourceID(IDrange,rType):rID/4 +1A1E SetResourceID(newID/4,rType,oldID/4) +1B1E GetResourceAttr(rType,rID/4):Attr +1C1E SetResourceAttr(rAttr,rType,rID/4) +1D1E GetResourceSize(rType,rID/4):Size/4 +1E1E MatchResourceHandle(@buffer,H) +1F1E GetOpenFileRefNum(fileID):RefNum +201E CountTypes():Num +211E GetIndType(tIndex):rType +221E CountResources(rType):Num/4 +231E GetIndResource(rType,rIndex/4):rID/4 +241E SetResourceLoad(Flag):oldFlag +251E SetResourceFileDepth(Depth):oldDepth +261E GetMapHandle(fileID):MapH +271E LoadAbsResource(@loc,MaxSize/4,rType,rID/4):Size/4 +281E ResourceConverter(@proc,rType,logFlags) +291E LoadResource2(flag,@AttrBuff,rType,rID/4):H +2A1E RMFindNamedResource(rType,@name,@fileID):rID/4 +2B1E RMGetResourceName(rType,rID/4,@nameBuffer) +2C1E RMLoadNamedResource(rType,@name):H +2D1E RMSetResourceName(rType,rID/4,@name) +2E1E OpenResourceFileByID(reqAcc,userID):oldResApp +2F1E CompactResourceFile(flags,fileID) +0020 === MIDI === +0120 MidiBootInit() +0220 MidiStartUp(MemID,DirPg) +0320 MidiShutDown() +0420 MidiVersion():Vers +0520 MidiReset() +0620 MidiStatus():ActFlg +0920 MidiControl(Function,Argument/4) +0A20 MidiDevice(Function,@DriverInfo) +0B20 MidiClock(Function,Argument/4) +0C20 MidiInfo(Function):Info/4 +0D20 MidiReadPacket(@buff,size):Count +0E20 MidiWritePacket(@buff):Count +0021 === Video Overlay === +0121 VDBootInit() +0221 VDStartUp() +0321 VDShutDown() +0421 VDVersion():Vers +0521 VDReset() +0621 VDStatus():ActFlg +0921 VDInStatus(Selector):Status +0A21 VDInSetStd(InStandard) +0B21 VDInGetStd():InStandard +0C21 VDInConvAdj(Selector,AdjFunction) +0D21 VDKeyControl(Selector,KeyerCtrlVal) +0E21 VDKeyStatus(Selector):KeyerStatus +0F21 VDKeySetKCol(Red,Green,Blue) +1021 VDKeyGetKRCol():RedValue +1121 VDKeyGetKGCol():GreenValue +1221 VDKeyGetKBCol():BlueValue +1321 VDKeySetKDiss(KDissolve) +1421 VDKeyGetKDiss():KDissolve +1521 VDKeySetNKDiss(NKDissolve) +1621 VDKeyGetNKDiss():NKDissolve +1721 VDOutSetStd(OutStandard) +1821 VDOutGetStd():OutStandard +1921 VDOutControl(Selector,Value) +1A21 VDOutStatus(Selector):OutStatus +1B21 VDGetFeatures(Feature):Info +1C21 VDInControl(Selector,Value) +1D21 VDGGControl(Selector,Value) +1E21 VDGGStatus(Selector):Value +0022 === Text Edit === +0122 TEBootInit() +0222 TEStartUp(MemID,DirPg) +0322 TEShutDown() +0422 TEVersion():Vers +0522 TEReset() +0622 TEStatus():ActFlg +0922 TENew(@parms):teH +0A22 TEKill(teH) +0B22 TESetText(tDesc,tRef/4,Len/4,stDesc,stRef/4,teH) +0C22 TEGetText(bDesc,bRef/4,bLen/4,stDesc,stRef/4,teH):L/4 +0D22 TEGetTextInfo(@infoRec,parmCount,teH) +0E22 TEIdle(teH) +0F22 TEActivate(teH) +1022 TEDeactivate(teH) +1122 TEClick(@eventRec,teH) +1222 TEUpdate(teH) +1322 TEPaintText(@Port,startLn/4,@R,Flags,teH):NextLn/4 +1422 TEKey(@eventRec,teH) +1522 [not supported] +1622 TECut(teH) +1722 TECopy(teH) +1822 TEPaste(teH) +1922 TEClear(teH) +1A22 TEInsert(tDesc,tRef/4,tLen/4,stDesc,stRef/4,teH) +1B22 TEReplace(tDesc,tRef/4,tLen/4,stDesc,stRef/4,teH) +1C22 TEGetSelection(@selStart,@selEnd,teH) +1D22 TESetSelection(selStart/4,selEnd/4,teH) +1E22 TEGetSelectionStyle(@stRec,stH,teH):comFlag +1F22 TEStyleChange(flags,@stRec,teH) +2022 TEOffsetToPoint(offset/4,@vertPos,@horPos,teH) +2122 TEPointToOffset(vertPos/4,horPos/4,teH):textOffset/4 +2222 TEGetDefProc():@defProc +2322 TEGetRuler(rulerDesc,rulerRef/4,teH) +2422 TESetRuler(rulerDesc,rulerRef/4,teH) +2522 TEScroll(scrDesc,vertAmt/4,horAmt/4,teH):Offset/4 +2622 TEGetInternalProc():@proc +2722 TEGetLastError(clearFlag,teH):lastError +2822 TECompactRecord(teH) +0023 === MIDI Synth === +0123 MSBootInit() +0223 MSStartUp() +0323 MSShutDown() +0423 MSVersion():Vers +0523 MSReset() +0623 MSStatus():ActFlg +0923 SetBasicChannel(Channel) +0A23 SetMIDIMode(Mode) +0B23 PlayNote(Channel,NoteNum,KeyVel) +0C23 StopNote(Channel,NoteNum) +0D23 KillAllNotes() +0E23 SetRecTrack(TrackNum) +0F23 SetPlayTrack(TrackNum,State) +1023 TrackToChannel(TrackNum,ChannelNum) +1123 Locate(TimeStamp/4,@SeqBuff):@SeqItem +1223 SetVelComp(VelocityOffset) +1323 SetMIDIPort(EnabInput,EnabOutput) +1423 SetInstrument(@InstRec,InstNum) +1523 SeqPlayer(@SeqPlayerRec) +1623 SetTempo(Tempo) +1723 SetCallBack(@CallBackRec) +1823 SysExOut(@Msg,Delay,@MonRoutine) +1923 SetBeat(BeatDuration) +1A23 MIDIMessage(Dest,nBytes,Message,Byte1,Byte2) +1B23 LocateEnd(@seqBuffer):@End +1C23 Merge(@Buffer1,@Buffer2) +1D23 DeleteTrack(TrackNum,@Seq) +1E23 SetMetro(Volume,Freq,@Wave) +1F23 GetMSData():Reserved/4,@DirPage +2023 ConvertToTime(TkPerBt,BtPerMsr,BeatNum,MsrNum):Ticks/4 +2123 ConvertToMeasure(TkPerBt,BtPerMsr,Ticks/4):Ticks,Beat,Msr +2223 MSSuspend() +2323 MSResume() +2423 SetTuningTable(@Table) +2523 GetTuningTable(@Buffer) +2623 SetTrackOut(TrackNum,PathVal) +2723 InitMIDIDriver(Slot,Internal,UserID,@Driver) +2823 RemoveMIDIDriver() +0026 === Media Controller === +0126 MCBootInit() +0226 MCStartUp(MemID) +0326 MCShutDown() +0426 MCVersion():Vers +0526 MCReset() +0626 MCStatus():ActFlg +0926 MCGetErrorMsg(mcErrorNo,@PStringBuff) +0A26 MCLoadDriver(mcChannelNo) +0B26 MCUnLoadDriver(mcChannelNo) +0C26 MCTimeToBin(mcTimeValue/4):result/4 +0D26 MCBinToTime(mcBinVal/4):result/4 +0E26 MCGetTrackTitle(mcDiskID/4,mcTrackNo,@PStringBuff) +0F26 MCSetTrackTitle(mcDiskID/4,TrackNum,@title) +1026 MCGetProgram(mcDiskID/4,@resultBuff) +1126 MCSetProgram(mcDiskID/4,@mcProg) +1226 MCGetDiscTitle(mcDiskID/4,@PStringBuff) +1326 MCSetDiscTitle(mcDiskID/4,@title) +1426 MCDStartUp(mcChannelNo,@portName,userID) +1526 MCDShutDown(mcChannelNo) +1626 MCGetFeatures(mcChannelNo,mcFeatSel):result/4 +1726 MCPlay(mcChannelNo) +1826 MCPause(mcChannelNo) +1926 MCSendRawData(mcChannelNo,@mcNative) +1A26 MCGetStatus(mcChannelNo,mcStatusSel):result +1B26 MCControl(mcChannelNo,ctlCommand) +1C26 MCScan(mcChannelNo,mcDirection) +1D26 MCGetSpeeds(mcChannelNo,@PStringBuff) +1E26 MCSpeed(mcChannelNo,mcFPS) +1F26 MCStopAt(mcChannelNo,mcUnitType,mcStopLoc/4) +2026 MCJog(mcChannelNo,mcUnitType,mcNJog/4,mcJogRepeat) +2126 MCSearchTo(mcChannelNo,mcUnitType,searchLoc/4) +2226 MCSearchDone(mcChannelNo):result +2326 MCSearchWait(mcChannelNo) +2426 MCGetPosition(mcChannelNo,mcUnitType):result/4 +2526 MCSetAudio(mcChannelNo,mcAudioCtl) +2626 MCGetTimes(mcChannelNo,mctimesSel):result/4 +2726 MCGetDiscTOC(mcChannelNo,mcTrackNo):result/4 +2826 MCGetDiscID(mcChannelNo):result/4 +2926 MCGetNoTracks(mcChannelNo):result +2A26 MCRecord(mcChannelNo) +2B26 MCStop(mcChannelNo) +2C26 MCWaitRawData(mcChannelNo,@result,tickWait,termMask) +2D26 MCGetName(mcChannelNo,@PStringBuff) +2E26 MCSetVolume(mcChannelNo,mcLeftVol,mcRightVol) +0032 === Male Voice === +0132 MaleBootInit() +0232 MaleStartUp() +0332 MaleShutDown() +0432 MaleVersion():Vers +0532 MaleReset() +0632 MaleStatus():ActFlg +0932 MaleSpeak(Vol,Speed,Pitch,@PhonStr) +0033 === Female Voice === +0133 FemaleBootInit() +0233 FemaleStartUp() +0333 FemaleShutDown() +0433 FemaleVersion():Vers +0533 FemaleReset() +0633 FemaleStatus():ActFlg +0933 FemaleSpeak(Vol,Speed,Pitch,@PhonStr) +0034 === TML Speech Toolkit parser === +0134 SpeechBootInit() +0234 SpeechStartUp(MemID) +0334 SpeechShutDown() +0434 SpeechVersion():Vers +0534 SpeechReset() +0634 SpeechStatus():ActFlg +0934 Parse(@EnglStr,@PhonStr,Start) +0A34 DictInsert(@EnglStr,@PhonStr) +0B34 DictDelete(@EnglStr) +0C34 DictDump(@EnglStr,@PhonStr):@Str; +0D34 SetSayGlobals(Gend,Tone,Pitch,Spd,Vol) +0E34 DictInit(Flag) +0F34 Say(@EnglishStr) +1034 Activate... +0042 === Finder (error codes only) === +00FF === GSBug === +04FF DebugVersion():Vers +06FF DebugStatus():ActFlg +09FF DebugStr(@PStr) +0AFF SetMileStone(@PStr) +0BFF DebugSetHook(@hook) +0CFF DebugGetInfo(selector):Info/4 +0DFF DebugControl(data/4,extraData/4,operation,type) +0EFF DebugQuery(data/4,operation,type):Info/4 +* User tools +0000 === User Tools === +0001 === fakeModalDialog (DTS) === +0101 fmdBootInit() +0201 fmdStartUp() +0301 fmdShutDown() +0401 fmdVersion():Vers +0501 fmdReset() +0601 fmdStatus():ActFlg +0901 fakeModalDialog(@Event,@Update,@EvHook,@Beep,Flags):Result/4 +0A01 fmdSetMenuProc(@MenuProc) +0B01 fmdGetMenuProc():@MenuProc +0C01 fmdStdDrawProc() +0D01 fmdEditMenu() +0E01 fmdFindCursorCtl(@CtrlH,x,y,@Wind):PartCode +0F01 fmdLESetText(@Wind,leID/4,@PString) +1001 fmdLEGetText(@Wind,leID/4,@PString) +1101 fmdWhichRadio(@Wind,RadioID/4):WhichRadio +1201 fmdIBeamCursor() +1301 fmdInitIBeam() +1401 fmdSetIBeam(@Cursor) +1501 fmdGetIBeamAdr():@Cursor +1601 fmdGetCtlPart():Part +1701 fmdGetError():Error +0002 === PixelMap Tools (DTS) === +0102 pmapBootInit() +0202 pmapStartUp() +0302 pmapShutDown() +0402 pmapVersion():Vers +0502 pmapReset() +0602 pmapStatus():ActFlg +0902 pixelMap2Rgn(@srcLoc,bitsPerPix,colorMask):RgnH +0A02 newPort(@pmapPortInfo):@port +0B02 killPort(@pmapPortInfo) +* E1xxxx vectors +0000 System Tool dispatcher +0004 System Tool dispatcher, glue entry +0008 User Tool dispatcher +000C User Tool dispatcher, glue entry +0010 Interrupt mgr +0014 COP mgr +0018 Abort mgr +001C System Death mgr +0020 AppleTalk interrupt +0024 Serial interrupt +0028 Scanline interrupt +002C Sound interrupt +0030 VertBlank interrupt +0034 Mouse interrupt +0038 1/4 sec interrupt +003C Keyboard interrupt +0040 ADB Response byte int +0044 ADB SRQ int +0048 Desk Acc mgr +004C FlushBuffer handler +0050 KbdMicro interrupt +0054 1 sec interrupt +0058 External VGC int +005C other interrupt +0060 Cursor update +0064 IncBusy +0068 DecBusy +006C Bell vector +0070 Break vector +0074 Trace vector +0078 Step vector +007C [install ROMdisk] +0080 ToWriteBram +0084 ToReadBram +0088 ToWriteTime +008C ToReadTime +0090 ToCtrlPanel +0094 ToBramSetup +0098 ToPrintMsg8 +009C ToPrintMsg16 +00A0 Native Ctrl-Y +00A4 ToAltDispCDA +00A8 ProDOS 16 [inline parms] +00AC OS vector +00B0 GS/OS(@parms,call) [stack parms] +00B4 OS_P8_Switch +00B8 OS_Public_Flags +00BC OS_KIND (byte: 0=P8,1=P16) +00BD OS_BOOT (byte) +00BE OS_BUSY (bit 15=busy) +00C0 MsgPtr +0180 ToBusyStrip +0184 ToStrip +01B2 MidiInputPoll +0200 Memory Mover +0204 Set System Speed +0208 Slot Arbiter +0220 HyperCard IIgs callback +0224 WordForRTL +1004 ATLK: BASIC +1008 ATLK: Pascal +100C ATLK: RamGoComp +1010 ATLK: SoftReset +1014 ATLK: RamDispatch +1018 ATLK: RamForbid +101C ATLK: RamPermit +1020 ATLK: ProEntry +1022 ATLK: ProDOS +1026 ATLK: SerStatus +102A ATLK: SerWrite +102E ATLK: SerRead +103A init file hook +103E ATLK: PFI Vector +D600 ATLK: CmdTable +DA00 ATLK: TickCount +* E0xxxx vectors +1E04 QD:StdText +1E08 QD:StdLine +1E0C QD:StdRect +1E10 QD:StdRRect +1E14 QD:StdOval +1E18 QD:StdArc +1E1C QD:StdPoly +1E20 QD:StdRgn +1E24 QD:StdPixels +1E28 QD:StdComment +1E2C QD:StdTxMeas +1E30 QD:StdTxBnds +1E34 QD:StdGetPic +1E38 QD:StdPutPic +1E98 QD:ShieldCursor +1E9C QD:UnShieldCursor +* softswitches and F8 ROM routines +B000 Dvx: xgetparm_ch +B003 Dvx: xgetparm_n +B006 Dvx: xmess +B009 Dvx: xprint_ftype +B00C Dvx: xprint_access +B00F Dvx: xprdec_2 +B012 Dvx: xprdec_3 +B015 Dvx: xprdec_pad +B018 Dvx: xprint_path +B01B Dvx: xbuild_local +B01E Dvx: xprint_sd +B021 Dvx: xprint_drvr +B024 Dvx: xredirect +B027 Dvx: xpercent +B02A Dvx: xyesno +B02D Dvx: xgetln +B030 Dvx: xbell +B033 Dvx: xdowncase +B036 Dvx: xplural +B039 Dvx: xcheck_wait +B03C Dvx: xpr_date_ay +B03F Dvx: xpr_time_ay +B042 Dvx: xProDOS_err +B045 Dvx: xProDOS_er +B048 Dvx: xerr +B04B Dvx: xprdec_pady +B04E Dvx: xdir_setup +B051 Dvx: xdir_finish +B054 Dvx: xread1dir +B057 Dvx: xpmgr +B05A Dvx: xmmgr +B05D Dvx: xpoll_io +B060 Dvx: xprint_ver +B063 Dvx: xpush_level +B066 Dvx: xfman_open +B069 Dvx: xfman_read +B06C Dvx: xrdkey (v1.1+) +B06F Dvx: xdirty (v1.1+) +B072 Dvx: xgetnump (v1.1+) +B075 Dvx: xyesno2 (v1.2+) +B078 Dvx: xdir_setup2 (v1.23+) +B07B Dvx: xshell_info (v1.25+) +C000 r:KBD w:CLR80COL +C001 w:SET80COL +C002 w:RDMAINRAM +C003 w:RDCARDRAM +C004 w:WRMAINRAM +C005 w:WRCARDRAM +C006 w:SETSLOTCXROM +C007 w:SETINTCXROM +C008 w:SETSTDZP +C009 w:SETALTZP +C00A w:SETINTC3ROM +C00B w:SETSLOTC3ROM +C00C w:CLR80VID +C00D w:SET80VID +C00E w:CLRALTCHAR +C00F w:SETALTCHAR +C010 r:KBDSTRB +C011 r:RDLCBNK2 +C012 r:RDLCRAM +C013 r:RDRAMRD +C014 r:RDRAMWRT +C015 r:RDCXROM +C016 r:RDALTZP +C017 r:RDC3ROM +C018 r:RD80COL +C019 r:RDVBLBAR +C01A r:RDTEXT +C01B r:RDMIX +C01C r:RDPAGE2 +C01D r:RDHIRES +C01E r:ALTCHARSET +C01F r:RD80VID +C020 reserved [cassette] +C021 rw:MONOCOLOR +C022 rw:TBCOLOR +C023 rw:VGCINT +C024 r:MOUSEDATA +C025 r:KEYMODREG +C026 rw:DATAREG [key micro] +C027 rw:KMSTATUS +C028 rw:ROMBANK [IIc Plus] +C029 rw:NEWVIDEO +C02B rw:LANGSEL +C02C r:CHARROM +C02D rw:SLTROMSEL +C02E r:VERTCNT +C02F r:HORIZCNT +C030 rw:SPKR +C031 rw:DISKREG +C032 w:SCANINT +C033 rw:CLOCKDATA +C034 rw:CLOCKCTL [+border color] +C035 rw:SHADOW +C036 rw:CYAREG +C037 rw:DMAREG +C038 rw:SCCBREG +C039 rw:SCCAREG +C03A rw:SCCBDATA +C03B rw:SCCADATA +C03C rw:SOUNDCTL +C03D rw:SOUNDDATA +C03E rw:SOUNDADRL +C03F rw:SOUNDADRH +C040 reserved [C040 Strobe] +C041 *rw:INTEN +C044 *r:MMDELTAX +C045 *r:MMDELTAY +C046 w:DIAGTYPE r:INTFLAG +C047 w:CLRVBLINT +C048 w:CLRXYINT +C050 rw:TXTCLR +C051 rw:TXTSET +C052 rw:MIXCLR +C053 rw:MIXSET +C054 rw:TXTPAGE1 +C055 rw:TXTPAGE2 +C056 rw:LORES +C057 rw:HIRES +C058 rw:SETAN0 +C059 rw:CLRAN0 +C05A rw:SETAN1 +C05B rw:CLRAN1 +C05C rw:SETAN2 +C05D rw:CLRAN2 +C05E rw:SETAN3 +C05F rw:CLRAN3 +C060 r:BUTN3 +C061 r:BUTN0 +C062 r:BUTN1 +C063 r:BUTN2 +C064 r:PADDL0 +C065 r:PADDL1 +C066 r:PADDL2 +C067 r:PADDL3 +C068 rw:STATEREG +C06D *TESTREG +C06E *CLTRM +C06F *ENTM +C070 rw:PTRIG +C081 rw:ROMIN +C083 rw:LCBANK2 +C08B rw:LCBANK1 +C0E0 IWM:PH0 off +C0E1 IWM:PH0 on +C0E2 IWM:PH1 off +C0E3 IWM:PH1 on +C0E4 IWM:PH2 off +C0E5 IWM:PH2 on +C0E6 IWM:PH3 off +C0E7 IWM:PH3 on +C0E8 IWM:motor off +C0E9 IWM:motor on +C0EA IWM:drive 1 +C0EB IWM:drive 2 +C0EC IWM:Q6 OFF (Read) +C0ED IWM:Q6 ON (WP-sense) +C0EE IWM:Q7 OFF (WP-sense/Read) +C0EF IWM:Q7 ON (Write) +C311 ROM:AUXMOVE +C314 ROM:XFER +CFFF rw:CLRROM +F800 F8ROM:PLOT +F80E F8ROM:PLOT1 +F819 F8ROM:HLINE +F828 F8ROM:VLINE +F832 F8ROM:CLRSCR +F836 F8ROM:CLRTOP +F847 F8ROM:GBASCALC +F85F F8ROM:NXTCOL +F864 F8ROM:SETCOL +F871 F8ROM:SCRN +F88C F8ROM:INSDS1.2 +F88E F8ROM:INSDS2 +F890 F8ROM:GET816LEN +F8D0 F8ROM:INSTDSP +F940 F8ROM:PRNTYX +F941 F8ROM:PRNTAX +F944 F8ROM:PRNTX +F948 F8ROM:PRBLNK +F94A F8ROM:PRBL2 +F953 F8ROM:PCADJ +F962 F8ROM:TEXT2COPY +FA40 F8ROM:OLDIRQ +FA4C F8ROM:BREAK +FA59 F8ROM:OLDBRK +FA62 F8ROM:RESET +FAA6 F8ROM:PWRUP +FABA F8ROM:SLOOP +FAD7 F8ROM:REGDSP +FB19 F8ROM:RTBL +FB1E F8ROM:PREAD +FB21 F8ROM:PREAD4 +FB2F F8ROM:INIT +FB39 F8ROM:SETTXT +FB40 F8ROM:SETGR +FB4B F8ROM:SETWND +FB51 F8ROM:SETWND2 +FB5B F8ROM:TABV +FB60 F8ROM:APPLEII +FB6F F8ROM:SETPWRC +FB78 F8ROM:VIDWAIT +FB88 F8ROM:KBDWAIT +FBB3 F8ROM:VERSION +FBBF F8ROM:ZIDBYTE2 +FBC0 F8ROM:ZIDBYTE +FBC1 F8ROM:BASCALC +FBDD F8ROM:BELL1 +FBE2 F8ROM:BELL1.2 +FBE4 F8ROM:BELL2 +FBF0 F8ROM:STORADV +FBF4 F8ROM:ADVANCE +FBFD F8ROM:VIDOUT +FC10 F8ROM:BS +FC1A F8ROM:UP +FC22 F8ROM:VTAB +FC24 F8ROM:VTABZ +FC42 F8ROM:CLREOP +FC58 F8ROM:HOME +FC62 F8ROM:CR +FC66 F8ROM:LF +FC70 F8ROM:SCROLL +FC9C F8ROM:CLREOL +FC9E F8ROM:CLREOLZ +FCA8 F8ROM:WAIT +FCB4 F8ROM:NXTA4 +FCBA F8ROM:NXTA1 +FCC9 F8ROM:HEADR +FD0C F8ROM:RDKEY +FD10 F8ROM:FD10 +FD18 F8ROM:RDKEY1 +FD1B F8ROM:KEYIN +FD35 F8ROM:RDCHAR +FD67 F8ROM:GETLNZ +FD6A F8ROM:GETLN +FD6C F8ROM:GETLN0 +FD6F F8ROM:GETLN1 +FD8B F8ROM:CROUT1 +FD8E F8ROM:CROUT +FD92 F8ROM:PRA1 +FDDA F8ROM:PRBYTE +FDE3 F8ROM:PRHEX +FDED F8ROM:COUT +FDF0 F8ROM:COUT1 +FDF6 F8ROM:COUTZ +FE1F F8ROM:IDROUTINE +FE2C F8ROM:MOVE +FE5E F8ROM:LIST (not on GS) +FE80 F8ROM:SETINV +FE84 F8ROM:SETNORM +FE89 F8ROM:SETKBD +FE8B F8ROM:INPORT +FE93 F8ROM:SETVID +FE95 F8ROM:OUTPORT +FEB6 F8ROM:GO +FECD F8ROM:WRITE +FEFD F8ROM:READ +FF2D F8ROM:PRERR +FF3A F8ROM:BELL +FF3F F8ROM:RESTORE +FF4A F8ROM:SAVE +FF58 F8ROM:IORTS +FF59 F8ROM:OLDRST +FF65 F8ROM:MON +FF69 F8ROM:MONZ +FF6C F8ROM:MONZ2 +FF70 F8ROM:MONZ4 +FF8A F8ROM:DIG +FFA7 F8ROM:GETNUM +FFAD F8ROM:NXTCHR +FFBE F8ROM:TOSUB +FFC7 F8ROM:ZMODE +* 01xxxx vectors +FC00 SysSrv: DEV_DISPATCHER +FC04 SysSrv: CACHE_FIND_BLK +FC08 SysSrv: CACHE_ADD_BLK +FC14 SysSrv: CACHE_DEL_BLK +FC1C SysSrv: ALLOC_SEG +FC20 SysSrv: RELEASE_SEG +FC34 SysSrv: SWAP_OUT +FC38 SysSrv: DEREF +FC50 SysSrv: SET_SYS_SPEED +FC68 SysSrv: LOCK_MEM +FC6C SysSrv: UNLOCK_MEM +FC70 SysSrv: MOVE_INFO +FC88 SysSrv: SIGNAL +FC90 SysSrv: SET_DISK_SW +FCA4 SysSrv: SUP_DRVR_DISP +FCA8 SysSrv: INSTALL_DRIVER +FCBC SysSrv: DYN_SLOT_ARBITER +FCD8 SysSrv: UNBIND_INT_VEC +* Nifty List service calls +0000 NLServ: nlRecover +0001 NLServ: nlEnter +0002 NLServ: nlRemoveNL +0003 NLServ: nlGetInfo +0004 NLServ: nlInstallHook +0005 NLServ: nlRemoveHook +0006 NLServ: nlGetDirectory():@dir +0007 NLServ: nlNewSession(@callback):sessRef +0008 NLServ: nlKillSession(sessRef) +0009 NLServ: nlSetSession(sessRef):oldRef +000A NLServ: nlWelcome +0010 NLServ: nlGetFirstHandle +0011 NLServ: nlGetHandleInfo +0012 NLServ: nlLookup +0013 NLServ: nlIndLookup +0014 NLServ: nlGetProcName(@proc):@pString +0020 NLServ: nlScanHandles +0021 NLServ: nlDisasm1 +0022 NLServ: nlExecCmdLine +0023 NLServ: nlGetRange +0024 NLServ: nlGetAGlobal(ref):value +0025 NLServ: nlSetAGlobal(@(ref,value)) +0026 NLServ: nlAbortToCmd +0030 NLServ: nlWriteChar +0031 NLServ: nlShowChar +0032 NLServ: nlWriteStr +0033 NLServ: nlShowStr +0034 NLServ: nlWriteCStr +0035 NLServ: nlShowCStr +0036 NLServ: nlWriteText +0037 NLServ: nlShowText +0038 NLServ: nlWriteByte +0039 NLServ: nlWriteWord +003A NLServ: nlWritePtr +003B NLServ: nlWriteLong +003C NLServ: nlGetLn +003D NLServ: nlGetChar +003E NLServ: nlCheckKey +003F NLServ: nlCrout +0040 NLServ: nlSpout +0041 NLServ: nlPause +0042 NLServ: nlHandleInfo +0043 NLServ: nlWriteNoVoice(@cStr) +0044 NLServ: nlShowWString(@wStr) +0050 NLServ: nlChrGet +0051 NLServ: nlChrGot +0052 NLServ: nlEatBlanks() +0054 NLServ: nlEvalExpr(@exprBuff):exprLen +0060 NLServ: nlGetByte(@addr):byte +0061 NLServ: nlGetWord(@addr):word +0062 NLServ: nlGetLong(@addr):long +* resource type names +8001 rIcon +8002 rPicture +8003 rControlList +8004 rControlTemplate +8005 rC1InputString +8006 rPString +8007 rStringList +8008 rMenuBar +8009 rMenu +800A rMenuItem +800B rTextForLETextBox2 +800C rCtlDefProc +800D rCtlColorTbl +800E rWindParam1 +800F rWindParam2 +8010 rWindColor +8011 rTextBlock +8012 rStyleBlock +8013 rToolStartup +8014 rResName +8015 rAlertString +8016 rText +8017 rCodeResource +8018 rCDEVCode +8019 rCDEVFlags +801A rTwoRects +801B rFileType +801C rListRef +801D rCString +801E rXCMD +801F rXFCN +8020 rErrorString +8021 rKTransTable +8022 rWString +8023 rC1OutputString +8024 rSoundSample +8025 rTERuler +8026 rFSequence +8027 rCursor +8028 rItemStruct +8029 rVersion +802A rComment +802B rBundle +802C rFinderPath +802D rPaletteWindow +802E rTaggedStrings +802F rPatternList +C001 rRectList +C002 rPrintRecord +C003 rFont +* Error codes +0001 OS:bad call number / dispatcher:toolset not found +0002 function not found +0004 OS:bad parameter count +0007 GS/OS is busy +0010 GS/OS:device not found +0011 GS/OS:bad device number +0020 GS/OS:invalid driver request +0021 GS/OS:invalid driver control or status code +0022 GS/OS:bad call parameter +0023 GS/OS:character device not open +0024 GS/OS:character device already open +0025 OS:interrupt table full +0026 GS/OS:resources not available +0027 OS:I/O error +0028 OS:no device connected +0029 GS/OS:driver is busy +002B OS:disk write protected +002C GS/OS:invalid byte count +002D GS/OS:invalid block address +002E OS:disk switched +002F OS:no disk +0040 OS:bad pathname +0042 OS:max number of files already open +0043 OS:bad file reference number +0044 OS:directory not found +0045 OS:volume not found +0046 OS:file not found +0047 OS:duplicate filename +0048 OS:volume full +0049 OS:volume directory full +004A OS:incompatible file format +004B OS:unsupported storage type +004C OS:end of file encountered +004D OS:position out of range +004E OS:access not allowed +004F GS/OS:buffer too small +0050 OS:file is open +0051 OS:directory damaged +0052 OS:unknown volume type +0053 OS:parameter out of range +0054 GS/OS:out of memory +0055 P8:volume control block table full +0056 P8:bad buffer address +0057 OS:duplicate volume name +0058 GS/OS:not a block device +0059 GS/OS:file level out of range +005A OS:bad bitmap address (block # too large) +005B GS/OS:invalid pathnames for ChangePath +005C GS/OS:not an executable file +005D GS/OS:Operating System not supported +005F GS/OS:too many applications on stack +0060 GS/OS:data unavailable +0061 GS/OS:end of directory +0062 GS/OS:invalid FST call class +0063 GS/OS:file doesn't have a resource fork +0064 GS/OS:invalidFSTID +0065 GS/OS:invalid FST operation +0066 GS/OS:fstCaution +0067 GS/OS:devNameErr +0068 GS/OS:devListFull +0069 GS/OS:supListFull +006A GS/OS:fstError (generic) +0070 GS/OS:resExistsErr +0071 GS/OS:resAddErr +0088 network error +0110 toolVersionErr +0111 messNotFoundErr +0112 messageOvfl +0113 srqNameTooLong +0120 reqNotAccepted +0121 duplicateName +0122 invalidSendRequest +0201 memErr (couldn't allocate memory) +0202 emptyErr +0203 notEmptyErr +0204 lockErr +0205 purgeErr +0206 handleErr +0207 idErr +0208 attrErr +0301 badInputErr +0302 noDevParamErr +0303 taskInstlErr +0304 noSigTaskErr +0305 queueDmgdErr +0306 taskNtFdErr +0307 firmTaskErr +0308 hbQueueBadErr +0309 unCnctdDevErr +030B idTagNtAvlErr +034F mtBuffTooSmall +0381 invalidTag +0382 alreadyInQueue +0390 badTimeVerb +0391 badTimeData +0401 alreadyInitialized +0402 cannotReset +0403 notInitialized +0410 screenReserved +0411 badRect +0420 notEqualChunkiness +0430 rgnAlreadyOpen +0431 rgnNotOpen +0432 rgnScanOverflow +0433 rgnFull +0440 polyAlreadyOpen +0441 polyNotOpen +0442 polyTooBig +0450 badTableNum +0451 badColorNum +0452 badScanLine +0510 daNotFound +0511 notSysWindow +0520 deskBadSelector +0601 emDupStrtUpErr +0602 emResetErr +0603 emNotActErr +0604 emBadEvtCodeErr +0605 emBadBttnNoErr +0606 emQSiz2LrgErr +0607 emNoMemQueueErr +0681 emBadEvtQErr +0682 emBadQHndlErr +0810 noDOCFndErr +0811 docAddrRngErr +0812 noSAppInitErr +0813 invalGenNumErr +0814 synthModeErr +0815 genBusyErr +0817 mstrIRQNotAssgnErr +0818 sndAlreadyStrtErr +08FF uncleamedSntIntErr +0910 cmndIncomplete +0911 cantSync +0982 adbBusy +0983 devNotAtAddr +0984 srqListFull +0B01 imBadInptParam +0B02 imIllegalChar +0B03 imOverflow +0B04 imStrOverflow +0C01 badDevType +0C02 badDevNum +0C03 badMode +0C04 unDefHW +0C05 lostDev +0C06 lostFile +0C07 badTitle +0C08 noRoom +0C09 noDevice +0C0B dupFile +0C0C notClosed +0C0D notOpen +0C0E badFormat +0C0F ringBuffOFlo +0C10 writeProtected +0C40 devErr +0E01 paramLenErr +0E02 allocateErr +0E03 taskMaskErr +0E04 compileTooLarge +0E05 cantUpdateErr +0F01 menuStarted +0F02 menuItemNotFound +0F03 menuNoStruct +0F04 dupMenuID +1001 wmNotStartedUp +1002 cmNotInitialized +1003 noCtlInList +1004 noCtlError +1005 notExtendedCtlError +1006 noCtlTargetError +1007 notExtendedCtlError +1008 canNotBeTargetError +1009 noSuchIDError +100A tooFewParmsError +100B noCtlToBeTargetError +100C noFrontWindowError +1101 idNotFound / segment not found? +1102 OMF version error +1103 idPathnameErr +1104 idNotLoadFile +1105 idBusyErr +1107 idFilVersErr +1108 idUserIDErr +1109 idSequenceErr +110A idBadRecordErr +110B idForeignSegErr +1210 picEmpty +1211 picAlreadyOpen / badRectSize? +1212 pictureError / destModeError? +121F bad picture opcode +1221 badRect +1222 badMode +1230 badGetSysIconInput +1301 missingDriver +1302 portNotOn +1303 noPrintRecord +1304 badLaserPrep +1305 badLPFile +1306 papConnNotOpen +1307 papReadWriteErr +1308 ptrConnFailed +1309 badLoadParam +130A callNotSupported +1321 startUpAlreadyMade +1401 leDupStartUpErr +1402 leResetErr +1403 leNotActiveErr +1404 leScrapErr +150A badItemType +150B newItemFailed +150C itemNotFound +150D notModalDialog +1610 badScrapType +1701 badPromptDesc +1702 badOrigNameDesc +1704 badReplyNameDesc +1705 badReplyPathDesc +1706 badCall +17FF sfNotStarted +1901 nsAlreadyInit +1902 nsSndNotInit +1921 nsNotAvail +1922 nsBadGenNum +1923 nsNotInit +1924 nsGenAlreadyOn +1925 soundWrongVer +1A00 noRoomMidiErr +1A01 noCommandErr +1A02 noRoomErr +1A03 startedErr +1A04 noNoteErr +1A05 noStartErr +1A06 instBndsErr +1A07 nsWrongVer +1B01 fmDupStartUpErr +1B02 fmResetErr +1B03 fmNotActiveErr +1B04 fmFamNotFndErr +1B05 fmFontNtFndErr +1B06 fmFontMemErr +1B07 fmSysFontErr +1B08 fmBadFamNumErr +1B09 fmBadSizeErr +1B0A fmBadNameErr +1B0B fmMenuErr +1B0C fmScaleSizeErr +1B0D fmBadParmErr +1C02 listRejectEvent +1D01 aceIsActive +1D02 aceBadDP +1D03 aceNotActive +1D04 aceNoSuchParam +1D05 aceBadMethod +1D06 aceBadSrc +1D07 aceBadDest +1D08 aceDataOverlap +1E01 resForkUsed +1E02 resBadFormat +1E03 resNoConverter +1E04 resNoCurFile +1E05 resDupID +1E06 resNotFound +1E07 resFileNotFound +1E08 resBadAppID +1E09 resNoUniqueID +1E0A resIndexRange +1E0B resSysIsOpen +1E0C resHasChanged +1E0D resDiffConverter +1E0E resDiskFull +1E0F resInvalidShutDown +1E10 resNameNotFound +1E11 resBadNameVers +1E12 resDupStartUp +1E13 resInvalidTypeOrID +2000 miStartUpErr +2001 miPacketErr +2002 miArrayErr +2003 miFullbufErr +2004 miToolsErr +2005 miOutOffErr +2007 miNoBufErr +2008 miDriverErr +2009 miBadFreqErr +200A miClockErr +200B miConflictErr +200C miNoDevErr +2080 miDevNotAvail +2081 miDevSlotBusy +2082 miDevBusy +2083 miDevOverrun +2084 miDevNoConnect +2085 miDevReadErr +2086 miDevVersion +2087 miDevIntHndlr +2110 vdNoVideoDevice +2111 vdAlreadyStarted +2112 vdInvalidSelector +2113 vdInvalidParam +21FF vdUnImplemented +2201 teAlreadyStarted +2202 teNotStarted +2203 teInvalidHandle +2204 teInvalidDescriptor +2205 teInvalidFlag +2206 teInvalidPCount +2208 teBufferOverflow +2209 teInvalidLine +220B teInvalidParameter +220C teInvalidTextBox2 +220D teNeedsTools +2301 msAlreadyStarted +2302 msNotStarted +2303 msNoDPMem +2304 msNoMemBlock +2305 msNoMiscTool +2306 msNoSoundTool +2307 msGenInUse +2308 msBadPortNum +2309 msPortBusy +230A msParamRangeErr +230B msMsgQueueFull +230C msRecBufFull +230D msOutputDisabled +230E msMessageError +230F msOutputBufFull +2310 msDriverNotStarted +2311 msDriverAlreadySet +2380 msDevNotAvail +2381 msDevSlotBusy +2382 msDevBusy +2383 msDevOverrun +2384 msDevNoConnect +2385 msDevReadErr +2386 msDevVersion +2387 msDevIntHndlr +2601 mcUnimp +2602 mcBadSpeed +2603 mcBadUnitType +2604 mcTimeOutErr +2605 mcNotLoaded +2606 mcBadAudio +2607 mcDevRtnError +2608 mcUnrecStatus +2609 mcBadSelector +260A mcFunnyData +260B mcInvalidPort +260C mcOnlyOnce +260D mcNoResMgr +260E mcItemNotThere +260F mcWasShutDown +2610 mcWasStarted +2611 mcBadChannel +2612 mcInvalidParam +2613 mcCallNotSupported +4201 fErrBadInput +4202 fErrFailed +4203 fErrCancel +4204 fErrDimmed +4205 fErrBusy +4206 fErrNotPrudent +4207 fErrBadBundle +42FF fErrNotImp +FF01 debugUnImpErr +FF02 debugBadSelErr +FF03 debugDupBreakErr +FF04 debugBreakNotSetErr +FF05 debugTableFullErr +FF06 debugTableEmptyErr +FF07 debugBreaksInErr +* HyperCardIIgs callbacks +0001 HC:SendCardMessage(@Str) +0002 HC:EvalExpr(@Str):H +0003 HC:StringLength(@Str):Length/4 +0004 HC:StringMatch(@Pattern,@Target):@Ptr +0005 HC:SendHCMessage(@Msg) +0006 HC:ZeroBytes(@Ptr,Count/4) +0007 HC:PasToZero(@Str):StringH +0008 HC:ZeroToPas(@ZeroStr,@Str) +0009 HC:StrToLong(@Str31):Long/4 +000A HC:StrToNum(@Str31):Long/4 +000B HC:StrToBool(@Str31):Boolean +000C HC:StrToExt(@Str31):@Extended +000D HC:LongToStr(posNum/4):@Str31 +000E HC:NumToStr(Num/4):@Str31 +000F HC:NumToHex(Num/4,nDigits):@Str31 +0010 HC:BoolToStr(Boolean):@Str31 +0011 HC:ExtToStr(@Extended):@Str31 +0012 HC:GetGlobal(@GlobalName):ValueH +0013 HC:SetGlobal(@GlobalName,GlobValueH) +0014 HC:GetFieldByName(cardFieldFlag,@FieldName):H +0015 HC:GetFieldByNum(cardFieldFlag,fieldNum):H +0016 HC:GetFieldByID(cardFieldFlag,fieldID):H +0017 HC:SetFieldByName(cardFieldFlag,@fieldName,ValueH) +0018 HC:SetFieldByNum(cardFieldFlag,fieldNum,ValueH) +0019 HC:SetFieldByID(cardFieldFlag,fieldID,ValueH) +001A HC:StringEqual(@Str1,@Str2):Boolean +001B HC:ReturnToPas(@ZeroStr,@Str) +001C HC:ScanToReturn(@PtrToPtr) +001D HC:ScanToZero(@PtrToPtr) +001E HC:GSToPString(GStringH):@Str +001F HC:PToGSString(@Str):GStringH +0020 HC:CopyGSString(GStringH):GString2H +0021 HC:GSConcat(GString1H,GString2H):NewGStringH +0022 HC:GSStringEqual(GString1H,GString2H):Boolean +0023 HC:GSToZero(GStringH):ZeroH +0024 HC:ZeroToGS(ZeroH):GStringH +0025 HC:LoadNamedResource(whichType,@Name):H +0026 HC:FindNamedResource(Type,@Name,@File,@ID/4):Bool +0027 HC:SetResourceName(Type,ID/4,@Name) +0028 HC:GetResourceName(Type,ID/4):@Str +0029 HC:BeginXSound() +002A HC:EndXSound() +002B HC:GetMaskAndData(@MaskLocInfo,@DataLocInfo) +002C HC:ChangedMaskAndData(whatChanged) +002D HC:PointToStr(Point/4,@String) +002E HC:RectToStr(@Rect,@String) +002F HC:StrToPoint(@String,@Point) +0030 HC:StrToRect(@String,@Rect) +0031 HC:NewXWindow(@BoundsR,@Title,visFlg,windStyle):WindowPtr +0032 HC:SetXWIdleTime(@Window,Interval/4) +0033 HC:CloseXWindow(@Window) +0034 HC:HideHCPalettes() +0035 HC:ShowHCPalettes() +0036 HC:SetXWindowValue(@Window,Value/4) +0037 HC:GetXWindowValue(@Window):Value/4 +0038 HC:XWAllowReEntrancy(@Window,SysEvts,HCEvts) +* Request Codes +0001 systemSaysBeep +0002 systemSaysUnknownDisk +0003 srqGoAway +0004 srqGetrSoundSample +0005 srqSynchronize +0006 srqPlayrSoundSample +0008 systemSaysNewDeskMsg +000C systemSaysDoClipboard +000D systemSaysForceUndim +000E systemSaysEjectingDev +0010 srqOpenOrPrint +0011 srqQuit +0100 finderSaysHello +0101 finderSaysGoodbye +0102 finderSaysSelectionChanged +0103 finderSaysMItemSelected +0104 finderSaysBeforeOpen +0105 finderSaysOpenFailed +0106 finderSaysBeforeCopy +0107 finderSaysIdle +0108 finderSaysExtrasChosen +0109 finderSaysBeforeRename +010A finderSaysKeyHit +0502 systemSaysDeskStartUp +0503 systemSaysDeskShutDown +051E systemSaysFixedAppleMenu +0F01 systemSaysMenuKey +1201 systemSaysGetSysIcon +8000 tellFinderGetDebugInfo (or srqMountServer to EasyMount) +8001 askFinderAreYouThere +8002 tellFinderOpenWindow +8003 tellFinderCloseWindow +8004 tellFinderGetSelectedIcons +8005 tellFinderSetSelectedIcons +8006 tellFinderLaunchThis +8007 tellFinderShutDown +8008 tellFinderMItemSelected +800A tellFinderMatchFileToIcon +800B tellFinderAddBundle +800C tellFinderAboutChange +800D tellFinderCheckDatabase +800E tellFinderColorSelection +800F tellFinderAddToExtras +8011 askFinderIdleHowLong +8012 tellFinderGetWindowIcons +8013 tellFinderGetWindowInfo +8014 tellFinderRemoveFromExtras +8015 tellFinderSpecialPreferences +8200 srqConvertRelPitch +9000 cpOpenCDev +9001 cpOpenControlPanels +* diff --git a/Personality/Personality_AppleIIGS.php b/Personality/Personality_AppleIIGS.php new file mode 100644 index 0000000..4452507 --- /dev/null +++ b/Personality/Personality_AppleIIGS.php @@ -0,0 +1,87 @@ +getlines( $fp, 4 ); + $this->nlist_prodos8 = $this->getlines( $fp, 33-5+1 ); + $throwaway = $this->getlines( $fp, 1 ); + $this->nlist_prodos16 = $this->getlines( $fp, 151-35+1 ); + $throwaway = $this->getlines( $fp, 1 ); + $this->nlist_toolbox = $this->getlines( $fp, 1544-153+1 ); + $throwaway = $this->getlines( $fp, 1 ); + $this->nlist_e1xxxx = $this->getlines( $fp, 1620-1546+1 ); + $throwaway = $this->getlines( $fp, 1 ); + $this->nlist_e0xxxx = $this->getlines( $fp, 1637-1622+1 ); + $throwaway = $this->getlines( $fp, 1 ); + $this->nlist_ssf8rom = $this->getlines( $fp, 1911-1639+1 ); + } + + /** + * check( $last_instruction, $this_instruction ) - Check if something comment-worthy has occurred + * + * @param $last_instruction str, $this_isntruction str + * @return mixed + */ + public function check( $last_instruction, $this_instruction ) + { + $comment = false; + + // softswitches and 8-bit firmware + $addr_part = substr( $this_instruction, -5 ); + if( $addr_part[0] == ' ' ) + { + if( $this->nlist_ssf8rom[substr($addr_part,1)] ) + { + $comment = $this->nlist_ssf8rom[substr($addr_part,1)]; + } + } + + // toolbox entry + if( $this_instruction == 'JSL E10000' ) + { + if( substr( $last_instruction, 0, 3 ) == 'LDX' ) + { + $toolcall_number = substr( $last_instruction, -4 ); + + if( $this->nlist_toolbox[$toolcall_number] ) + { + $comment = 'Toolbox: '.$this->nlist_toolbox[$toolcall_number]; + } + } + } + + return $comment; + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9a48a49 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +yagsdisasm - Yet Another GS Disassembler +======================================== + +yagsdisasm is written in PHP, which may be an unfortunate choice of languages to many, but is nearly-universally available and makes for a product that's easy to modify, when written properly. + +the disassembly engine is largely inspired by Andy McFadden's Ciderpress disassembly engine, which is why we copy his license terms in LICENSE.txt + +as of 5/25/2016, the project is only a couple hours old and is a proof of concept. future revisions to come later + +### Example Run: + + $ php yagsdisasm.php -x 0 -m 0 -e 0 -f /Applications/Emulation/Apple\ IIGS/images/WhatIs/Alien\ Mind/Alien\ Mind\ Dk1.2mg -s 1 -n 1 -k 1 -o 801| more + ORG 000801 + MX %00 + + 000801- 0A ASL + 000802- A9 10 00 LDA #0010 + 000805- 8D 9F 0A STA 0A9F + 000808- A9 00 01 LDA #0100 + 00080B- 8D A1 0A STA 0AA1 + 00080E- 60 RTS + 00080F- 20 62 09 JSR 0962 + 000812- F4 00 00 PEA 0000 + 000815- F4 07 00 PEA 0007 + 000818- F4 00 20 PEA 2000 + 00081B- F4 00 40 PEA 4000 + 00081E- F4 00 00 PEA 0000 + 000821- F4 36 0A PEA 0A36 + 000824- F4 00 00 PEA 0000 + 000827- F4 3A 0A PEA 0A3A + 00082A- A2 03 27 LDX #2703 + 00082D- 22 00 00 E1 JSL E10000 ; Toolbox: UnPackBytes(@Buff,BfSz,@StartPtr,@Sz):Size + 000831- 68 PLA + 000832- 8D 00 03 STA 0300 + 000835- 60 RTS + 000836- 00 20 BRK 20 + 000838- E1 00 SBC (00,X) + 00083A- 00 80 BRK 80 + 00083C- 20 67 09 JSR 0967 + 00083F- 2C 10 C0 BIT C010 ; r:KBDSTRB + 000842- AD 00 C0 LDA C000 ; r:KBD w:CLR80COL + 000845- 30 13 BMI 085A {+13} + 000847- AD 61 C0 LDA C061 ; r:BUTN0 + 00084A- 30 0E BMI 085A {+0E} + 00084C- AD 62 C0 LDA C062 ; r:BUTN1 + 00084F- 30 09 BMI 085A {+09} + 000851- AD 27 C0 LDA C027 ; rw:KMSTATUS + 000854- 89 80 D0 BIT #D080 diff --git a/yagsdisasm.php b/yagsdisasm.php new file mode 100644 index 0000000..e4f1771 --- /dev/null +++ b/yagsdisasm.php @@ -0,0 +1,181 @@ +getBlocks( $starting_block, $num_blocks ); + break; + case '2mg': $fh = new Input_2MG( $filename ); + $data = $fh->getBlocks( $starting_block, $num_blocks ); + break; + case 'po': $fh = new Input_PO( $filename ); + $data = $fh->getBytes( $starting_block, $num_blocks ); + break; +} +if( $verbose ) +{ + echo "Processed {$format} file {$filename}\n"; + $fh->printInfo(); +} + +if( $skip > 0 ) +{ + $data = substr( $data, $skip ); +} + +$pers = new Personality_AppleIIGS; + +$dh = new Disassembler_65816; +$dh->disassemble( $m_flag, $x_flag, $e_flag, $origin, $data, $pers );