Sufficiency Economy
Group Blog
 
All blogs
 

snes : แสดงภาพบน Background



ตอนรับ การได้มาของ SNES MINI โซนยุโรป (ไม่เอาของ อเมริกา เพราะไม่สวยอย่าแรง ) ตามจริงอยากได้แบบญี่ปุ่น แต่อ่านภาษาอังกฤษง่ายกว่า ^^


และมีการ hack ให้เพิ่มเกมส์ได้ ด้วย hackchi2 
ก็เลย มาเขียนโปรแกรม snes เล่นดีกว่า โดยจะแสดงรูปนี้ด ขนาด 72 x 88 ใน mode 1
ที่มี background 3 layer 
BG1 16 สี
BG2 16 สี
BG3  4 สี

แต่เราจะแสดงบน BG1

ต้องแปลงเป็น format : PCX แล้ว convert เป็น data ที่ snes อ่านง่าย ด้วยโปรแกรม pcx2snesWIN

เขียน code และ compile หรือ assembler หว่า? ให้เป็น .smc

Code ก็ประมาณนี้
;============================================================================
; Includes
;============================================================================

;== Include MemoryMap, Vector Table, and HeaderInfo ==
.INCLUDE "header.inc"

;== Include SNES Initialization routines ==
.INCLUDE "InitSNES.asm"
.INCLUDE "LoadGraphics.asm"


;============================================================================
; Main Code
;============================================================================

.BANK 0 SLOT 0
.ORG 0
.SECTION "MainCode"

Start:
    InitSNES    ; Clear registers, etc.

    ; Load Palette for our tiles
    LoadPalette BG_Palette, 0, 16

    ; Load Tile data to VRAM
    LoadBlockToVRAM Tiles, $0000, $0C60 ; 99 tiles  = 3168 bytes

; Address Tiles Map BG1 setting
    lda #$00
    sta $2115
; Input Tiles Map
ldx #$3000 ; $6000 line = 1
    stx $2116
    lda #$00
- sta $2118
    inc a
    cmp #$9
bne -


ldx #$3020 ; $6000 line = 2
    stx $2116 
lda #$09
- sta $2118
    inc a
    cmp #$12
bne -
ldx #$3040 ; $6000 line = 3
    stx $2116 
lda #$12
    sta $2118
    lda #$13
    sta $2118
lda #$14
    sta $2118
lda #$15
    sta $2118
    lda #$16
    sta $2118
lda #$17
    sta $2118
lda #$18
    sta $2118
    lda #$19
    sta $2118
lda #$1A
    sta $2118

ldx #$3060 ; $6000 line = 4
    stx $2116 
lda #$1B
- sta $2118
    inc a
    cmp #$24
bne -
ldx #$3080 ; $6000 line = 5
    stx $2116 
lda #$24
- sta $2118
    inc a
    cmp #$2D
bne -
ldx #$30A0 ; $6000 line = 6
    stx $2116 
lda #$2D
- sta $2118
    inc a
    cmp #$36
bne -
ldx #$30C0 ; $6000 line = 7
    stx $2116 
lda #$36
- sta $2118
    inc a
    cmp #$3F
bne -
ldx #$30E0 ; $6000 line = 8
    stx $2116 
lda #$3F
- sta $2118
    inc a
    cmp #$48
bne -

ldx #$3100 ; $6000 line = 9
    stx $2116 
lda #$48
- sta $2118
    inc a
    cmp #$51
bne -
ldx #$3120 ; $6000 line = 10
    stx $2116 
lda #$51
- sta $2118
    inc a
    cmp #$5A
bne -
ldx #$3140 ; $6000 line = 11
    stx $2116 
lda #$5A
- sta $2118
    inc a
    cmp #$63
bne -
    ; Setup Video modes and other stuff, then turn on the screen
    jsr SetupVideo
Infinity:
    jmp Infinity    ; bwa hahahahaha


;============================================================================
; SetupVideo -- Sets up the video mode and tile-related registers
;----------------------------------------------------------------------------
; In: None
;----------------------------------------------------------------------------
; Out: None
;----------------------------------------------------------------------------
SetupVideo:
    php

    lda #$01
    sta $2105           ; Set Video mode 1, 8x8 tiles, 16 color BG1/BG2/ ,4 color BG3

    lda #$30            ; Set BG1's Tile Map offset to $6000 (Word address)
    sta $2107           ; And the Tile Map size to 32x32

    stz $210B           ; Set BG1's Character VRAM offset to $0000 (word address)

    lda #$01            ; Enable BG1
    sta $212C

    lda #$FF
    sta $210E
    sta $210E

    lda #$0F
    sta $2100           ; Turn on screen, full Brightness

    plp
    rts
;============================================================================
.ENDS

;============================================================================
; Character Data
;============================================================================
.BANK 1 SLOT 0
.ORG 0
.SECTION "CharacterData"

    .INCLUDE "man1.inc"

.ENDS

=======================
ผลก็ประมาณนี้


วางจะลองไปใส่ใน snes mini ^0^
โดยศึกษาจาก https://wiki.superfamicom.org/
ในหมวด tutorial
Link นี้ก็น่าสนใจ https://github.com/PeterLemon/SNES





 

Create Date : 04 พฤศจิกายน 2560    
Last Update : 4 พฤศจิกายน 2560 18:17:09 น.
Counter : 316 Pageviews.  

nes emulator

มีคนเก่ง เข้าเขียน nes emulator แล้วแสดงบน youtube ตามนี้



และ


เก่งมากๆๆ แถมยังให้ source code อยู่ที่ Link
ซึ่งเขียนด้วย c++0x (0x คือไรหว่า) และคิดว่าคง run บน unix หรือ linux มัง
แต่จะลองมา run บน mac ดู
1. อย่างแรกต้องหา SDL for mac มาติดตั้ง ต้องใช้ version 1.2 เพราะถ้าเป็น version 2+ จะเปลี่ยนconcept ในการสร้าง window การ putpixel 
2. ขั้นตอนติดตั้ง SDL ก็load file ที่ Link นี้ runแล้วจะได้ file ชื่อ SDL.framework
แล้วไป copy ไปใส่ใน /Library/Frameworks/ ก็ใช้ได้แล้ว แต่ถ้าเป็น SDL2 ต้องทำตามนี้
//joseph-long.com/writing/sdl-and-os-x/
3. ในsourcecode 
3.1 แก้ไข include ของ SDL ให้มี SDL/SDL.h

3.2ไปลบบรรทัดที่เกี่ยวกับเสียง เนื่องจากใน mac ไม่มีโปรแกรม resample ที่ไว้เล่นเพลง เขาบอกว่ามีใน unix? ไม่รู้ใน linux มีเปล่ายังไม่ได้ลองครับ

//static FILE* fp = popen("resample mr1789800 r48000 | aplay -fdat 2>/dev/null", "w");

//fputc(sample, fp);

//fputc(sample/256, fp);

4. compile โดยใช้ make ก็ได้ execute  file มา 

ทดสอบกับ rom rockman2 ก็ได้ประมาณนี้ สีมันเพี้ยน ไม่มีเสียงเพราะเราตัด code บางส่วน



แต่การที่คุณ bisqwit เขียนcode ประมาณ 900 บรรทัด ก็สุดยอดมากๆเลย 

ต่อไปเลยอยากแกะ code ที่เขาเขียนไว้ แต่ดูแล้วยากมาก เลยไปอุดหนุน amazon ด้วยเล่มนี้ หุๆ






 

Create Date : 31 กรกฎาคม 2558    
Last Update : 31 กรกฎาคม 2558 11:40:50 น.
Counter : 535 Pageviews.  

Nes Programming

วันนี้มาลองดูว่า เขียนโปรแกรมบน nes ทำอย่างไง 

ก็มี link สอนอยู่ที่ 
//blog.tozt.net/2014/10/13/writing-an-nes-game-part-1/
แปะไว้ศึกษาต่อ

แล้วก็มีต้วอย่างไฟล์ให้ compile ด้วย ประกอบด้วย
sprites.s เก็บ source code
sprites.chr เก็บ ข้อมูลgraphic

การ compile ก็ดูยุ่งยากเหมือนกัน
เริ่มจาก ไปหา wla-dx ที่ //www.villehelin.com/wla.html หรือ https://github.com/vhelin/wla-dx

1. wla-6502 -o test.s จะไ้ด้ test.o
2. wlalink linkfile test.rom จะได้ test.rom แต่ไฟล์ linkfile ภายในต้องเขียนประมาณนี้
[objects]
test.o
3. ใส่ header ไฟล์ด้วย cat header.bin test.rom > test.nes

หา emulator จาก //www.bannister.org/software/nestopia.htm

ทดลอง run ก็จะประมาณนี้ สามารถ เลื่อน กากบาทได้ 







 

Create Date : 02 กรกฎาคม 2558    
Last Update : 2 กรกฎาคม 2558 19:57:10 น.
Counter : 387 Pageviews.  

เขียนโปรแกรม super nintendo ตอน 1

หลังเตรียมการมานาน มาก ก็ได้ฤกษ์ ทดลองต่อ Smiley


โดยทำตามจากที่ Link
1. เตรียม  wla assembler จาก //www.villehelin.com/wla.html
หรือ จาก https://github.com/vhelin/wla-dx ที่น่า่่จะใหม่กว่า
2. สำหรับ window มี .exe ให้ใช้แบบสบาย แต่พวกสาย mac ต้อง compile ใหม่ โดย
พิมพ์​ sudo sh unix.sh (ถ้าจาก github จะมีต้องมี เลข 1 ต่อท้าย งง ส่ะ)
โปรแกรม ที่ compile แล้วจะอยู่ใน folder ชื่อ binaries
3. ทำ script เพื่อง่ายต่อการ assembler  ประมาณนี้

แต่ตรงที่เรียกโปรแกรม อาจต้องใส่ จุดแล้วslash นำหน้า นะ งง อีกแล้ว
4. เขียนโค้ด โดย copy มา 55 


5. แล้ว run ออกมา ก็ได้ผลลัพธ์ ประมาณนี้


หลักการ ก็ไปเปลี่ยน สีของ palette no. 0 ให้เป็นสีแดง จบ..​ แบบมั่วๆ




 

Create Date : 26 เมษายน 2558    
Last Update : 26 เมษายน 2558 15:55:52 น.
Counter : 403 Pageviews.  

SNES programming : เตรียมการ



จากที่ได้เครื่อง Dingoo A-320 มาแต่ไม่ได้สามารถเขียนโปรแกรมได้ เพราะ SDK ดันเป็นภาษาจีนสะแต่เครื่องเกมนี้สามารถ เป็น emulator เล่นเกมส์ SNES หรือ Super Family Com ได้ งั้นเลยลองมาเขียนโปรแกรมบน SNES กันดีกว่า

Search ใน google แล้วพบเอกสารพอสมควร แต่อ่านๆแล้ว ถ้าจะยากมาก เอาเป็นเขียนให้แสดภาพ
พอขำๆ ก็พอ อิอิ

ก่อนอื่นมารู้จัก Hardware กันก่อน
การแสดงผล 256x244 (W x H) pixels
VRAM สำหรับเก็บข้อมูล Tile , Tile Map มีขนาด 64 KB(0000-FFFF)
CPU 65c816
OAM (Object Attribute Memory) เพื่อกำหนดคุณลักษณะ ของ Sprite มีขนาด 544 Byte = 512 + 32
Sprite จะมีมากที่สุด 128 อัน
Memory ในช่วง $2000 - $5FFF จะเห็นได้ว่า ใช้เครื่องหมาย $ แทน 0x สำหรับเลขฐาน 16 มีไว้สำหรับset หรือ get หรือ
ให้ส่วนต่างๆทำงาน เช่น
$2100 = Screen Display Register ขนาด 1 Byte
d??bbbb d= 0 = เปิดจอ, d=1=ปิดจอ
b= ความสว่างมีค่าตั้งแต่ 0000 - 1111

$2121 = index color
$2122 = ค่าสี มีFormat ?bbbbggggrrrr ก็คือ RGB นั้นเอง

$2105 = ตั้งค่า mode การแสดงผล คิดว่าจะใช้ mode 1 กับ mode 3 ?

Register
A, X, Y มีขนาด 8 และ 16 Bit ขึ้นอยู่กับการใช้คำสั่ง sep rep


คำสั่งเบื้องต้น
SEP = set ?
REP = reset ?
LDA = Load ข้อมูลมาเก็บที่ A
STA = นำข้อมูลใน A ไปเก็บที่ memory ที่ระบุ
STZ = นำข้อมูล 0 ไปเก็บที่ memory ที่ระบุ
RTS

มารู้จัก Directive เบื้องต้น
1.MACRO

.MACRO ชื่อมาโคร
...คำสั่ง...
.ENDM

2.BANK
3.SECTION

.SECTION

.ENDS

เริ่มงงๆ แล้ว แหะ เด๋วค่อยว่ากันใหม่
Assember ใช้ WLA
Ref. 1. Qwerie's SNES Documentation
2. //vintagedev.110mb.com/
3. Yoshi Doc




 

Create Date : 04 เมษายน 2552    
Last Update : 4 เมษายน 2552 14:39:58 น.
Counter : 270 Pageviews.  


Valentine's Month


 
wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 7 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.