Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 PEEK und POKE (8 Bit & 16 Bit) Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 4.04.2012 22:38)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Mini M-Unit, Open-Mini Station, sonstige
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
PRINT

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

Bisherige Antworten: