From f898176dd3871dcb15ecfbb3eca46f539d284b8b Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Tue, 23 Feb 2016 17:22:47 -0500 Subject: modify conio so it no longer needs carriage returns, now 7454 bytes free --- conio/README | 13 +++- conio/cputc.s | 36 +++++---- console.s | 5 +- newtitle.s | 2 +- taipan.c | 230 +++++++++++++++++++++++++++++----------------------------- textcomp.c | 6 +- textdecomp.s | 7 -- 7 files changed, 157 insertions(+), 142 deletions(-) diff --git a/conio/README b/conio/README index bfe8187..d63ed27 100644 --- a/conio/README +++ b/conio/README @@ -4,12 +4,23 @@ More particularly, the standard cc65 conio always draws a cursor, whether the cursor is enabled or not. When it's disabled, the cursor is drawn as a space character. +Also, the cputc() here no longer requires \r\n to move the cursor +to the start of the next line. \n alone does it, and \r isn't +treated specially (it's just a ctrl-R, prints a graphics character). + +The cputcxy() routine has been deleted, since taipan doesn't use it. + Benefits of doing this: - Faster and smoother screen updates -- Slightly smaller code (20-30 bytes) +- Slightly smaller code (100-odd bytes) - No more "cursor ghosts" at timed prompts - No need for a hide_cursor() function +- print_msg() from textdecomp.s is simplified, it no longer has + to print a carriage return every time it sees a newline in a + compressed message. +- In taipan.c, cputs("foo\r\n") no longer requires the \r, saves + one byte per string. Disadvantage: Have to draw the cursor myself when needed. It turns out that only agetc() needs to do this, so not a big deal. Also had to diff --git a/conio/cputc.s b/conio/cputc.s index 5955b42..fb60ffc 100644 --- a/conio/cputc.s +++ b/conio/cputc.s @@ -1,3 +1,10 @@ +; this file modified for use with taipan: +; - \n treated like \r\n used to: moves cursor to +; start of next line. +; - \r no longer special (prints a graphics character) +; - $0a no longer treated as as \n (prints graphics char) +; - _cputcxy removed as taipan never uses it + ; ; Mark Keates, Christian Groessler ; @@ -5,7 +12,8 @@ ; void cputc (char c); ; - .export _cputcxy, _cputc + ;.export _cputcxy, _cputc + .export _cputc .export plot, cputdirect, putchar .import popa, _gotoxy, mul40 .importzp tmp4,ptr4 @@ -13,21 +21,21 @@ .include "atari.inc" -_cputcxy: - pha ; Save C - jsr popa ; Get Y - jsr _gotoxy ; Set cursor, drop x - pla ; Restore C +;_cputcxy: + ;pha ; Save C + ;jsr popa ; Get Y + ;jsr _gotoxy ; Set cursor, drop x + ;pla ; Restore C _cputc: - cmp #$0D ; CR - bne L4 - lda #0 - sta COLCRS - beq plot ; return +; cmp #$0D ; CR +; bne L4 +; lda #0 +; sta COLCRS +; beq plot ; return -L4: cmp #$0A ; LF - beq newline +L4: ;cmp #$0A ; LF + ;beq newline cmp #ATEOL ; Atari-EOL? beq newline @@ -55,6 +63,8 @@ cputdirect: ; accepts screen code .export newline newline: + lda #0 + sta COLCRS inc ROWCRS lda ROWCRS cmp #24 diff --git a/console.s b/console.s index 1122722..05445bd 100644 --- a/console.s +++ b/console.s @@ -1,7 +1,7 @@ .include "atari.inc" - .export _clrtobot, _clrtoeol, _clr_screen, _clrtoline, _cspaces, _cblank, _backspace, _cprint_pipe, _cprint_bang, _cspace, _cputc_s, _comma_space, _cprint_colon_space, _cprint_question_space, _cprint_period, _cprint_taipan_prompt + .export _clrtobot, _clrtoeol, _clr_screen, _clrtoline, _cspaces, _cblank, _backspace, _cprint_pipe, _cprint_bang, _cspace, _cputc_s, _comma_space, _cprint_colon_space, _cprint_question_space, _cprint_period, _cprint_taipan_prompt, _crlf .export _rvs_on, _rvs_off .import mul40 ; from cc65's runtime @@ -206,4 +206,7 @@ _cprint_period: .byte $2c _cprint_bang: lda #'!' + .byte $2c +_crlf: + lda #$9b jmp _cputc diff --git a/newtitle.s b/newtitle.s index f2138f4..3a5c73c 100644 --- a/newtitle.s +++ b/newtitle.s @@ -27,7 +27,7 @@ origin = * sound_disabled = $03c0 ; since we're changing the font and colors, we'll save the old - ; ones here. If you change these, change them in taipan.c + ; ones here. If you change these, change them in taipan.c and soundasm.s ; also. fontsave = $03c1 color1save = $03c2 diff --git a/taipan.c b/taipan.c index 72f2db0..301290c 100644 --- a/taipan.c +++ b/taipan.c @@ -118,6 +118,7 @@ extern void clrtoeol(void); extern void __fastcall__ cspaces(unsigned char count); /* each prints one specific character */ +extern void crlf(void); extern void cspace(void); extern void cputc_s(void); extern void cprint_bang(void); @@ -157,19 +158,6 @@ extern void redraw_port_stat(void); # pragma code-name (push, "HIGHCODE") #endif -/* used to set the background/text colors here, but now the - title screen does it (newtitle.s) */ -void atari_text_setup() { - jsleep(1); - POKE(560, PEEK(212)); // restore the - POKE(561, PEEK(213)); // display list - jsleep(1); - POKE(559, 34); // turn on the screen (normal playfield) - jsleep(1); - POKE(756, FONT_ADDR / 256); // use our custom font - POKE(731, 1); // disable keyclick on XL/XE (does nothing on 400/800) -} - /* this didn't work out, bummer. */ // extern void __fastcall__ waitvcount(unsigned char c); @@ -453,14 +441,16 @@ void how_much_will_you(void) { } void cprint_bad_joss() { - // cputs("Bad Joss!!\r\n"); + // cputs("Bad Joss!!\n"); print_msg(M_bad_joss); } +/* void crlf(void) { - // cputs("\r\n"); + // cputs("\n"); print_msg(M_crlf); } +*/ void cprint_taipan(void) { // cputs("Taipan"); @@ -680,13 +670,13 @@ void prepare_report(void) { void compradores_report(void) { prepare_report(); - // cputs("Comprador's Report\r\n\n"); + // cputs("Comprador's Report\n\n"); print_msg(M_compradors_report); } void captains_report(void) { prepare_report(); - // cputs(" Captain's Report\r\n\n"); + // cputs(" Captain's Report\n\n"); print_msg(M_captains_report); } @@ -730,7 +720,7 @@ void new_ship(void) { } else { cputs("fine"); } - // cputs("\r\nship for one with 50 more capacity by\r\npaying an additional "); + // cputs("\nship for one with 50 more capacity by\npaying an additional "); print_msg(M_ship_for_one); cprintuchar(50); print_msg(M_more_capacity); @@ -763,7 +753,7 @@ void new_gun(void) { } compradores_report(); - // cputs("Do you wish to buy a ship's gun\r\nfor "); + // cputs("Do you wish to buy a ship's gun\nfor "); print_msg(M_gun_offer); cprintfancy(amount); cprint_taipan_prompt(); @@ -1037,7 +1027,7 @@ char sea_battle(char id, int num_ships) { plus_or_space(num_ships > num_on_screen); gotoxy(0, 16); - // cputs("\r\n"); + // cputs("\n"); crlf(); set_orders(); @@ -1048,7 +1038,7 @@ char sea_battle(char id, int num_ships) { gotoxy(0, 3); clrtoeol(); cprint_taipan_comma(); - // cputs("what shall we do??\r\n(Fight, Run, Throw cargo)"); + // cputs("what shall we do??\n(Fight, Run, Throw cargo)"); print_msg(M_what_shall_we_do); under_attack_sound(); @@ -1519,14 +1509,14 @@ void cash_or_guns(void) { clr_screen(); cprint_Do_you_want(); - // cputs("to start . . .\r\n\n"); + // cputs("to start . . .\n\n"); print_msg(M_to_start); - // cputs(" 1) With cash (and a debt)\r\n\n"); + // cputs(" 1) With cash (and a debt)\n\n"); cputs(" 1"); print_msg(M_with_cash); cspaces(16); - cputs("-- or --\r\n\n 2"); - // cputs(" 2) With five guns and no cash\r\n"); + cputs("-- or --\n\n 2"); + // cputs(" 2) With five guns and no cash\n"); print_msg(M_with_5_guns); cspaces(16); // cputs("(But no debt!)"); @@ -1768,9 +1758,9 @@ void mchenry(void) { compradores_report(); cprint_taipan_comma(); /* - cputs("Mc Henry from the Hong Kong\r\n" - "Shipyards has arrived!! He says, 'I see\r\n" - "ye've a wee bit of damage to yer ship.'\r\n" + cputs("Mc Henry from the Hong Kong\n" + "Shipyards has arrived!! He says, 'I see\n" + "ye've a wee bit of damage to yer ship.'\n" "Will ye be wanting repairs? "); */ print_msg(M_mchenry_has_arrived); @@ -1795,10 +1785,10 @@ void mchenry(void) { // cputs("Och, 'tis a pity to be "); print_msg(M_tis_a_pity); cprintuint(percent); - // cputs("% damaged.\r\nWe can fix yer whole ship for "); + // cputs("% damaged.\nWe can fix yer whole ship for "); print_msg(M_percent_damaged); cprintulong(repair_price); - // cputs(",\r\nor make partial repairs if you wish.\r\n"); + // cputs(",\nor make partial repairs if you wish.\n"); print_msg(M_or_partial_repairs); how_much(); // cputs("will ye spend? "); @@ -1834,7 +1824,7 @@ void retire_blanks(void) { crlf(); // above loop saves a measly 6 bytes over this: - // cputs(" \r\n"); + // cputs(" \n"); } */ @@ -1887,7 +1877,7 @@ void retire(void) { #ifdef BIGNUM aire(); #else - cputs(" M I L L I O N A I R E ! \r\n"); + cputs(" M I L L I O N A I R E ! \n"); #endif // cspaces(29); // crlf(); @@ -1937,7 +1927,7 @@ void final_stats(void) port_stat_dirty = 1; clr_screen(); - // cputs("Your final status:\r\n\n" + // cputs("Your final status:\n\n" // "Net cash: "); print_msg(M_your_final_status); #ifdef BIGNUM @@ -1945,13 +1935,13 @@ void final_stats(void) #else cprintfancy(finalcash); #endif - // cputs("\r\nShip size: "); + // cputs("\nShip size: "); print_msg(M_ship_size); cprintulong(capacity); // cputs(" units with "); print_msg(M_units_with); cprintuint(guns); - // cputs(" guns\r\n\n" + // cputs(" guns\n\n" // "You traded for "); print_msg(M_you_traded_for); cprintuint(years); @@ -1970,7 +1960,7 @@ void final_stats(void) { cputc_s(); } - cputs("\r\n\n"); + cputs("\n\n"); rvs_on(); // cputs("Your score is "); print_msg(M_your_score_is); @@ -1979,21 +1969,21 @@ void final_stats(void) #else cprintulong(score); #endif - cputs(".\r\n"); + cputs(".\n"); rvs_off(); if ((score < 100) && (score >= 0)) { - // cputs("Have you considered a land based job?\r\n\n\n"); + // cputs("Have you considered a land based job?\n\n\n"); print_msg(M_land_based_job); } else if (score < 0) { - // cputs("The crew has requested that you stay on\r\n" - // "shore for their safety!!\r\n\n"); + // cputs("The crew has requested that you stay on\n" + // "shore for their safety!!\n\n"); print_msg(M_stay_on_shore); } else { - // cputs("\r\n\n\n"); + // cputs("\n\n\n"); print_msg(M_3_nls); } - // cputs("Your Rating:\r\n"); + // cputs("Your Rating:\n"); print_msg(M_your_rating); cputc(17); // upper left corner chline(31); @@ -2009,7 +1999,7 @@ void final_stats(void) print_msg(M_ma_tsu); rvs_off(); cspaces(9); - cputs("50,000 and over |\r\n|"); + cputs("50,000 and over |\n|"); if ((score < 50000L) && (score > 7999L)) { @@ -2018,7 +2008,7 @@ void final_stats(void) // cputs("Master Taipan"); print_msg(M_master_taipan); rvs_off(); - cputs(" 8,000 to 49,999|\r\n|"); + cputs(" 8,000 to 49,999|\n|"); // cprint_pipe(); if ((score < 8000L) && (score > 999L)) @@ -2028,7 +2018,7 @@ void final_stats(void) cprint_taipan(); rvs_off(); cspaces(10); - cputs("1,000 to 7,999|\r\n|"); + cputs("1,000 to 7,999|\n|"); // cprint_pipe(); if ((score < 1000) && (score > 499)) @@ -2039,7 +2029,7 @@ void final_stats(void) print_msg(M_compradore); rvs_off(); cspaces(8); - cputs("500 to 999|\r\n|"); + cputs("500 to 999|\n|"); // cprint_pipe(); if (score < 500) @@ -2050,7 +2040,7 @@ void final_stats(void) print_msg(M_galley_hand); rvs_off(); cspaces(7); - cputs("less than 500|\r\n"); + cputs("less than 500|\n"); cputc(26); // lower left corner chline(31); @@ -2159,7 +2149,7 @@ void transfer(void) how_much(); // cputs(item[i]); print_msg(item[i]); - // cputs(" shall I move\r\nto the warehouse"); + // cputs(" shall I move\nto the warehouse"); print_msg(M_move_to_whouse); cprint_taipan_prompt(); @@ -2186,7 +2176,7 @@ void transfer(void) good_joss_sound(); } else { gotoxy(0, 21); - // cputs("Your warehouse will only hold an\r\nadditional "); + // cputs("Your warehouse will only hold an\nadditional "); print_msg(M_whouse_only_hold); cprintuint(10000 - in_use); cprint_taipan_bang(); @@ -2200,7 +2190,7 @@ void transfer(void) // clrtobot(); you_have_only(); cprintulong(hold_[i]); - // cputs(", Taipan.\r\n"); + // cputs(", Taipan.\n"); cprint_taipan_period(); good_joss_sound(); @@ -2218,7 +2208,7 @@ void transfer(void) how_much(); // cputs(item[i]); print_msg(item[i]); - // cputs(" shall I move\r\naboard ship"); + // cputs(" shall I move\naboard ship"); print_msg(M_move_aboard); cprint_taipan_prompt(); @@ -2240,7 +2230,7 @@ void transfer(void) you_have_only(); cprintuint(hkw_[i]); cprint_taipan_period(); - // cputs("\r\n"); + // cputs("\n"); crlf(); timed_getch(); @@ -2264,7 +2254,7 @@ void quit(void) compradores_report(); cprint_taipan_comma(); do_you_wish(); - // cputs("me to go to:\r\n"); + // cputs("me to go to:\n"); print_msg(M_me_to_go_to); for(choice = 1; choice < 8; ++choice) { @@ -2278,8 +2268,8 @@ void quit(void) cprint_question_space(); /* - cputs("1) Hong Kong, 2) Shanghai, 3) Nagasaki,\r\n" - "4) Saigon, 5) Manila, 6) Singapore, or\r\n" + cputs("1) Hong Kong, 2) Shanghai, 3) Nagasaki,\n" + "4) Saigon, 5) Manila, 6) Singapore, or\n" "7) Batavia ? "); */ @@ -2292,7 +2282,7 @@ void quit(void) if (choice == port) { - // cputs("\r\n\nYou're already here"); + // cputs("\n\nYou're already here"); print_msg(M_already_here); cprint_taipan_period(); good_joss_sound(); @@ -2362,7 +2352,7 @@ void quit(void) if (li > 0) { - // cputs("Good joss!! They let us be!!\r\n"); + // cputs("Good joss!! They let us be!!\n"); print_msg(M_they_let_us_be); bad_joss_sound(); @@ -2376,7 +2366,7 @@ void quit(void) cprintuint(num_ships); /* "ships" will always be plural (at least 5 of them) */ - // cputs(" ships of Li Yuen's pirate\r\nfleet"); + // cputs(" ships of Li Yuen's pirate\nfleet"); print_msg(M_ships_of_fleet); cprint_taipan_bangbang(); under_attack_sound(); @@ -2400,7 +2390,7 @@ void quit(void) captains_report(); if (result == 1) { - // cputs("We captured some booty.\r\n" + // cputs("We captured some booty.\n" // "It's worth "); print_msg(M_captured_some_booty); cprintfancy(booty); @@ -2415,7 +2405,7 @@ void quit(void) // cputs("The buggers got us"); print_msg(M_buggers_got_us); cprint_taipan_bangbang(); - // cputs("!\r\nIt's all over, now!!!"); + // cputs("!\nIt's all over, now!!!"); print_msg(M_all_over_now); timed_getch(); @@ -2438,7 +2428,7 @@ void quit(void) timed_getch(); if(one_chance_in(30)) { - // cputs(" I think we're going down!!\r\n\n"); + // cputs(" I think we're going down!!\n\n"); print_msg(M_think_going_down); timed_getch(); @@ -2468,7 +2458,7 @@ void quit(void) } } - // cputs(" We made it!!\r\n\n"); + // cputs(" We made it!!\n\n"); print_msg(M_storm_we_made_it); bad_joss_sound(); timed_getch(); @@ -2480,7 +2470,7 @@ void quit(void) port = randi()%7 + 1; clear_msg_window(); - // cputs("We've been blown off course\r\nto "); + // cputs("We've been blown off course\nto "); print_msg(M_blown_off_course); // cputs(location[port]); print_msg(location[port]); @@ -2582,7 +2572,7 @@ void li_yuen_extortion(void) { // cputs(" asks "); print_msg(M_asks); cprintfancy(amount); - // cputs(" in donation\r\nto the temple of Tin Hau, the Sea\r\nGoddess. Will you pay? "); + // cputs(" in donation\nto the temple of Tin Hau, the Sea\nGoddess. Will you pay? "); print_msg(M_in_donation); if(yngetc(0) == 'y') { @@ -2592,14 +2582,14 @@ void li_yuen_extortion(void) { } else { clear_msg_window(); cprint_taipan_comma(); - // cputs("you do not have enough cash!!\r\n\n"); + // cputs("you do not have enough cash!!\n\n"); print_msg(M_not_enough_cash); timed_getch(); cprint_Do_you_want(); cprint_elder_brother_wu(); - // cputs("to make up\r\nthe difference for you? "); + // cputs("to make up\nthe difference for you? "); print_msg(M_make_up_difference); if(yngetc(0) == 'y') { @@ -2611,10 +2601,10 @@ void li_yuen_extortion(void) { cprint_elder_brother_wu(); /* - cputs("has given Li Yuen the\r\n" - "difference between what he wanted and\r\n" - "your cash on hand and added the same\r\n" - "amount to your debt.\r\n"); + cputs("has given Li Yuen the\n" + "difference between what he wanted and\n" + "your cash on hand and added the same\n" + "amount to your debt.\n"); */ print_msg(M_given_the_diff); } else { @@ -2624,8 +2614,8 @@ void li_yuen_extortion(void) { print_msg(M_very_well); cprint_elder_brother_wu(); /* - cputs("will not pay\r\n" - "Li Yuen the difference. I would be very\r\n" + cputs("will not pay\n" + "Li Yuen the difference. I would be very\n" "wary of pirates if I were you."); */ print_msg(M_will_not_pay); @@ -2650,11 +2640,11 @@ void you_only_have(unsigned char in_bank) { cprintfancy_big(bank); else cprintfancy(cash); - // cputs("\r\nin "); + // cputs("\nin "); print_msg(M_nl_in_spc); // cputs(in_bank ? "the bank" : "cash"); print_msg(in_bank ? M_the_bank : M_cash); - cputs(".\r\n"); + cputs(".\n"); good_joss_sound(); timed_getch(); @@ -2668,9 +2658,9 @@ void you_only_have(unsigned char in_bank) { cprint_taipan_comma(); cputs("you only have "); cprintfancy(in_bank ? bank : cash); - cputs("\r\nin "); + cputs("\nin "); cputs(in_bank ? "the bank" : "cash"); - cputs(".\r\n"); + cputs(".\n"); good_joss_sound(); timed_getch(); @@ -2684,7 +2674,7 @@ void elder_brother_wu(void) unsigned long wu = 0; compradores_report(); - // cputs("Do you have business with Elder Brother\r\nWu, the moneylender? "); + // cputs("Do you have business with Elder Brother\nWu, the moneylender? "); print_msg(M_do_you_have_biz_with_wu); for (;;) @@ -2715,13 +2705,13 @@ void elder_brother_wu(void) { compradores_report(); /* - cputs("Elder Brother is aware of your plight,\r\n" - "Taipan. He is willing to loan you an\r\n" + cputs("Elder Brother is aware of your plight,\n" + "Taipan. He is willing to loan you an\n" "additional "); */ print_msg(M_aware_of_your_plight); cprintuint(i); - // cputs(" if you will pay back\r\n"); + // cputs(" if you will pay back\n"); print_msg(M_if_you_will_pay_back); cprintuint(j); // cputs(". Are you willing"); @@ -2731,7 +2721,7 @@ void elder_brother_wu(void) choice = agetc(); if(choice != 'y') { compradores_report(); - // cputs("Very well, Taipan, the game is over!\r\n"); + // cputs("Very well, Taipan, the game is over!\n"); print_msg(M_game_is_over); under_attack_sound(); @@ -2744,7 +2734,7 @@ void elder_brother_wu(void) port_stats(); compradores_report(); - // cputs("Very well, Taipan. Good joss!!\r\n"); + // cputs("Very well, Taipan. Good joss!!\n"); print_msg(M_very_well_good_joss); bad_joss_sound(); @@ -2759,7 +2749,7 @@ void elder_brother_wu(void) compradores_report(); how_much(); do_you_wish(); - // cputs("to repay\r\nhim? "); + // cputs("to repay\nhim? "); print_msg(M_to_repay_him); wu = get_num(); @@ -2793,7 +2783,7 @@ void elder_brother_wu(void) compradores_report(); how_much(); do_you_wish(); - // cputs("to \r\nborrow? "); + // cputs("to \nborrow? "); print_msg(M_to_borrow); wu = get_num(); @@ -2809,7 +2799,7 @@ void elder_brother_wu(void) debt += wu; break; } else { - // cputs("\r\n\nHe won't loan you so much"); + // cputs("\n\nHe won't loan you so much"); print_msg(M_wont_loan); cprint_taipan_bang(); good_joss_sound(); @@ -2835,8 +2825,8 @@ void elder_brother_wu(void) cprint_bad_joss(); cprintuint(num); /* - cputs(" of your bodyguards have been killed\r\n" - "by cutthroats and you have been robbed\r\n" + cputs(" of your bodyguards have been killed\n" + "by cutthroats and you have been robbed\n" "of all of your cash"); */ print_msg(M_bodyguards_killed); @@ -2859,7 +2849,7 @@ void good_prices(void) { print_msg(M_the_price_of); // cputs(item[i]); print_msg(item[i]); - // cputs("\r\n has "); + // cputs("\n has "); print_msg(M_nl_has_spc); if(randi()&1) { @@ -2877,7 +2867,7 @@ void good_prices(void) { print_msg(M_spc_to_spc); cprintulong(price[i]); - // cputs("!!\r\n"); + // cputs("!!\n"); print_msg(M_bang_bang_nl); good_joss_sound(); @@ -2914,8 +2904,8 @@ int port_choices(void) { /* // original version: // ===> free code space $0f32 (3890, 3.8K) - cputs(" Opium: Silk:\r\n"); - cputs(" Arms: General:\r\n"); + cputs(" Opium: Silk:\n"); + cputs(" Arms: General:\n"); gotoxy(11, 19); cprintulong(price[0]); gotoxy(29, 19); @@ -2960,7 +2950,7 @@ int port_choices(void) { print_msg(M_shall_i_buy_sell); if(port == 1) - // cputs("Visit bank, Transfer\r\ncargo, "); + // cputs("Visit bank, Transfer\ncargo, "); print_msg(M_bank_transfer); if(!retire_ok) cputs("or "); @@ -3180,7 +3170,7 @@ void sell(void) { how_much(); // cputs(item[choice]); print_msg(item[choice]); - // cputs(" shall\r\nI sell, "); + // cputs(" shall\nI sell, "); print_msg(M_shall_i_sell); cprint_taipan_colon(); @@ -3216,10 +3206,10 @@ char would_overflow(unsigned long a, unsigned long b) { void too_much_cash(void) { clear_msg_window(); - // cputs("\r\nYou cannot carry so much cash"); + // cputs("\nYou cannot carry so much cash"); print_msg(M_too_much_cash); cprint_taipan_bang(); - // cputs("\r\nYour ship would sink under the weight\r\nof your riches.\r\n"); + // cputs("\nYour ship would sink under the weight\nof your riches.\n"); print_msg(M_ship_would_sink); bad_joss_sound(); timed_getch(); @@ -3351,7 +3341,15 @@ hangx: goto hangx; int main(void) { char choice; - atari_text_setup(); + /* newtitle.s saves the OS's display list pointer in FR0, + sets up its own DL, and uses narrow playfield mode. First + thing we do it put things back the way they were. + FONT_ADDR is set on the command line (see the Makefile). */ + POKE(560, PEEK(212)); // restore the + POKE(561, PEEK(213)); // display list + POKE(756, FONT_ADDR / 256); // use our custom font + POKE(731, 1); // disable keyclick on XL/XE (does nothing on 400/800) + POKE(559, 34); // turn on the screen (normal playfield) #ifdef MCHENRY_TEST { @@ -3362,7 +3360,7 @@ int main(void) { crlf(); cputs("dmg? "); damage = get_num(); - // cputs("\r\n"); + // cputs("\n"); crlf(); cputs("cap? "); capacity = get_num(); @@ -3395,14 +3393,14 @@ int main(void) { under_attack_sound(); timed_getch(); compradores_report(); - // cputs("As the masked figure plunges the blade\r\n" - // "into your heart, he says:\r\n"); + // cputs("As the masked figure plunges the blade\n" + // "into your heart, he says:\n"); print_msg(M_assassinated_2); timed_getch(); compradores_report(); cprint_elder_brother_wu(); - // cputs("regrets to inform you\r\n" - // "that your account has been terminated\r\n" + // cputs("regrets to inform you\n" + // "that your account has been terminated\n" // "with extreme prejudice."); print_msg(M_assassinated_3); timed_getch(); @@ -3424,7 +3422,7 @@ int main(void) { // cputs("has sent "); print_msg(M_has_sent); cprintuint(braves); - // cputs(" braves\r\nto escort you to the Wu mansion"); + // cputs(" braves\nto escort you to the Wu mansion"); print_msg(M_braves_to_escort); cprint_taipan_period(); crlf(); @@ -3434,9 +3432,9 @@ int main(void) { clear_msg_window(); cprint_elder_brother_wu(); /* - cputs("reminds you of the\r\n" - "Confucian ideal of personal worthiness,\r\n" - "and how this applies to paying one's\r\ndebts.\r\n"); + cputs("reminds you of the\n" + "Confucian ideal of personal worthiness,\n" + "and how this applies to paying one's\ndebts.\n"); */ print_msg(M_wu_warn_1); @@ -3444,10 +3442,10 @@ int main(void) { clear_msg_window(); /* - cputs("He is reminded of a fabled barbarian\r\n" - "who came to a bad end, after not caring\r\n" - "for his obligations.\r\n\n" - "He hopes no such fate awaits you, his\r\nfriend"); + cputs("He is reminded of a fabled barbarian\n" + "who came to a bad end, after not caring\n" + "for his obligations.\n\n" + "He hopes no such fate awaits you, his\nfriend"); */ print_msg(M_wu_warn_2); cprint_taipan_period(); @@ -3483,8 +3481,8 @@ int main(void) { compradores_report(); cprint_bad_joss(); - // cputs("The local authorities have seized your\r\n" - // "Opium cargo and have also fined you\r\n"); + // cputs("The local authorities have seized your\n" + // "Opium cargo and have also fined you\n"); print_msg(M_siezed_opium); cprintfancy(fine); cprint_taipan_bang(); @@ -3508,7 +3506,7 @@ int main(void) { port_stats(); compradores_report(); - // cputs("Messenger reports large theft\r\nfrom warehouse"); + // cputs("Messenger reports large theft\nfrom warehouse"); print_msg(M_whouse_theft); cprint_taipan_period(); crlf(); @@ -3525,9 +3523,9 @@ int main(void) { compradores_report(); cprint_li_yuen(); /* - cputs(" has sent a Lieutenant,\r\n" - "Taipan. He says his admiral wishes\r\n" - "to see you in Hong Kong, posthaste!\r\n"); + cputs(" has sent a Lieutenant,\n" + "Taipan. He says his admiral wishes\n" + "to see you in Hong Kong, posthaste!\n"); */ print_msg(M_has_sent_lieutenant); bad_joss_sound(); @@ -3547,7 +3545,7 @@ int main(void) { compradores_report(); cprint_bad_joss(); - // cputs("You've been beaten up and\r\nrobbed of "); + // cputs("You've been beaten up and\nrobbed of "); print_msg(M_beaten_robbed); cprintfancy(robbed); // cputs(" in cash"); diff --git a/textcomp.c b/textcomp.c index bb0b4c0..2412f15 100644 --- a/textcomp.c +++ b/textcomp.c @@ -62,9 +62,9 @@ The task of replacing cputs("some string") with print_msg(M_some_string) is done manually. - When a newline is printed, the decoder always prints a carriage - return first. Any \r sequences listed in messages.pl are discarded - before encoding is done. + When a newline is printed, our modified conio moves the cursor to the + start of the next line, so no \r's are needed. Any \r sequences listed + in messages.pl are discarded before encoding is done. Actually, no prompts ever use capital X or Z. These should be used for dictionary lookups. Maybe X is followed by a 3-bit dict ID, for the 8 diff --git a/textdecomp.s b/textdecomp.s index 5d629ba..a19d460 100644 --- a/textdecomp.s +++ b/textdecomp.s @@ -72,13 +72,6 @@ _print_msg: @printit: sty ysave ; _cputc trashes Y - - cmp #$9b ; always print a \r after a \n - bne @nocr - lda #$0d ; \r - jsr _cputc - lda #$9b -@nocr: jsr _cputc ldy ysave lda #0 -- cgit v1.2.3