Poligon Dunia Lain: Atari ST

Ini adalah artikel ketiga dalam seri tentang porting game Another World. Ini akan berbicara tentang trik ketika bekerja dengan Atari ST . Disarankan agar Anda membaca artikel sebelumnya terlebih dahulu.


Kelahiran Atari ST, secara halus, gelisah. Semuanya berawal dari dongeng, tetapi berakhir dengan perang dan pengkhianatan dengan partisipasi Amiga Corp, Commodore, Atari dan Atari Computer.




Seri artikel


  1. Poligon Dunia Lain .
  2. Poligon Dunia Lain: Amiga 500 .
  3. Poligon Dunia Lain: Atari ST.

Sejarah ATARI ST


Pada tahun 1983, Hi-Toro adalah startup Santa Clara yang mengembangkan konsol game bernama Lorraine. Dengan 68.000 kuat dengan kemampuan grafis luar biasa, itu adalah keajaiban teknologi, jauh lebih unggul dari semua pesaingnya. Hi-Toro, bagaimanapun, kehabisan uang. Atari, yang waktu itu adalah raksasa permainan video, menginvestasikan $ 500.000 untuk melanjutkan pengembangan dengan imbalan hak untuk menambahkan keyboard dan menjual konsol sebagai komputer.


Jauh dari California, di Pennsylvania, perebutan kekuasaan di Commodore menyebabkan kepergian pendiri Jack Tramiel. Dia segera mendirikan Teknologi Tramel, dalam proses memikat para insinyur Commodore. Tak perlu dikatakan, pemisahan itu jauh dari ramah.


Pada pertengahan 1984, giliran Atari untuk mengalami gejolak keuangan. Ketika Jack Tramiel menyatakan minatnya untuk membeli divisi komputer Atari, Commodore melihat peluang untuk menentang mantan CEO-nya. Mereka membeli Hi-Toro (yang saat itu berganti nama menjadi Amiga Corporation), dan hanya mengembalikan Atari "kredit" mereka [1] .


Tramiel menyelesaikan akuisisi Atari Computers dan segera menggugat Amiga Corporation. Masalah ini tidak akan diselesaikan hingga Maret 1987 [2] . Sementara itu, Atari tanpa teknologi baru yang akan membantu menjadi menguntungkan lagi [3] .


Untuk beberapa waktu, Jack Tramiel mempertimbangkan untuk membeli Genesis dari Sega, yang mencari mitra dengan pengalaman di Amerika Utara. Pada akhirnya, gagasan itu ditolak. Apa yang terjadi selanjutnya, kata DadHacker [4] [5] . Jack hanya menyisakan 900 dari 10.000 karyawan Atari. Yang tersisa berpartisipasi dalam mars kematian dengan tujuan mengembangkan dan merilis mobil baru dalam setahun.


Yang mengejutkan, mereka melakukannya. Atari ST diluncurkan pada Juni 1985, memasuki pasar sebulan lebih awal dari Amiga 1000.



Perangkat itu diterima dengan baik oleh pengguna. Pada November 1985, Jack Tramiel telah mengumumkan bahwa Atari telah menjual 50.000 unit. Harganya mengejutkan. 520ST dijual seharga $ 999, dan Amiga 1000 seharga 1285.


Memilih dari dua mesin dengan prosesor yang sama dan jumlah RAM yang sama, tambahan $ 300 tidak sepadan. Banyak konsumen telah memilih ST.


Selain keunggulan harga utama, mobil ini memiliki beberapa keunggulan dibandingkan pesaing. Mode monokrom resolusi tinggi 640x480 ideal untuk programmer. MIDI bawaan dihargai oleh para musisi. Detail kecil yang dapat membuat perbedaan, sistem operasi (TOS) dan kernel sebenarnya dalam ROM. Tidak perlu boot dari floppy disk!


Atari ST dengan cepat mengumpulkan sekte pengikut, terutama di Eropa. Pembuat adegan demo secara obsesif mencoba mengembangkan metode pemindaian berlebih [6] [7] [8] [9] untuk menghilangkan batas layar hitam. Pada akhirnya, upaya ini berhasil [10] .


Selama masa hidupnya, dari tahun 1985 hingga 1993, Atari Computers menjual 2 juta perangkat [11] . Bagi banyak orang yang selamat dari era ini, dikenang sebagai perang Amiga yang terkenal melawan Atari ST.




Atari st e


Dari sudut pandang grafik komputer, animasi dan video game, tidak ada perang seperti itu. Bahkan sulit untuk menyebut pertempuran. Berkat koprosesor Agnus dan Denise, Amiga secara signifikan lebih unggul dari Atari ST. Misalnya, bekerja dengan memori framebuffer Atari ST terasa menyakitkan ketika mencoba untuk memindahkan sprite di layar.


Untuk mengurangi kekurangannya, Atari Computers memperbarui jalur Atari ST pada tahun 1989 dengan meluncurkan 520 ST E dan 1040 ST E. Di antara perbaikan: Genlock, warna 12-bit, audio PCM dan, yang paling penting, BLiTTER [12] . Inovasi ini menjadikan Atari ST sebuah teknologi untuk bersaing dengan Amiga.


Arsitektur


Kemampuan Blitter sangat berharga bagi pengembang game. Sayangnya, dia muncul terlambat. Atari ST memiliki basis besar yang membuat pengembang tidak membuang waktu untuk membuat game mereka lebih baik untuk sejumlah kecil pengguna. Belum lagi tidak ada yang berani merilis game secara eksklusif di ST E. Dunia lain tidak terkecuali, menurut pengembang versi Jaguar (yang melihat kode sumber ST Atari).


Dunia lain diprogram sepenuhnya untuk dijalankan pada 68000. Fitur ST E tidak digunakan sama sekali.


- Sébastien Briais



Harap dicatat bahwa pada semua Atari ST ada pengontrol DMA, tetapi hanya dapat mentransfer dari floppy disk / hard drive ke RAM, yang tidak banyak membantu ketika mengembangkan game. Tidak banyak yang tersisa untuk programmer. Yakni, prosesor Motorola 68000 dengan frekuensi clock 8 MHz dan RAM 512 KiB.




Sistem video


Chip GLUE, yang bertanggung jawab untuk menghasilkan sinyal video, menggunakan 3 bit per channel (9 bit per pixel), yang menghasilkan 512 warna.



Catatan: dengan memanipulasi Shifter, GLUE dan MMU, pembuat demo berhasil menghapus batas hitam yang terkenal dari layar Atari. Teknisi overscan dan layar penuh mengganti kecepatan refresh antara 50 Hz dan 60 Hz, dan juga beralih dari hiRes ke LowRes hingga pemindaian garis selesai untuk membuat GLUE menunda sinyal VSYNC / HSYNC [13] !


Dunia Lain di Atari ST


Dunia lain di bawah Atari ST sepenuhnya ditulis oleh Eric Shayi bersamaan dengan versi Amiga. Prosesor 68000, mirip dengan Amiga, memudahkan port karena sebagian besar ASM VMs dapat digunakan kembali. Ada perbedaan di bagian grafis, di mana tiga mode tersedia. Resolusi tinggi (640x400 2 warna), yang sangat bagus untuk pemrograman, resolusi menengah (640x200 4 warna), yang tidak terlalu menarik dalam konteks ini, dan resolusi rendah (320x200 16 warna [14] ), yang ideal untuk Dunia Lain.



Semua izin menggunakan 32 KB untuk setiap framebuffer. Tidak ada rencana mengalahkan seperti Amiga yang disebutkan dalam artikel terakhir. Dalam resolusi tinggi, setiap bit sesuai dengan piksel. Dalam resolusi rendah, indeks piksel dibagi menjadi 4 bit, didistribusikan lebih dari 64 bit.



Neraka kecil


Untuk gim yang menggunakan sprite, tata letak tingkat rendah seperti itu menjadi masalah. Coba bayangkan tugas menggunakan mask / rekaman dengan resolusi satu bit, ketika resolusi bus adalah satu byte (8 bit). Sekarang bayangkan bagaimana sebuah sprite melintasi batas byte, dan tugas berubah menjadi mimpi buruk [15] . Beban CPU sangat berat sehingga gim-gim tersebut tidak menggunakan masker / rekaman dan sebagai gantinya lebih suka menggunakan sprite yang diputar sebelumnya (satu set untuk setiap bit alignment), yang, untuk kehormatan Atari ST, bukan masalah besar, mengingat jumlah RAM yang murah hati papan.


Menariknya, di Dunia Lain, neraka lapisan grafis bergantian berubah menjadi surga ketika harus menggambar garis panjang dengan warna yang sama. Mari kita lihat mengapa.


FILL dan COPY


Dengan hanya prosesor untuk melakukan FILL dan COPY, tugas ini dilakukan dengan cara yang paling sederhana. Tidak ada trik yang rumit di sini, tetapi tata letak framebuffer non-planar memungkinkan 68.000 untuk "bepergian". Dengan move.l 32 KB, operasi move.l 8000 (32 bit) melakukan pekerjaan dalam kedua kasus. Output yang direkam dari bagian operasi COPY pada 68000 adalah sebagai berikut.


  ... move.w #49,d0 ;50*160*4 = 32000 octets .copy_loop: rept 160 move.l (a1)+,(a0)+ endr dbra d0,.copy_loop ... 

Karena waktu 68000 didokumentasikan dengan sangat baik [16] [17] , kita dapat secara akurat menghitung berapa lama untuk menyelesaikan operasi COPY. Karena move.l membutuhkan 20 siklus, jumlah total siklus yang diperlukan adalah 20 * 160 * 50 = 160.000 siklus. Pada kecepatan 8.000.000 siklus / detik, COPY membutuhkan waktu 20 ms.


Gagasan yang sama untuk FILL, kecuali bahwa alih-alih operan "Address register tidak langsung dengan post-incrementing", operan pertama move.l adalah "Data direct", yang mengambil "hanya" 12 siklus. Ini memberikan total 12 ms untuk FILL.


  ... move.w #49,d0 ;50*160*4 = 32000 octets .fill_loop: rept 160 ; d1 = color repeated 8 times since d1=32 bits and color index=4 bits) move.l d1,(a0)+ endr dbra d0,.fill_loop ... 

Catatan: Anda dapat dengan mudah membedakan versi Atari ST dari versi Amiga jika Anda melihat layar game kedua.


Scarab imut yang ditemukan dalam versi Amiga menghilang di Atari ST. Bahkan, tidak ada di semua port lain [18] , yang membuatnya menjadi Amiga eksklusif untuk beberapa alasan yang tidak jelas.




Memecahkan masalah dengan rendering


Tanpa mode "menggambar garis" dan "mengisi area", port di bawah Atari ST menggunakan algoritma Bresenham sederhana [22] untuk melacak tepi poligon. Dengan dua tepi dan garis horizontal, koordinat awal dan akhir ruang layar dibuat. Kemudian 68.000 mengisi ruang di antara mereka [19] . Secara umum, prinsip operasi mirip dengan blitter Amiga, kecuali bahwa di sini semuanya dilakukan secara terprogram.


Pendekatan pada pandangan pertama sangat lambat, tetapi "kecepatan jelajah" juga dapat dicapai di sini, memanfaatkan tata letak tenunan. Jika Anda perhatikan dengan cermat, sebagian besar bingkai Dunia Lain terdiri dari garis-garis horizontal panjang dengan warna yang sama. Ini memungkinkan 68000 untuk menulis baris dalam blok 16 piksel menggunakan instruksi move.l kami move.l sebelumnya.


Layar di mana Leicester bertemu "penyelamatnya" adalah contoh yang baik.



Di sini kita melihat bagian merah dari garis yang tidak dapat ditampilkan dalam blok 16-pixel karena lokasi dan penyelarasan framebuffer. Pixel "lambat" ini hanya 23% dari framebuffer di tepi poligon. 77% dari frame buffer diberikan dengan catatan blok 16-pixel "cepat".




Memecahkan masalah dengan palet


Masalah terakhir yang harus dipecahkan adalah Atari ST memiliki kedalaman warna yang dangkal. Sementara Amiga memungkinkan 12 bit per warna, AtariST hanya dapat memberikan 9.


Solusinya adalah menempatkan permainan dengan palet Amiga dan membiarkan 68.000 menangani konversi dari 12-bit ke 9-bit dengan pergeseran 1-bit (LRS) sederhana untuk setiap saluran pada waktu boot.


Gambar terakhir terlihat sedikit lebih gelap dibandingkan dengan Amiga, tetapi perbedaannya hampir tidak terlihat [20] .


Kesimpulannya


Meskipun ada kekurangan yang jelas, Atari ST berhasil meluncurkan versi Dunia Lain yang tepat. Terlepas dari segalanya, permainan tidak boleh menyimpang dari versi Amiga. Ruang warna yang lebih kecil nyaris tidak terlihat, dan mesin hanya bekerja sedikit lebih lambat [21] daripada pada Amiga (yang bekerja di hampir 24 frame per detik).



Referensi


  1. Kisah Amiga: Diciptakan di Atari, Lahir di Commodore .
  2. Amiga Corporation .
  3. Wikipedia: Atari ST Origins .
  4. Dadhacker, The Atari ST, Bagian 1 .
  5. Dadhacker, The Atari ST, Bagian 2 .
  6. ST Magazine 51: 'Les technique de l'Overscan part 1' oleh Shengan Short .
  7. ST Magazine 51: 'Les technique de l'Overscan part 2' oleh Shengan Short .
  8. ST Magazine 55: 'Les technique de l'Overscan 3' oleh Shengan Short .
  9. ST Magazine 70: 'Les technique de l'Overscan 4' oleh Shengan Short .
  10. Atari ST Riwayat demo layar penuh .
  11. Atari ST Computer Sales and Marketshare: Suatu Perbandingan .
  12. ST Magazine 70: 'Le Blitter, animation tres grande vitesse' oleh Mathias Agopian .
  13. Teknik Overscan Atari .
  14. Grafik 3d real-time untuk Atari ST .
  15. Mengapa game Atari ST lebih lambat dari versi Amiga .
  16. Pindahkan Waktu Eksekusi Instruksi .
  17. Set Instruksi 68000-an .
  18. Kesenangan kutu buku .
  19. Kode Sumber Dunia Lain: Video :: fillPolygon .
  20. Kesenangan Nerdy, 'ST memiliki palet sedikit lebih gelap dari Amiga.' .
  21. Nerdy Pleasures, 'Versi Atari ST berjalan agak lebih lambat dari Amiga' .
  22. Algoritma Bresenham .

Source: https://habr.com/ru/post/id484656/


All Articles