Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :BasicUpstart2(main)
- .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+100, 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:
- jsr $1000
- sei //wyłączenie flafi przerwania
- :wybierz_index_banku_pamieci_VIC_DD00(1)
- 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 ////;
- :ClearScreen(PamiecEkranu,$20)
- cli ////; clear interrupt disable flag
- jsr wyswietl_text_1
- jsr wyswietl_text_2
- :ClearScreen_DOL(PamiecEkranu,$20)
- jsr wyswietl_text_3
- :ClearScreen_DOL(PamiecEkranu,$20)
- jsr wyswietl_text_4
- jmp * ////; infinite loop
- ////;============================================================
- ////; custom interrupt routine
- ////;============================================================
- irq1: inc $d019
- jsr $1003
- lda #$b1
- sta $d012
- //:trybTekstowy()
- // :wybierz_index_charmem_pamieci_D018(2)
- lda #<irq2
- sta $0314
- lda #>irq2
- sta $0315
- pla
- tay
- pla
- tax
- pla
- rti
- irq2: inc $d019
- lda #$2f
- sta $d012
- :break()
- :trybTekstowy()
- :wybierz_index_charmem_pamieci_D018(1)
- lda #<irq3
- sta $0314
- lda #>irq3
- sta $0315
- pla
- tay
- pla
- tax
- pla
- rti
- irq3:
- inc $d019
- lda #$80
- sta $d012
- // :pause #6
- :trybTekstowy()
- :wybierz_index_charmem_pamieci_D018(2)
- // kod poniej wykonuje się pomiędzy rastrem 34 a 80
- ///////////////////////////////////////////////////////////////////////
- ldy #$00
- !cykl:
- ldx cykle,y
- !petla:
- dex
- bne !petla-
- lda kolorki,y
- sta Ekran
- sta Ramka
- iny
- cpy #$0b
- bne !cykl-
- jsr colwash
- ///////////////////////////////////////////////////////////////////////
- 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,x
- jsr opoznienie
- cpx #119
- 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+640,x
- jsr opoznienie
- cpx #200
- 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_8,x
- sta PamiecEkranu+845,x
- jsr opoznienie
- cpx #31
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- ///////////////////////////////////////////////////////////////// wyświetyla tekst na dolnym przerwaniu - zmiana ekranu
- wyswietl_text_4:
- ldx #$00
- !petla:
- lda tekst_10,x
- sta PamiecEkranu+640,x
- jsr opoznienie
- cpx #239
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- wyswietl_text_5:
- ldx #$00
- !petla:
- lda tekst_15,x
- sta PamiecEkranu+642,x
- jsr opoznienie
- cpx #255
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- wyswietl_text_6:
- ldx #$00
- !petla:
- lda tekst_16,x
- sta PamiecEkranu+880,x
- jsr opoznienie
- cpx #51
- beq !powrot+
- inx
- bne !petla-
- !powrot:
- rts
- wyswietl_text_7:
- ldx #$00
- !petla:
- lda tekst_17,x
- sta PamiecEkranu+851,x
- jsr opoznienie
- cpx #22
- 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 #$4f //; load x-register with #$27 to work through 0-39 iterations
- lda color+$4f //; 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,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+$4f //; otherwise store te last color from accu into color table
- sta $d800 //; ... and into Color Ram
- colwash2: ldx #$00 //; load x-register with #$00
- lda color2+$4f //; 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 $d828,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 #$4f //; have we gone through 39 iterations yet?
- bne cycle2 //; if no, repeat
- sta color2+$4f //; if yes, store the final color from accu into color2 table
- sta $d828+$4f //; 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 #$ff
- 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
- teksty:
- .text " yugorin of samar productions "
- .text " prezentuje pierwsze wypociny "
- .text " po 30 latach bycia w niebycie "
- tekst_2:
- .text "nie umiem jeszcze zrobic scrolla, ale to"
- .text "kwestia czasu. bardzo chcialem zrobic "
- .text "pierwsze 'cos', zeby moc powiedziec "
- .text "wszystkim, ze po 30 latach jestem tu, "
- .text "gdzie przerwalem jako dziecko. "
- tekst_8:
- .text " nigdy nie zrobilem scrolla :-) "
- tekst_10:
- .text "dziekuje dkt, isildurowi i slejerkowi za"
- .text "wiare we mnie. calemu samarowi za przy- "
- .text "jecie, jammerowi za opierdol na start za"
- .text "dropboxa. wielkie dzieki mlodszemu bratu"
- .text "programiscie (fucking genius)!! za wiare"
- .text "wsparcie i cierpliwosc do mnie. "
- tekst_15:
- .text " to, ze skubany nie zna asm"
- .text " a tlumaczy mi co robie zle"
- .text " sprawia,ze jestem dumny"
- .text " z niego jak nikt na swiecie."
- .text "namawiam go na kodzenie w asm "
- .text "na c64. zobaczymy co z tego wyjdzie."
- .text "na koniec dziekuje asi i biance "
- .text "za to, ze jeszcze nie zwariowaly "
- tekst_16:
- .text "bo na kazde pytanie co robie "
- .text "odpowiadam 'kodze' ;-p"
- tekst_17:
- .text " sceno - przybywam !!!!"
- kolorki:
- .byte $02, $02, $00, $0a, $01, $01, $0a, $00, $02, $02, $00
- .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- .byte $00, $00, $00, $00
- cykle:
- .byte $08, $08, $08, $01, $08, $08, $08
- .byte $08, $08, $08, $08, $08, $08, $0a
- *=$1000 "Muzyka"
- .import binary "Ode_to_C64.sid", $7c+2
- .pc = $6000 "Logo Samar"
- .import c64 "smrlogo.art"
- .pc = $4800 "Font 1"
- .import c64 "mega_designer_3_c.64c"
- .pc = $5000 "font 2"
- .import c64 "amigo_s.64c"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement