home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff287.lzh / DAsm / test / example.asm next >
Assembly Source File  |  1989-12-06  |  7KB  |  294 lines

  1.  
  2. ;   EXAMPLE.ASM     (6502 Microprocessor)
  3. ;
  4.  
  5.         processor    6502
  6.  
  7.         mac     ldax
  8.         lda     [{1}]
  9.         ldx     [{1}]+1
  10.         endm
  11.         mac     ldaxi
  12.         lda     #<[{1}]
  13.         ldx     #>[{1}]
  14.         endm
  15.         mac     stax
  16.         sta     [{1}]
  17.         stx     [{1}]+1
  18.         endm
  19.         mac     pushxy
  20.         txa
  21.         pha
  22.         tya
  23.         pha
  24.         endm
  25.         mac     popxy
  26.         pla
  27.         tay
  28.         pla
  29.         tax
  30.         endm
  31.         mac     inc16
  32.         inc     {1}
  33.         bne     .1
  34.         inc     {1}+1
  35. .1
  36.         endm
  37.  
  38. STOP1        equ %00000000        ;CxCTL  1 Stop bit
  39. STOP2        equ %10000000        ;CxCTL  2 Stop bits (WL5:1.5, WL8&par:1)
  40. WL5        equ %01100000        ;CxCTL  Wordlength
  41. WL6        equ %01000000
  42. WL7        equ %00100000
  43. WL8        equ %00000000
  44. RCS        equ %00010000        ;CxCTL  1=Select baud, 0=ext. receiver clk
  45.  
  46. B76800        equ %0000            ;CxCTL  Baud rates    (1.2288 Mhz clock)
  47. B75        equ %0001
  48. B100        equ %0010
  49. B150        equ %0011
  50. B200        equ %0100
  51. B300        equ %0101
  52. B400        equ %0110
  53. B600        equ %0111
  54. B800        equ %1000
  55. B1200        equ %1001
  56. B1600        equ %1010
  57. B2400        equ %1011
  58. B3200        equ %1100
  59. B4800        equ %1101
  60. B6400        equ %1110
  61. B12800        equ %1111
  62.  
  63. PARODD        equ %00100000        ;CxCMD  Select Parity
  64. PAREVEN     equ %01100000
  65. PARMARK     equ %10100000
  66. PARSPACE    equ %11100000
  67. PAROFF        equ %00000000
  68.  
  69. RECECHO     equ %00010000        ;CxCMD  Receiver Echo mode
  70. TMASK        equ %00001100
  71. TDISABLE    equ %00000000        ;CxCMD  Transmitter modes
  72. TDISABLER   equ %00001000        ;RTS stays asserted
  73. TENABLE     equ %00000100
  74. TBREAK        equ %00001100        ;send break
  75.  
  76. UA_IRQDSBL  equ %00000010
  77. DTRRDY        equ %00000001        ;~DTR output is inverted (low)
  78.  
  79. SR_PE        equ %00000001        ;CxSTAT  Status
  80. SR_FE        equ %00000010        ;NOTE: writing dummy data causes RESET
  81. SR_OVRUN    equ %00000100
  82. SR_RDRFULL  equ %00001000
  83. SR_TDREMPTY equ %00010000
  84. SR_DCD        equ %00100000
  85. SR_DSR        equ %01000000
  86. SR_INTPEND  equ %10000000
  87.  
  88.  
  89. T1_OEPB7    equ %10000000        ;x_ACR
  90. T1_FREERUN  equ %01000000        ;T1 free running mode
  91. T1_ONESHOT  equ %00000000
  92. T2_ICPB6    equ %00100000        ;T2 counts pulses on PB6
  93. T2_ONESHOT  equ %00000000        ;T2 counts phase2 transitions
  94. SRC_OFF     equ %00000000        ;shift register control
  95. SRC_INT2    equ %00000100
  96. SRC_INPH2   equ %00001000
  97. SRC_INEXT   equ %00001100
  98. SRC_OUTFR   equ %00010000        ;free running output using T2
  99. SRC_OUTT2   equ %00010100
  100. SRC_OUTPH2  equ %00011000
  101. SRC_OUTEXT  equ %00011100
  102. PBLE        equ %00000010        ;on CB1 transition (in/out).
  103. PALE        equ %00000001        ;on CA1 transition (in).  data retained
  104.  
  105.                     ;x_PCR
  106. CB2_I_NEG   equ %00000000        ;interrupt on neg trans, r/w ORB clears
  107. CB2_I_NEGI  equ %00100000        ; same, but r/w ORB does not clear int
  108. CB2_I_POS   equ %01000000        ;interrupt on pos trans, r/w ORB clears
  109. CB2_I_POSI  equ %01100000        ; same, but r/w ORB does not clear int
  110. CB2_O_HSHAK equ %10000000        ;CB2=0 on r/w ORB, CB2=1 on CB1 transition
  111. CB2_O_PULSE equ %10100000        ;CB2=0 for one clock after r/w ORB
  112. CB2_O_MANLO equ %11000000        ;CB2=0
  113. CB2_O_MANHI equ %11100000        ;CB2=1
  114.  
  115. CA2_I_NEG   equ %00000000        ;interrupt on neg trans, r/w ORA clears
  116. CA2_I_NEGI  equ %00100000        ; same, but r/w ORA does not clear int
  117. CA2_I_POS   equ %01000000        ;interrupt on pos trans, r/w ORA clears
  118. CA2_I_POSI  equ %01100000        ; same, but r/w ORA does not clear int
  119. CA2_O_HSHAK equ %10000000        ;CA2=0 on r/w ORA, CA2=1 on CA1 transition
  120. CA2_O_PULSE equ %10100000        ;CA2=0 for one clock after r/w ORA
  121. CA2_O_MANLO equ %11000000        ;CA2=0
  122. CA2_O_MANHI equ %11100000        ;CA2=1
  123.  
  124.  
  125. CB1_THI     equ %00010000
  126. CB1_TLO     equ %00000000
  127. CA1_THI     equ %00000001
  128. CA1_TLO     equ %00000000
  129.  
  130. VIRPEND     equ %10000000        ;x_IFR
  131. IRENABLE    equ %10000000        ;x_IER  1's enable ints  0=no change
  132. IRDISABLE   equ %00000000        ;x_IER  1's disable ints 0=no change
  133.  
  134. IRT1        equ %01000000
  135. IRT2        equ %00100000
  136. IRCB1        equ %00010000
  137. IRCB2        equ %00001000
  138. IRSR        equ %00000100
  139. IRCA1        equ %00000010
  140. IRCA2        equ %00000001
  141.  
  142.         seg.u   bss
  143.         org     $0000        ;RAM (see below)
  144.         org     $2000        ;unused
  145.         org     $4000        ;unused
  146.  
  147.         org     $6000        ;6551 CHANNEL #1
  148. C1DATA        ds        1
  149. C1STAT        ds        1
  150. C1CMD        ds        1
  151. C1CTL        ds        1
  152.  
  153.         org     $8000        ;6551 CHANNEL #2
  154. C2DATA        ds        1
  155. C2STAT        ds        1
  156. C2CMD        ds        1
  157. C2CTL        ds        1
  158.  
  159.         org     $A000        ;6522 (HOST COMM)
  160. H_ORB        ds        1
  161. H_ORAHS     ds        1            ;with CA2 handshake
  162. H_DDRB        ds        1
  163. H_DDRA        ds        1
  164. H_T1CL        ds        1            ;read clears interrupt flag
  165. H_T1CH        ds        1            ;write clears interrupt flag
  166. H_T1CLL     ds        1
  167. H_T1CHL     ds        1            ;write clears interrupt flag
  168. H_T2CL        ds        1            ;read clears interrupt flag
  169. H_T2CH        ds        1            ;write clears interrupt flag
  170. H_SR        ds        1
  171. H_ACR        ds        1
  172. H_PCR        ds        1
  173. H_IFR        ds        1
  174. H_IER        ds        1
  175. H_ORA        ds        1            ;no CA2 handshake
  176.  
  177.         org     $C000        ;6522 (IO COMM)
  178. I_ORB        ds        1
  179. I_ORAHS     ds        1            ;    (same comments apply)
  180. I_DDRB        ds        1
  181. I_DDRA        ds        1
  182. I_T1CL        ds        1
  183. I_T1CH        ds        1
  184. I_T1CLL     ds        1
  185. I_T1CHL     ds        1
  186. I_T2CL        ds        1
  187. I_T2CH        ds        1
  188. I_SR        ds        1
  189. I_ACR        ds        1
  190. I_PCR        ds        1
  191. I_IFR        ds        1
  192. I_IER        ds        1
  193. I_ORA        ds        1
  194.  
  195.  
  196.  
  197.         ;    --------------------------   ZERO PAGE     -------------------
  198.         seg.u   data
  199.         org     $00
  200.  
  201.         ;    --------------------------  NORMAL RAM     -------------------
  202.         org     $0100
  203.  
  204. RAMEND        equ     $2000
  205.  
  206.         ;    --------------------------     CODE     -------------------
  207.  
  208.         seg     code
  209.         org     $F000
  210. PROMBEG     equ     .
  211.  
  212. RESET        subroutine
  213.         sei         ;disable interrupts
  214.         ldx     #$FF    ;reset stack
  215.         txs
  216.  
  217.         lda     #$FF
  218.         sta     H_DDRA
  219.         sta     C1STAT    ;reset 6551#1 (garbage data)
  220.         sta     C2STAT    ;reset 6551#2
  221.         lda     #$7F    ;disable all 6522 interrupts
  222.         sta     H_IER
  223.         sta     I_IER
  224.  
  225.         lda     #%00010000    ;76.8 baud, 8 bits, 1 stop
  226.         sta     C1CTL
  227.         lda     #%00000101    ;no parity, enable transmitter & int
  228.         sta     C1CMD
  229.         lda     #$AA    ;begin transmision
  230.         sta     C1DATA
  231.  
  232.         lda     #%00011111    ;9600 baud, 8 bits, 1 stop
  233.         sta     C2CTL
  234.         lda     #%00000101
  235.         sta     C2CMD
  236.         lda     #$41
  237.         sta     C2DATA
  238.  
  239.         cli         ;enable interrupts
  240.  
  241. .1        jsr     LOAD
  242.         jsr     SAVE
  243.         jmp     .1
  244.  
  245. LOAD        subroutine
  246.  
  247.         ldx     #0
  248. .1        txa
  249.         sta     $0500,x
  250.         inx
  251.         bne     .1
  252.         rts
  253.  
  254. SAVE        subroutine
  255.  
  256.         ldx     #0
  257. .2        lda     $0500,x
  258.         sta     H_ORA
  259.         inx
  260.         bne     .2
  261.         rts
  262.  
  263. NMI        rti
  264.  
  265.         subroutine
  266. IRQ        bit     C1STAT
  267.         bpl     .1
  268.         pha
  269.         lda     #$AA
  270.         sta     C1DATA
  271.         lda     C1DATA
  272.         pla
  273.         rti
  274. .1        bit     C2STAT
  275.         bpl     .2
  276.         pha
  277.         lda     #$41
  278.         sta     C2DATA
  279.         lda     C2DATA
  280.         pla
  281. .2        rti
  282.  
  283.         ;    VECTOR    ------------------------------------------------
  284.  
  285.         seg     vector
  286.         org     $FFFA
  287.         dc.w    NMI
  288.         dc.w    RESET
  289.         dc.w    IRQ
  290.  
  291. PROMEND     equ     .
  292.  
  293.  
  294.