🔥 Selamat datang di TRPC77 — Jelajahi tren terbaru tentang jawara-bet!
Pengantar
Saya cenderung menggunakan banyak perangkat lunak retro, sebagian karena saya seorang kutu buku besar tetapi juga karena saya lebih suka bekerja di terminal. Ada banyak produk perangkat lunak komersial besar untuk MS-DOS yang sangat halus, dan masih dapat digunakan secara efektif di xterm saat ini.
Saya suka menggunakan Lotus 1-2-3, saya bahkan memiliki salinan kotak dari versi DOS terakhir yang dirilis, versi 4!
Masalah
Kenyataannya saya curang, ia memang bekerja, tetapi hanya mendukung beberapa resolusi mode teks standar. Jika terminal Anda tidak tepat 80 kolom, ia hanya membuat kekacauan besar yang jelek di layar Anda.
Ada solusi, cukup ketik stty cols 80, dan ia akan terbatas pada sebagian terminal Anda, terlihat sedikit menyedihkan. Tidak ada cara untuk menampilkan lebih banyak kolom, dan memaksimalkan terminal Anda tidak akan melakukan apa-apa.
Riset
Saya bertanya-tanya apakah orang lain masih menggunakan 123, dan apakah mereka menemukan solusi. Saya menikmati menggunakannya, tetapi terbatas pada area kerja yang begitu kecil adalah gangguan nyata.
Saya menghabiskan satu jam membaca forum komputasi vintage dan posting USENET lama.
Sayangnya, jawabannya adalah tidak ada yang memiliki solusi untuk masalah resolusi saya, tetapi saya menemukan sesuatu yang menarik...
Usaha
Saya menemukan manual lama untuk stasiun kerja PC tahun 1993 yang disebut Epson Endeavor, yang mengklaim didistribusikan dengan disk utilitas yang memungkinkan mode teks 100x31 di 1-2-3.
Bagaimana mungkin hal seperti itu terjadi?
Saya dapat menemukan driver di situs ftp lama. Sayangnya mereka tidak berfungsi, mungkin membutuhkan kartu VGA Cirrus Logic asli, tetapi fakta bahwa driver ini ada membuat saya penasaran. Tampaknya masuk akal bahwa 123 secara internal dapat menghasilkan kanvas dengan ukuran sembarang, dan ia hanya meminta driver tampilan resolusi apa yang diinginkan?
Saya tahu bahwa dosemu dapat mensimulasikan resolusi mode teks sembarang, dan beberapa perangkat lunak DOS dapat menggunakannya. Apakah mungkin saya dapat menulis driver tampilan dosemu, dan 123 akan langsung bekerja di xterm layar penuh?
Rekayasa Balik
API driver tampilan sayangnya cukup rumit, saya pikir mungkin perlu waktu untuk mengetahuinya hanya dengan disassembler dan debugger. Memperumit masalah, 123 menggunakan teknik yang disebut overlay (seperti bank switching perangkat lunak) yang membingungkan debugger yang saya gunakan karena ia kehilangan breakpoint setiap kali terjadi pergantian overlay!
Saya berpikir bahwa Lotus pasti telah mengirim beberapa dokumentasi ke Cirrus Logic untuk menulis driver, mungkin itu masih ada di suatu tempat dan akan menghemat waktu saya.
Saya menghabiskan waktu mencari, tetapi tidak menemukan apa-apa.
Saya belajar banyak tentang ekosistem add-in Lotus, dan bagaimana mereka bekerja. Saya berpikir akan mengunduh semua driver dan add-in yang bisa saya temukan, saya akan mulai membalikkan yang paling sederhana, dan melanjutkan sampai saya tahu cukup untuk menulis milik saya sendiri.
Jika Anda ingin membaca tentang add-in komersial apa yang tersedia, artikel ini menyenangkan untuk dibaca.
Arsip
Percaya atau tidak, situs ftp Lotus lama masih online. Saya mencerminkan semua yang mereka miliki ke stasiun kerja saya dan menyaringnya.
Kemudian saya mendapat keberuntungan...
Sejarah
Lotus 1-2-3 di-port ke banyak sistem, termasuk OpenVMS, Xenix, dan bahkan System/390. Pada tahun 1991, Lotus merilis versi untuk SunOS4 di SPARC.
Beberapa tahun kemudian, seorang insinyur Lotus mengunggah patch untuk bug manajemen file di komponen XALERT yang mempengaruhi pembaruan 1.2. Untungnya, mereka lupa menghapus data STABS, meninggalkan data debugging yang sangat kaya.
typedef short int lmbcs_type;typedef short int platform;typedef short int memory_type;struct envblk_ { /* size 68 id 9 */ short int envsize; /* bitsize 16, bitpos 0 */ short int pfid; /* bitsize 16, bitpos 16 */ short int csid; /* bitsize 16, bitpos 32 */ short int pad; /* bitsize 16, bitpos 48 */ short int maps; /* bitsize 16, bitpos 64 */ short int type; /* bitsize 16, bitpos 80 */ mptr nulh; /* bitsize 32, bitpos 96 */ long unsigned int maxsize; /* bitsize 32, bitpos 128 */ unsigned char *applid; /* bitsize 32, bitpos 160 */ lhdl gabinfo; /* bitsize 32, bitpos 192 */ char *regfile; /* bitsize 32, bitpos 224 */ mptr (*get) (/* unknown */); /* bitsize 32, bitpos 256 */ short int (*free) (/* unknown */); /* bitsize 32, bitpos 288 */ lhdl (*map) (/* unknown */); /* bitsize 32, bitpos 320 */ void (*unmap) (/* unknown */); /* bitsize 32, bitpos 352 */ lhdl (*alloc) (/* unknown */); /* bitsize 32, bitpos 384 */ short int (*dealloc) (/* unknown */); /* bitsize 32, bitpos 416 */ short unsigned int (*load) (/* unknown */); /* bitsize 32, bitpos 448 */ short unsigned int (*unload) (/* unknown */); /* bitsize 32, bitpos 480 */ short unsigned int (*syscall) (/* unknown */); /* bitsize 32, bitpos 512 */};typedef struct envblk_ /* id 9 */ envblk;typedef long int LpiSTATUS;...
Ini adalah satu-satunya file (percayalah, saya memeriksa semuanya) yang memiliki data debugging yang tersisa di seluruh ftp!
Sekarang, file ini untuk arsitektur, sistem operasi, kompiler, rilis yang berbeda dan merupakan format yang sudah lama usang. Tetapi, petunjuk yang dikandungnya tentang API driver sangat berharga, dan menghemat banyak waktu saya.
File itu sangat tua sehingga untuk membaca data saya harus mencari versi binutils yang lebih lama yang masih mendukung a-sunos-big. Untungnya itu berhasil dan mampu merekonstruksi banyak data yang berguna.
Berikut adalah data yang dipulihkan secara lengkap, jika Anda tertarik.
Lebih Beruntung
Saya mendapat keberuntungan lagi, saya menemukan driver printer pihak ketiga di arsip SUNET lama untuk Siemens Highprint 7400. Hebatnya, ia memiliki beberapa data debugging Codeview kuno yang tersisa di dalamnya.
Berikut adalah gambar seorang wanita mencetak beberapa tes rorschach dengan Highprint 7400 barunya, entah kenapa.
Data debugging sangat tua, saya kesulitan menemukan alat yang bisa menguraikannya. Data memiliki kode versi NB02, yang berarti mereka mungkin menggunakan link versi 5, dirilis sekitar tahun 1988. Saya mencoba TDUMP, CVDUMP dan bahkan SYMDEB, dan tidak ada yang mengenalinya. Saya akhirnya menemukan versi Codeview yang cukup tua yang bisa membacanya, tetapi tidak memiliki cara untuk menyimpan output ke file kecuali "mencetak" backlog, dan backlog tidak cukup besar untuk menampung semua data!
Saya harus membuat skrip emulator DOS untuk mengikis data satu halaman dalam satu waktu! Saya tidak bisa mengatakan berapa banyak waktu yang saya buang untuk membuat ini berfungsi, tetapi itu sepadan, itu memberikan petunjuk berharga tentang bagaimana API DEVPRIM (Device Primitive) bekerja.
Berikut adalah data yang dipulihkan secara lengkap.
Hello World
Dengan data ini, dan akhir pekan di IDA saya mampu mengetahui sebagian besar API. Sangat menyakitkan mendapatkan toolchain yang berfungsi, tetapi saya akhirnya mampu menghasilkan sesuatu yang bisa dimuat oleh Lotus.
Saya pikir saya pasti orang pertama yang menulis driver Lotus 1-2-3 dalam tiga puluh tahun!
Driver saya sebenarnya tidak melakukan apa-apa, tetapi ketika saya merespons permintaan informasi perangkat yang mengklaim mendukung 256 kolom, saya melihat di log bahwa ia mengirim saya string LMBCS untuk didekode seperti ini:
ENTER WriteLmbcsStringWithAttributes, caller 15f:6c7dlotdemu.c:291: TRACE byteslen 238lotdemu.c:293: TRACE attrs 000lmbcs.c:104: TRACE translate_lmbcslmbcs.c:106: TRACE maxdst 256lmbcs.c:107: TRACE maxsrc 238000000: 20 20 20 20 41 20 20 20 20 20 20 20 20 42 20 20 A B000010: 20 20 20 20 20 20 43 20 20 20 20 20 20 20 20 44 C D000020: 20 20 20 20 20 20 20 20 45 20 20 20 20 20 20 20 E000030: 20 46 20 20 20 20 20 20 20 20 47 20 20 20 20 20 F G000040: 20 20 20 48 20 20 20 20 20 20 20 20 49 20 20 20 H I000050: 20 20 20 20 20 4a 20 20 20 20 20 20 20 20 4b 20 J K000060: 20 20 20 20 20 20 20 4c 20 20 20 20 20 20 20 20 L000070: 4d 20 20 20 20 20 20 20 20 4e 20 20 20 20 20 20 M N000080: 20 20 4f 20 20 20 20 20 20 20 20 50 20 20 20 20 O P000090: 20 20 20 20 51 20 20 20 20 20 20 20 20 52 20 20 Q R0000a0: 20 20 20 20 20 20 53 20 20 20 20 20 20 20 20 54 S T0000b0: 20 20 20 20 20 20 20 20 55 20 20 20 20 20 20 20 U0000c0: 20 56 20 20 20 20 20 20 20 20 57 20 20 20 20 20 V W0000d0: 20 20 20 58 20 20 20 20 20 20 20 20 59 20 20 20 X Y0000e0: 20 20 20 20 20 5a 20 20 20 20 20 20 20 20 Ztranslated characters is 238lotdemu.c:209: TRACE WriteStringToFramebuffer
Ia meminta saya untuk menulis 26 header kolom ke framebuffer!
Ini memvalidasi ide, Lotus 1-2-3 secara internal mendukung resolusi sembarang!
Hasil
Banyak peretasan kemudian, dan saya sekarang memiliki driver yang dapat digunakan untuk dosemu yang mendukung resolusi sembarang, lihat saja semua kolom itu!
Saya tahu cukup tentang API sehingga saya pikir saya mungkin bisa menambahkan dukungan libcaca sehingga grafik mode teks berfungsi, tetapi itu proyek untuk akhir pekan lain!
Kesimpulan
Kode sumber pekerjaan saya yang sedang berlangsung tersedia di github.
Saya telah menempatkan semua catatan saya secara online sehingga jika ada orang lain yang ingin membuat 123 DOS bekerja di suatu tempat baru, mereka tidak perlu mengulangi semua pekerjaan saya!
Pembaruan
Saya berhasil membuat grafik seni ascii bekerja di terminal juga! Berikut adalah 123 merencanakan gelombang sinus di xterm.
Kasino
Olahraga
sports-betting-odds-calculator