Strona 4 z 4

Mad Pascal - TEDzakker

: 17 mar 2021, 22:13
autor: zbyti
W sumie to jak chcemy odegrać muzykę to wystarczy tylko taki kod:

Kod: Zaznacz cały

{$r msx.rc}

// TEDzakker demo music

const
  MUSIC = $4000;

begin
  asm { phr \ lda #0 \ jsr MUSIC \ plr };

  repeat
    pause;
    asm { phr \ jsr MUSIC+3 \ plr };
  until false;
end.
bo pause czeka na zmianę jednego z liczników, który zmienia się podczas przerwania "vbi".

Re: Mad Pascal

: 18 mar 2021, 09:18
autor: carrion
zbyti pisze:
17 mar 2021, 18:40
Ale muzyka nie jest moja, to jeden z 3-4 przykładów dołączonych do trackera ;)
a widzisz... nie wiedziałem.
tak czy siak projekt nadal uważam za fajny i czekam na efekt końcowy z Twoją muzyką.

Re: Mad Pascal

: 18 mar 2021, 23:40
autor: zbyti
Atarowcy użyli sztucznej inteligecji by logo Tron +4 poszło na ich sprzęcie, całkiem całkiem, ale coś przy krawędzi się sieć neuronowa pogubiła ;)
Screenshot_2021-03-18_23-37-42.png
Screenshot_2021-03-18_23-37-42.png (93.36 KiB) Przejrzano 2231 razy
Stephen_Tron+4.xex.zip
(8.19 KiB) Pobrany 69 razy

Re: Mad Pascal

: 19 mar 2021, 09:18
autor: carrion
ble :P

jak by ładnie poprosili to by dostali to samo w g2f :)

Mad Pascal - Plasma

: 19 mar 2021, 13:05
autor: zbyti
msx.rc

Kod: Zaznacz cały

MUSIC rcdata 'demo.tzp.prg' 2
plasma.pas

Kod: Zaznacz cały

// 06_plasma.ras, Turbo Rascal example
// TEDzakker demo music

{$r msx.rc}

uses fastmath;

//-----------------------------------------------------------------------------

const
  COLOURRAM_ADDR = $0800; SCREEN_ADDR = $0c00;
  SCR_W = 40; SCR_H = 25;

  MUSIC = $4000;

  DATA_CHAR: array [0..127] of byte = (
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $10, $00, $00, $00, $00,
    $00, $00, $18, $18, $00, $00, $00, $00,
    $00, $00, $38, $38, $38, $00, $00, $00,
    $00, $00, $3c, $3c, $3c, $3c, $00, $00,
    $00, $7c, $7c, $7c, $7c, $7c, $00, $00,
    $00, $7e, $7e, $7e, $7e, $7e, $7e, $00,
    $fe, $fe, $fe, $fe, $fe, $fe, $fe, $00,
    $00, $7f, $7f, $7f, $7f, $7f, $7f, $7f,
    $00, $7e, $7e, $7e, $7e, $7e, $7e, $00,
    $00, $7c, $7c, $7c, $7c, $7c, $00, $00,
    $00, $00, $3c, $3c, $3c, $3c, $00, $00,
    $00, $00, $38, $38, $38, $00, $00, $00,
    $00, $00, $18, $18, $00, $00, $00, $00,
    $00, $00, $00, $08, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00
  );

//-----------------------------------------------------------------------------

var
  DETIRQSRC         : byte absolute $ff09;  //detect IRQ source, and clear IRQ flag
  SETIRQSRC         : byte absolute $ff0a;  //set IRQ source
  RC                : byte absolute $ff0b;  //raser counter bits 0-7
  RAMROMSEL         : byte absolute $ff12;
  CHBAS             : byte absolute $ff13;
  BACKGROUND        : byte absolute $ff15;
  BORDER            : byte absolute $ff19;
  VCOUNT            : byte absolute $ff1d;  //vertical line bits 0-7
  IRQVEC            : word absolute $fffe;

//-----------------------------------------------------------------------------

var
  c1A               : byte = 1;
  c1B               : byte = 5;

  scrn              : PByte absolute $60;

  charset           : array [0..0]   of byte absolute $3000;
  sinusTable        : array [0..255] of byte absolute $3100;
  lookupDiv16       : array [0..255] of byte absolute $3200;
  xbuf              : array [0..39]  of byte absolute $3300;

//-----------------------------------------------------------------------------

procedure InitDivision16;
var x: byte;
begin
  for x:=0 to 255 do lookupDiv16[x] := x shr 4; // Simply store values divided by 16
end;


procedure InitCharset;
begin
  Move(DATA_CHAR, charset, SizeOf(DATA_CHAR));

  // set bit 2
  RAMROMSEL := RAMROMSEL and %11111011;

  // 12 = $3000 / $400 on 2-7 bits
  CHBAS := (CHBAS and %11) or 12 shl 2;
end;

//-----------------------------------------------------------------------------

procedure doPlasma;
var
  _c1a, _c1b : byte;
  i, ii, tmp : byte;
begin
  scrn := pointer(SCREEN_ADDR);
  _c1a := c1A; _c1b := c1B;

  for i := (SCR_W - 1) downto 0 do begin
    xbuf[i] := sinusTable[_c1a] + sinusTable[_c1b];
    Inc(_c1a, 3); Inc(_c1b, 7);
  end;

  for ii := (SCR_H - 1) downto 0 do begin

    tmp := sinusTable[_c1a] + sinusTable[_c1b];
    Inc(_c1a, 4); Inc(_c1b, 9);

    for i := (SCR_W - 1) downto 0 do
      scrn[i] := lookupDiv16[xbuf[i] + tmp];

    Inc(scrn, 40);
  end;

  Inc(c1A, 3); Dec(c1B, 5);
end;

//-----------------------------------------------------------------------------

procedure vbi; assembler; interrupt;
asm {
        phr
        mva #2 DETIRQSRC

        inc c4p_time+2
        bne off
        inc c4p_time+1
        bne off
        inc c4p_time
  off:

        jsr MUSIC+3;
        plr
};
end;

//-----------------------------------------------------------------------------

begin
  asm {
    sei \ sta $ff3f
    txa:pha \ lda #0 \ jsr MUSIC \ pla:tax
  };

  RC := $d8; SETIRQSRC := 2; DETIRQSRC := 2;
  IRQVEC := word(@vbi);

  FillSinHigh(sinusTable); InitDivision16; InitCharset;

  asm { cli };

  repeat
    Pause; doPlasma;
  until false;

end.

https://www.youtube.com/watch?v=Yg10zHR--14

Mad Pascal - HiRes

: 20 mar 2021, 13:05
autor: zbyti
Grafika spakowana za pomocą apultra, z 10Kb zrobił się 1KB :] Logo wykonał http://bocianu.atari.pl/.

hgfx_apl.rc

Kod: Zaznacz cały

APLBIN rcdata 'mp.apl'
hires_apl.pas

Kod: Zaznacz cały

//Mad Pascal logo by @bocianu
{$r hgfx_apl.rc}

uses aplib;

const
  APLBIN = $3000;
  LOGO   = $5800;

var
  SETBITMAP                          : byte absolute $ff06;
  SETMCOLOR                          : byte absolute $ff07;
  BITMAPADDR                         : byte absolute $ff12;
  VIDEOMATRIX                        : byte absolute $ff14;
  BORDER                             : byte absolute $ff19;

begin

  unapl(pointer(APLBIN), pointer(LOGO));

  SETBITMAP := SETBITMAP or $20;
  SETMCOLOR := (SETMCOLOR and $40) or $8;

  // (01011xxx) $5800 = 11 * $800;
  VIDEOMATRIX := %01011000;
  // (xx011xxx) $6000 = 3 * $2000; bit 2 set to 0 means reading from RAM
  BITMAPADDR := %00011000 or (BITMAPADDR and %00000011);

  BORDER := $3d;

  repeat until false;
end.
Screenshot_2021-03-20_11-05-49.png
Screenshot_2021-03-20_11-05-49.png (21.68 KiB) Przejrzano 2178 razy

Re: Mad Pascal

: 21 mar 2021, 12:52
autor: carrion
a jest już wersja gry z moją grafiką? dodałbym to jakoś do artykułu?

Re: Mad Pascal - Tron 4

: 21 mar 2021, 13:52
autor: zbyti
Nie, skoro mam zrobić własną muzę to jeszcze tydzień, muszę się obsługi TEDzakkera nauczyć i coś na nim wymodzić. Dam znać tutaj za kilka dni.

Re: Mad Pascal

: 22 mar 2021, 14:06
autor: zbyti
Jest spora szansa, że muza będzie od Csabo ;) ja się z muzykowaniem na TED nie będę aż tak spieszył :]

Re: Mad Pascal

: 22 mar 2021, 15:32
autor: carrion
super news... :lol:
tzn nie że ty odpuszcza muzykowanie tylko że będzie od csabo :)

na Twoją muzę czekam tak czy siak, ale fajnie że pierwszy projekt ma takie wsparcie społeczności.

Mad Pascal - TED i te inne dźwięki

: 22 mar 2021, 20:00
autor: zbyti
@Carrion nie, nie odpuszczam muzykowania na C16 ale Csabo jest bardzo dobry na tej platformie i muzę pewnie dostanę dziś, więc dzięki temu to wszystko szybciej zepnę niż bym to robił sam. Będę mógł szybciej zająć się czymś innym.

Na dowód, że próbuję zrozumieć jak brzęczy TED poniżej mój najnowszy kod, powstał na bazie mojej ulubionej książki do ogarniania C+4:

Kod: Zaznacz cały

//-----------------------------------------------------------------------------
// Commodore Plus/4, C16 or 264 TED sound frequency tables PAL
// https://www.dtech.lv/techarticles_plus4_freq.html
//-----------------------------------------------------------------------------
const
  a0   =   7; a1   = 516; a2   = 770; a3   = 897; a4   = 960; a5   = 992;
  a0is =  64; a1is = 544; a2is = 784; a3is = 904; a4is = 964; a5is = 994;
  b0   = 118; b1   = 571; b2   = 798; b3   = 911; b4   = 967; b5   = 996;
  c1   = 169; c2   = 597; c3   = 810; c4   = 917; c5   = 971; c6   = 997;
  c1is = 217; c2is = 621; c3is = 822; c4is = 923; c5is = 974;
  d1   = 262; d2   = 643; d3   = 834; d4   = 929; d5   = 976;
  d1is = 305; d2is = 665; d3is = 844; d4is = 934; d5is = 979;
  e1   = 345; e2   = 685; e3   = 854; e4   = 939; e5   = 982;
  f1   = 383; f2   = 704; f3   = 864; f4   = 944; f5   = 984;
  f1is = 419; f2is = 722; f3is = 873; f4is = 948; f5is = 986;
  g1   = 453; g2   = 739; g3   = 881; g4   = 953; g5   = 988;
  g1is = 485; g2is = 755; g3is = 889; g4is = 957; g5is = 990;

//-----------------------------------------------------------------------------
// Zielony mosteczek
//-----------------------------------------------------------------------------
const
  music_notes: array [0..39] of word = (
    c3,c3,c3,c3,e3,g3,f3,e3,d3,c3,
    g3,g3,g3,e3,g3,c4,a3,g3,f3,e3,
    d3,d3,d3,d3,f3,a3,g3,f3,e3,d3,
    c3,c3,c3,c3,e3,g3,f3,e3,d3,c3

  );
  music_duration: array [0..39] of byte = (
    2,2,4,2,2,4,2,2,4,8,
    2,2,4,2,2,4,3,1,2,2,
    2,2,4,2,2,4,3,1,2,2,
    2,2,4,2,2,4,2,2,4,4
  );

//-----------------------------------------------------------------------------

const
  TEMPO = 3;

//-----------------------------------------------------------------------------

{*
$FF0E 0-7 Low byte of frequency for voice 1

$FF0F 0-7 Low byte of frequency for voice 2

$FF10 0-1 High 2 bits of frequency for voice 2

$FF11 0-3 Volume
        4 Select voice 1 (0 = off, 1 = on)
        5 Select voice 2 (0 = off, 1 = on)
        6 Select noise for voice 2 (0 = off, 1 = on)
        7 Sound switch (0 = on, 1 = off)
$FF12 0-1 High 2 bits of frequency for voice 1
      2-7 Nonsound uses
*}
var
  TED_FF0E : byte absolute $FF0E;
  TED_FF11 : byte absolute $FF11;
  TED_FF12 : byte absolute $FF12;

//-----------------------------------------------------------------------------

var
  note      : word;
  duration  : byte;
  i, ii     : byte;

//-----------------------------------------------------------------------------

begin
  //Select voice 1 with maximum volume
  TED_FF11 := $9f;

  for i := 0 to SizeOf(music_duration)-1 do begin
    duration := music_duration[i];
    note := music_notes[i];

    TED_FF0E := Lo(note);
    TED_FF12 := (TED_FF12 and $fc) or Hi(note);

    //Turn on sound
    TED_FF11 := TED_FF11 and $7f;

    for ii := (duration shl TEMPO) downto 1 do pause;

    //Turn off sound
    TED_FF11 := TED_FF11 or $80;

    pause;
  end;

end.
zielony_mosteczek.zip
(376 Bajtów) Pobrany 62 razy

Re: Mad Pascal - Tron +4 FINAL!

: 23 mar 2021, 02:20
autor: zbyti
Title gfx by Carrion
Mad Pascal logo by Bocianu
Music by Csabo
Mad Pascal by TeBe
Game code by zbyti
tron_plus_4.prg.zip
(8.4 KiB) Pobrany 71 razy

Re: Mad Pascal

: 23 mar 2021, 17:36
autor: carrion
MEGA Dobra Produkcja!
Gratulacje!

I jestem podwójnie happy że to udało się zrobić tutaj na forum i w okolicach portalu jako "takie grupowe przedsięwzięcie".
Wielkie dzięki też dla Tebe i Bocianu ze sceny Atari. To jest ten rodzaj współpracy między-platformowej, o który zawsze będę walczył! Dzięki

Oczywiście wielkie dzięki dla Csabo! Super udźwiękowienie!

Re: Mad Pascal

: 23 mar 2021, 18:01
autor: zbyti
@Carrion dzięki, mała prosta gierka ale chwilę zabawy może dać :]

Też jestem bardzo zadowolony ze współpracy, otrzymałem grafikę i muzykę na najwyższym poziomie (co podniosło wartość rilisa), nawet nie musiałem o te rzeczy prosić ;) jedyne co musiałem to nauczyć się jak dostarczoną grafikę/muzykę użyć :]

Tak to ja się mogę w retro bawić - gdy spotyka się entuzjastów, którzy potrafią poprzeć projekt zarówno słowem jak i czynem :D

Mam nadzieję, że następna produkcja będzie krokiem naprzód pod względem kodu jak i dostarczanej rozrywki :]