|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 12 posts ] |
|
Author |
Message |
vinxru
Retired
Joined: 27 Mar 2013 04:55 Posts: 587 Location: 62.192.229.16
|
Что то не нашел темы про Atari 2600. Неужели эта платформа никого тут не заинтересовала. В частности, множество интересных игр, имеющих полноценный скролл и 128 цветную графику. И все это работало на 128 байтах оперативной памяти и 4-16 Кб ПЗУ.
|
11 Jun 2013 13:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да - там урезанный 28-ногий 6502 " под маской" 6507. Меня конкретно - не заинтересовал...
А как других - трудно сказать, поскольку вот здесь мы его затронули вскользь.
_________________ iLavr
|
11 Jun 2013 13:35 |
|
|
vinxru
Retired
Joined: 27 Mar 2013 04:55 Posts: 587 Location: 62.192.229.16
|
Там интересно видео (далее TIA). По сути, это простейшая схема предназначенная для формирования экрана понга. TIA не генерирут КСИ. Она вообще понятия не имеет о том, что изображение двумерное. Генерация КСИ возложена на программу. TIA бесконечно повторяет одну и ту же строку. Какое то изображение получается, только благодаря тому, что процессор от строки к строке меняет значения регистров TIA Игровое поле - это двухцветное изображение 20x1, которое дублируется до 40x1 и растягивается на всю строку в 160 пикселей. Правая часть игрового поля может быть зеркально отражена. Игрок - это одноцветное изображение 8x1 (второй цвет прозрачный). Программист определяет положение игрока, его цвет, а так же некоторые эффекты (игрока можно отразить, растянуть, дублировать...). Мишень - это отрезок 1,2,4 или 8 пикселей. Цвет мишени всегда такой же, как цвет игрока. Мяч - это отрезок 1,2,4 или 8 пикселей. Мяч может быть любого цвета. | | | | Code: LDY #0 ; unsigned char y = 0; Loop4: ; do { STY ColuP0 ; цвет_игрока_1 = y; LDA Data, Y ; a = data[y]; STA Grp0 ; битмэп_игрока_1 = a; STA Pf1 ; битмэп_игрового_поля = a; STA Wsync ; ждем_конец_строки(); STA Wsync ; ждем_конец_строки(); INY ; y++; CPY #88 ; bool flag = y<72; BNE Loop4 ; } while(flag);
Data: .DB $82,$82,$82,$FE,$82,$82,$82,0 ; H .DB $FE,$80,$80,$FE,$80,$80,$FE,0 ; E .DB $80,$80,$80,$80,$80,$80,$FE,0 ; L .DB $80,$80,$80,$80,$80,$80,$FE,0 ; L .DB $7C,$82,$82,$82,$82,$82,$7C,0 ; O .DB 0,0,0,0,0,0,0,0 .DB $92,$92,$92,$92,$92,$92,$6C,0 ; W .DB $7C,$82,$82,$82,$82,$82,$7C,0 ; O .DB $FC,$82,$82,$FC,$88,$84,$82,0 ; R .DB $80,$80,$80,$80,$80,$80,$FE,0 ; L .DB $FC,$82,$82,$82,$82,$82,$FC,0 ; D
| | | | |
Главная идея в выше написанном, это то, что на Atari была офигительная графика. Игры всегда давали 50 fps, даже при полной перерисовке экрана.И 128 цветов на экране. И это требует около 0 байт видеопамяти.
|
11 Jun 2013 14:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Возможно... но поскольку 6507, TIA и RIOT как и Atari 2600 мне недоступны,
то и не заинтересовало.
Сам 6502 меня заинтересовал, но в моей географической локации оказался
доступен лишь вот в таком сильно-интегрированном виде. Что не совсем
удобно, хотя и интересно...
_________________ iLavr
|
11 Jun 2013 14:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
ZX-80 и ZX-81 вроде тоже программно синхроимпульсы генерили
|
11 Jun 2013 15:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну может быть программно-аппаратно - точнее будет...
Их идеологию передрали в " Галаксию", а там всё же аппаратная поддержка есть.
PS. Да,... и "Галаксия" всё-же схемотехнически ближе к ZX-80.
_________________ iLavr
|
11 Jun 2013 15:26 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Столкнулся с этим (этой) TIA - Television Interface Adaptor - совершенно по случаю (искал мануал на 6532, а эта БИС используется в Atari 2600). Заинтересовало, и вспомнил про этот топик здесь. Даже скачал эмулятор Atari 2600 и попробовал пару игр посмотреть. Раньше в жизни с Atari 2600 и её играми сталкиваться не приходилось... По краткому описанию от vinxru из этого топика помнил, что программирование видео на Atari 2600 - дело весьма муторное, поскольку процесс программный, в динамике, и видео-ОЗУ как такового нет. Но графика при таком аппаратном убожестве даже удивила! Коллеги с форума http://zx-pk.ru/ в топике про Atari 2600 ссылаются на статью из Вики: http://en.wikipedia.org/wiki/Atari_TIAя прочитал - как-то всё неконкретно очень и педалируются трудности программирования. Кто-нибуть знает, где почитать материал по TIA - Television Interface Adaptor более доходчиво с конкретными примерами и желательно на русском? Сейчас смотрю материал: Atari 2600 Programming for Newbies
|
04 May 2015 02:04 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Поискал сам, вот что удалось найти: Более полное описание от vinxru на русском: http://www.adsl.zveronline.ru/projects/articles/2011/06/15/atari_2600/К сожалению исходник и бинарник примера там утеряны, и хотя там более подробно описано, понятнее чем здесь мне пока не стало... Цикл статей по программированию Atari 2600, к сожалению на английском: The TIA and the 6502 (и далее...) К сожалению, они не разбирают последовательно какой-то пример. Смущает жесткая потактовая привязка 6502 к TIA. Не совсем понятно, как TIA может тормозить 6502, "когда он сам ей об этом скажет". Честно говоря, вот эти понятия пока тоже несколько затуманивают общий смысл: Может о всём сразу и не надо заботиться программно, в примерах vinxru этого не видно. Опять же - "симметрия относительно центра строки" - не наблюдаю её в скриншотах игр и не все из " 5 управляемых программно объектов" наблюдаю на скриншотах... Ну и раз уж были упомянуты " регистры TIA", то вот их полное описание (сожалению тоже на английском): http://alienbill.com/2600/101/docs/stella.htmlНаверное придется попереводить... русскоязычных материалов пока не встретилось. P.S. Cтранно как-то... надеялся, что найдутся какие-либо форумы русскоязычных любителей Атари 2600 (по аналогии с "Денди" - Famicom), но - нет таких...
|
04 May 2015 06:18 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
БИС TIA ( Television Interface Adaptor) была разработана в качестве телевизионного адаптера для микропроцессорных систем с ограниченным количеством оперативной памяти (ОЗУ). На момент создания TIA БИС ОЗУ были еще довольно дороги, поэтому архитектура адаптера подразумевает, что полный телевизионный сигнал и необходимое цветное изображение можно создать, используя лишь его внутренние регистры. С учетом того, что игровая приставка Atari 2600 имеет всего 128 байт ОЗУ, где также размещается и стек микропроцессора MOS 6507, можно признать дизайн TIA довольно успешным. В общем-то, этот чип от MOS носит название 6525, и может иметь разновидности для различных телевизионных систем. В частности, UM6526P TIA PAL - разновидность для TV стандарта PAL. Отличия заключаются в цветовой синхронизации, поскольку аппаратно БИС TIA способна сформировать 1 строку телевизионного растра, с импульсом строчной синхронизации, "вспышкой" цветовой синхронизации и строчным гасящим импульсом. При этом микропроцессор MOS 6507 должен активно " подкидывать дровишки" в регистры БИС TIA фактически " на лету", чтобы формировать видимую часть строки, в связи с чем БИС TIA и микропроцессор 6507 довольно жестко связаны аппаратно. БИС TIA синхронизируется внешним тактовым генератором с частотой 3.58 MHZ, с этой частотой выводятся точки цвета (или "пиксели") во время движения лучей по строке телевизионного растра, что позволяет вывести 228 "пикселей" в строке, из которых 68 отводятся на интервал гашения по строке, а на его длительности 16 тактов отводятся на импульс строчной синхронизации со "вспышкой" цветовой синхронизации. Таким образом весь телевизионный растр формируется из таких строк, а тактовая частота 3.58 MHZ делится TIA на три ( 1.19 MHZ) и подается в качестве тактирующего сигнал Ф1 на микропроцессор 6507, таким образом достигается синфазность работы TIA и 6507, при этом TIA может притормозить 6507 сигналом готовности RDY, действительно, когда последний выдаст TIA соответствующую команду. На 3 выведенных TIA точки приходится, соответственно, 1 такт CPU 6507, и с этой скоростью ( 1.19 MHZ) микропроцессор должен успевать в точные моменты времени осуществлять запись в регистры TIA, состояние которых сразу же отображается на видимой части строки как изображение. На микропроцессор также возлагается задача подсчета выведенных строк растра в кадре в зависимости от телевизионного стандарта ( 262 для NTSC и 312 для PAL), а также формирование кадрового синхронизирующего импульса (обычно в 3 строки) и интервалов гашения по кадру ( VERTICAL BLANK и OVERSCAN). Собственно, во время интервалов времени гашения по строке и кадру ( HORIZONTAL BLANK, VERTICAL BLANK и OVERSCAN) микропроцессор 6507 относительно свободен, чтобы производить операции, не связанные с отображением на экран, а значит, в эти интервалы он может подсчитывать коллизии игры, или какой другой исполняемой программы (демо-ролика, к примеру). Но при этом микропроцессор должен очень строго успевать вернуться к формированию изображения записью в регистры БИС TIA, иначе изображение может быть испорчено. Итак, никакой видеопамяти в игровой приставке Atari 2600 нет, и надо очень строго в режиме реального времени производить запись в регистры БИС TIA, которыми она может сформировать на экране следующие 6 объектов: игровое поле, 2 игрока, 2 мишени и 1 мяч ( background & playfield, sprites (2), missiles (2) and ball). На скриншоте игры в танчики на Atari 2600 background - это зеленый цвет фона, playfield - это желтый лабиринт, 2 sprites - это цифры счета, 2 missiles - это сами 2 танка и ball - это то, чем танки стреляют. Для всех этих объектов у БИС TIA есть специфические регистры, благодаря которым, эти объекты и появляются на экране и, действительно, БИС TIA ориентирована на формирование изображения характерного для игры PING-PONG, но это вовсе не значит, что нельзя этими "выразительными средствами" запрограммировать другую игру. Но для этих объектов БИС TIA может аппаратно отслеживать их геометрическое наложение друг на друга или пересечение. (У БИС TIA также есть средства формирования звука и шумов, но речь сейчас идет не об этом). Итак, background - цвет фона в TIA задается через регистр COLUBK; playfield - цвет лабиринта (или переднего плана) в TIA задается через регистр COLUPF; За картинку лабиринта отвечают 3 регистра БИС TIA PF0, PF1, PF2. Из их 3х8=24 битов при отображении игрового поля используются только 20 бит, т.к. у регистра PF0 отображаются на экран только биты 4…7. Регистры PF0, PF1, PF2 отбражаются своими 20 битами в левой и правой половинах эрана либо зеркально симметрично, либо не симметрично следующим образом: Таким образом весь экран как игровое поле состоит из 20х2=40 блоков на 192 видимых строк для NTSC ( 242 - для PAL).
|
09 May 2015 07:09 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Таким образом, весь экран, как игровое поле, состоит из 20х2=40 блоков на 192 видмиых строк для NTSC ( 242 - для PAL). Коды цвета в зависимости от реализуемого телевизионного стандарта выбираются из следующих таблиц: Можно также использовать следующую ссылку: http://www.qotile.net/minidig/docs/tia_color.htmlРеальные адреса регистров БИС TIA PF0, PF1, PF2, COLUBK, COLUPF и других задаются в заголовочном файле vcs.h и зависят от базового адреса БИС TIA. В Atari 2600 карта распределения памяти и устройств ввода-вывода следующая: БИС MOS 6532 RIOT ( RAM, Input/Output, Timer), собственно, содержит 128 байт ОЗУ, два 8-битных порта ввода-вывода и таймер с функциями предделителя. Исходя из всего представленного материала, цикл вывода изображения на экран в Atari 2600 можно представить в форме следующего алгоритма: Выдать: 3 телевизионные строки импульса кадровой синхронизации; 37 телевизионных строк интервала гашения по кадру; 192 видимые телевизионные строки (NTSC) (242 - PAL) изображения. 30 телевизионных строк гашения по кадру.Типовые фрагменты кода для формирования отдельных временных интервалов и импульсов оформлены в виде макросов и содержатся в заголовочном файле macro.h , также используется таймер БИС RIOT 6532. Собственно, все описанные выше средства и помогут нам вывести на экран эмулятора Atari 2600 сообщение " Hello word" в привычном для чтения виде - горизонтальном, а не вертикально, как было показано здесь ранее.
|
09 May 2015 07:18 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
При написании кода и всех представленных здесь выше материалов я пользовался информацией с сайтов: Atari 2600 Programming for Newbies, Stella Programmers Guide и FlapPing 2600 Development Journal. На странице Atari 2600 Programming for Newbies перечислен весь необходимый софт, поэтому я давать эти ссылки отдельно здесь не буду. Перейдём сразу к коду: | | | | Code: ; _V_Day.asm ; ; Пример с ассиметричным игровым полем ; processor 6502 include vcs.h include macro.h
ORG $F000
MSpixelHeight = #8 ; высота символа в "пикселях" LinesPerPixel = #6 ; кол-во строк растра на высоту "пикселя"
Start: CLEAN_START; макрос
lda #$43 sta COLUBK ; цвет фона игрового поля lda #30 sta COLUPF ; цвет изображения поля
; Основной цикл начинается с кадрового ; синхроимпульса, и с гашения по кадру ; и сделаем задержку по таймеру RIOT; MainLoop: VERTICAL_SYNC; макрос lda #43 sta TIM64T ; ; мы ждем окончания задержки ; WaitVblankEnd: lda INTIM ; читаем таймер bne WaitVblankEnd sta VBLANK ; гашение по кадру ; ; Пять циклов отрисовки игрового поля: ; до сообщения (20), само сообщение(6х8=48), между строками (20) ; BeforeMessg , MessgShowLoop , MessgPostLoop ; вторая строка сообщения(48), после сообщения (сколько осталось -) ; (- до 192 NTSC или до 242 для PAL ) ; ; выводим 20 строк цветом фона изображения до надписи ldy #20 BeforeMessg: sta WSYNC dey bne BeforeMessg ; ; здесь выводим 6х8=48 строк изображения надписи ; расчет по тактам 6502 взят из примера ldx #MSpixelHeight ; X - высота символа надписи в условных "пикселях" ldy #LinesPerPixel ; Y - высота условного "пикселях" в строках растра ; MessgFirstLoop: sta WSYNC lda PFData0Left-1,X ;[0]+4 sta PF0 ;[4]+3 = *7* < 23 ;PF0 visible lda PFData1Left-1,X ;[7]+4 sta PF1 ;[11]+3 = *14* < 29 ;PF1 visible lda PFData2Left-1,X ;[14]+4 sta PF2 ;[18]+3 = *21* < 40 ;PF2 visible nop ;[21]+2 nop ;[23]+2 nop ;[25]+2 lda PFData0Right-1,X ;[27]+4 можно записывать в PF0 sta PF0 ;[31]+3 = *34* lda PFData1Right-1,X ;[34]+4 можно записывать в PF1 sta PF1 ;[38]+3 = *41* lda PFData2Right-1,X ;[41]+4 можно записывать в PF2 точно в цикле 45 sta PF2 ;[45]+2 = *47* ; > dey ; сдвинемся по высоте условного "пикселях" в строках растра bne TheSamePixel ; "пиксель" пока прорисовываем все тот же dex ; сдвинемся в спрайте изображения к следующей линии "пикселей" beq ShowMessgEnd ; выходим, если вывод надписи завершен ldy #LinesPerPixel ; иначе обновим счетчик линий "пикселя" по высоте TheSamePixel: jmp MessgFirstLoop ShowMessgEnd:
; очистим все регистры игрового поля lda #0 sta PF2 sta PF1 sta PF0 ; ; выводим 20 строк цветом фона изображения до след.надписи ldy #20 MiddleMessg: sta WSYNC dey bne MiddleMessg ; ; здесь выводим ещё 6х8=48 строк изображения второй надписи ldx #MSpixelHeight ; X - высота символа надписи в условных "пикселях" ldy #LinesPerPixel ; Y - высота условного "пикселях" в строках растра ; MessgSecondLoop: sta WSYNC lda RFData0Left-1,X ;[0]+4 sta PF0 ;[4]+3 = *7* < 23 ;PF0 visible lda RFData1Left-1,X ;[7]+4 sta PF1 ;[11]+3 = *14* < 29 ;PF1 visible lda RFData2Left-1,X ;[14]+4 sta PF2 ;[18]+3 = *21* < 40 ;PF2 visible nop ;[21]+2 nop ;[23]+2 nop ;[25]+2 lda RFData0Right-1,X ;[27]+4 можно записывать в PF0 sta PF0 ;[31]+3 = *34* lda RFData1Right-1,X ;[34]+4 можно записывать в PF1 sta PF1 ;[38]+3 = *41* lda RFData2Right-1,X ;[41]+4 можно записывать в PF2 точно в цикле 45 sta PF2 ;[45]+2 = *47* ; > dey ; сдвинемся по высоте условного "пикселях" в строках растра bne PixelTheSame ; "пиксель" пока прорисовываем все тот же dex ; сдвинемся в спрайте изображения к следующей линии "пикселей" beq MessgSecondEnd ; выходим, если вывод надписи завершен ldy #LinesPerPixel ; иначе обновим счетчик линий "пикселя" по высоте PixelTheSame: jmp MessgSecondLoop MessgSecondEnd: ; ; снова очистим регистры игрового поля lda #0 sta PF2 sta PF1 sta PF0 ; ; выводим оставшиеся линии растра цветом фона ; 192(242) - (20 строк + 48 строк + 20 строк + 48 строк) ldy #81 ; при превышении - эмулятор меняет TV стандарт PostMessgLoop: sta WSYNC dey bne PostMessgLoop ; ; отработаем интервал гашения по кадру lda #2 sta VBLANK ldx #30 OverScanWait: sta WSYNC dex bne OverScanWait jmp MainLoop ; ; Псевдографика выводимой надписи ;------------- первая строка надписи ;------------- первая половина поля ; у PF0 выводятся только 4 бита с 4 по 7 ; "спрайт" выводится с нижнего байта ; и с младшего бита - здесь он зеркален PFData0Left .byte #%00000000; .byte #%00000000; .byte #%10000000; .byte #%10000000; .byte #%10000000; .byte #%10000000; .byte #%10000000; .byte #%00000000;
PFData1Left .byte #%00000000; .byte #%11100000; .byte #%00010000; .byte #%00000000; .byte #%00000000; .byte #%00000000; .byte #%00010000; .byte #%11100000;
PFData2Left .byte #%00010001; .byte #%01011111; .byte #%01001010; .byte #%11001010; .byte #%01001010; .byte #%01001010; .byte #%00001010; .byte #%00001100;
;------------- вторая половина поля PFData0Right .byte #%00000000; .byte #%01000000; .byte #%01000000; .byte #%01110000; .byte #%01000000; .byte #%01000000; .byte #%00000000; .byte #%00000000;
PFData1Right .byte #%00000000; .byte #%01111010; .byte #%10000010; .byte #%11111010; .byte #%10001011; .byte #%01110010; .byte #%00000000; .byte #%01010000;
PFData2Right .byte #%00000000; .byte #%00000100; .byte #%00000100; .byte #%00000101; .byte #%00000110; .byte #%00000100; .byte #%00000000; .byte #%00000000;
;------------- вторая строка надписи ;------------- первая половина поля ; у PF0 выводятся только 4 бита с 4 по 7 ; "спрайт" выводится с нижнего байта ; и с младшего бита - здесь он зеркален RFData0Left .byte #%00000000; .byte #%00100000; .byte #%00100000; .byte #%00100000; .byte #%00100000; .byte #%00100000; .byte #%00100000; .byte #%11100000;
RFData1Left .byte #%00000000; .byte #%10011100; .byte #%10100010; .byte #%10100010; .byte #%10100010; .byte #%10011100; .byte #%10000000; .byte #%10000000;
RFData2Left .byte #%00000000; .byte #%10001110; .byte #%01010001; .byte #%11010001; .byte #%01001111; .byte #%10000011; .byte #%00001110; .byte #%00010000;
;------------- вторая половина поля RFData0Right .byte #%00000000; .byte #%01110000; .byte #%00000000; .byte #%01110000; .byte #%01000000; .byte #%00110000; .byte #%00000000; .byte #%00000000;
RFData1Right .byte #%10001000; .byte #%11111011; .byte #%01010010; .byte #%01010011; .byte #%01010010; .byte #%00110010; .byte #%00000000; .byte #%00000000;
RFData2Right .byte #%00000000; .byte #%01010011; .byte #%00010100; .byte #%01010011; .byte #%01010000; .byte #%01010000; .byte #%01000000; .byte #%01000000;
ORG $FFFC ; нет NMI у 6507 CPU... .word Start ; RESET .word Start ; IRQ
END | | | | |
Код хорошо мной откомментирован, поэтому я не вижу необходимости что-то добавить. Компилируется код ассемблером DASM следующей командной строкой: dasm _V_Day.asm -f3 -o_V_Day.a26Я использовал эмулятор Atari 2600 - Z26 для запуска исполняемого файла _V_Day.a26 : С Днём Победы! С праздником, коллеги!А ньюансы программирования и графики обсудим позже...
|
09 May 2015 07:58 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Я надеюсь, понятно, что вся эта надпись по сути - специфически нарисованное "игровое поле". Но, поскольку никаких "знакогенераторов" у Atari 2600 в принципе нет, то заставки с надписями зачастую рисуются именно так. Если на лету успевать манипулировать цветом фона игрового поля или цветом изображения поля, можно получить и весьма красивые эффекты! Несколько слов о том, как всё это удобнее "рисовать"... Существуют on-line "рисовалки" этой псевдографики: http://alienbill.com/2600/playerpal.htmlhttp://alienbill.com/2600/playfieldpal.htmlhttp://alienbill.com/2600/playerpalnext.htmlгде можно сразу получить даже ассемблерный код вывода "рисунка". Но на первый раз мне захотелось разобраться подробнее, как выводятся на экран эти регистры PF0...PF2, и поскольку есть подробная диаграмма в постах выше, то я выполнил надпись в редакторе ПК "Специалист" под эмулятором, скопировал эту графику и, нарисовав пару точечных линеек, в 8-кратном увеличении заполнил "таблицы" кодов вручную. Это довольно легко, если помнить, как выводится эта псевдографика: по байтам - от старшего к младшему, по битам - младшие выводятся на экран первыми. И есть еще один тонкий момент: Формула в коде приведена в общем-то правильная: 192(242) - (20 строк + 48 строк + 20 строк + 48 строк)Но интересно, что эмуляторы относятся к этому довольно нестрого, не знаю, уж как реальная Atari 2600... Я сначала ошибся, а потом уже преднамеренно стал превышать число видимых строк на экран - 198 для NTSC. До 217 строк только увеличивался вертикальный размер видимого поля. А вот выше этого значения (если я не ошибся в подсчете) эмулятор решил, что мы перешли в стандарт PAL и изменил цвета. Вот такие ньюансы и тонкости... и если кого-то заинтересовало программирование 6502 на платформе Atari 2600, то рекомендую вот этот цикл статей: FlapPing 2600 Development Journal. Там от простого к сложному программируют этот самый PONG, под который железо Atari 2600 и было изначально расточено... Желаю удачи!
|
10 May 2015 05:06 |
|
|
|
Page 1 of 1
|
[ 12 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 25 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|