Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :BasicUpstart2(main)
- * = $2000
- .label PamiecEkranu = $4400
- .label Ramka = $d020
- .label Ekran = $d021
- .label memory_setup_register_D018 = $d018
- .label VIC_bank = $dd00
- //----------------------------------------------------------
- // Code for creating the breakpoint file sent to Vice.
- //----------------------------------------------------------
- .var _useBinFolderForBreakpoints = cmdLineVars.get("usebin") == "true"
- .var _createDebugFiles = cmdLineVars.get("afo") == "true"
- .print "File creation " + [_createDebugFiles
- ? "enabled (creating breakpoint file)"
- : "disabled (no breakpoint file created)"]
- .var brkFile
- .if(_createDebugFiles) {
- .if(_useBinFolderForBreakpoints)
- .eval brkFile = createFile("bin/breakpoints.txt")
- else
- .eval brkFile = createFile("breakpoints.txt")
- }
- .macro break() {
- .if(_createDebugFiles) {
- .eval brkFile.writeln("break " + toHexString(*))
- }
- }
- //------------------------------------------------------
- .macro trybTekstowy () {
- lda #$1b
- sta $d011
- lda #$c8
- sta $d016
- }
- .macro trybGraficzny()
- {
- lda #$3b
- sta $d011
- lda #$08
- sta $d016
- }
- .macro wybierz_index_charmem_pamieci_D018(index) {
- lda memory_setup_register_D018
- and #%11110001 // ustawia tylko bity oznaczone 0
- ora #[index << 1] // wybiera numer strony pamięci według mapy C64 z netu
- sta memory_setup_register_D018 // zapisuje do $D018
- }
- .macro wybierz_index_screen_memory_pamieci_D018(index) {
- lda memory_setup_register_D018
- and #%00001111 // ustawia tylko bity oznaczone 0
- ora #[index << 4] // wybiera numer strony pamięci według mapy C64 z netu
- sta memory_setup_register_D018 // zapisuje do $D018
- }
- .macro wybierz_index_banku_pamieci_VIC_DD00(index) {
- lda VIC_bank
- and #%11111100 // zeruje bit #0 i #1
- ora #[index ^ %00000011] // XOR na wartości z index
- sta VIC_bank
- }
- .macro ClearScreen(PamiecEkranu, clearByte) {
- lda #clearByte
- ldx #0
- !loop:
- sta PamiecEkranu, x
- sta PamiecEkranu + $100, x
- sta PamiecEkranu + $200, x
- sta PamiecEkranu + $300, x
- inx
- bne !loop-
- }
- .macro ClearScreen_DOL(PamiecEkranu, clearByte) {
- lda #clearByte
- ldx #0
- !loop:
- sta PamiecEkranu+633, x
- sta PamiecEkranu+633+60, x
- inx
- bne !loop-
- }
- .pseudocommand pause cycles {
- :ensureImmediateArgument(cycles)
- .var x = floor(cycles.getValue())
- .if (x<2) .error "Cant make a pause on " + x + " cycles"
- // Take care of odd cyclecount
- .if ([x&1]==1) {
- bit $00
- .eval x=x-3
- }
- // Take care of the rest
- .if (x>0)
- :nop #x/2
- }
- //---------------------------------
- // repetition commands
- //---------------------------------
- .macro ensureImmediateArgument(arg) {
- .if (arg.getType()!=AT_IMMEDIATE) .error "The argument must be immediate!"
- }
- .pseudocommand asl x {
- :ensureImmediateArgument(x)
- .for (var i=0; i<x.getValue(); i++) asl
- }
- .pseudocommand lsr x {
- :ensureImmediateArgument(x)
- .for (var i=0; i<x.getValue(); i++) lsr
- }
- .pseudocommand rol x {
- :ensureImmediateArgument(x)
- .for (var i=0; i<x.getValue(); i++) rol
- }
- .pseudocommand ror x {
- :ensureImmediateArgument(x)
- .for (var i=0; i<x.getValue(); i++) ror
- }
- .pseudocommand pla x {
- :ensureImmediateArgument(x)
- .for (var i=0; i<x.getValue(); i++) pla
- }
- .pseudocommand nop x {
- :ensureImmediateArgument(x)
- .for (var i=0; i<x.getValue(); i++) nop
- }
- main:
- sei //wyłączenie flafi przerwania
- :wybierz_index_banku_pamieci_VIC_DD00(1)
- :wybierz_index_charmem_pamieci_D018(3)
- lda #$01
- sta $d027
- sta $d028
- sta $d029
- sta $d02a
- lda #$06
- sta $d02b
- sta $d02c
- sta $d02d
- sta $d02e
- lda #$ff // bit 0 zapalony
- sta $d015
- ldx #$77 // mniejsza wartośc przesuwa w lewo, większa w prawo
- lda #$8f // mniejsza wartośc przesuwa do góry, większa w dół
- sta $d001 // kwadrat z logo
- stx $d000
- ldx #$90 // mniejsza wartośc przesuwa do góry, większa w dół
- lda #$90 /// sa - // mniejsza wartośc przesuwa w lewo, większa w prawo
- sta $d002
- stx $d003
- ldx #$90 // mniejsza wartośc przesuwa do góry, większa w dół
- lda #$a8 // ma /// sa - // mniejsza wartośc przesuwa w lewo, większa w prawo
- sta $d004
- stx $d005
- ldx #$90 // mniejsza wartośc przesuwa do góry, większa w dół
- lda #$c0 // r /// sa - // mniejsza wartośc przesuwa w lewo, większa w prawo
- sta $d006
- stx $d007
- ldx #$91
- lda #$75 // drugi kwadrat jako cien
- sta $d008
- stx $d009
- ldx #$92
- lda #$8e // cien sa
- sta $d00a
- stx $d00b
- ldx #$92
- lda #$a6
- sta $d00c
- stx $d00d
- ldx #$92
- lda #$be
- sta $d00e
- stx $d00f
- ldy #$7f ////; $7f = %01111111
- sty $dc0d ////; wyłączamy timer CIA
- sty $dd0d ////; ; wyłączamy timer CIA
- lda $dc0d ////; kasuje wszystki przerwania CIA w kolejce
- lda $dd0d ////; kasuje wszystki przerwania CIA w kolejce
- lda #$01 ////; Set Interrupt Request Mask...
- sta $d01a ////; ...we want IRQ by Rasterbeam
- lda #<irq1 ////; wskaźnik to IRQ
- ldx #>irq1
- sta $314 ////; zapisz tutaj
- stx $315
- lda #$00 ////; ustawiam pierwsze przerwanie na raster 0
- sta $d012
- lda $d011 ////; ustawiam 9 bit z $d011 na 0
- and #$7f ////;
- sta $d011 ////;
- lda #$00
- jsr $1000
- // :trybGraficzny()
- // :wybierz_index_charmem_pamieci_D018(0)
- // :wybierz_index_screen_memory_pamieci_D018(15)
- // jsr obrazek
- :ClearScreen(PamiecEkranu,$20)
- lda #$20
- sta $47f8
- lda #$21
- sta $47f9
- lda #$22
- sta $47fa
- lda #$23
- sta $47fb
- lda #$20
- sta $47fc
- lda #$21
- sta $47fd
- lda #$22
- sta $47fe
- lda #$23
- sta $47ff
- //////////// ustawia naroniki
- lda #$1b
- sta $4400
- lda #$1c
- sta $4427
- lda #$1e
- sta $47c0
- lda #$1f
- sta $47e7
- /// wstawia fonty w pierwszą linijkę
- lda #$1d
- ldx #38
- !loop:
- sta PamiecEkranu, x
- dex
- bne !loop-
- /// wstawia fonty w pierwszą linijkę
- lda #$21
- ldx #38
- !loop:
- sta $47c0, x
- dex
- bne !loop-
- /// czarna pierwsza linia
- // i ostatnia linia
- lda #$00
- ldx #40
- !loop:
- sta $d7ff,x
- sta $dbbf,x
- dex
- bne !loop-
- /////////////////
- cli ////; clear interrupt disable flag
- jsr wyswietl_text_1
- jsr wyswietl_text_2
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- :ClearScreen_DOL(PamiecEkranu,$20)
- jsr wyswietl_text_3
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- :ClearScreen_DOL(PamiecEkranu,$20)
- jsr wyswietl_text_4
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- ClearScreen_DOL(PamiecEkranu,$20)
- jsr wyswietl_text_5
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- ClearScreen_DOL(PamiecEkranu,$20)
- jsr wyswietl_text_6
- jsr opoznienie3
- jsr opoznienie3
- jsr opoznienie3
- // ClearScreen_DOL(PamiecEkranu,$20)
- // jsr wyswietl_text_7
- jmp * ////; infinite loop
- ////;============================================================
- ////; custom interrupt routine
- ////;============================================================
- irq1:
- inc $d019
- // inc Ramka
- lda #$37
- sta $d012
- :pause #11
- // :trybTekstowy()
- // :wybierz_index_charmem_pamieci_D018(2)
- // kod poniej wykonuje się pomiędzy rastrem 34 a 80
- // przerwanie jest od rastra 54 do 63
- ///////////////////////////////////////////////////////////////////////
- ldy #$00
- !cykl:
- ldx cykle2,y
- !petla:
- dex
- bne !petla-
- lda brazowe,y
- sta Ekran
- sta Ramka
- iny
- cpy #$08
- bne !cykl-
- lda #$06
- sta Ekran
- ///////////////////////////////////////////////////////////////////////
- lda #<irq2
- sta $0314
- lda #>irq2
- sta $0315
- pla
- tay
- pla
- tax
- pla
- // dec Ramka
- rti
- irq2:
- inc $d019
- //inc Ramka
- lda #$7a // pozycja środkowego rastra
- sta $d012
- // :wybierz_index_charmem_pamieci_D018(2)
- // kod poniej wykonuje się pomiędzy rastrem 34 a 80
- // przerwanie jest od rastra 54 do 63
- ///////////////////////////////////////////////////////////////////////
- jsr colwash
- jsr $1003
- ///////////////////////////////////////////////////////////////////////
- lda #<irq3
- sta $0314
- lda #>irq3
- sta $0315
- pla
- tay
- pla
- tax
- pla
- //dec Ramka
- rti
- irq3:
- inc $d019
- lda #$aa // pozycja ostatniego rastra
- sta $d012
- :pause#10
- // :wybierz_index_charmem_pamieci_D018(2)
- // kod poniej wykonuje się pomiędzy rastrem 34 a 80
- // przerwanie jest od rastra 54 do 63
- ///////////////////////////////////////////////////////////////////////
- ldy #$00
- :pause#7
- !cykl:
- ldx cykle,y
- !petla:
- dex
- bne !petla-
- lda niebieskie,y
- sta Ekran
- sta Ramka
- iny
- cpy #$0f
- bne !cykl-
- ///////////////////////////////////////////////////////////////////////
- lda #<irq1
- sta $0314
- lda #>irq1
- sta $0315
- pla
- tay
- pla
- tax
- pla
- rti
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na górnym przerwaniu
- wyswietl_text_1:
- ldx #$00
- !petla:
- lda teksty,x
- sta PamiecEkranu+120,x
- jsr opoznienie
- cpx #159
- beq powrot
- inx
- bne !petla-
- powrot:
- rts
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na górnym przerwaniu
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu
- wyswietl_text_2:
- ldx #$00
- !petla:
- lda tekst_2,x
- sta PamiecEkranu+680,x
- jsr opoznienie
- cpx #239
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu - zmiana ekranu
- wyswietl_text_3:
- ldx #$00
- !petla:
- lda tekst_3,x
- sta PamiecEkranu+841,x
- jsr opoznienie
- cpx #39
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu - zmiana ekranu
- wyswietl_text_4:
- ldx #$00
- !petla:
- lda tekst_4,x
- sta PamiecEkranu+680,x
- jsr opoznienie
- cpx #239
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- wyswietl_text_5:
- ldx #$00
- !petla:
- lda tekst_5,x
- sta PamiecEkranu+680,x
- jsr opoznienie
- cpx #239
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- wyswietl_text_6:
- ldx #$00
- !petla:
- lda tekst_6,x
- sta PamiecEkranu+760,x
- jsr opoznienie
- cpx #199
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- /*wyswietl_text_7:
- ldx #$00
- !petla:
- lda tekst_7,x
- sta PamiecEkranu+851,x
- jsr opoznienie
- cpx #120
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- wyswietl_text_8:
- ldx #$00
- !petla:
- lda tekst_8,x
- sta PamiecEkranu+851,x
- jsr opoznienie
- cpx #120
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- */
- opoznienie:
- txa
- ldx #$00
- petla1:
- ldy #$00
- petla2:
- iny
- cpy #$40
- bne petla2
- inx
- cpx #$90
- bne petla1
- tax
- rts
- colwash: ldx #$27 //; load x-register with #$27 to work through 0-39 iterations
- lda color+$28 //; init accumulator with the last color from first color table
- cycle1: ldy color-1,x //; remember the current color in color table in this iteration
- sta color-1,x //; overwrite that location with color from accumulator
- sta $d800+120,x //; put it into Color Ram into column x
- tya //; transfer our remembered color back to accumulator
- dex //; decrement x-register to go to next iteration
- bne cycle1 //; repeat if there are iterations left
- sta color+$28 //; otherwise store te last color from accu into color table
- sta $d800+120 //; ... and into Color Ram
- colwash2: ldx #$00 //; load x-register with #$00
- lda color2+$28 //; load the last color from the second color table
- cycle2: ldy color2,x //; remember color at currently looked color2 table location
- sta color2,x //; overwrite location with color from accumulator
- sta $d800+200,x //; ... and write it to Color Ram
- tya //; transfer our remembered color back to accumulator
- inx //; increment x-register to go to next iteraton
- cpx #$28 //; have we gone through 39 iterations yet?
- bne cycle2 //; if no, repeat
- sta color2+$28 //; if yes, store the final color from accu into color2 table
- sta $d800+200//+$27 //; and write it into Color Ram
- rts //; return from subroutine
- color: .byte $09,$09,$02,$02,$08
- .byte $08,$0a,$0a,$0f,$0f
- .byte $07,$07,$01,$01,$01
- .byte $01,$01,$01,$01,$01
- .byte $01,$01,$01,$01,$01
- .byte $01,$01,$01,$07,$07
- .byte $0f,$0f,$0a,$0a,$08
- .byte $08,$02,$02,$09,$09
- color2: .byte $09,$09,$02,$02,$08
- .byte $08,$0a,$0a,$0f,$0f
- .byte $07,$07,$01,$01,$01
- .byte $01,$01,$01,$01,$01
- .byte $01,$01,$01,$01,$01
- .byte $01,$01,$01,$07,$07
- .byte $0f,$0f,$0a,$0a,$08
- .byte $08,$02,$02,$09,$09
- obrazek:
- ldx #$00
- laduj_obrazek:
- // lda $3f40+$4000,x
- // sta PamiecEkranu,x
- lda $3f40+$4000+256,x
- sta PamiecEkranu+256,x
- lda $3f40+$4000+300,x
- sta PamiecEkranu+300,x
- // lda $3f40+$4000+768,x
- // sta PamiecEkranu+768,x
- dex
- bne laduj_obrazek
- rts
- opoznienie2:
- txa
- ldx #$00
- petla1_2:
- ldy #$00
- petla2_2:
- iny
- cpy #$50
- bne petla2_2
- inx
- cpx #$90
- bne petla1_2
- tax
- rts
- opoznienie3:
- txa
- ldx #$00
- petla4_1:
- ldy #$00
- petla4_2:
- iny
- cpy #$ff
- bne petla4_2
- inx
- cpx #$ff
- bne petla4_1
- tax
- rts
- gorna_linia:
- .text "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
- dolna_linia:
- .text " "
- teksty:
- .text " yugorin of samar productions "
- .text " presents "
- .text " 'pierwsze wypociny' "
- .text " since 30 years when i was off scene "
- tekst_2:
- .text " i still don't know how to make a "
- .text " scrolling text but i need some time to "
- .text " do so. i very much wanted to make a "
- .text " first step to be able to say to people "
- .text "'i got back to where i was 30 years ago "
- .text " when i stopped learning asm as a child'"
- tekst_3:
- .text " never before have i created a scroll. "
- tekst_4:
- .text " thanks to dkt,isildur and slajerek for "
- .text " faith,to the whole samar for welcoming "
- .text " me, to jammer for his dropbox welcome "
- .text "shit fall.a huge thank you to my younger"
- .text "brother'fucking genius developer'for his"
- .text " faith and support.he has not clue about"
- tekst_5:
- .text " asm and yet he keeps explaining me what"
- .text " i m doing wrong. i'm so proud of him. i"
- .text " keep encouraging him to coding in asm "
- .text " for c64 we'll see. tnx to mehowte for "
- .text " 64bites series. and the last but not "
- .text " least a massive thank you to "
- tekst_6:
- .text " asia and bianca for not going mad "
- .text " each time they hear from me i'm coding "
- .text " scene - i'm comming "
- .text " opole 11 dec 2016 "
- .text " today is my 40'th birthday "
- niebieskie:
- .byte $06,$06,$0e,$0e,$03,$03,$01,$01,$03,$03,$0e,$0e,$0e,$0e,$0e
- brazowe:
- .byte $02, $08,$0a,$01,$0a,$08,$02,$00,$00,$00,$00,$00
- // .byte $02,$08,$0a,$01,$0a,$08,$02,$02,$00,$00,$00
- /// raster $33 bad line - potem 7 linii OK i 8 znów bad lines ($3b)
- cykle:
- .byte $01, $08, $08, $08, $08, $08, $08
- .byte $01, $07, $08, $08, $08, $08, $0e
- cykle2:
- .byte $01, $08, $08, $09, $08, $08
- .byte $08, $08, $08, $08, $08, $08
- *=$1000 "Muzyka"
- .import binary "glover_Small_It.sid", $7c+2
- //.pc = $6000 "Logo Samar"//
- //.import c64 "logo.art"
- .pc = $5800 "Font 1"
- .import c64 "fonty.prg"
- .pc = $4800 "logo sprite"
- .import binary "logo_sprite.bin"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement