purebasic
13.01.2008, 21:02
kleines ping-pong-beispiel mit bascom und dem fbas-signal.
$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
$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