148 lines
4.6 KiB
PHP
148 lines
4.6 KiB
PHP
save
|
|
listing off ; kein Listing über diesen File
|
|
|
|
;****************************************************************************
|
|
;* *
|
|
;* AS 1.39 - Datei STDDEF62.INC *
|
|
;* *
|
|
;* Sinn : enthält SFR- und Makrodefinitionen für die ST62xx-Prozessoren *
|
|
;* *
|
|
;* letzte Änderungen : 7. 8.1993 *
|
|
;* 11. 9.1993 Meldung nur im 1.Pass *
|
|
;* 21.11.1993 ROMWIN eingebaut *
|
|
;* *
|
|
;****************************************************************************
|
|
|
|
ifndef stddef62inc ; verhindert Mehrfacheinbindung
|
|
|
|
stddef62inc equ 1
|
|
|
|
if (MOMCPU<>25104)&&(MOMCPU<>25109)&&(MOMCPU<>25120)&&(MOMCPU<>25125)
|
|
fatal "Falscher Prozessortyp eingestellt: nur ST6210, ST6215, ST6220 oder ST6225 erlaubt!"
|
|
endif
|
|
|
|
if MOMPASS=1
|
|
message "ST62xx-SFR-Definitionen (C) 1993 Alfred Arnold"
|
|
message "Zielprozessor: ST\{MOMCPU}"
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; erstmal die Sachen, die es überall gibt :
|
|
|
|
RegX SFR 80h ; Registeradressen (die kennt AS aber
|
|
RegY SFR 81h ; auch schon intern, nur der Voll-
|
|
RegV SFR 82h ; ständigkeit halber)
|
|
RegW SFR 83h
|
|
RegA SFR 0ffh
|
|
|
|
RomBase SFR 40h ; Basisadresse ROM-Fenster (besser
|
|
RDW SFR 0c9h ; aber das ASSUME-Feature nutzen)
|
|
|
|
PA SFR 0c0h ; Port A
|
|
DDRA SFR 0c4h
|
|
OPTA SFR 0cch
|
|
PB SFR 0c1h ; Port B
|
|
DDRB SFR 0c5h
|
|
OPTB SFR 0cdh
|
|
|
|
IOPT SFR 0c8h ; Interrupt-Steuerung
|
|
|
|
ADDATA SFR 0d0h ; A/D-Wandler
|
|
ADCTRL SFR 0d1h
|
|
|
|
TPSC SFR 0d2h ; Timer
|
|
TDATA SFR 0d3h
|
|
TSCR SFR 0d4h
|
|
|
|
WDOG SFR 0d8h ; Watchdog
|
|
|
|
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
; Port C nur mit den 28-Pinnern:
|
|
|
|
if (MOMCPU=6215H)||(MOMCPU=6225H)
|
|
PC SFR 0c2h ; Port C
|
|
DDRC SFR 0c6h
|
|
OPTC SFR 0ceh
|
|
endif
|
|
|
|
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
; hiermit versuche ich, etwas die Leerstellen im Befehlssatz aufzufangen.
|
|
; das ist nur ein Angebot an Ihre Bequemlichkeit, niemand zwingt Sie, diese
|
|
; Makros zu benutzen, wenn Sie es im Einzelfall kürzer können!
|
|
|
|
; Addition/Subtraktion mit Carry: erster Operand muß A (Akku) sein!
|
|
|
|
adc macro dst,src
|
|
jrnc NoCarry
|
|
inc dst
|
|
NoCarry: add dst,src ; Rest normal addieren
|
|
endm
|
|
|
|
sbc macro dst,src
|
|
jrnc NoCarry
|
|
dec dst
|
|
NoCarry: sub dst,src
|
|
endm
|
|
|
|
; ODER-Verknüpfung:
|
|
; arbeitet nach der Regel von De Morgan: A OR B = /((/A) AND (/B))
|
|
; verwendet W-Register
|
|
; dst muß A (Akku) sein!
|
|
|
|
or macro dst,src
|
|
com dst
|
|
ld w,dst
|
|
ld dst,src
|
|
com dst
|
|
and dst,w
|
|
com dst
|
|
endm
|
|
|
|
; EXOR-Verknüpfung:
|
|
; arbeitet nach dem Prinzip der 4 NAND-Gatter, muß also selber nicht auf
|
|
; das OR-Makro zugreifen
|
|
; verwendet V- und W-Register
|
|
; dst muß A (Akku) sein!
|
|
|
|
xor macro dst,src
|
|
ld v,dst ; Op1 retten
|
|
and dst,src ; Hilfsergebnis A NAND B bilden
|
|
com dst
|
|
ld w,dst ; in W retten
|
|
ld dst,v ; Op1 nochmal holen
|
|
and dst,w ; 1. Teilergebnis A NAND W bilden
|
|
com dst
|
|
ld v,dst ; in V retten
|
|
ld dst,src ; 2. Teilergebnis B NAND W bilden
|
|
and dst,w
|
|
com dst
|
|
and dst,v
|
|
com dst
|
|
endif
|
|
endm
|
|
|
|
; rechts mit Carry rotieren
|
|
; ok, das ist brute force, aber mir ist nix besseres eingefallen...
|
|
; dst muß Akku (A) sein
|
|
|
|
rrc macro dst
|
|
rept 7
|
|
rlc dst
|
|
endm
|
|
endm
|
|
|
|
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
; Für diejenigen, die auf einmal den ROMWIN-Befehl vermissen, hier eine
|
|
; kleine Überbrückungshilfe:
|
|
|
|
romwin macro adr
|
|
assume rombase:adr>>6
|
|
endm
|
|
|
|
;---------------------------------------------------------------------------
|
|
|
|
endif
|
|
|
|
restore ; wieder erlauben
|
|
|