NO SERVICE by Otomata Labs
; NO SERVICE - 256b - Atari 2600 - dihalt 2o25 summer ; --artÑmka 1o.o7.2o25 ; additional thanks to Natt for tips and code snippets ;) ; also yea that's my first 6502 code! done in roughly 10 hours ; greetings to all sizecoders, fuckings to those who screws telecom up =) ; use 64tass to compile, don't forget the -b flag! ; add any padding to the beginning if your (flash)cart/emu can't load short .bin's .include "hw.asm" ; ram stuff *=$80 ram_start: frame: .byte ? state: .byte ? p1mask: .byte ? y_ofs: .byte ? ram_end: V_SYNC_LEN = 3 V_FRONT_PORCH = 37-12 V_ACTIVE_LINES = 192+12+20 V_BACK_PORCH = 30-20 CELL_PIXELS = 8 CELL_PIXEL_HEIGHT = 8 ; --------------------------- ; code start *=$FF00 start: ; init 6502 regs sei cld ; tia clear routine https://github.com/akumanatt/2600-wordle/blob/main/src/main.asm#L116 lda #0 ldx #(PF2-NUSIZ0) - sta NUSIZ0,x dex bne - ldx #(RESMP1-AUDC0) - sta AUDC0,x dex bne - ldx #(ram_end-ram_start) - sta ram_start, x dex bne - lda #31 sta AUDF1 lda #8 sta AUDC1 ; set position lda #(7 + (3 << 4)) sta WSYNC sta NUSIZ0 sta NUSIZ1 frame_loop: ; VSYNC (3 lines) lda #2 sta WSYNC sta VSYNC sta WSYNC ; reposition P1/P2 sta WSYNC ldx #7 - dex bne - sta RESP0 jmp + + jmp + + sta RESP1 ; ----------------- ; blank lda #0 sta VSYNC ; front porch (37 lines) ldy #V_FRONT_PORCH front_porch: sta WSYNC dey bne front_porch sty VBLANK ; top border ldy #((V_ACTIVE_LINES-(CELL_PIXELS*CELL_PIXEL_HEIGHT))/2) border_top: tya jsr gligli dey bne border_top ; "ÐТС - на Ñаг впеÑеди" (или позади, ÑмоÑÑÑ ÐºÑда поÑмоÑÑеÑÑ) ldx #CELL_PIXELS cell_loop: sta WSYNC sta HMOVE lda cell-1, x sta GRP0 lda signal-1, x and p1mask sta GRP1 ldy #CELL_PIXEL_HEIGHT-1 cell_inner: jsr gligli dey bne cell_inner dex bne cell_loop ldy #((V_ACTIVE_LINES-(CELL_PIXELS*CELL_PIXEL_HEIGHT))/2) lda #0 sta GRP1 sta GRP0 ldx p1mask bne nogl ldx frame lda $FF00,x nogl: sta HMP0 ; bottom border border_bottom: tya jsr gligli dey bne border_bottom ; back porch (30 lines) lda #2 sta VBLANK ldy #V_BACK_PORCH back_porch: sta WSYNC dey bne back_porch inc frame bne frame_loop ldx state lda p1mask_bin, x sta p1mask lda colp0_bin, x sta COLUP0 lda colp1_bin, x sta COLUP1 stx state cpx #4 beq skip_reset_state inc state skip_reset_state: txa sta AUDV1 adc #1 rol a sta AUDC0 sta AUDV0 jmp frame_loop gligli: tya eor frame pha and #12 sta WSYNC sta AUDF0 pla and state sta COLUBK rts cell: .byte %00010000 .byte %00010000 .byte %00010000 .byte %00010000 .byte %00111000 .byte %01010100 .byte %10010010 .byte %11111110 signal: .byte %10101010 .byte %10101010 .byte %00101010 .byte %00101010 .byte %00001010 .byte %00001010 .byte %00000010 .byte %00000010 ; 5 states p1mask_bin: .byte %11111111 .byte %11111100 .byte %11110000 .byte %11000000 .byte %00000000 colp0_bin: .byte $0E .byte $0E .byte $1C .byte $3E .byte $48 colp1_bin: .byte $C6 .byte $D6 .byte $E6 .byte $36 .byte $00 ; reset vectors and stuff *=$FFFA .word start ; NMI .word start ; RESET .word start ; IRQ
[ back to the prod ]