kleines ping-pong-beispiel mit Bascom und dem fbas-signal.


Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 19200

Declare Sub Tv_asm()

Dim Z As Byte
Dim Hodunkel_l As Byte
Dim Hodunkel_r As Byte
Dim Hodunkel_pi As Byte
Dim Hopixel As Byte
Dim Vepixel As Byte

Dim Vedunkel_o As Byte
Dim Vedunkel_u As Byte

Dim Text As String * 10

Config Pind.6 = Output
Config Pind.7 = Output

Sync Alias Portd                        '-[ 1,2K ]- Sync Ausgang
Video Alias Portd                       '-[ 560  ]- Video Ausgang
Const Syn = 6
Const Vid = 7

Enable Interrupts

Waitms 200

Hodunkel_l = 100
Hopixel = 1
Hodunkel_r = 138 - 101
Hodunkel_pi = 138 - Hopixel
Vepixel = 7
Vedunkel_o = 45
Vedunkel_u = 255

Do

For Z = 1 To 136
  Vedunkel_o = Vedunkel_o + 1
  Vedunkel_u = Vedunkel_u - 1
  Hodunkel_l = Z
  Hodunkel_r = Hodunkel_pi - Z
  Call Tv_asm()
Next
For Z = 1 To 136
  Vedunkel_o = Vedunkel_o - 1
  Vedunkel_u = Vedunkel_u + 1
  Hodunkel_l = Hodunkel_pi - Z
  Hodunkel_r = Z
  Call Tv_asm()
Next


Loop

End

Sub Tv_asm()
$asm

'**************** Hauptschleife **************************************
'  bei 8 MHz ( 1 Takt = 0,125µs )
'  die Zeiten im Hauptprogramm zählen immer von "cbi sync,syn" (Sync auf Low)
'  bis "sbi sync,syn" (Sync auf High) oder eben von High nach Low
'*********************************************************************

'            __         ___         ___
'  V-Sync      |_______|   |_______|   |  ---> die ersten 2,5 Zeilen
'                27,5   4,5  27,5   4,5

Main:

   ldi   r16,5
Syn_0:

   cbi   sync,syn
   cbi   video,vid

   ldi   r23,$49                        '27,5 µs
Syn_1:
   dec   r23
   brne   syn_1

   sbi   sync,syn

   ldi   r23,12                         '4,5 µs
Syn_2:
   dec   r23
   brne   syn_2
   nop

   dec   r16
   brne   syn_0                         'Schleife 5 x 32µs = 160µs


'                  __    ________    _________
'  Nachtrabanten     |__|        |__|         |   ---> wieder 2,5 Zeilen
'                    2,25 29,75  2,25  29,75

   ldi   r16,5
Sync2:

   cbi   sync,syn                       'Nachtrabanten
   cbi   video,vid

   ldi   r23,6                          '2,25 µs
Syn_3:
   dec   r23
   brne   syn_3

   sbi   sync,syn

   ldi   r23,$4f                        '29,75 µs
Syn_4:
   dec   r23
   brne   syn_4

   dec   r16
   brne   sync2                         'Schleife 5 x 32µs = 160µs
                                        'zusammen 320µs = 5 Zeilen

'************************ Zeilen ************************************
'
'                         _______________________
'            __      ____|                       |___   ---> 307 Zeilen mit Bildinhalt
'  H-Sync      |____|
'               4,5    6     52µs Bildinhalt      1,5 µs
'
'************************ Zeilen dunkel ************************************

   lds   r16,{vedunkel_o}
Hsyn_0:

   cbi   sync,syn
   cbi   video,vid

   ldi   r23,12                         '4,5 µs
Hsyn_1:
   dec   r23
   brne   hsyn_1

   sbi   sync,syn
   cbi   video,vid

   ldi   r23,$9e                        '59,5 µs ( 6 + 52 + 1,5µs )
Hsyn_2:                                 'da die Pegel für Bildinhalt schwarz sind
   dec   r23                            'wurde es hier zusammnegefasst
   brne   hsyn_2
   nop
   nop

   dec   r16
   brne   hsyn_0

Weiter:
'************************ Zeilen-Linien *********************************

   lds   r16,{Vepixel}
Hsyn_3:
   cbi   sync,syn
   cbi   video,vid

   ldi   r23,12                         '4,5 µs
Hsyn_4:
   dec   r23
   brne   hsyn_4

   sbi   sync,syn
   cbi   video,vid

   ldi  R23, 12                         '6,0 µs
Hsyn_44:
   dec  R23
   brne Hsyn_44
   nop
   nop

   lds   r23,{hodunkel_l}
Hsyn_555:
   dec   r23
   brne   hsyn_555

   sbi   sync,syn
   sbi   video,vid

   lds   r23,{hopixel}                  'Bild  aus Variable
Hsyn_5:
   dec   r23
   brne   hsyn_5

   sbi   sync,syn
   cbi   video,vid

   lds   r23,{hodunkel_r}
Hsyn_55:
   dec   r23
   brne   hsyn_55

   ldi   r23,3                          '1,5 µs Nachsync
Hsyn_6:
   dec   r23
   brne   hsyn_6
   nop
   nop
   nop
   nop
   nop
   dec   r16
   brne   hsyn_3

'************************ Zeilen dunkel *******************************

   lds   r16,{vedunkel_u}
Hsyn_8:

   cbi   sync,syn

   ldi   r23,12                         '4,5 µs
Hsyn_9:
   dec   r23
   brne   hsyn_9

   sbi   sync,syn

   ldi   r23,$9e                        '59,5 µs ( 6 + 52 + 1,5µs )
Hsyn_10:                                'da die Pegel für Bildinhalt schwarz
   dec   r23                            'bleiben wurde es zusammnegefasst
   brne   hsyn_10

   dec   r16
   breq   ende

   brne   hsyn_8
Ende:
   'jmp   main
$end Asm
End Sub