步步高多媒体学生...吧 关注:118贴子:446
  • 18回复贴,共1

说说sb2000的图片

只看楼主收藏回复

555.img是SB2000专用软盘,其中存放了一些图片,使用软盘中的画笔软件可以观看。2000的图片有两种格式,bmp和drw。drw是学习机专用图片文件格式,可以和bmp文件在学习上相互转换。drw文件的大小固定为3+16+22400字节。前3个字节是图片标识,16字节是16色调色板,16色调色板不必象普通FC那样分成4组。不存在4个相同背景色的问题。16色可以完全不同。22400是224*200个像素的数据。每8*8像素组成一个32个字节的title字模。字模分4组,每组8字节。一个字节8位代表一条线的8像素。4组相同位字节的相同位合成为1个4位16数,对应调色板的16字节。所以SB2000画面软件支持的图片只能是16色4位色深度224*200像素格式。
PC上的图片想在小霸王SB2000上播放,需要转换成224*200的16色BMP文件。如果16色BMP图片超过224*200,则只显示图片左上角的220*200个像素部分,多余的看不到。值得注意的是,电脑上转换的16色图片的调色板颜色应该转成相近的FC专用颜色。不转换的情况下,学习机在播放图片时会自动转换颜色。这个自动转换大多数情况下是错误的。可能是软件设计不精确或者学习机算力低的原因。我发的这个软盘镜像中有一部分是PC原图未转色,00.bmp-07.bmp在学习机上播放颜色是乱的。001-003,5554-5556,这6张图片是我手工转换了颜色,播放就没有问题了,和在电脑上播放效果一样。







IP属地:河南来自Android客户端1楼2024-09-03 09:11回复
    在PC上观看小霸王SB2000画笔专用图片drw文件的VB代码:
    Private Sub loadDRW()
    fm = File1.Path + "\" + File1.FileName
    If Dir(fm) = "" Then Exit Sub
    If LCase(Right(fm, 4)) <> ".drw" Then Exit Sub
    If FileLen(fm) < 3 + 16 + 22400 Then Exit Sub
    Open fm For Binary As #13
    Dim ff(15) As Byte
    Dim r(7, 3, 699) As Byte
    Get #13, 4, ff
    Get #13, 20, r
    Close #13
    Dim b(7, 255) As Byte
    Dim di(223, 199) As Byte
    'ReDim xsp2(223, 199)
    For Y = 0 To 255
    For d = 0 To 7
    z = 2 ^ d
    If (z And Y) = z Then b(d, Y) = 1 Else b(d, Y) = 0
    Next
    Next
    Dim c(3) As Long
    c(0) = 1: c(1) = 2: c(2) = 4: c(3) = 8
    Dim i As Long, e(3) As Byte, bd As Byte
    xx = 0: yy = 0
    For X = 0 To 699
    For j = 0 To 7
    For d = 0 To 7
    bd = 0
    For z = 0 To 3
    e(z) = r(j, z, X)
    bd = bd + c(z) * b(7 - d, e(z))
    Next z
    di(xx + d, yy + j) = bd
    Next d
    Next j
    xx = xx + 8
    If xx >= 224 Then xx = 0: yy = yy + 8
    Next X
    Dim bi10 As BitMapInfo
    bi10 = bi16
    bi10.bmiHeader.biHeight = -200: bi10.bmiHeader.biWidth = 224
    For X = 0 To 15
    bi10.bmiColors(X).rgbBlue = fcxsp(ff(X)).b
    bi10.bmiColors(X).rgbGreen = fcxsp(ff(X)).g
    bi10.bmiColors(X).rgbRed = fcxsp(ff(X)).r
    Next
    SetDIBits Picture2.hdc, Picture2.Image, 0&, 200, di(0, 0), bi10, 0&
    End Sub


    IP属地:河南2楼2025-06-03 06:14
    回复
      2026-01-07 23:51:15
      广告
      不感兴趣
      开通SVIP免广告
      Private Sub makedrw()
      drwy = 40 + 192: drwx = 216
      Dim zfb(699) As b32
      Dim b3() As Byte
      Static p3(3, 255) As Byte
      Static c3(3) As Byte
      Static c7(1, 7) As Byte
      If p3(3, 255) = 0 Then
      For X = 0 To 15
      For Y = 0 To 3
      If (X And 2 ^ Y) <> 0 Then p3(Y, X) = 1 Else p3(Y, X) = 0
      Next
      Next
      For X = 0 To 7: c7(1, X) = 2 ^ (7 - X): Next
      End If
      For Y = 40 To drwy Step 8
      For X = 0 To drwx Step 8
      For y1 = 0 To 7
      ReDim b3(3)
      For x1 = 0 To 7
      c = dian(X + x1, Y + y1)
      For z = 0 To 3: c3(z) = p3(z, c): b3(z) = b3(z) + c7(c3(z), x1): Next
      Next x1
      For z = 0 To 3
      On Error Resume Next
      zfb(zw).b(y1, z) = b3(z)
      If err.Number > 0 Then MsgBox zw, , UBound(zfb)
      Next
      Next y1 '像素转字节完成
      zw = zw + 1
      Next X
      Next Y
      i = 0
      For Y = 0 To 1
      For X = 0 To 7
      'zfb(1023).b(X, 2 + Y) = pf(i): i = i + 1
      Next
      Next
      ff = Array(12, 13, 16, 21, 24, 25, 28, 36, 37, 38, 39, 44, 48, 52, 56, 61)
      Dim sbtsb(15) As Byte
      For X = 0 To 15: sbtsb(X) = ff(X): Next
      Open "F:\" + Format(File1.ListIndex, "00000") + ".drw" For Binary As #3
      Put #3, 1, CLng(&H4D585A): Put #3, 4, sbtsb: Put #3, 20, zfb
      Close #3 '点阵获取完毕,下面开始压缩
      End Sub


      IP属地:河南3楼2025-06-03 06:19
      收起回复


        IP属地:河南4楼2025-06-03 06:36
        回复
          VB步步高: 06-14 13:05:05SB2000在图形显示上确实是所有8位学习机里最牛的!一、它真正支持16色甚至是64色,64色是指每个title虽然是16色的,但是不同title可以选择不同的16色调色盘,一共4组色盘,所以想显示64色图片效果也是可能的。二、它同屏16色或64色不需要屏幕分裂技术。纯硬件支持。因为其他FC型号的命名表都是8位,而它是12位,是普通FC 的16倍。普通FC由于title名只有0-255这256个选项,而一屏图像是960个title,想显示完全不同的字符图案,就需要分成4次。在屏幕上每显示60条线时就切换一次4K背景图案表(ppu:0000-0FFF或1000-1FFF),也就是屏幕4分裂。而SB2000呢,每个title名有4096个选项,其实有1024个就足够显示960完全不同的字模图案了。所以不需要屏幕分裂。永恒的明天: 06-14 13:13:53SB2000这么牛永恒的明天: 06-14 13:15:20牛机 生不逢时[晕]VB步步高: 06-14 13:18:12三、它充分利用了扩展显存。一个16色图需要32K显存,远超普通FC的10K大小的VRAM。所以SB2000支持图形命名表使用扩展地址:&H8000-&HFFFF.比如titlename是&H800,代表图形地址是&H8000.802代表8020,804代表8040。在16色显示时,由于一个title图形是32字节,所以801,803这样的命名是错误的。在4色显示时才有意义。对比这下,步步高软驱一号也有32K显存,步步高98甚至有256K显存。但是步步高图形显示完全和普通FC是一样的,所以虽然有16色和不用屏幕分裂的硬件基础,但是没利用。小霸王SB2000的硬件6576确实比普通的6561要强大的多。


          IP属地:河南9楼2025-06-14 13:19
          回复


            IP属地:河南10楼2025-06-14 13:21
            回复
              SB2000写显存也有独到之处。4048-404F这8个端口配合,可以一次向显存写32KB内容。而且是DMA方式,只要这8个端口分别写一次,指定好内存源地址和显存目标地址及内容大小,一共16条指令就够了。简直是牛叉了!说明下,4049端口写的是内存的bank号,这是按32K切划分的。比如&H10,代表prgRAM的第一个32K区间,即用户编写软件的地址0000-7FFF。而&H11代表8000-FFFF。&H12=&H10000-17FFF...... 它一共有512K内存(RAM),所以bank号为&H10-&H1F. 而0-F是512KROM的bank号。4048写&HC0,404D写&H[80-FF]-PPU地址=8000-FFFF,这就是向扩展显存写数据的关键。配合命名表的800,802,804 ……FFE这些编号,就能在屏幕上显示出全屏幕16色图像了。


              IP属地:河南11楼2025-06-14 13:45
              回复
                4300=32K切显存端口。可选0-15
                SB2000的命名表存放地址也和FC不同,它把本来属于图案表的0000-1FFF空间改成了4组命名表。0000-07FF=00屏命名表,0800=01屏,1000=10屏,1800=11屏。显示哪个屏由CPU2000端口的低2位指定。
                CPU2008端口位7=1指定16色模式,=0指定4色模式,位0=0指定命名表地址=0000-1FFF,有4块。若位0=1,则命名表地址=2000-27FF,这样就只有一个屏的命名表可以使用了。


                IP属地:河南12楼2025-06-14 14:07
                回复
                  2026-01-07 23:45:15
                  广告
                  不感兴趣
                  开通SVIP免广告
                  0200:0C0D101518191C242526272C3034383D =0组16色调色板,根据图片制作时选择颜色可变。
                  0800:00 80,02 80,04 80,06 80 .......0E FF =命名表,固定,1024字节(前960字节可显示 32*30)。
                  8000:图案表(32*960 BYTES,格式)
                  10000,18000,20000 .....每&H8000字节=一幅32K图像数据。


                  IP属地:河南14楼2025-06-14 14:24
                  回复
                    4C1080AA5500000000000000000000FFA9008D00208D012078EAEAEAEAEAEAEAA9658D3140A9768D3140A9808D0820EAA210A000B99080994020C8CAD0F6EAEA4CA0800000000000AD43808D0043EA60000000A2008E0043A008B9878099474088D0F7EE8980E8E00DD0EA8C0043EAEAA91E8D01204CFD800000000000000000C010008800000008C0110080008000800C0D101518191C242526272C3034383DA9088501A90085008D06208D0620A5008D0720A5018D0720E600E600D008E601A501C910F002D0E64C538080000000000000000000000000AD00904A8D1140EAA9D285AAE6AAD0FC60000000000000000000000000000000000000000020D880EED980D0F8EEDA80ADDA80C9A0EAD0EDA9908DDA80EE4380AD4380C90DD005A9008D4380EECB80ADCB80C988D005A9818DCB808D4140EAEA2048804CFD80
                    这是SB2000的有声播放图片.exe的主程序机器码。位置:0000,装载至内存8000.位置1000-7FFF可以填充28KB的WAV音乐,规格是4000bps,8位,单声道。时长7秒。不填充的话就是静音播放。8000之后就是13张图片,每个图片32KB(&H8000大小)。


                    IP属地:河南15楼2025-06-17 16:25
                    收起回复
                      小霸王SB2000的系统调色板
                      T = Array( _
                      &H55, &H55, &H55, &H0, &H80, &H20, &H0, &H0, &H80, &H0, &H0, &H0, &H80, &H0, &H53, &H0, _
                      &H80, &H0, &H80, &H0, &H40, &H0, &H80, &H0, &H0, &H0, &H80, &H0, &H4, &H2E, &H7B, &H0, _
                      &H0, &H6E, &H6E, &H0, &H0, &H80, &H40, &H0, &H0, &H80, &H0, &H0, &H40, &H80, &H0, &H0, _
                      &H80, &H80, &H0, &H0, &HA, &HA, &HA, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, _
                      &H8C, &H8C, &H8C, &H0, &HE8, &H3A, &H0, &H0, &HE8, &H0, &H0, &H0, &HE8, &H0, &H97, &H0, _
                      &HCE, &H0, &HCE, &H0, &H74, &H0, &HE8, &H0, &H0, &H0, &HE8, &H0, &H0, &H54, &HDF, &H0, _
                      &H0, &HC8, &HC8, &H0, &H0, &HCE, &H67, &H0, &H0, &HCE, &H0, &H0, &H67, &HCE, &H0, &H0, _
                      &HCE, &HCE, &H0, &H0, &H19, &H19, &H19, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, _
                      &HDC, &HDC, &HDC, &H0, &HFF, &H80, &H55, &H0, &HFF, &H6E, &H6E, &H0, &HFF, &H75, &HCF, &H0, _
                      &HFF, &H55, &HFF, &H0, &HAA, &H55, &HFF, &H0, &H75, &H75, &HFF, &H0, &H70, &HA0, &HFA, &H0, _
                      &H0, &HFA, &HFA, &H0, &H55, &HFF, &HAA, &H0, &H55, &HFF, &H55, &H0, &HAA, &HFF, &H55, &H0, _
                      &HFF, &HFF, &H55, &H0, &H32, &H32, &H32, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, _
                      &HFF, &HFF, &HFF, &H0, &HFF, &HCE, &HBD, &H0, &HFF, &HBE, &HBE, &H0, &HFF, &HBD, &HE8, &H0, _
                      &HFF, &HBD, &HFF, &H0, &HDE, &HBD, &HFF, &H0, &HBE, &HBE, &HFF, &H0, &HC4, &HD8, &HFD, &H0, _
                      &HBE, &HFF, &HFF, &H0, &HBD, &HFF, &HDE, &H0, &HBE, &HFF, &HBE, &H0, &HDE, &HFF, &HBD, &H0, _
                      &HFF, &HFF, &HBD, &H0, &H4B, &H4B, &H4B, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0)
                      i = 0
                      For x = 0 To 252 Step 4
                      sb(i).b = T(x + 0)
                      sb(i).g = T(x + 1)
                      sb(i).r = T(x + 2)
                      i = i + 1
                      Next


                      IP属地:河南16楼2025-06-17 17:31
                      收起回复
                        崇拜滔滔江水连绵不绝般地崇拜


                        IP属地:甘肃来自Android客户端17楼2025-11-08 23:17
                        回复