Studer A810 PHG Firmware Analysis ================================== Version: 4086 (week 40, 1986) Author: PHG, Studer Regensdorf (Switzerland) Date: June 5, 1986 Base: v2586 (most likely, identical reset structure) Files: 1.bin=IC14(E000), 2.bin=IC12(C000), 3.bin=IC10(A000) MEMORY MAP ---------- Identical to v1183 and v2586: IC10 (3.bin): $A000-$BFFF IC12 (2.bin): $C000-$DFFF IC14 (1.bin): $E000-$FFFF Reset: $FFE8 -> SEI + JMP $A000 (same as v2586) CONFIRMED FUNCTIONAL CHANGE: LOC+REC -------------------------------------- v1183 transport modes (11 total, pointer table at $C280): [0] TAPE OUT [1] TAPE LOAD [2] STOP [3] REWIND [4] FORWARD [5] PLAY [6] RECORD [7] EDIT [8] LOCATE [9] LOC+PLAY [10] TAPE DUMP PHG transport modes (12 total, pointer table at $CC44): [0] TAPE OUT [1] TAPE LOAD [2] STOP [3] REWIND [4] FORWARD [5] PLAY [6] RECORD [7] EDIT [8] LOCATE [9] LOC+PLAY [10] TAPE DUMP [11] LOC+REC <-- NEW LOC+REC = Locate + Record: The machine spools to a pre-set locate point and then automatically starts recording. Functionally equivalent to an electronic punch-in at a fixed tape position. Useful for repeated recording takes at exactly the same point. v2586 does NOT have this mode (also 11 modes, no LOC+REC string). PHG therefore added LOC+REC as a new feature on top of v2586. TRANSPORT MODE DISPATCH ROUTINE (PHG $CB4E) -------------------------------------------- The routine at $CB61-$CB7E is the core of mode selection: $CB61 LDX #$CC44 ; load pointer to string table $CB64 ABX ; add mode index (B register) $CB65 PSHA ; save A $CB66 LDAA $3B ; load current state $CB68 CMPA #$10 ; mode $10? $CB6A BEQ $CB72 ; yes -> special case $CB6C CMPA #$12 ; mode $12? $CB6E BEQ $CB72 ; yes -> special case $CB70 BRA $CB7E ; no -> normal path $CB72 LDAA $30 ; $CB74 ORAA $32 ; combine status registers $CB76 ANDA #$10 ; test bit 4 (record ready?) $CB78 BEQ $CB7E ; not ready -> normal path $CB7A INX ; advance 4 bytes in table = $CB7B INX ; select LOC+REC string $CB7C INX ; instead of LOC+PLAY $CB7D INX $CB7E PULA $CB7F LDX $00,X ; dereference pointer to string $CB81 JSR $DB34 ; display string Interpretation: in mode $10 or $12, if bit 4 of the combined status ($30 OR $32) is set, the display pointer advances 4 bytes -- which selects "LOC+REC" instead of "LOC+PLAY". This is a state-dependent display: the same button shows a different label depending on whether the machine is in record-ready state. ADDITIONAL OBSERVATIONS ------------------------ 1. PHG has 11920 disassembly lines vs 11556 for v2586 (+364). The extra code is distributed throughout, not in a contiguous block. 2. The full version string includes location and exact date: "A810 SOFTWARE VERSION 4086 REVIDED AND IMPROVED BY PHG . REGENSDORF, 5.06.1986" "REVIDED" is a misspelling of "REVISED" -- likely written by a non-native English speaker (Swiss/German). 3. Interrupt vectors differ from v2586: v2586 PHG TRAP: $D4DB $D7F4 SCI: $CF69 $D2A7 TOF: $D377 $D6B5 OCF: $D45A $D798 ICF: $D45A $D798 IRQ: $D99B $DCFC SWI: $D45B $D799 All handlers are relocated but structurally equivalent. 4. PHG retains the "READING RS232" and "PROGRAM LOADED" strings (also present in v1183) -- the serial program loading function is preserved. 5. v2586 has "INPUT FORMAT ERROR !" -- PHG does not. This error message may have been handled differently or removed. CONCLUSION ----------- PHG used v2586 (or a closely related version) as a base and primarily added the LOC+REC transport mode. This is an operationally meaningful extension for studio use where repeated punch-in recordings at a fixed locate point are required. The change is limited in scope but functionally significant. The large byte-level differences (~97%) are the result of code relocation (refactoring) rather than a wholesale rewrite of all functions. The overall program structure and hardware interface remain consistent with the Studer v1183 and v2586 firmware lineage.