home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / as65 / test / as6502_demo.asm next >
Assembly Source File  |  1995-02-27  |  19KB  |  710 lines

  1.                 tabsize    3
  2.                 ; ******************************
  3.                 ; Test,- und Demofile für AS65xx
  4.                 ; ******************************
  5.                 ; Tabulatorabstand 3 Zeichen
  6.  
  7.                 sernr TLS_B0001    ; Seriennummer
  8.                 pro R65C02            ; muß nicht angegeben werden, default Einstellung
  9.                                         ; ist ROCKWELL Standart
  10.                 showsym fs            ; Symboltabelle in File (f) und auf Screen (s)
  11.                 ascii                    ; ASCII-File erzeugen
  12.                 showpc 10            ; PC-Anzeige nur jedes 10`te Byte
  13.                 warnoff                ; keine Warnings ausgeben
  14.                 liston fs            ; Assembler-Listing in File (f) und auf Screen(l)
  15.                 setout "RAM:"        ; alle Ausgabefiles, .obj, .asc, usw. ins RAM
  16.                 seterr fs            ; Fehlermeldungen ins .err File und auf Screen
  17.  
  18.  
  19. poke            macroseg                ; Beginn der Definition des Macros "poke"
  20.                 lda #!2                ; Einsetzen des 2.Parameters
  21.                 sta !1                ; dito 1.Parameter
  22.                 endmacro                ; Ende der Macrodefinition
  23.  
  24. inc16            macro                    ; Macro zum Erhöhen eines 16-Bit Pointers
  25.                 inc !1                ; low-Byte erhöhen
  26.                 bne end                ; kein Überlauf, <>0
  27.                 inc !1+1                ; hi-Byte erhöhen
  28. end
  29.                 endmacro
  30.  
  31. error            macro
  32.                 ldx #<txt            ; low-Byte
  33.                 ldy #>txt            ; hi-Byte
  34.                 jsr print            ; Text ausgeben
  35.                 lda #!1                ; Parameter 1 einsetzen
  36.                 jmp error            ; Fehlerbehandlung
  37. txt            null    "!2"            ; Textparameter einsetzen, muß letzter Par. sein
  38.                 endmacro
  39.  
  40.  
  41.  
  42.  
  43.  
  44. Start_adr    equ    %1010            ; unveränderbare Konstante Wert 10
  45.  
  46.                 *= Start_adr        ; PC setzen
  47.  
  48.         
  49.  
  50.  
  51.                 ; Zeropageadressierung (Prg. soll in der Zeropage laufen)
  52. zp_1            inx
  53.                 LDA zp_1                ; Label 'zp_1' < 256, bereits bekannt
  54.                                         ; Opcode A5 und 1Byte Adr. von zp_1
  55.                 Lda @zp_2            ; durch Voranstellen des '@' wird dem Assembler
  56.                                         ; mitgeteilt das es sich um ein Label im
  57.                                         ; Zeropagebereich handelt, Definition von 'zp_2'
  58.                                         ; erst später
  59.                                         ; ohne @ würde Opcode AD und 2Byte Adr. von zp_2
  60.                 iny
  61. zp_2            brk
  62.  
  63.  
  64.                 ; -----------
  65.                 ; branch Test
  66.                 ; -----------
  67.                 block
  68. loop            bne loop                d0 fe
  69.                 bne loop                ; d0 fc
  70.                 bne loop_1            ; d0 02
  71.                 bne loop_1            ; d0 00
  72. loop_1
  73.  
  74.                 *= * + 126
  75.                 bne loop_1            ; d0 80    max. Sprungweite $80 (backward)
  76.  
  77.                 bne loop_2            ; d0 7f    max. Sprungweite $7f (forward)
  78.                 *= * + 127
  79. loop_2
  80.                 bend
  81.  
  82.  
  83.                 ; ----------------------------
  84.                 ; Mnenomic Schreibweise testen
  85.                 ; ----------------------------
  86.                 asl a
  87.                 ASL A
  88.                 AsL a
  89.                 asL A
  90.  
  91.  
  92.  
  93.                 ; -------------------------
  94.                 ; aritmethische Operationen
  95.                 ; -------------------------
  96. pc_add        set    2                Variable anlegen, Wert 2
  97.  
  98.                 *= * + 1                ; PC + dezimal 1
  99.                 *= * + 2                ; PC + dezimal 2
  100.                 *= * + 3                ; PC + dezimal 3
  101.                 *= * + 4                ; PC + dezimal 4
  102.                 *= * * 2                ; PC *    2
  103.                 *= * + $2            ; PC + hex 2
  104.                 *= * + %1010        ; PC + binär 10
  105.                 *= * + pc_add        ; PC + pc_add
  106. HLP            set    1 << 2        ; HLP = 4 ( 1, 2x Shift links )
  107.                 *= * + HLP            ; PC + 4
  108. HLP            set    8 >> 1        ; HLP = 4 ( 8, 1x Shift rechts )
  109.                 *= * + HLP            ; PC + 4
  110.                 *= * + !$fffe        ; PC + 1 ( Komplement = 1 )
  111. HLP            set    5 ~ 2            ; HLP = 1 ( Rest von 5/2, modulo )
  112.                 *= * + HLP            ; PC + 1
  113.                 *= * + <pc_add        ; PC + low-Byte von pc_add (02)
  114.                 *= * + >pc_add        ; PC + high-Byte von pc_add (00)
  115.  
  116.  
  117.                 *= $1000                ; PC neu setzen,
  118.                                         ; Bereich zwischen altem und neuem PC
  119.                                         ; wird mit $ff gefüllt
  120.  
  121.                 
  122. Label_2000     set     $ffff            veränderbare Konstante dezimal
  123. Label_ffff    set    %1111111111111111    dito binär
  124. Label_FFFF    set    65535            dito dezimal
  125. Label_add    set    * + 5            dito PC+5
  126. Label_add    set    * * 5            dito PC*5
  127.  
  128.  
  129.                 ; -----------------------------------------------
  130.                 ; Zuweisung von Werten an Symbole mit auto Offset
  131.                 ; -----------------------------------------------
  132.                 org    $100    ; Startadresse für .do festlegen
  133. Dolab_100    sdo    1        ; eine Variable mit dem Wert $100 wird angelegt
  134. Dolab_101    edo    $10    ; eine Konstante mit dem Wert $101 wird angelegt
  135.  
  136. Dolab_111    edo    %1        ; der Wert $111 wird der Konstanten zugewiesen
  137. Dolab_offs    sdo    0        ; aktuellen Offset ermitteln ($112)
  138.  
  139.  
  140.                 org    $100    ; Startadresse für .lo festlegen
  141. Lolab_ff        slo    1        ; der Wert $ff wird dem Symbol zugewiesen
  142. Lolab_ef        slo    $10    ; der Wert $ef wird dem Symbol zugewiesen
  143.  
  144. Lolab_ee        elo    %1        ; der Wert $ee wird dem Symbol zugewiesen
  145. Lolab_offs    slo    0        ; aktuellen Offset ermitteln ($ee)
  146.  
  147.  
  148.  
  149. Label                                    ; globales Label definieren
  150. Label_1        Lda    #<Label_2000; dito direkt mit Befehl
  151.  
  152.  
  153.                 ; ------------------
  154.                 ; Datenbytes ablegen
  155.                 ; ------------------
  156. norm_txt        text    "\"Thomas Lehmann\""    ; Textstring: "Thomas Lehmann"
  157. null_txt        null    "Thomas Lehmann"    ; Null wird angehängt
  158. shift_txt    shift    "Thomas Lehmann"    ; letztes Zeichen wird geshiftet
  159.  
  160. Byte_lab_1    byte        $0a            hex
  161. Byte_lab_2    byte        %1010            binär
  162. Byte_lab_3    byte        10                dezimal
  163. Byte_lab_4    byte        >Label_10    high Byte von Label_10
  164. Byte_lab_5    byte        <Label_10    low Byte von Label_10
  165. Byte_lab_6    byte        <$100A , 10, $0a, %1010        Tabelle mit 4*10 anlegen
  166.  
  167. Dbyte_lab_1    dbyte    $1000                high/low hex
  168. Dbyte_lab_2    dbyte    %1111111111111111        high/low binär
  169. Dbyte_lab_3    dbyte    1000                high/low dezimal
  170. Dbyte_lab_4    dbyte    Label_10            high/low Label_10
  171.  
  172. Word_lab_1    word        $1000            low/high hex
  173. Word_lab_2    word        %1111111111111111        low/high binär
  174. Word_lab_3    word        1000            low/high dezimal
  175. Word_lab_4    word        Label_10        low/high Label_10
  176.  
  177. Rta_lab_1    rta        $1000            low/high hex, Value-1
  178. Rta_lab_2    rta        %1111111111111111        low/high binär, Value-1
  179. Rta_lab_3    rta        1000            low/high dezimal, Value-1
  180. Rta_lab_4    rta        Label_10        low/high Label_10, Value-1
  181.  
  182.  
  183. Lab
  184. Arith_lab    word        Lab , Lab + 10, Lab+$10, %1010
  185.  
  186.  
  187.  
  188.                 ; ----------------------
  189.                 ; bedingte Assemblierung
  190.                 ; ----------------------
  191. test_if        set    1 + 4                Val 5
  192. test_if1        set    1 + test_if*2    Val 11
  193.  
  194.                 if test_if            ; erfüllt wenn !=0
  195.                 byte 01                ; assemblieren
  196.  
  197.                 ifequ test_if - 5    ; erfüllt wenn ==0
  198.                 byte 02                ; assemblieren
  199.             
  200.                 ifmi test_if-3        ; erfüllt wenn < 0        ------
  201.                 byte 03                ; nicht assemblieren            |
  202.                                         ;                                     |
  203.                 ; nicht assemblieren, da ifmi nicht erfüllt    |
  204.                                         ;                                     |
  205.                 ifpl    test_if        ; erfüllt wenn >=0            |
  206.                 byte 04                ; assemblieren                    |
  207.                                         ;                                    |
  208.                 endif                    ; ifpl                            |
  209.                 endif                    ; ifmi    <-----------------
  210.                 endif                    ; ifequ
  211.                 endif                    ; if
  212.  
  213. setdef        set 1
  214. equdef        equ 1
  215.  
  216.                 ifdef setdef
  217.                 lda setdef
  218.                 endif
  219.  
  220.                 ifdef equdef
  221.                 lda equdef
  222.                 endif
  223.  
  224.                 ifndef equdef
  225. equdef        equ 5
  226.                 endif
  227.  
  228.  
  229.  
  230.                 ; -------------
  231.                 ; File einfügen
  232.                 ; -------------
  233.                 include "as6502_demo1.inc"
  234.  
  235. test_if        set    6                siehe as6502_demo1.inc
  236.  
  237.                 include "as6502_demo1.inc"
  238.  
  239.  
  240.                 *!= $5000            ; PC neu setzen,
  241.                                         ; Bereich wird nicht gefüllt
  242.  
  243.  
  244.                 ; ------------------
  245.                 ; Adressierungsarten
  246.                 ; ------------------
  247.                 lda #$10                ; immediate
  248.                 lda 200                ; zeropage
  249.                 lda 200,x            ; zeropage,x
  250.                 ldx 200,y            ; zeropage,y
  251.                 lda 1000                ; absolute
  252.                 lda 1000,x            ; absolut,x
  253.                 lda 1000,y            ; absolut,y
  254.  
  255.                 lda (200,x)            ; indirekt,x        nur zeropage
  256.                 lda (200),y            ; indirekt,y        nur zeropage
  257.  
  258.                 jmp (1000)            ; indirekt        2Byte
  259.                 jmp (10)                ; indirekt        2byte
  260.                 jmp 1000                ; absolut            2Byte
  261.                 jmp 10                ; absolut            2Byte
  262.                 jsr 1000                ; absolut            2byte
  263.                 jsr 10                ; absolut            2byte
  264.  
  265.  
  266.  
  267. Lowhigh_1
  268.                 lda #<Lowhigh_1    ; low Byte von Lowhigh_1
  269.                 lda #>Lowhigh_1    ; high Byte
  270.                 lda Lowhigh_1        ; high/low byte
  271.  
  272.                 lda #"x"                ; einfaches ASCII-Zeichen
  273.                 bpl Branch_1        ; Sprung
  274.                 inx
  275. Branch_1        bne Branch_2
  276.  
  277. Branch_2        asl
  278.  
  279.  
  280.                 ; -------------
  281.                 ; lokale Labels
  282.                 ; -------------
  283.                 block                ; lokale Labels, nur zwischen .block und .bend
  284.                 ldx #00                ; gültig
  285. loop            lda null_txt,x        ; letztes Textzeichen '0'
  286.                 beq end
  287.                 inx
  288.                 bne loop
  289. end
  290.                 bend
  291.  
  292.                 block
  293.                 brk
  294. loop            bne loop
  295.                 lda norm_txt
  296.                 bend
  297.  
  298.  
  299.                 ; ------
  300.                 ; Macros
  301.                 ; ------
  302.                 ?poke $1000,10        ; Aufruf mit Übergabe von zwei Parametern
  303.  
  304.                 ?inc16 $79
  305.  
  306.                 ?error 10,"Syntax"
  307.  
  308. print            nop                    ; Label wird vom Macro error angesprungen
  309. error            nop                    ; Label wird vom Macro error angesprungen
  310.  
  311.  
  312.                 ; =====================================
  313.                 ; Assemblerschleife ohne interne Labels
  314.                 ; =====================================
  315.  
  316.                 sei                    ; Interrupt abschalten
  317.                 ldx #$00
  318.  
  319. counter        set    3                ; 3 Durchläufe
  320.                 assloop                ; Beginn der Assemblerschleife
  321.  
  322.                 ; ---------------------------------
  323.                 ; diese Routine wird 3x assembliert
  324.                 ; ---------------------------------
  325.  
  326.                 lda #$ff                
  327.                 sta $7000,x            ; Speicher mit $ff füllen
  328.                 inx
  329. counter        set    counter-1    ; counter erniedrigen
  330.                 if    counter        ; counter ungleich 0?
  331.                 assend                ; ja, weiter bei assloop
  332.                 endif
  333.                 cli                    ; Interrupt wieder freigeben
  334.  
  335.  
  336.  
  337.                 ; =====================================
  338.                 ; Assemblerschleife mit internen Labels
  339.                 ; =====================================
  340.  
  341.                 breakpt    2            ; Assemblierung im Pass2 anhalten
  342.                 sei                    ; Interrupt abschalten
  343.                 ldx #$00
  344.  
  345. count_bl        set    6                ; 6 Durchläufe
  346.                 assloop                ; Beginn der Assemblerschleife
  347.  
  348.                 ; ---------------------------------
  349.                 ; diese Routine wird 6x assembliert
  350.                 ; ---------------------------------
  351.  
  352.                 block
  353.                 lda Byte                
  354.                 sta Text,x            ; Text überschreiben
  355.                 inx
  356. Byte            byte $01,$02,$03
  357.                 bend
  358.  
  359. count_bl        set    count_bl-1    ; counter erniedrigen
  360.                 if    count_bl        ; counter ungleich 0?
  361.                 assend                ; ja, weiter bei assloop
  362.                 endif
  363.                 breakpt    2            ; Assemblierung im Pass2 anhalten
  364.                 cli                    ; Interrupt wieder freigeben
  365.  
  366. Text            null    "dieses Beispiel ist keine ernsthafte Anwendung"
  367.  
  368.  
  369.  
  370.                 ; ------------------------
  371.                 ; aktuelle Zeit einsetzten
  372.                 ; ------------------------
  373.                 text "assm time: "        ; siehe Ojektfile
  374.                 time weekdayg                ; Wochentag deutsch
  375.                 byte " "
  376.                 time day                    ; Tag (01-31)
  377.                 byte "."            
  378.                 time monthg                ; Monat deutsch
  379.                 byte " "
  380.                 time year                    ; Jahr
  381.                 byte 0                        ; Stringende kennzeichnen
  382.  
  383.  
  384.  
  385. Label_10                                ; Endadresse+1 merken
  386.  
  387.                 showpc val            ; aktuellen PC zeigen
  388.                 endasm                ; Assemblierung beenden
  389.  
  390.  
  391.  
  392.  
  393.                         ; **********************
  394.                         ; Kurzbeschreibung  AS65
  395.                         ; **********************
  396.  
  397.                         ; Das erste Argument einer Source Zeile wird als Label
  398.                         ; definiert. Befehle und Pseudo-Opcodes müssen daher
  399.                         ; durch mindestenst ein SPACE oder TAB vom Zeilenanfang
  400.                         ; getrennt sein.
  401.  
  402.  
  403. Label_1                ; Die Länge eines Labels wird nur durch die max. Anzahl
  404.                         ; Character/Zeile (250) bestimmt.
  405.                         ; Labels müssen mit Buchstaben oder Underline beginnen
  406.                         ; Die Zeichen a, x, y sind reservierte Buchstaben und
  407.                         ; können nicht als Label definiert werden
  408.                         ; es wird zwischen Groß,- und Kleinschrift unterschieden
  409.                         ; Labels müssen vor Eingabe von Befehlen definiert werden
  410.  
  411.                         ; Label_1                             ; erlaubt
  412.                         ; Label_1     lda $1234,x            ; erlaubt
  413.                         ; lda $1234,x     Label_1             ; nicht erlaubt
  414.  
  415.                         ; die Anzahl der globalen und lokalen Labels und ist nur 
  416.                         ; vom verfügbaren Speicherplatz abhängig
  417.  
  418.  
  419. O p c o d e s:
  420. --------------
  421.  
  422. sernr                    ; Seriennummer eintragen
  423.  
  424.  
  425. Files:
  426. ------
  427. include    "name"    ; verketten mehrere Sourcefiles
  428. ascii                    ; ASCII-File erzeugen
  429. seterr f                ; Fehlermeldungen nur ins Error-File schreiben, nicht
  430.                         ; auf Screen
  431. seterr fs            ; Fehlermeldungen ins Error-File und auf Screen
  432.  
  433.  
  434. Prossesortypen:
  435. ---------------
  436. pro                    ; Prossesortype definieren (ROCKWELL Standart)
  437. pro R6500            ; R6500
  438.                         ; R65C00
  439.                         ; R6501
  440.                         ; R65C01
  441.                         ; R6502
  442.                         ; R65C02
  443.                         ; R65C102
  444.                         ; R65C112
  445.                         ; R65C10
  446.                         ; R6511
  447.  
  448.  
  449. Programmcounter:
  450. ----------------
  451. *=                        ; Programmcounter setzen, Bereich zwischen altem und
  452.                         ; neuem PC wird mit $FF gefüllt
  453. *!=                    ; PC setzen, Adressraum zwischen altem und neuem PC nicht
  454.                         ; füllen
  455.  
  456.  
  457. Daten:
  458. ------
  459. byte                    ; Byte-Definition
  460. dbyte                    ; 16 Bit Adr. Hi/Lo ablegen (Doppel-Byte)
  461. word                    ; 16 Bit Adr. Lo/Hi ablegen
  462. text                    ; Textstring ablegen
  463. null                    ; dito, Ende mit NULL kennzeichnen (ein Zeichen mehr)
  464. shift                    ; wie .text, jedoch letztes Zeichen geschiftet
  465.  
  466.                         ; 09.Juli 1989
  467. rta                    ; Return Adresse ablegen, 2-Byte Adr.-1
  468.                         ; Programmiertrick die gewünschte Adresse wird auf den 
  469.                         ; Stack "gepushed", um dann mit einem "rts" in die ent-
  470.                         ; sprechende Routine einspringen zu können. Da der Prozessor
  471.                         ; die Adr. auf dem Stack beim Ausführen von "rts" erhöht.
  472.                         ; Sie muß deshalb vor dem Ablegen um 1 erniedrigt werden.
  473.                         ; Diese Aufgabe hat der Pseudo-Opcode "rta".
  474.  
  475. Beispiel:
  476. =========
  477. jump        asl a                ; accu enthält Befehlsnummer (0-2)
  478.             tax
  479.             lda beftab+1,x    ; hi-byte der Befehlsadr.-1
  480.             pha                ; auf Stack, vorgetäuschte Rückkehradr.
  481.             lda beftab,x    ; low-Byte der Befehlsadr.-1
  482.             pha
  483.             rts                ; Sprung zur Rückkehradr.
  484.  
  485. beftab    rta    plot, line, exit            ; Tabelle der Routinen-1
  486.  
  487.             word plot-1 , line-1, exit-1    ; würde die gleiche Tabelle erzeugen
  488.  
  489.  
  490.  
  491. Konstanten:
  492. -----------
  493. set                    ; veränderbare Konstante
  494. sdo                    ; mit auto Offset, erst zuweisen dann Offset erhöhen
  495. slo                    ; mit auto Offset, erst Wert vom Offs abziehen dann zuweisen
  496.  
  497. equ                    ; unveränderbare Konstante
  498. =                        ; dito andere Schreibweise
  499. edo                    ; siehe .sdo
  500. elo                    ; siehe .slo
  501.  
  502.  
  503. lokale Labels:
  504. --------------
  505. block                    ; Labelblock: lokale Variablen
  506. bend                    ; Labelblock Ende
  507.  
  508.  
  509. Symboltabelle:
  510. --------------
  511. showsym                ; Symboltabelle ausgeben
  512. showsym s            ; s = dito, nur bei Angabe mehrerer Optionen notwendig
  513. showsym f            ; f = Symboltabelle in Datei schreiben
  514. showsym fs            ; Symboltabelle in File(f) und auf Screen(s)
  515.  
  516.  
  517. Assemblersteuerung:
  518. ===================
  519.  
  520. bedingte Assemblierung:
  521. -----------------------
  522. if                        ; erfüllt wenn Ergebnis != 0
  523. ifequ                    ;   " "      "     "     "       == 0
  524. ifpl                    ;   " "      "     "  "    >= 0 positiv
  525. ifmi                    ;   " "      "     "  "    <= 0 negativ
  526. ifdef                    ; erfüllt wenn Symbol definiert ist
  527. ifndef                ; Gegenteil von ifdef
  528. endif                    ; Ende der if Anweisung
  529.  
  530. endasm                ; Assemblierung abbrechen */
  531.  
  532. showpc off            ; schaltet die Anzeige des Programmcounters beim Assemblieren
  533.                         ; aus
  534. showpc val            ; zeigt den aktuellen PC einmal
  535. showpc X                ; Anzeige des PC`s nur jedes X'te Byte,
  536.                         ; 'X' kann als dezimal, hex, binär oder bekannter Labelwert 
  537.                         ; angegeben werden
  538.                         ; diese Funktion dient nur der Beschleunigung des Assem-
  539.                         ; bliervorgangs, da die ständige Ausgabe des PC einige
  540.                         ; Zeit verschlingt
  541.  
  542. warnoff                ; keine Anzeige der Warnings
  543. warnon                ; Warnings wieder anzeigen
  544.  
  545. assloop                ; Beginn der Assemblerschleife
  546. assend                ; Ende der Assemblerschleife
  547.                         ; Routine zwischen .assloop und .assend wird mehrmals
  548.                         ; assembliert
  549.                         ; extrem zeitkritische Probleme, bei denen der benötigte
  550.                         ; Speicherplatz nur eine untergeordnete Rolle spielt
  551.  
  552. tabsize 5            ; Tabulatorabstand, Defaulteinstellung ist TAB 3
  553.                         ; ist nur in Verbindung mit Assemblerlisting von Bedeutung
  554.  
  555. liston                ; Assemblerlisting bis "listoff" oder Fileende ausgeben
  556. listoff                ; kein Assemblerlisting ausgeben
  557.  
  558. breakpt                ; Assemblierung im Pass2 anhalten
  559. breakpt    2            ; dito
  560. breakpt    1            ; Assemblierung im Pass1 anhalten
  561. breakpt    12            ; Assemblierung im Pass1+2 anhalten
  562. breakpt    12f        ; Assemblierung im Pass1+2 und auch bei "full Speed"
  563.                         ; Einstellung anhalten
  564.  
  565. conprt                ; String auf die Console ausgeben
  566.                         ; als Sonderzeichen können :
  567.                         ; \n für New Line
  568.                         ; \t für Tabulator
  569.                         ; \" für Anführungszeichen verwendet werden
  570.  
  571. fspeed                ; volle Assembliergeschwindigkeit
  572.                         ; Funktionen wie .ascii, .showsym usw. werden abgeschaltet
  573.                         ; das Objekt-File wird im RAM erzeugt
  574.  
  575. setout "path"        ; alle Ausgabefiles, .obj, .sym, .asc, .lst werden im
  576.                         ; angegebenen "path" erzeugt
  577.                         ; wird setout nicht angegeben, so werden die Files in dem
  578.                         ; Directory in dem das 1.Source-File steht erzeugt
  579.  
  580.  
  581. Zeit/Datum zum Assemblierzeitpunkt einsetzen:
  582. ---------------------------------------------
  583. time                    ; Fri Jun 30 01:49:05 1989
  584. time s                ; dito andere Schreibweise
  585. time weekdaye        ; Wochentag (Mon-Sun) englisch
  586. time weekdayg        ; Wochentag (Mon-Son) deutsch
  587. time year            ; Jahr (1989-????)
  588. time monthe        ; Monat englisch
  589. time    monthg        ; Monat deutsch
  590. time month            ; Monat als Zahl (01-12)
  591. time day            ; Tag (01-31)
  592. time hour            ; Stunden (00-23)
  593. time min            ; Minuten (00-59)
  594. time sec            ; Sekunden (00-59)
  595.  
  596. Beispiel:
  597. =========
  598. time weekdayg
  599. byte " "    
  600. time day
  601. byte "."
  602. time monthg
  603. byte " "
  604. time year
  605.  
  606. würde wenn am 28.Juni assembliert im Objektfile folgenden String ablegen:
  607. Fr 28.Jun 1989
  608.  
  609.  
  610. a r i t h m e t i s c h e   O p e r a t i o n e n :
  611. ---------------------------------------------------
  612.  +                ; Addition
  613.  -                ; Subtraktion
  614.  *                ; Multiplikation
  615.  /                ; Division
  616.  ~                ; Modulo
  617.  !                ; Komplement
  618.  <<            ; BIT Verschiebung nach links
  619.  >>            ; BIT Verschiebung nach rechts
  620.  &                ; logische AND-Verknüpfung
  621.  |                ; logische OR-Verknüpfung
  622.  ^                ; logische Exclusiv-OR-Verknüpfung
  623.  
  624.  
  625.  
  626. Macros:
  627. -------
  628. macroseg            ; Beginn der Macrodefinition ohne interne Labels
  629. macro                ; Beginn der Macrodefinition mit internen Labels
  630. endmacro            ; Ende der Macrodefinition
  631. hidemac                ; Macrodefinition bei Assemblerlisting nicht zeigen
  632. showmac                ; dito, wieder zeigen
  633.  
  634. Beispiel:
  635. =========
  636.  
  637. poke    macroseg    ; Beginn der Definition des Macros "poke"
  638.         lda #!2        ; Einsetzen des 2.Parameters
  639.         sta !1        ; dito 1.Parameter
  640.         endmacro    ; Ende der Macrodefinition
  641.  
  642.     ?poke $1000,10    ; Aufruf mit Übergabe von zwei Parametern
  643.  
  644.                         ; trifft der Assembler bei der Assemblierung auf den
  645.                         ; Befehl ?poke .., so assembliert er genau die Befehle die
  646.                         ; ihm bei der Definition mitgeteilt wurden
  647.         lda #10
  648.         sta $1000
  649.  
  650.                         ; sowohl ".macroseg" als auch ".macro" kennzeichnen den
  651.                         ; Beginn der Macrodefinition. Der Unterschied zwischen
  652.                         ; zwischen den beiden Befehlen zeigt sich erst beim Aufruf
  653.                         ; eines Macros. Ein mit ".macro" definiertes Macro öffnet
  654.                         ; automatisch einen Labelblock, der bei ".endmacro" wieder
  655.                         ; geschlossen wird. Das ist in dem folgenden Beispiel nötig:
  656.  
  657. inc16    macro        ; Macro zum Erhöhen eines 16-Bit Pointers
  658.         inc !1        ; low-Byte erhöhen
  659.         bne end        ; kein Überlauf, <>0
  660.         inc !1+1        ; hi-Byte erhöhen
  661. end
  662.         endmacro
  663.  
  664.         ?inc16 pointer
  665. bzw    ?inc16 $79
  666.  
  667.                         ; bei jedem Aufruf von "inc16" muß dem Label "end", das ja
  668.                         ; intern als Sprungziel verwendet wird, ein Wert zugewiesen
  669.                         ; werden. Eine Mehrfachdefinition eines Labels ist aber nur
  670.                         ; dann möglich, wenn es sich die Definitionen in verschie-
  671.                         ; denen Blöcken befinden.
  672.  
  673.                         ; Bisher wurde nur eine Zahl oder einen anderer 16-Bit-Wert
  674.                         ; an ein Macro übergeben. Es besteht jedoch noch die Möglich-
  675.                         ; keit einen Textstring zu übergeben, dadurch können Macros
  676.                         ; noch universeller eingesetzt werden.
  677.                         ; !!! Text muß als letzter Parameter eingesetzt werden !!!
  678.                         ; die Syntax der Textparameterübergabe verdeutlicht das
  679.                         ; folgende Beispiel:
  680.  
  681. error    macro
  682.         ldx #<txt    ; low-Byte
  683.         ldy #>txt    ; hi-Byte
  684.         jsr print    ; Text ausgeben
  685.         lda #!1        ; Parameter 1 einsetzen
  686.         jmp error    ; Fehlerbehandlung
  687. txt    null    "!2"    ; Textparameter 2 einsetzen, hier "Syntax"
  688.         endmacro
  689.  
  690.         ?error 10,"Syntax"
  691.  
  692.  
  693.  
  694. allgemeine Informationen:
  695. -------------------------
  696. der Name des Source-File welches beim Assembleraufruf übergeben wird muß die
  697. Endung '.asm' haben.
  698. Filenamen die eingebunden (include "Name") werden sollen sind frei wählbar.
  699.  
  700. eine Source-Zeile darf maximal 250 Zeichen enthalten, wobei TAB als ein
  701. Zeichen gilt.
  702.  
  703. max. 30 Files können gleichzeitig durch "include" geöffnet werden.
  704.  
  705. es können max. 20 "if" Anweisungen gleichzeitig geöffnet sein (Verkettung)
  706.  
  707.  
  708.  
  709.         Thomas Lehmann, 18.November 1991
  710.