![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen, heute habe ich die von anderen Computersystemen bekannten PEEK- und POKE-Funktionen, mit denen der Inhalt einer Speicherzelle an einer bestimmten Adresse zurückgeliefert oder beschrieben werden kann, auf der Open-Macro implementiert. Der Sourcecode zeigt zudem, wie Werte vom Rechenstack gelesen und auf ihm zurückgeliefert werden können. Vielleicht kann jemand den Code gebrauchen: ' --------------------------------------------------------------------------- ' PEEK und POKE (8 Bit & 16 Bit) für die Open-Macro ' In OCBASIC 1.08a von Dietmar Harlos am 4. April 2012 ' --------------------------------------------------------------------------- INCLUDE "omac.def" DIM a WORD PrintHex=ON ' Als Demo: Buffer der ESCI beschreiben und lesen FOR a=&h0137 TO &h013f poke a,&hbb NEXT a FOR a=&h0137 TO &h013f PRINT a;": ";peek(a) NEXT a FOR a=&h0137 TO &h013d STEP 2 pokew a,&habcd NEXT a FOR a=&h0137 TO &h013d STEP 2 PRINT a;": ";peekw(a) NEXT a 'gesamten Speicher über serielle Schnittstelle ausgeben 'a=0 'REPEAT ' PUT peek(a) ' ADD a,1 'UNTIL a=0 End2Host=ON END ' --------------------------------------------------------------------------- ' Inhalt der Speicherzelle an Adresse adr zurückliefern - 8 Bit = 1 Byte FUNCTION peek(adr) INLASM ! jsr FwPop 'Rueckgabe eines Words auf OSTEMP:A ! ldhx OSTEMP 'Trick: LDHX für das High-Byte der Adresse ! tax 'TAX für das Low-Byte ! lda ,x 'von der Adresse H:X lesen ! clrx 'FwPush (Byte auf dem Rechenstack speichern) ! swi END FUNCTION ' --------------------------------------------------------------------------- ' Speicherzelle an Adresse adr mit Wert beschreiben - 8 Bit = 1 Byte PROCEDURE poke(adr,wert) INLASM ! jsr FwPop 'Rueckgabe eines Words auf OSTEMP:A ! pusha ! jsr FwPop ! ldhx OSTEMP ! tax ! popa ! sta ,x ! rts END PROCEDURE ' --------------------------------------------------------------------------- ' Inhalt der Speicherzelle an Adresse adr zurückliefern - 16 Bit = 1 Word FUNCTION peekw(adr) INLASM ! jsr FwPop 'Rueckgabe eines Words auf OSTEMP:A ! ldhx OSTEMP ! tax ! mov ,x+,OSTEMP ! lda ,x ! jmp FwPushW 'Word OSTEMP:A auf dem Rechenstack speichern END FUNCTION ' --------------------------------------------------------------------------- ' Speicherzelle an Adresse adr mit Wert beschreiben - 16 Bit = 1 Word PROCEDURE pokew(adr,wert) INLASM ! jsr FwPop 'Rueckgabe eines Words auf OSTEMP:A ! pusha ! lda OSTEMP ! pusha ! jsr FwPop ! ldhx OSTEMP ! tax ! popa ! sta ,x ! popa ! sta 1,x ! rts END PROCEDURE ' --------------------------------------------------------------------------- ' Die Firmware-Routinen einbinden ' --------------------------------------------------------------------------- INCLUDE "om_fw.pro" Viel Spaß mit den OM-Controllern Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |