Wettbewerbsbeitrag: Atari WozMon

Moderator: Rockford

Antworten
freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Atari WozMon

Atari WozMon ist eine Atari 8-Bit Adaption des Maschinensprache-Monitors, der im Apple I eingebaut war. Da dieser damals von Steven Wozniak programmiert wurde, wird diese Software seither liebevoll „WozMon“ genannt. Besonders bemerkenswert ist, dass dieses Programm mit weniger als 256 Byte Speicherplatz auskommt und trotzdem die Grundfunktionen eines Maschinensprache-Monitors zur Verfügung stellt: Man kann damit Einzelwerte oder ganze Speicherblöcke auslesen bzw. verändern sowie gezielt bestimmte Speicheradressen anspringen, um ein Programm zu starten.

Auch heute ist so ein Tool noch äußerst nützlich, wenn man noch direkt auf der „echten“ Hardware programmiert. Denn anstatt lange Reihen von POKEs zu schreiben, um Speicherstellen zu ändern (oder unter DOS dazu überhaupt erst einmal die Möglichkeit dazu zu haben), kann man mit einem kurzen Aufruf von Atari WozMon die Werte direkt in die gewünschten Speicherstellen schreiben. Wer die Hexadezimalwerte von Assembler-Befehlen kennt, kann somit auch unter BASIC direkt in Maschinensprache programmieren.

Eben mal die Display-List ändern und eine kleine Maschinensprach-Routine für den Display-List-Interrupt ablegen? Kein Problem (Screenshot 4).
Schnell direkt auf den Bildschirmspeicher zugreifen? Wird fix erledigt (Screenshot 3).
Einmal kurz einen Speicherbereich auslesen? Nichts leichter als das (Screenshot 2).

Atari WozMon wird beim Laden in der Page 6 abgelegt, wo sie geschützt vor BASIC, DOS oder anderen Programmen ist und bei Bedarf immer wieder aufgerufen werden kann.
Um die ABBUC-Regeln zu befolgen, wurde noch ein extra Startbildschirm in der Page 4 abgelegt, der für den Rest des Programms aber nicht gebraucht wird. Man kann das Tool dann von BASIC aus mit X=USR(1024) (mit Startbildschirm/Kurzanleitung) bzw. X=USR(1536) (direkt zum Monitor) oder von DOS aus über M (Run Address) und dann 401 bzw. 601 aufrufen.

Atari WozMon hat gegenüber dem Original einige Vorteile, darunter die Verwendung der Bildschirm-Routinen des Atari Betriebssystems. Dadurch fügt sich Atari WozMon z.B. nahtlos in den BASIC-Editor ein, so dass z.B. der Bildschirminhalt von BASIC erhalten bleibt, wenn man Atari WozMon aufruft, und auch nach dem Beenden wird der Bildschirm nicht gelöscht wird, wie man auf den Screenshots sehen kann.

Atari WozMon ist somit ein nützliches Tool, das man als AUTORUN.SYS einfach auf der DOS-Diskette mitlaufen lassen kann, das keinen BASIC-Speicher verbraucht und dann immer bereit ist, wenn man es braucht.

Die Funktionen von Atari WozMon anhand von Beispielen:
(Alle Speicherstellen werden hexadezimal notiert, Buchstaben müssen immer Großbuchstaben sein, die maximale Eingabelänge sind 36 Zeichen pro Zeile)

Auslesen der Speicherstelle $0600:

Code: Alles auswählen

600
0600: D8
Auslesen mehrerer Speicherstellen:

Code: Alles auswählen

600 604 60B
0600: D8
0604: 01
060B: A9
Ein Punkt vor der Adresse gibt alle Speicherstellen von der zuletzt genutzten Speicherstelle ($060B im letzten Beispiel) bis zu der Speicherstelle nach dem Punkt aus:

Code: Alles auswählen

.60F
05 9D 42 03
Auslesen des Speicherbereichs $0600 bis $060F:

Code: Alles auswählen

600.60F
0600: D8 A5 06 F0 01 68 A9 9B
0608: 20 DD 06 A9 05 9D 42 03

Schreiben der Speicherstelle $A800 mit dem Wert $A0:

Code: Alles auswählen

A800:A0
A800: 00
Als Ausgabe wird hier der vorher(!) enthaltene Wert ausgegeben. Ein wiederholtes Auslesen bringt dann den neuen Wert:

Code: Alles auswählen

A800
A800: A0
Schreiben mehrerer Werte ab Speicherstelle $A800:

Code: Alles auswählen

A800:A9 03 8D 00 A9
A800: A0
Nur der erste (vorher enthaltene) Wert wird ausgegeben. Überprüfen des Schreibens durch Auslesen des Speicherbereichs:

Code: Alles auswählen

A800.A807
A800: A9 03 8D 00 A9 00 00 00
Sprung (JMP) zur Speicheradresse und Ausführen des dortigen Programmcodes:

Code: Alles auswählen

A79F R
[/b]
(Springt zur DOS 2.5 Startadresse. Empfohlener Weg anstatt „X“, um unter DOS von Atari WozMon zurück zu DOS zu gelangen)

WozMon verlassen (und ggf. zurück zu BASIC gelangen): (DOS 2.5 führt unglücklicherweise einen JMP aus (und kein JSR), so dass X hier nicht funktioniert. Um zu DOS zurückzugelangen, muss ein Sprung zur Speicherstelle im Vektor $000A/$000B erfolgen)

Screenshot 1: Start von Atari WozMon mit Kurzanleitung aus BASIC heraus (Startadresse 1024), Auslesen des Speicherbereichs von $0600 bis $0607:
atari001.png
atari001.png (9.48 KiB) 1350 mal betrachtet
Screenshot 2: Direkter Start des Monitors von AtariWozMon (Startadresse 1536), Auslesen von Speicherbereich $0600 bis $063F:
atari002.png
atari002.png (9.09 KiB) 1350 mal betrachtet
Screenshot 3: Auslesen des Bildschirmspeicher-Vektors ($58/$59, dez. 88/89), dann direktes Schreiben in den Bildschirmspeicher ($9C40 und $9F60):
atari003.png
atari003.png (6.42 KiB) 1350 mal betrachtet
Screenshot 4: Ändern der Graphics 0 Display-List durch setzen des DLI-Bits, erstellen einer DLI-Routine ab $400, Rücksprung in BASIC, Aktivieren des DLI durch POKEs:
atari004.png
atari004.png (8.85 KiB) 1350 mal betrachtet

Benutzeravatar
andymanone
Beiträge: 2585
Registriert: 17.08.2021 12:34
Wohnort: Berlin - Suburban
Has thanked: 525 times
Been thanked: 863 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von andymanone »

Hey Frederik,
super cool 8-) !!!

Btw.:
Was ist denn aus deinem Malaysia-Trip geworden? Steht das noch an oder ist das verschoben worden?

Gtx.,
andY
Ressortleiter Hardware - Save the past and use the future!© andYManOne / Demozoo / My brandnew, experimental Album "Apocalyptic Symphony"

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Danke :) - als mir letztes Jahr die Idee kam, dachte ich, dass das bestimmt schon mal jemand gemacht hat, aber anscheinend gibt's das für den 8-Bit Atari wirklich noch nicht. Und es war auch nicht so einfach, das anzupassen, weil Woz da schon wirklich sehr viel Apple-I-spezifische Tricks angewandt hat, um das in 256 Bytes zu bekommen. Aber ich finde es inzwischen selbst ein echt nützliches Tool, wenn man auf "echter" Hardware arbeitet und gerade keinen Freezer o.ä. dabei hat, weil es sich so nahtlos einbinden lässt.

Malayisa steht noch an, am 8.8. geht der Flieger, rechtzeitig nach der ASC-Deadline ;)...

Benutzeravatar
andymanone
Beiträge: 2585
Registriert: 17.08.2021 12:34
Wohnort: Berlin - Suburban
Has thanked: 525 times
Been thanked: 863 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von andymanone »

freetz hat geschrieben:
03.07.2023 22:33
Danke :) - als mir letztes Jahr die Idee kam, dachte ich, dass das bestimmt schon mal jemand gemacht hat, aber anscheinend gibt's das für den 8-Bit Atari wirklich noch nicht. Und es war auch nicht so einfach, das anzupassen, weil Woz da schon wirklich sehr viel Apple-I-spezifische Tricks angewandt hat, um das in 256 Bytes zu bekommen. Aber ich finde es inzwischen selbst ein echt nützliches Tool, wenn man auf "echter" Hardware arbeitet und gerade keinen Freezer o.ä. dabei hat, weil es sich so nahtlos einbinden lässt.

Malayisa steht noch an, am 8.8. geht der Flieger, rechtzeitig nach der ASC-Deadline ;)...
Coole Sache, mein Freund 8-) :) !!!

Alles klar! Na dann "Gute Reise" und melde dich von dort wenn du dich ein bisschen "eingelebt" hast !

Anna und ich sind dann ab Mitte August auch erstmal ca. 5 Wochen in Argentinien....

Mal sehen... ob ich wiederkomme, weiß ich noch nicht so genau ;)

Gtx.,
andY
Ressortleiter Hardware - Save the past and use the future!© andYManOne / Demozoo / My brandnew, experimental Album "Apocalyptic Symphony"

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Mach' ich :) - und Euch dann eine gute Zeit in Argentinien - und wenn wir wiederkommen, müsst Ihr das aber auch ;)...

Benutzeravatar
Mathy
Beiträge: 1170
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 478 times
Been thanked: 261 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von Mathy »

.
Hallo Frederik

freetz hat geschrieben:
03.07.2023 22:33
... dass das bestimmt schon mal jemand gemacht hat...
Jetzt wo Du es erwähnst. Irgendwo in eine ganz dunklen Ecke meines Gehirns, wo schon seit Jahren kein Licht mehr gebrannt hat (in der dunklen Ecke, nicht im ganzen Hirn!), scheint sich eine Erinnerung zu verstecken die mir sagt das es damals öfter so Mini-Programme gab. Wenn ich mich nicht irre in US-Magazine. Die sich oft in Page6 versteckten und von dort aus ihre Wohltaten verübten. Kann sein das darunter auch einen Monitor war. Aber wie gesagt, ganz dunkle Ecke...

Tschüß

Mathy
Wer oder was hat denn da geblitzt?

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Ja, an solche Miniprogramme erinnere ich mich auch, aber einen ML-Monitor erinnere ich in der Größe nicht - und ich habe damals schon immer nach besonders kurzen Programmen Ausschau gehalten, weil ich so tippfaul war - deswegen sind vielleicht die meisten meiner jüngeren Programme im <1kB-Bereich angesiedelt... ;)

slx
Beiträge: 136
Registriert: 18.06.2021 23:16
Has thanked: 94 times
Been thanked: 12 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von slx »

Tolle Idee und toller Port!

Was Page 6 anlangt, gab es sogar eine Programmsammlung namens "Page 6" von Synapse. Musste ich damals natürlich haben, habe alles einmal ausprobiert und dann wohl größtenteils nicht mehr verwendet. In England gab's ein Magazin dieses Namens. Blöd' ist nur, dass nicht alle Assembler die Page 6 freilassen, was das Testen auf echter Hardware etwas verkompliziert.

Ich kann mich daran erinnern, dass in einem Maschinensprache-Buch (Programming the 6502 von Rodney Zaks?) als Beispiel der Code eines Apple-(II?)-ML-Monitor abgedruckt war, der die 6502-Opcodes in weniger als 3 Byte pro Opcode untergebracht hat, und habe das für einen eigenen Monitor (mit meiner Erinnerung nach ca. 7K deutlich größer als WozMon) verwendet. Den ausgedruckten Source Code (leider ohne jeglichen Kommentar) hab' ich kürzlich gefunden, irgendwo sogar ein .EXE, das aber nicht auf XLs läuft, ohne dass ich bis jetzt herausgefunden hätte warum.

Noch so ein liegengebliebenes Projekt....

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Danke!
Was die Verwendung der Page 6 durch andere Programme angeht: Teil des eingereichten Beitrags ist auch der Sourcecode, so dass sich durch bloßes Ändern der org-Direktive jeder andere gewünschte Speicherbereich für das Programm möglich wird.
Wenn es außerhalb der Page 6 noch einen anderen sinnvollen Speicherbereich gibt, kann ich auch einfach noch eine Alternativ-Version mit einreichen, die dann irgendwo oberhalb des BASIC liegt, aber dann nur auf Maschinen mit 48k oder mehr läuft...

Benutzeravatar
DjayBee
Beiträge: 678
Registriert: 17.08.2021 04:02
Has thanked: 418 times
Been thanked: 199 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von DjayBee »

Zufälligerweise hat Ben Eater letztes Wochenende ein Video auf YouTube gestellt, das die Funktion von WozMon im Detail erklärt.
Da sind ein paar nette Kniffe drin. :idea:

https://youtu.be/SpG8rgI7Hec

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Ah, gut zu wissen, dass es jetzt öffentlich verfügbar ist, für seine Patreons gibt es das schon etwas länger, aber den Link darf man ja nicht so ohne weiteres posten. Aber es ist schon genial, was Woz da veranstaltet hat (und wie gut Eater es erklären kann) :)...

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Um die Möglichkeiten von Atari WozMon ein bisschen deutlicher zu machen, habe ich mal ein kleines Video aufgenommen. Ist zwar in Englisch, aber das meiste sollte selbsterklärend sein:
https://youtu.be/3MdVf_60dfo

Benutzeravatar
MichaG
Beiträge: 381
Registriert: 14.10.2021 12:54
Has thanked: 389 times
Been thanked: 111 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von MichaG »

reifsnyderb von AtariAge hat den WozMon in sein alternatives Atari-OS mit eingebaut:

https://forums.atariage.com/topic/34769 ... nt=5359591
ABBUC-Mitglied aus den 90ern/frühen 2000ern
Ex-WAF und Regionalgruppe Thüringen

freetz
Beiträge: 53
Registriert: 17.08.2021 00:30
Has thanked: 6 times
Been thanked: 30 times
Kontaktdaten:

Re: Wettbewerbsbeitrag: Atari WozMon

Beitrag von freetz »

Danke für den Hinweis! Das wäre mir sonst entgangen... Freut mich sehr, wenn WozMon da noch mal zu einem sinnvollen Einsatz kommt und sogar beim Debuggen der 1090 helfen kann :)...

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast