pinball construction kit für bally-35 / bally-17 und stern english


Inhaltsverzeichniss
Einführung
Was braucht es...
Wie geht es...
Source Statements
So wird getestet
Übersetzen
Tools
faq



Einführung
Das pinball construction kit besteht im wesentlichen aus einem neuen U6 game rom und einigen Routinen damit man einen bestehenden Bally Flipper (1978 - 1983) oder stern Flipper umprogrammieren kann. Bis auf einen PC und einen Eprombrenner braucht es keine zusätzliche Hardware...


Wenn du eine Bally-35 Mpu näher betrachtest, siehst du zwei oder mehr Game roms. (Hier mit roten und mit blauen Kreis). Die anderen ICs auf der Platine sind nicht spielespezifisch. Wenn du die Bally-35 Mpu von einem Flipper in einen anderen wechseln willst, musst du diese Game Roms tauschen.

Pck-bally ersetzt den bestehenden U6 Chip. Mit den Hilfsmitteln hier auf dieser Seite, kannst du für deinen Bally Flipper neue Spielregeln definieren und einen neuen U2 Chip machen. Beide Chip sind entweder 2732 oder 2532 Epromtypen.

Was braucht es...

1) Ein Bally oder Stern Flipper
2) Programmiererfahrung (am besten mit dem Motorola 6800 Chip oder ein anderer 8 Bit Prozessor)
3) Gute Kenntnisse von der Bally Hardware
4) Und ein Haufen guter Ideen für neue Spielregeln...

Flipper
Es braucht ein Flipper mit einer Bally-35 / Bally-17 oder Stern-100 / Stern-200 mpu...

Programmiererfahrung
Das pck-bally basiert auf dem 6800 assembler und einen Haufen Makros. Das heisst, es wird reiner Assemblercode geschrieben und einige vordefinierte Makros verwendet.

Hier die wichtigsten Dokumente (alles nur englisch...):
Programming the 6800
Datasheet for the 6800 (u9)
Datasheet for the 6821 (u10 and u11)
Ohne ausreichenende Programmiererfahrung (> 2 Jahre) und Kenntnisse von Hexzahlen wird es arg mühsam...
Hier ist der super 6800 Assembler (version 1.31) von Frank A. Vorstenbosch.
Natürlich als erstes das Manual lesen (besonders den Teil über die Makros)...

Bally hardware
Bally hat freundlicherweise eine super Abhandlung geschrieben
Hier wird im Detail beschrieben wie die Bally-35 Mpu funktioniert:
Bally Theory of Operation

Neue Spielregeln
Das ist schwieriger als man denkt. Am besten mal im Detail die bestehenden Regeln aufschreiben und überlegen was man anderes / besser machen kann...

Wie geht es...
Um ein neues U2 Game Rom zu machen gehst du wie folgt vor:
a) Erzeuge oder modifiziere eine Game Source mit einem Texteditor (notepad reicht...). Du kannst dich auf die spielespezifischen Sachen beschränken. Alle generellen Sachen, wie Punktzählen, Spulen ansteueren, Lampen, Anzeigen, Schalter prüfen, Selbsttest und die Verwaltung von bis zu vier Spielern wird durch das pck-bally gemacht.
Syntax:
Erst einmal alles kommentieren in der Source. Verwende separate Zeilen die mit ";" beginnen. Wenn du Makros anwendest, füge auf der rechten Seite keine Leerzeichen oder Bemerkungen ein. Sonst kommt der Assembler unter Umständen etwas ins Schleudern...

b) Als nächster Schritt wird die Source mit dem 6800 assembler übersetzt. Dafür hat es eine . bat Datei. (asspck < Dateiname > )
c) Zum Testen hat sich die debug Version von pinmame bewährt (im folgenden Text nur pindebug genannt...).
d) Wenn dieser Test okay is, brenn das neue u2 game rom auf ein Eprom und teste das Ganze im Flipper...
(Achtung: Wenn du Schrott programmierst hast, kannst du unter Umständen eine oder mehrere Spulen verbrennen, ich bin nicht verantwortlich für irgendwelche Schäden...)

Source Statements
Spulen
Zuerst müssen die Spulen definiert werden. Maximal können 30 momentan Spulen definiert werden. 15 Spulen werden direkt angesprochen, die anderen 15 Spulen über ein Solenoid Expander Board. Ebenso können 4 permanente Spulen definiert werden. Momentan Spulen
Die meistvewendete Spule im Flipper ist die momentan Spule. Diese Spule wird für eine bestimmte Zeit aktiviert vom Game rom.
Schnell-Spulen
Einige Spulen (Schlagtürme und Slingshots) reagieren sehr schnell während dem Spiel. Williams hat das Problem mit zusätzliche Hardware gelöst. (Da hat es zwei Schalter für eine Spule...)
Bally hat dieses Problem mit der Software gelöst: Jeder Schnell-Spule ist direkt ein Schalter zugeordnet. Wenn dieser Schalter als geschlossen erkannt wird, wird die Spulenaktivierung direkt vom pck-bally rom ausgelöst.
Permanet Spulen
Maximal können 4 permaneten Spulen angesteuert werden. Zwei sind aber immer in Gebrauch: Das Flipper Enable K1 Relais auf dem Spulenboard und die Münzsperrspule. Diese zwei Spulen werden auch durch das pck angesteuert. Zwei zusätzliche permanente Spulen können noch angesteuert werden. Damit lassen sich zum Beispiel Ballgates ansteuern.
Beispiel
; Assembler statements
;
; coil definition for mata hari
;
; all solenoids must be defined once with a soldef
; first param (nr) is addr from U2 74ls154 on solenoid board, drives Q...
; if (nr) > 14 then solenoid expander is used...
; second param (type) defines coil usage
; (type) = 100        norm       (rest)
; (type) = 101        perm        (coin lockout=1,flipperenable=4)
; (type) = (swnr)     Quick       (bumper)
; K1 relais
        soldef  4,101
; coin lockout
        soldef  1,101
; saucer          Q2
        soldef  0,100
; chime 10        Q1
        soldef  1,100
; chime 100        Q5
        soldef  2,100
; chime 1000      q6
        soldef  3,100
; extra chime     q7
        soldef  4,100
; knocker         q3
        soldef  5,100
; outhole        q4
        soldef  6,100
; left botton bumper        q8
        soldef  7,38
; left top  bumper        q13
        soldef  8,40
; right top bumper        q14
         soldef  9,39
; right bottom bumper                q9
        soldef  10,37
; left sling        q10
        soldef  11,36
; left drop target reset        q12
        soldef  12,100
; right sling        q11
        soldef  13,35
; right drop target reset        q16
        soldef  14,100
;

Aktivieren einer momentanen Spule:
; all targets down, reset both targets bank
        solon        12,10
        solon        14,10
Der solon Makro akiviert die Spule (erster Parameter) für eine bestimmte Zeit (zweiter Parameter). Nach dieser Zeit wird die Spule deaktiviert.
Hier einige Zeiten die für bestimmte Spulentypen verwendet werden sollten:
; knocker -> 0c
; kickout ball (outhole) -> 0a
; saucer -> 0c
; targetbank reset -> 10
; chimes -> 00

Aktivierung einer Schnell-Spule:
Schnell-Spulen müssen nicht speziell mit einem solon Makro aktiviert werden, diese Spulen werden automatisch durch pck angesteuert.

Aktivierung einer permanenten Spule:
Zum Aktivieren:
; k1 solenoid board
     sonk1
; coin lockout
     sonco
; permanet coil 2
     sonp2
; permanet coil 3
     sonp3

Diese Spulen bleiben an, bis dass diese wieder ausgeschaltet werden. Zum Ausschalten:
     soffk1
     soffco
     soffp2
     soffp3


Schalter
Alle Schalter im Flipper müssen definiert werden. Im Maximum werden 48 Schalter unterstützt.
Hinter jedem Schalter wird ein Einsprungspunkt in dem Programm definiert. Dieser Punkt wird angesprungen wenn der dazugehöriger Schalter geschlossen ist. Eine permanet geschlossener Schalter wird nur einmal erkannt.

Beispiel:
; Here you define the 16 first switches (mata hari)
     ; credit button
        swdef        06,swcredit
        ; tilt
        swdef        07,swtilt
        ; outhole switch
        swdef        08,swouthole
        ; coin 2
        swdef        09,swcoin
        ; coin 3
        swdef        10,swcoin
        ; coin 1
        swdef        11,swcoin
        ; slamtilt
        swdef        16,swlam
Wenn der Kreditknopf gedrückt ist, wird die Routine "swcredit" aufgerufen. Diese Routine muss mit rts (return from subroutine) verlassen werden. Mit dem Registaer A können gewissen Funktionen vom pck gesteuert werden..
; return code
;
; if reg A = 0, everything okay
; if reg A = 1, ball drained,
;         if no score, serve nextball for this player
;         else if extraball (macro givex) was lit,
;           serve next ball (jsr xball) for this player
;         else next player (stopplayer , player + 1,
;                 startplayer)
; if reg A = 2  ball locked serve next ball
;               for multiball (jsr xball)
; if reg A = 4  add one player if possibile
; if reg A = 5  tilt this ball
; if reg a = 6  slamtilt entire pinball
; if reg a = 7  add credits number of credits in reg b
;                if b = 0 give one freegame with knocker

Hier sind die Assembler Routinen für die definierten Schalter:
swouthole:        ; ball in outhole, finish
        ldaa    #$01
        rts
swcredit:        ; add one player
        ldaa    #$04
        rts
swcoin:          ; always two credits with one coin
        jsr     sound3
        ldab    #$02
        ldaa    #$07
        rts
swtilt:          ; pinball is tilted
; trigger upper saucer (maybe the ball is there...)
        solon        00,0A
        ldaa    #$05
        rts
swlam:          ; slamtilt
        ldaa    #$06
        rts

Schalter können aber auch expilziet abgefragt werden. Zum prüfen, ob der Schalter 12 geschlossen ist, folgendes Coding verwenden:
     csw    12,open12
close12:
Wenn ein Schalter permanent geschlossen ist, wird die dazugehörige Routine nur einmal aufgerufen. Wenn der Makro rsw verwendet wird, dann wird der dazugehörige Schalter zurückgesetzt. Wenn dann der Schalter immer noch geschlossen ist, wird die dazugehörige Routine erneut aufgerufen.
     rsw    12
Lampen
Lampen müssen nicht expizit definiert werden, die Lampen werden direkt auf einen spezifischen Speicherbereich eingeblendet.

Das erste Lampenbord wird auf folgenden Speicherbereich gemappt:
$200 - $20E
Das Hilfslampenboard (oder das zweite Lampenboard) ist auf diesen Speicherbereich gemappt:
$20F - $21D

Vier Lampen können direkt auf einmal mit einem Zugriff auf eine Speicherstelle (z.B. Variable X0200) manipuliert werden. Wenn das Bit der korrespondierenden Lampe auf 1 ist, ist die Lampe aus. Wenn das Bit auf 0 ist, ist die Lampe an.
Hier ist das Lampenschema von Mata Hari:

; mata hari lamp schemas              Connector
; $0200 8765FFFF
;  8 -> bonus 4k           q57        J3 1
;  7 -> bonus 3k           q36        j3 26
;  6 -> bonus 2k           q29        j1 1
;  5 -> bonus 1k           q14        j1 18
; $0201 8765FFFF
;  8 -> bonus 8k           q50        j3 12
;  7 -> bonus 7k           q38        j3 25
;  6 -> bonus 6k           q27        j1 9
;  5 -> bonus 5k           q12        j1 19
; $0202 8765FFFF
;  8 -> drop target spec   q51        j3 15
;  7 -> bonus 20k          q44        j3 19
;  6 -> bonus 10k          q28        j1 8
;  5 -> bonus 9k           q13        j1 17
; $0203 8765FFFF
;  8 -> a target (2)       q54        j3 11
;  7 -> b target (2)       q49        j3 17
;  6 -> n/u                q35        j1 3
;  5 -> n/u                q8         j1 23
; $0204 8765FFFF
;  8 -> n/u                q55        j3 9
;  7 -> n/u                q48        j3 16
;  6 -> n/u                q34        j1 2
;  5 -> n/u                q9         j1 14
; $0205 8765FFFF
;  8 -> ab value 4k        q16        j3 3
;  7 -> ab value 3k        q37        j3 23
;  6 -> ab value 2k        q22        j1 10
;  5 -> ab value 1k        q10        j1 15
; $0206 8765FFFF
;  8 -> n/u                q59        j3 4
;  7 -> ab value spec      q32        j3 27
;  6 -> ab value extra     q26        j1 7
;  5 -> ab value 5k        q11        j1 16
; $0207 8765FFFF
;  8 -> lt outlane 50k     q58        j3 2
;  7 -> rt outlane 50k     q20        j1 13
;  6 -> n/u                q25        j1 6
;  5 -> n/u                q4         j1 28
; $0208 8765FFFF
;  8 -> lt bottom bumpe    q56        j3 10
;  7 -> rt bottom bumpe    q42        j3 21
;  6 -> n/u                q24        j1 5
;  5 -> n/u                q1         j1 24
; $0209 8765FFFF
;  8 -> 2 x potential      q46        j3 18
;  7 -> 3 x potential      q41        j3 20
;  6 -> 5 x potential      q17        j1 11
;  5 -> n/u                q2         j1 25
; $020A 8765FFFF
;  8 -> credit indicator              j3 13
;  7 -> S.P. SHOOT AGAIN              j3 22
;  6 -> MATCH                         j2  8 / j1  4
;  5 -> SHOOT AGAIN                   j1 26 / j2 21
; $020B 8765FFFF
;  8 -> 2 x multi          q30        j3 14
;  7 -> 3 x multi          q39        j3 24
;  6 -> 5 x multi          q21        j1 12 / j2 12
;  5 -> n/u                q7         j1 27 / j2 13
; $020C 8765FFFF
;  8 -> Tilt                          j2 10
;  7 -> Game over                     j2 11
;  6 -> High score to date            j2 23
;  5 -> Ball in play                  j2 22
; $020D 8765FFFF
;  8 -> n player 4         q43        j2 7
;  7 -> n player 3         q30        j2 6
;  6 -> n player 2         q18        j2 20
;  5 -> n player 1          q5        j2 16
; $020E 8765FFFF
;  8 -> player up 4        q45        j2 1
;  7 -> player up 3        q31        j2 2
;  6 -> player up 2        q19        j2 15
;  5 -> player up 1         q6        j2 14

Pck steuert direkt die Lampen von den Adressen $20A und $20C an.
Um eine einzelne Lampe anzusteuern (zum Beispiel den 3x multi) verwende folgenden Makro:
     lampon 4B
Die zweite Hälfte vom Byte spezifiziert die Adresse (beginnend bei der Adresse 200), hier 20b. Das erste Halbbyte spezifiziert die Bitposition (Überprüfe die obige Tabelle um die Lampe zu finden , Bitposition 4 ist die Lampe Nummer 7)
Um die gleiche Lampe auszuschalten, verwende:
        lampoff     4B
Um zu prüfen ob diese Lampe an ist (3x multi) verwende:
        laonq        4B,score3x
score1x:
        ...
Wenn diese Lampe an ist, geht die Verarbeitung bei score3x weiter, andernfalls bei score1x.
Um zu prüfen ob dieses Lampe aus ist:
        laoffq        4B,sc2off
sc1off:

sc2off:
        ...
Wenn diese Lampe aus ist, geht die Verarbeitung beim Punkt sc2off weiter, andernfalls bei sc1off.
Für das zweite Lampenbord gibt es ähnliche Makros:
     lamponx
     lampofx
     laonqx
     laoffqx
Der einzige Unterschied zu den anderen Makros ist, dass die erste verwendete Adresse $20f ist.
Anzeigen
Es muss nur definiert werden, ob 6 oder 7 stelligen Anzeigen verwendet werden. Der Rest wird durch das pck gehändelt.
Dip Schalter
Alle Dip Schalter können mit den folgenden Makros in das Register A gelesen werden.
     dip18
     dip916
     dip1724
     dip2532
Zum Abfragen vom Schalter 24 kann folgendes Coding verwendet werden.
     dip1724
     bita   #$80
     bne    closed24
open24:

Punktezählen...
Es hat einige Makros zum Punktezählen:
; add 10 to the score
      as100  0010
; add 10'000 to the score
      as10t  0001
; add 1'000'000 to the score (pending)
      as1mp  01
; add 100'000 to the score (pending)
      as100tp 01
; add 5'000 to score (pending)
     as1tp    05
; add 500 to score (pending)
     as100p    05
; add 20 to score (pending)
     as10p    02
Pck verwaltet den Punktestand pro Spieler und überprüft auch die drei Freispiellevels und ebenso den High-Score.
Wait
Falls es nötig ist, bei der Ausführung vom Coding zu warten (z.B. eine Pause beim Bonus Countdown) dann kann man den Makro wait verwenden macro wait
     wait   10
Überprüfen Game Status
Zum feststellen ob das Spiel getilt ist, oder die Game Over Lampe leuchtet kann der Marko gaoff verwendet werden.
     gaoff  gtilt
gameon:
Wenn die game over oder Tilt Lampe an ist, wird die Verarbeitung beim Punkt gtilt fortgesetzt, andernfalls beim Punkt gameon. Dieser Makro kann verwendet werden um den Bonus Countdown nach einem Tilt nicht durchzuführen.
Wenn nur überprüft werden soll, ob die game over Lampe an ist, kann der Marko gaatt verwendet werden.
     gaatt  attra
gameon:
Auch hier: Wenn die Lampe game over an ist, Verarbeitung bei attra fortsetzten, andernfalls bei gameon. Diese Makro kann verwendet werden, um spezielle Animationen im Attract-Modus zu programmieren..
Extra ball geben
Um während dem Spiel einen Extra Ball zu geben kann der Makro givex verwendet werden.
     giveex
Special (Freispiel) geben
Um während dem Spiel ein Freispiel zu gebne, kann der Makro givesp verwendet werden.
     givesp
     
Versionsnummer
Auf jeden Fall eine eindeutige Versionnummer verwenden.
Callback Routinen
Für spezielle Ereignisse (z.B. ein Spielstart) wird eine spezifische Routine aufgerufen. In dieser Routine kann dann spielspezifisches Coding hinzugefügt werden. Mit dem Return Code können in Pck spezielle Verarbeitungen ausgelösst werde (z.B. ein Freispiel geben, oder einen Spieler hinzufügen...)
Die folgenden Einsprungspunkte werden unterstützt:
startpin Nach dem Power on vom Flipper
startgame Wenn ein Spiel gestartet wird
endgame Wenn ein Spiel beendet wird, doer gecancelt oder anch Power on.
addplayer Wenn ein Spieler mit dem Creditknopf hinzugefügt wird.
startplayer Wenn ein Ball für einen Spieler ausgeworfen werden soll
stopplayer Wenn ein Ball für einen Spieler im Outhole istr
xball Wenn ein Ball zum Spieler ausgeworfen werden soll (auch Extra oder Multiball)
firstcount Wenn die ersten Punkte für einen Spieler gezählt wurden
zerocross Wenn die zero cross Routine aktiviert ist nach dem generellen Timer update und bevor das Lampenbord upgedatet wird
afterla Wenn die zero cross Routine aktiviert ist nach dem generellen Timer update und nachdem das Lampenbord upgedatet wurde
afterqu Wenn die zero cross Routine aktiviert ist nach dem generellen Timer update und bevor das Lampenbord upgedatet wird und nach der Schnell Spulen Routine
afterdisp Wenn das Display interrupt activiert wurde für eine Stelle (kann für ein sechstes Display verwendet werden...)
befscor bevor der Punktestand erhöht wird
addpends während eine pendenter Punktestand erhöht wird (1 Stelle )
addscor Nach der Überprüfung auf Freispiel
afersco Nach dem Punktestand erhöht wurde, hier kann der attract modus progammiert werden
knock Wenn der Knocker aktiviert werden soll (bei einem Freispiel)
digitup Update von einer Stelle während dem Punktezählen...
makeso Aktivieren vom Sound
killso kill running sound
attract wird nur aktiviert wenn der Flipper im attract Modus ist...


Variablen
Basierend auf der limitierten Hardware (dem 6810 ram) können maximal 19 zusätzliche 8 bit Variablen (Wertebereich von 0 bis 255, oder hex 00 bis ff)
Während dem attract Modus können weitere vier zusätzliche 8 bit Variablen verwendet werden....
Zusätzlich können 114 weitere 4 bit Variablen definiert werden. (im 5101 ram). Jede Variable kann nur 16 verschiedene Werte annehmen. (hex 0F,1F,2F,3F,4F,5F,6F,7F,8F,9F,aF,bF,cF,dF,EF,FF)

Achtung: Die Variablen müssen an der vorgegeben Stelle in dem Sourcefile definiet werden...

Soundboards S&T
Mit Version 9 (r 2) wird das S&T Soundboard (aus eight ball deluxe, vector und anderen Flipper) pinballs is supported.

Folgende Punkte müssen in der Source eingefügt sein.
1) Füge das Include pckst.inc in deiner Source ein (Das File exstt.asm beinhaltet ein Beispiel)
2) Füge die Variable
swsound db        $00
in der 4 bit Area ein.
3) Benutze den marco ystone einmal.
;
;    s&T soundboard once
;
        ystone

4) Füge einen zusätzlichen jsr in dem afterqu Event ein (Suche nach zcross3 im Beispiel File)
Diesen Aufruf braucht es, weil bei jedem Soundkommando kann eine Zeit mitgegeben werden, in der kein weitere Sound abgespielt werden kann.
;
;    s&T soundboard in the fast react soleonid routine
;
        jsr        ysnddi        ; decrease delay timer of sound board
;
;
;
        clra
        rts
4) Jedesmall, wenn du einen Sound triggeren willst, verwende den marco yst.
;
        yst        50,10
;
; first parameter is the value from the s&t board for the specfic sample or the sound
; be aware that sometimes the s&t boards replaces the phrases
; for example SINK THE is sometimes replaced with GO FOR
; Here are some examples from the eigt ball delxue...
; 0f        -> whops to much english...
; 50        -> go for deluxe
; 51        -> eight ball deluxe two ball
; 52        -> eight ball deluxe three ball
;
; second parameter is the delay after the cmd (no other sound played during this time, this value is decreased in a specific event...)
;



Soundboards 32/50
Mit Version 10 (r 2) wird das Soundboard -32 / 50 board (verwendet in Harlem, Paragon, Star Trek und anderen) unterstützt.

Folgende Punkte müssen in der Source eingefügt sein.
1) Füge das Include pckst32.inc in deiner Source ein (Das File exst32.asm beinhaltet ein Beispiel)
2) Benutze den marco ystone einmal.
;
;   soundcard 32 / -50  soundboard  once
;
        ystone

3) Füge einen zusätzlichen jsr in dem afterqu Event ein (Suche nach zcross3 im Beispiel File)
Dieser jsr ist notwendig, weil du eine ganze Tabelle an Soundcommands definieren kannst. Mit diesem Aufruf wird ein weiterer Sound abgespielt...
;
;     soundboard in the fast react soleonid routine
;
        jsr        ysnddi        ; send next sound to sound board (out of soundcmd x) in async mode
;
        clra
        rts
4) Wenn du ein Soundcmd abspielen willst verwende marco yst32.
; Load register x with the adress of a soundcmd
        ldx        # SOUN5
        yst32
;
; structure of soundcmd
; $nn $mm $oo $pp
; store first byte in x0030
; if x0030 = 1XXX XXXX sound is played sync, XXX XXX holds wait time between sound
; if x0030 = 0XXX XXXX sound is played in async, XXX XXX holds wait time between sound (decreased by zero cross ysnddi )
; loop
; increase x until contest of xx eq FF -> Sound cmd finished; break
; increase x until contest of xx eq 00 -> refill X0030, go to loop
; otherwise play sound (5 bits relevant)
; if sound should be in sync go to loop until end
; if sound  should be in assync copy x0030 -> X0034 and save X in X0032 / X0033, then routine is called again by zero cross if X0034 reaches zero
; example of soundcmd
SOUN5:                        ; Sound Data Game over guess which pinball
        db        $04, $05, $86, $05
        db        $86, $05, $86, $05
        db        $86, $05, $86, $05
        db        $86, $06, $87, $07
        db        $88, $08, $89, $0A
        db        $8A, $0B, $8B, $0C
        db        $8C, $0D, $8D, $0E
        db        $1F, $0C, $89, $2F
        db        $88, $89, $86, $87
        db        $2F, $86, $87, $81
        db        $84, $82, $00, $01
        db        $11, $1F, $11, $1F
        db        $11, $1F, $12, $1F
        db        $11, $00, $08, $0F
        db        $00, $01, $11, $1F
        db        $11, $1F, $11, $1F
        db        $12, $1F, $11, $1F
        db        $FF

Übersetzen
Es hat die Batch Datei asspck.bat. Damit kann die Sourcedatei übersetzt werden. Dannach wird automatisch das Game spezifische U2 rom erzeugt und die nötige Prüfsumme wird berechnet und im Game rom gespeichert.
asspck < filename >

Testen
Mit pindebug kann das Game rom getestet. Zuerst muss das Game rom und pck-Bally in ein zip Archiv kopiert werden. So kann getestet werden...
pindebug gamename -d

Als Beispiel mal die Datei matatest.zip in das pinmame rom Verzeichniss kopieren. Dann

pindebug matatest -d

ausführen...
Im Assemblerlsiting können Haltepunkte identifiziert werden... Relevante Kommandos im Debugger:
bp -> setzte Haltepunkt bei einer spezifischen Adresse..
wp -> Wenn die definierte Speicherstelle den Wert ändert, wird die Auführung unterbrochen...
tr -> Die Traceinformation wird in eine Datei geschrieben...

Tools
Entpacke diese Datei in ein separates Verzeichnis pck version 10 R 2

pck version 10 old version
pck version 7 old version
pck version 9 R 2 old version
Dort hat es die folgenden Dateien:
AS02.EXE      -> 6800 assembler
AS02.MAN      -> 6800 manual
asspck.bat    -> use asspck < filename >
calcbal.exe   -> calculate checksum for u2 rom
copypck.bat   -> create u2 rom
examp.asm     -> example source
exstt.asm     -> example source for soundcard s&t board (eight ball deluxe, with version 9)
exst32.asm    -> example source for soundcard 32/50 board (harkem,paragon, star trek, with version 10 r2)
fsp.exe       -> file splitter
info.txt      -> info
infomata.txt  -> infomata hari
infoexstt.txt -> infomata for the soundcard s&t board
matatest.zip  -> custom game roms for mata hari (version 7)
matat0.asm    -> source for mata hari
matat0N.U2    -> u2 rom for mata hari
pck1.inc      -> include definition for macros
pckst.inc     -> include definition for macros and the soundcard s&t board (with version 9)
pckst32.inc   -> include definition for macros and the soundcard 32/50 board (with version 10 R2)

ptestN.U6     -> u6 rom (pck version 9) <- nicht länger benutzt (ab Version 10)
pck10N.U6     -> u6 rom (pck version 9)
pindebug      -> pinmame linked with -debug option, copy this file in your pinmame directory


Frequently Asked Questions

Naja, der einzige Grund warum ich es gemacht habe: Ich möchte einen Early Bally Flipper vom Grund auf bauen...
mail me your feedback please


return to mainpage