Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; BADUK v2.0
  2. ; 2011 (c) JrezCorp Team
  3. ;
  4. ; ASM6502
  5. ;
  6.     .list
  7.     .inesprg 1 ; 1 PRG
  8.     .ineschr 1 ; 1 CHR
  9.     .inesmir 0 ; V-mirroring
  10.     .inesmap 0 ; 0-map (NMAP)
  11.  
  12. ; MEMORY MAP
  13. ;
  14. ; 0x0000 - 0x04FF - arrays (0x0000-0x00FF - zero page, 0x0100-0x01FF - stack, 0x0200-0x02FF - sprite memmory)
  15. ; 0x0500 - 0x07FF - variables
  16. ; 0x0800 - 0x1FFF - mirrors of 0x0000 - 0x04FF
  17. ; 0x2000 - 0x2007 - PPU registers
  18. ; 0x2008 - 0x3FFF - mirrors of 0x2000 - 0x2007
  19. ; 0x4000 - 0x401F - 2A03 (APU) registers
  20. ; 0x4020 - 0x5FFF - mapper registers (not used)
  21. ; 0x6000 - 0x7FFF - SRAM
  22. ; 0x8000 - 0xFFFF - PRG ROM
  23.  
  24. ; VARIABLES AND ARRAYS
  25.  
  26. stack = $0100 ; (size = 256)
  27. sprite_mem = $0200 ; (size = 256)
  28. nmi_hit = $0500 ; (size = 1)
  29. temp = $0501 ; (size = 1)
  30. temp_2 = $0502 ; (size = 1)
  31. joy1stat = $0503 ; (size = 1)
  32. joy1a = $0504 ; (size = 1)
  33. joy1b = $0505 ; (size = 1)
  34. joy1select = $0506 ; (size = 1)
  35. joy1start = $0507 ; (size = 1)
  36. joy1up = $0508 ; (size = 1)
  37. joy1down = $0509 ; (size = 1)
  38. joy1left = $050A ; (size = 1)
  39. joy1right = $050B ; (size = 1)
  40. dig = $050C
  41. digits = $050E
  42.  
  43.     .bank 0
  44.     .org $8000
  45.  
  46. ; PRG ROM
  47.  
  48. main:
  49. ; show logo
  50.     jsr jcorp
  51.     lda #0
  52. mainloop:
  53.     beq mainloop
  54.  
  55. inc_digits:
  56.     ldx #3
  57. id_loop:
  58.     lda digits,x
  59.     adc #0
  60.     cmp #10
  61.     bmi id_low10
  62.     clc
  63.     sbc #9
  64.     sec
  65. id_low10:
  66.     sta digits,x
  67.     dex
  68.     bne id_loop
  69.     rts
  70. mul2_digits:
  71.     ldx #3
  72. md_loop:
  73.     lda digits,x
  74.     adc digits,x
  75.     cmp #10
  76.     bmi md_low10
  77.     clc
  78.     sbc #9
  79.     sec
  80. md_low10:
  81.     sta digits,x
  82.     dex
  83.     bne md_loop
  84.     rts
  85.    
  86. ; jcorp logo
  87. jcorp:
  88. ; PPU is turned off
  89. ; setup palette
  90.     lda #$3f
  91.     sta $2006
  92.     lda #0
  93.     sta $2006
  94.     lda #13
  95.     sta $2007
  96.     lda #45
  97.     sta $2007
  98.     lda #38
  99.     sta $2007
  100.     lda #40
  101.     sta $2007
  102. ; clearing attributes
  103.     lda #$23
  104.     sta $2006
  105.     lda #$c0
  106.     sta $2006
  107.     ldx #64
  108.     lda #0
  109. jcorp_loop0:
  110.     sta $2007
  111.     dex
  112.     bne jcorp_loop0
  113. ; filling nametable
  114.     lda #$20
  115.     sta $2006
  116.     sta $2006
  117. ;------------- clear digits
  118.     ldx #3  ;digits count
  119.     lda #0  ;initial value
  120. cl_loop:
  121.     sta digits,x
  122.     dex
  123.     bne cl_loop
  124. ;------------------- test value
  125.     lda #73
  126.     sta dig
  127. ;-------------------
  128.     ldy #8  ;bits
  129. convert_loop:
  130.     clc
  131.     jsr mul2_digits
  132.     clc
  133.     rol dig
  134.     jsr inc_digits
  135.     dey
  136.     bne convert_loop
  137.    
  138.     ldx #3 
  139.     ldy #1
  140. my_loop:
  141.     lda digits,y
  142.     clc
  143.     adc #$30
  144.     sta $2007
  145.     iny
  146.     dex
  147.     bne my_loop
  148.    
  149.  
  150. ; turn on PPU
  151.     jsr vwait
  152.     lda #%00000000
  153.     sta $2000
  154. ; show bg, no clipping
  155.     lda #%00001010
  156.     sta $2001
  157. ; clear scroll
  158. clear_scroll:
  159.     lda #0
  160.     sta $2005
  161.     sta $2005
  162.     sta $2006
  163.     sta $2006
  164.     rts
  165. ; wait for vblank starts
  166. vwait_start:
  167.     lda $2002
  168.     bpl vwait_start
  169.     rts
  170. ; wait for vblank ends and clear scroll
  171. vwait_end:
  172.     jsr vwait_end_wc
  173.     jsr clear_scroll
  174.     rts
  175. ; wait for vblank ends
  176. vwait_end_wc:
  177.     lda $2002
  178.     bmi vwait_end
  179.     rts
  180. ; wait for a vblank
  181. vwait:
  182.     jsr vwait_wc
  183.     jsr clear_scroll
  184.     rts
  185. ; wait for a vblank (scroll not cleared)
  186. vwait_wc:
  187.     jsr vwait_start
  188.     jsr vwait_end_wc
  189.     rts
  190. ; entry point
  191. start:
  192. ; turn off PPU
  193.     lda #0
  194.     sta $2000
  195.     sta $2001
  196. ; disable interrupts
  197.     sei
  198. ; wait for two vblanks
  199.     jsr vwait_wc
  200.     jsr vwait_wc
  201. ; reset stack pointer
  202.     ldx $ff
  203.     txs
  204. ; goto main
  205.     jmp main
  206. nmi:
  207.     php
  208.     pha
  209.     txa
  210.     pha
  211.     tya
  212.     pha
  213.     lda #1
  214.     sta nmi_hit
  215.     pla
  216.     tay
  217.     pla
  218.     tax
  219.     pla
  220.     plp
  221.     rti
  222.  
  223. ; ignore any irq
  224. irq:
  225.     rti
  226. ; DATA
  227. jcorp_table:
  228.     .db 0,171,2,1,0,14,4,1,6,1,8,1,0,7,10,1
  229.     .db 0,2,12,1,0,2,14,1,16,1,18,1,0,7,20,1
  230.     .db 22,1,24,1,26,1,28,1,30,1,96,1,98,1,100,1
  231.     .db 0,6,102,1,104,1,106,1,108,1,110,1,112,1,114,1
  232.     .db 116,1,118,1,120,1,0,6,122,1,124,1,126,1,128,1
  233.     .db 130,1,132,1,134,1,136,1,138,1,140,1,0,13,142,1
  234.     .db 144,1,146,1,0,14,148,1,150,1,0,163
  235.    
  236.     .bank 1
  237.     .org $FFFA
  238. ; POINTERS
  239.     .dw nmi, start, irq
  240.     .bank 2
  241.     .org $0000
  242. ; CHR ROM
  243.     .incbin "rom.chr"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement